操作系统第三次试验 存储管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.实验数据与程序清单

//存储管理----页面置换算法

#include

#define M 40

#define N 10 //可用内存页面struct Pro //页面结构体{

int num;

int time;

};

int Input(int m, Pro p[])

{

cout<<"请输入实际页数:";

do

{

cin>>m;

if(m>M) cout<<"数目太多,请重试"<

else break;

}while(1);

cout<

for(int i=0;i

{

cin>>p[i].num;

p[i].time=0;

}

return m;

}

void Print(Pro *page, int n) //打印当前的页面{

for(int i=0; i

cout<

cout<

}

int Search(int e, Pro *page, int n) //在内存页面中查找{

for(int i=0; i

if(e==page[i].num)

return i;

return -1;

}

int Max(Pro *page, int n)

{

int e=page[0].time, i=0;

while(i

if(e < page[i].time)

e=page[i].time;

i++;

}

for(i=0; i

if(e==page[i].time)

return i;

return -1;

}

int Compfu(Pro *page, int i, int t, Pro p[])

{

int count=0;

for(int j=i; j

{

if(page[t].num==p[j].num ) break;

else count++;

}

return count;

}

int main()

{

int nu;

cout<<"------------胡爽------------\n可用内存页面数:"<

cin>>nu;

if(nu>N)

{

cout<<"页面过大"<

return 0;

}

Pro p[M];

Pro page[N];

char c;

int m=0; //实际页数

int t=0; //页面循环

float n=0; //缺页次数

m = Input(m, p);

do{

for(int i=0; i

{

page[i].num=0;

page[i].time=2-i;

}

i=0;

cout<<"f:FIFO页面置换"<

cout<<"l:LRU页面置换"<

cout<<"o:OPT页面置换"<

cout<<"按其它键结束"<

cin>>c;

if(c=='f') //FIFO页面置换

{

n=0;

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

while(i

{

if(Search(p[i].num, page, nu)>=0) i++;//找到相同的页面

else

{

if(t==nu) t=0;

n++; //缺页次数加1

page[t].num=p[i].num;

Print(page, nu);

t++;

i++;

}

}

cout<<"缺页次数:"<

i=0;

if(c=='l') //LRU页面置换

{

n=0;

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

while(i

{

if(Search(p[i].num, page, nu)>=0)

{

int j=Search(p[i].num, page, nu);

for(int k=j; k>0; k--)

page[k].num=page[k-1].num;

page[k].num=page[j].num;

i++;

}

else

{

if(t==nu) t=0;

n++;

for(int k=nu-1; k>0; k--)

page[k].num=page[k-1].num;

page[k].num=p[i].num;

Print(page, nu);

t++;

i++;

}

}

cout<<"缺页次数:"<

}

if(c=='o') //OPT页面置换

{

n=0;

while(i

{

if(Search(p[i].num, page, nu)>=0) i++;

else

{

int temp=0, cn;

for(t=0; t

{

if(temp < Compfu(page, i, t, p))

{

temp=Compfu(page,i,t,p);

cn=t;

}

}

page[cn]=p[i];

n++;

Print(page, nu);

i++;

}

}

cout<<"缺页次数:"<

}

}while(c=='f'||c=='l'||c=='o');

return 0;

}

相关文档
最新文档