操作系统页面置换算法文档格式.docx

上传人:b****5 文档编号:19712994 上传时间: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

1、FIFO(先进先出)

源代码:

/*

70120304230321201701

共15次缺页

*/

#include<

iostream>

usingnamespacestd;

intmain()

{

cout<

<

"

请输入内存块数:

;

intmemoryNum;

//内存块数

cin>

>

memoryNum;

//intmemoryNum=3;

int*memory=newint[memoryNum];

//建内存

inti,j,k;

//辅助遍历数组的变量

for(i=0;

i<

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;

请输入页面长度:

pagesLength;

int*pages;

//记录页面

pages=newint[pagesLength];

请输入页面走向:

cin>

pages[i];

endl;

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

//cout<

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

intcount=0;

//计数缺页次数

intpointer=0;

//指针指向要插入的位置

intreplacedPage;

//被替换出来的页面

boolflag;

//标志pointer是否移动位置

{

cout<

pages[i]<

:

\t"

flag=false;

for(j=0;

j<

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<

k++)

if(memory[k]==-1)

cout<

"

else

memory[k]<

if(flag&

&

(replacedPage!

=-1))

cout<

replacedPage;

}

缺页次数:

count<

return0;

}

2、LRU(最近最少使用)

模拟"

最近最少用(LRU)"

算法

structPage

intnum;

inttime;

//记录最近的访问次数

};

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

{

intk=0;

//k记录最老页面的下标

inti=0;

//i为遍历p的辅助变量

while(i<

len)

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

returni;

i++;

Pagemax=p[0];

i=0;

if(max.time<

p[i].time)

max=p[i];

k=i;

returnk;

intmemoryLength=3;

//内存大小

Page*memory=newPage[memoryLength];

//内存

intpagesLength=20;

//页面串长度

Page*pages=newPage[pagesLength];

//页面串

//Pagereplaced=newPage({-1,-1});

intreplaced;

//缺页数

inti,j,k,l,m;

memoryLength;

i++)//初始化内存为空

memory[i].num=-1;

memory[i].time=-1;

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

i++)//初始化页面串

//cin>

pages[i].num;

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

pages[i].time=0;

页面走向为:

pages[i].num<

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

j++)

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

for(k=0;

memory[k].time++;

//首先令其他页面的时间记录加一次

memory[j].time=0;

//刷新内存中这一页的时间记录,重新计时

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

//缺页次数加一次

l=Max(memory,memoryLength);

//取出内存中最老一页的下标

//replaced=memory[k];

//最老的一页就是要替换出来的页面

replaced=memory[l].num;

for(k=0;

if(memory[k].time!

=-1)

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

memory[l]=pages[i];

//新页面存入

memory[l].time=0;

for(m=0;

m<

m++)

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

memory[m].num<

缺页次数为:

3、OPT(最佳置换法)

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;

n;

for(intj=0;

count;

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

break;

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

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

{

intmax[3]={20,20,20};

//声明一个数组用来记录内存中的页面未来出现的的位置

for(intk=0;

{

for(inte=i+1;

e<

20;

e++)

{

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

break;

}

max[k]=e;

}

intmaxc=0;

//找出内存页面中最靠后的一个页面

for(inth=1;

h<

h++)

if(max[h]>

max[maxc])

maxc=h;

c[maxc]=elem[i];

//将目前页面存入内存中

lackcount++;

//缺页次数增加一次

}

else//如果未满

c[count]=elem[i];

count++;

//页数增加

for(intk=0;

c[k]<

intshowlack()

returnlackcount;

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

OPToo;

最佳置换算法:

oo.run(elem,20);

oo.showlack()<

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

当前位置:首页 > 考试认证 > 从业资格考试

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

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