主题:页面置换算法模拟程序
gjghqqu
[专家分:0] 发布于 2005-06-29 09:10:00
要求:
(1) 用随机数方法产生页面走向,页面走向长度为L。
(2) 根据页面走向,分别采用FIFO和LRU算法进行页面置换,统计缺页率。
(3) 假定可用内存块和页表长度 (作业的页面数)分别为m和k,初始时,作业页面都不在内存。
随机数产生程序:
function random: real:
begin Seed: =125.0(seed+1.0)
Seed: =Seed8192.0trunc (seed/8192)
random: = (Seed+0.5)/8192
end;
上述随机数发生函数产生的随机数为0.0~1.0,稍另变化就可得到0~n1之间的随机数。
程序开始时,应对变量Seed (实型)赋初值。
急啊
谢谢大家帮忙哈
回复列表 (共4个回复)
沙发
ndidky [专家分:10] 发布于 2005-06-30 09:55:00
/*功能描述:输入可用内存页面数和一个作业访问逻辑页号的序列
*给出FIFO、LRU、OPT算法的缺页中断率
*本程序中设初始页框里的页号与实际页号都不同
*在VC6.0里测试通过
*/
#include<iostream.h>
#define M 40
int N;
struct Pro
{
int num,time;
};
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];
char c;
int m=0,t=0;
float n=0;
m=Input(m,p);
do{
for(int i=0;i<N;i++)//初试化页面基本情况
{
page[i].num=0;
page[i].time=2-i;
}
/*int j=0,count=1;
page[0].num=p[0].num;
int i=1,k=1;
while(i<N)
{
int flag=1;
for(j=0;j<i;j++)
if(p[k].num==page[i].num)
{n++;flag=0;break;}
if(flag==1){page[i].num=p[k].num;i++;}
count++;k++;
}*/
i=0;
cout<<"f:FIFO页面置换"<<endl;
cout<<"l:LRU页面置换"<<endl;
cout<<"o:OPT页面置换"<<endl;
cout<<"按其它键结束"<<endl;
cin>>c;
if(c=='f')//FIFO页面置换
{
n=0;
cout<<"页面置换情况: "<<endl;
while(i<m)
{
if(Search(p[i].num,page)>=0)i++;//找到相同的页面
else
{
if(t==N)t=0;
else
{
n++;//
page[t].num=p[i].num;
print(page);
t++;
}
}
}
cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;
}
if(c=='l')//LRU页面置换
{ n=0;
cout<<"页面置换情况: "<<endl;
while(i<m)
{
int k;
k=t=Search(p[i].num,page);
if(t>=0)
page[t].time=0;
else
{
n++;
t=Max(page);
page[t].num=p[i].num;
page[t].time=0;
}
if(t==0){page[t+1].time++;page[t+2].time++;}
if(t==1){page[2].time++;page[0].time++;}
if(t==2){page[1].time++;page[0].time++;}
if(k==-1) print(page);
i++;
}
cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;
}
if(c=='o')//OPT页面置换
{
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;
}
}while(c=='f'||c=='l'||c=='o');
return 0;
}
板凳
andyye1630 [专家分:0] 发布于 2008-12-19 15:08:00
可用内存页面数 只能为3?4,5.。。。的lru,opt就错了
希望能改进。
3 楼
兔牙-- [专家分:10] 发布于 2009-01-01 19:03:00
操作系统也有这么长的程序呀?我真的不懂操作系统啊
4 楼
452160525 [专家分:0] 发布于 2009-03-22 03:30:00
来看看!
我来回复