求救!!求救各位大虾!!!请用C语言帮忙设计页面置换算法!!万分万分万分感谢!! 5

求救!!请帮忙设计1.最佳淘汰算法(OPT)2.先进先出的算法(FIFO)3.最近最久未使用算法(LRU)。求缺页率。物理块数和页面数。页面号序列要自己输。用C语言写。救... 求救!!请帮忙设计 1.最佳淘汰算法(OPT) 2.先进先出的算法(FIFO) 3.最近最久未使用算法(LRU) 。
求缺页率。物理块数和页面数。页面号序列要自己输。用C语言写。救命啊。。。
展开
 我来答
10伯乐01
2011-11-07 · TA获得超过501个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:101万
展开全部
最佳淘汰算法:
#include<iostream.h>
#define M 40
int N;
typedef struct Pro//结构体
{
int num,time;
}Pro;
int Input(int m,Pro p[M])//输入函数
{
cout<<"请输入实际页数:";
do
{
cin>>m;
if(m>M)cout<<"数目太多,请重试"<<endl;
else break;
}
while(1);
cout<<endl<<"请输入各页面号"<<endl;
for(int i=0;i<m;i++)
{
cin>>p[i].num;
p[i].time=0;
}
return m;
}
void print(Pro *page1)//打印当前的页面
{
Pro *page=new Pro[N];
page=page1;
for(int i=0;i<N;i++)cout<<page[i].num<<" ";
cout<<endl;
}

int Search(int e,Pro *page1 )//查找内存中是否存在要调入的页面
{
Pro *page=new Pro[N];
page=page1;
for(int i=0;i<N;i++)if(e==page[i].num)return i;
return -1;
}

int Max(Pro *page1)//找出离现在时间最长的页面
{
Pro *page=new Pro[N];
page=page1;
int e=page[0].time,i=0;
while(i<N)
{
if(e<page[i].time)e=page[i].time;
i++;
}
for( i=0;i<N;i++)if(e==page[i].time)return i;

return -1;
}

int Compfu(Pro *page1,int i,int t,Pro p[M])//找到最久不使用的页面
{
Pro *page=new Pro[N];
page=page1;

int count=0;
for(int j=i;j<M;j++)
{
if(page[t].num==p[j].num )break;
else count++;
}
return count;

}

int main()
{

cout<<"可用内存页面数"<<endl;
cin>>N;
Pro p[M];
Pro *page=new Pro[N];

int m=0,t=0;
float n=0;
m=Input(m,p);

for(int i=0;i<N;i++)//初试化页面基本情况
{
page[i].num=0;
page[i].time=2-i;
}
i=0;

cout<<"页面置换情况: "<<endl;

n=0;
while(i<m)
{
if(Search(p[i].num,page)>=0)i++;
else
{
int temp=0,cn;
for(t=0;t<N;t++)
{
if(temp<Compfu(page,i,t,p))
{
temp=Compfu(page,i,t,p);
cn=t;
}
}
page[cn]=p[i];
n++;
print(page);
i++;
}
}
cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;

return 0;
}

先进先出算法:
#include<iostream>

using namespace std;

int main()

{

cout<<"---------FIFO页面置换算法---------"<<endl;

int N; //需要进入内存的页面总数。

int k,m,n; //k为数组下标,m表示物理块数,n表示页面号。

int i,j,count=0; //i、j为数组下标,count为计数器。

int a[100],b[100]; //a数组里存页面序列,b数组是一个内存空间

float rate; // 缺页率

cout<<"请输入系统分配的物理块数M=";

cin>>m;

cout<<"请输入需要进入内存的页面总数N=";

cin>>N;

cout<<"请输入依次进入内存的页面号:"<<endl;

for(i=0;i<N;i++)

{

cin>>n;

a[i]=n;

}

for(j=0;j<m;j++) //初始化b[j],使其等于-1,表示开始时内存中无页面。

{

b[j]=-1;
}

i=0;

j=0;

cout<<"----------------------------------"<<endl;
while(i<N)

{

for(k=0;k<m;k++) //for循环判断内存中是否有该页面。

{

if(b[k]==a[i])

{cout<<" "<<a[i];

cout<<" 内存中有这个页面,直接访问."<<endl<<endl;

break;

}

}

if(k==m)

{
if(b[m-1]<0)

{

b[j]=a[i];
cout<<" "<<b[j]<<" 页面进入内存,";

count++;

cout<<"产生第"<<count<<"次缺页."<<endl<<endl;

j++;

j=j%m;

}

else //把最先进来的页面b[0]置换出去

{cout<<" "<<a[i];

count++;

cout<<" "<<b[j]<<"被置换出去,产生第"<<count<<"次缺页."<<endl<<endl;
b[j]=a[i];

j++;

j=j%m;

}

}

i++;

}

rate=count;

cout<<"----------------------------------"<<endl;

cout<<"系统分配的物理块数M="<<m<<'.'<<endl;

cout<<"缺页中断次数为:"<<count<<"次."<<endl;

cout<<"需要进入内存的页面总数N="<<N<<'.'<<endl;

cout<<"缺页中断率为rate="<<(rate/N)*100<<'%'<<'.'<<endl;

cout<<"----------------------------------"<<endl;

system("pause");
return 0;

}
追问
还有LRU算法。求大虾帮忙~!
追答
这个没做。不好意思啦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式