求救!!求救各位大虾!!!请用C语言帮忙设计页面置换算法!!万分万分万分感谢!! 5
求救!!请帮忙设计1.最佳淘汰算法(OPT)2.先进先出的算法(FIFO)3.最近最久未使用算法(LRU)。求缺页率。物理块数和页面数。页面号序列要自己输。用C语言写。救...
求救!!请帮忙设计 1.最佳淘汰算法(OPT) 2.先进先出的算法(FIFO) 3.最近最久未使用算法(LRU) 。
求缺页率。物理块数和页面数。页面号序列要自己输。用C语言写。救命啊。。。 展开
求缺页率。物理块数和页面数。页面号序列要自己输。用C语言写。救命啊。。。 展开
1个回答
展开全部
最佳淘汰算法:
#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;
}
#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算法。求大虾帮忙~!
追答
这个没做。不好意思啦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询