内存FIFO、LRU页面置换算法的设计
要求是:运行时,输入分配给该进程的页块数(如:3)和一个20位长的页面访问序列(如:12560,36536,56042,70435),输出缺页次数和缺页率。强调:分配的页...
要求是:运行时,输入分配给该进程的页块数(如:3)和一个20位长的页面访问序列(如:12560,36536,56042,70435),输出缺页次数和缺页率。
强调:分配的页块数一定是运行时才输入的,不是一开始就赋值好的。用c或c++都可以,如果可以的,我一定加分。
我的51空间里有这题目的代码,h-t-t-p://h-o-m-e.5-1.c-o-m/11397217/diary(你们自己把-这个都去掉)不过那代码里面分配给该进程的页块数刚开始已经设置为3了,我想在运行时才输入,请问要怎么修改代码。有兴趣的去看看那代码吧 展开
强调:分配的页块数一定是运行时才输入的,不是一开始就赋值好的。用c或c++都可以,如果可以的,我一定加分。
我的51空间里有这题目的代码,h-t-t-p://h-o-m-e.5-1.c-o-m/11397217/diary(你们自己把-这个都去掉)不过那代码里面分配给该进程的页块数刚开始已经设置为3了,我想在运行时才输入,请问要怎么修改代码。有兴趣的去看看那代码吧 展开
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
2011-04-15
展开全部
tream>
#include<queue>
#include<iomanip>
using namespace std;
#define M 4 //为此进程分配的物理块数
void main()
{
bool ExistOrNot(int value,queue<int> q);
queue<int> myQueue;
int page[]=;
int times=0;
for(int i=0;i<12;i++)
{
if(myQueue.size()<M)
{
times++;
myQueue.push(page[i]);
}
else if(!ExistOrNot(page[i],myQueue))
{
myQueue.pop();
myQueue.push(page[i]);
times++;
}
}
float ratio=times/12.0;
cout<<"缺页中断次数:"<<times<<endl;
cout<<"缺页中断率:"<<setprecision(2)<<ratio<<endl;
}
bool ExistOrNot(int value,queue<int> q)
{
while(!q.empty())
{
if(q.front()==value)
return true;
q.pop();
}
return false;
}
LRU算法:
#include<iostream>
#include<iomanip>
#include<queue>
using namespace std;
#define M 4 //为该进程分配的物理块数
#define N 12 //总访问页数
struct Page
{
int num;
int priority;
//自定义Page内不的<操作符
friend bool operator<(const Page& p1,const Page& p2)
{
return p1.priority<p2.priority;
}
};
void main()
{
bool ExistOrNot(priority_queue<Page> &q,int value);
int pageNum[N]=;
int i,times=0;
priority_queue<Page> myQueue;
Page page[N];
for(i=0;i<12;i++)
{
page[i].num=pageNum[i];
page[i].priority=0;
}
for(i=0;i<12;i++)
{
if(!ExistOrNot(myQueue,page[i].num))
{
myQueue.push(page[i]);
times++;
}
if(myQueue.size()>M) //页面数超过M时则弹出优先级最高的页面
myQueue.pop();
}
float ratio=float(times)/N;
cout<<"缺页中断次数:"<<times<<endl;
cout<<"缺页中断率:"<<setprecision(2)<<ratio<<endl;
}
bool ExistOrNot(priority_queue<Page> &q,int value)
{
bool flag=0;
queue<Page> temp;
while(!q.empty())
{
if(q.top().num==value)
{
flag=1;
q.top().priority=0; //存在此页面则将其优先级置为最低
}
else
q.top().priority+=1; //不存在则增加优先级
temp.push(q.top()); //将优先级队列中的元素取出放进临时队列中
q.pop();
}
while(!temp.empty()) //优先级队列中元素还原
{
q.push(temp.front());
temp.pop();
}
return flag;
}
我自己测试了,没什么问题,还有有什么问题hi我。
另外,站长团上有产品团购,便宜有保证
#include<queue>
#include<iomanip>
using namespace std;
#define M 4 //为此进程分配的物理块数
void main()
{
bool ExistOrNot(int value,queue<int> q);
queue<int> myQueue;
int page[]=;
int times=0;
for(int i=0;i<12;i++)
{
if(myQueue.size()<M)
{
times++;
myQueue.push(page[i]);
}
else if(!ExistOrNot(page[i],myQueue))
{
myQueue.pop();
myQueue.push(page[i]);
times++;
}
}
float ratio=times/12.0;
cout<<"缺页中断次数:"<<times<<endl;
cout<<"缺页中断率:"<<setprecision(2)<<ratio<<endl;
}
bool ExistOrNot(int value,queue<int> q)
{
while(!q.empty())
{
if(q.front()==value)
return true;
q.pop();
}
return false;
}
LRU算法:
#include<iostream>
#include<iomanip>
#include<queue>
using namespace std;
#define M 4 //为该进程分配的物理块数
#define N 12 //总访问页数
struct Page
{
int num;
int priority;
//自定义Page内不的<操作符
friend bool operator<(const Page& p1,const Page& p2)
{
return p1.priority<p2.priority;
}
};
void main()
{
bool ExistOrNot(priority_queue<Page> &q,int value);
int pageNum[N]=;
int i,times=0;
priority_queue<Page> myQueue;
Page page[N];
for(i=0;i<12;i++)
{
page[i].num=pageNum[i];
page[i].priority=0;
}
for(i=0;i<12;i++)
{
if(!ExistOrNot(myQueue,page[i].num))
{
myQueue.push(page[i]);
times++;
}
if(myQueue.size()>M) //页面数超过M时则弹出优先级最高的页面
myQueue.pop();
}
float ratio=float(times)/N;
cout<<"缺页中断次数:"<<times<<endl;
cout<<"缺页中断率:"<<setprecision(2)<<ratio<<endl;
}
bool ExistOrNot(priority_queue<Page> &q,int value)
{
bool flag=0;
queue<Page> temp;
while(!q.empty())
{
if(q.top().num==value)
{
flag=1;
q.top().priority=0; //存在此页面则将其优先级置为最低
}
else
q.top().priority+=1; //不存在则增加优先级
temp.push(q.top()); //将优先级队列中的元素取出放进临时队列中
q.pop();
}
while(!temp.empty()) //优先级队列中元素还原
{
q.push(temp.front());
temp.pop();
}
return flag;
}
我自己测试了,没什么问题,还有有什么问题hi我。
另外,站长团上有产品团购,便宜有保证
追问
我想修改的是,那个刚开始的为此进程分配的物理块数不要马上赋值,我想在程序运行的时候,那个4用输入的,到时也可以输入3.这样的程序要怎么写。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-04-17
展开全部
主函数可以直接定义一个整型数变量,直接从标准输入读取就可以了,把# define M换成那个变量。LRU需要优先级么?我有些忘了,见笑阿!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询