操作系统页面置换算法.docx

上传人:b****5 文档编号:6696002 上传时间:2023-01-09 格式:DOCX 页数:12 大小:55.31KB
下载 相关 举报
操作系统页面置换算法.docx_第1页
第1页 / 共12页
操作系统页面置换算法.docx_第2页
第2页 / 共12页
操作系统页面置换算法.docx_第3页
第3页 / 共12页
操作系统页面置换算法.docx_第4页
第4页 / 共12页
操作系统页面置换算法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统页面置换算法.docx

《操作系统页面置换算法.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换算法.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统页面置换算法.docx

操作系统页面置换算法

操作系统上机测试页面置换算法

利用C语言或Pascal语言编写程序,完成虚拟存储管理的页面淘汰过程。

要求:

从键盘上输入允许进程占有的页架数及一个访问串,输出淘汰过程,并给出共发生的缺页次数。

例如:

从键盘上输入允许进程占有的页架数为:

3

从键盘上输入一个访问串为:

7012030423032120170

1.模拟“先进先出(FIFO)”算法,输出:

FIFO

7

0

1

2

0

3

0

4

2

3

0

3

2

1

2

0

1

7

0

7

0

1

2

2

3

0

4

2

3

0

0

0

1

2

2

2

7

0

7

0

1

1

2

3

0

4

2

3

3

3

0

1

1

1

2

7

7

0

0

1

2

3

0

4

2

2

2

3

0

0

0

1

2

7

0

1

2

3

0

4

2

3

0

1

共14次缺页

2.模拟“最近最少用(LRU)”算法

输出:

LRU

7

0

1

2

0

3

0

4

2

3

0

3

2

1

2

0

1

7

0

7

0

1

2

2

3

3

4

2

3

0

0

0

1

1

2

2

7

7

7

0

1

1

2

2

0

4

2

3

3

3

2

2

1

1

0

0

7

0

0

0

0

3

0

4

2

2

2

3

3

0

0

1

1

7

1

2

3

0

4

0

3

2

共12次缺页

3.模拟“最佳更换(OPT)”算法,

输出:

OPT

7

0

1

2

0

3

0

4

2

3

0

3

2

1

2

0

1

7

0

7

7

7

2

2

2

2

2

7

0

0

0

0

4

0

0

0

1

1

3

3

3

1

1

7

1

0

4

3

2

共9次缺页

注:

输入/输出的格式任意,只要能反映淘汰过程即可。

1、FIFO(先进先出)

源代码:

/*

从键盘上输入允许进程占有的页架数为:

3

从键盘上输入一个访问串为:

70120304230321201701

共15次缺页

*/

#include

usingnamespacestd;

intmain()

{

cout<<"请输入内存块数:

";

intmemoryNum;//内存块数

cin>>memoryNum;

//intmemoryNum=3;

int*memory=newint[memoryNum];//建内存

inti,j,k;//辅助遍历数组的变量

for(i=0;i

memory[i]=-1;

//intpages[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

intpagesLength;

cout<<"请输入页面长度:

";

cin>>pagesLength;

int*pages;//记录页面

pages=newint[pagesLength];

cout<<"请输入页面走向:

";

for(i=0;i

cin>>pages[i];

cout<

cout<<"下面采用先进先出页面置换方法,首列为页号,末列为从内存中替换出的页面:

"<

cout<

//cout<<"页面号\t内存块内存块内存块替换出的页面"<

intcount=0;//计数缺页次数

intpointer=0;//指针指向要插入的位置

intreplacedPage;//被替换出来的页面

boolflag;//标志pointer是否移动位置

for(i=0;i

{

cout<

"<<"\t";

flag=false;

for(j=0;j

{

if(memory[j]==pages[i])

{

//flag=true;

break;

}

}

if(j==memoryNum)//当前内存块没有这一页

{

replacedPage=memory[pointer];

memory[pointer]=pages[i];

pointer++;//pointer后移

flag=true;

if(pointer%memoryNum==0)

pointer=0;

count++;//缺页,count加一次

}

for(k=0;k

{

if(memory[k]==-1)

cout<<""<<"\t";

else

cout<

}

if(flag&&(replacedPage!

=-1))

cout<

cout<

}

cout<<"缺页次数:

"<

return0;

}

2、LRU(最近最少使用)

/*

模拟"最近最少用(LRU)"算法

从键盘上输入允许进程占有的页架数为:

3

从键盘上输入一个访问串为:

70120304230321201701

共12次缺页

*/

#include

usingnamespacestd;

structPage

{

intnum;

inttime;//记录最近的访问次数

};

intMax(Page*p,intlen)//返回最老的一页的下标p为内存,len为内存大小

{

intk=0;//k记录最老页面的下标

inti=0;//i为遍历p的辅助变量

while(i

{

if(p[i].time==-1)

{

returni;

}

i++;

}

Pagemax=p[0];

i=0;

while(i

{

if(max.time

{

max=p[i];

k=i;

}

i++;

}

returnk;

}

intmain()

{

intmemoryLength=3;//内存大小

Page*memory=newPage[memoryLength];//内存

intpagesLength=20;//页面串长度

Page*pages=newPage[pagesLength];//页面串

//Pagereplaced=newPage({-1,-1});//被替换出来的页面

intreplaced;

intcount=0;//缺页数

inti,j,k,l,m;

for(i=0;i

{

memory[i].num=-1;

memory[i].time=-1;

}

//cout<<"请输入页面走向:

"<

inttemp[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

for(i=0;i

{

//cin>>pages[i].num;

pages[i].num=temp[i];

pages[i].time=0;

}

cout<<"页面走向为:

"<

for(i=0;i

cout<

cout<

cout<<"下面采用最近最少使用页面置换方法,首列为页号:

"<

for(i=0;i

{

cout<

\t";

for(j=0;j

{

if(pages[i].num==memory[j].num)//内存里有这一页

{

for(k=0;k

memory[k].time++;//首先令其他页面的时间记录加一次

memory[j].time=0;//刷新内存中这一页的时间记录,重新计时

break;

}

}

if(j==memoryLength)//内存中没有这一页

{

count++;//缺页次数加一次

l=Max(memory,memoryLength);//取出内存中最老一页的下标

//replaced=memory[k];//最老的一页就是要替换出来的页面

replaced=memory[l].num;

for(k=0;k

{

if(memory[k].time!

=-1)

memory[k].time++;//首先令其他页面的时间记录加一次,同时保证本来空的内存仍保持time=-1

}

memory[l]=pages[i];//新页面存入

memory[l].time=0;//刷新内存中这一页的时间记录,重新计时

}

for(m=0;m

{

if(memory[m].num==-1)

cout<<""<<"\t";

else

cout<

}

cout<

}

cout<<"缺页次数为:

"<

return0;

}

3、OPT(最佳置换法)

#include

usingnamespacestd;

classOPT

{

private:

intc[3];

intlackcount;

intcount;

public:

OPT()

{

lackcount=0;

count=0;

c[0]=c[1]=c[2]=-1;

}

voidrun(intelem[],intn)

{

for(inti=0;i

{

for(intj=0;j

{

if(elem[i]==c[j])

break;

}

if(j==count)//内存中不存在该页面

{

if(count==3)//如果已满

{

intmax[3]={20,20,20};//声明一个数组用来记录内存中的页面未来出现的的位置

for(intk=0;k

{

for(inte=i+1;e<20;e++)

{

if(elem[e]==c[k])

break;

}

max[k]=e;

}

intmaxc=0;//找出内存页面中最靠后的一个页面

for(inth=1;h

{

if(max[h]>max[maxc])

maxc=h;

}

c[maxc]=elem[i];//将目前页面存入内存中

lackcount++;//缺页次数增加一次

}

else//如果未满

{

c[count]=elem[i];

count++;//页数增加

lackcount++;

}

}

for(intk=0;k

{

cout<

}

cout<

}

}

intshowlack()

{

returnlackcount;

}

};

intmain()

{

intelem[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

OPToo;

cout<<"最佳置换算法:

"<

oo.run(elem,20);

cout<<"缺页次数为:

"<

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1