合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc

上传人:b****1 文档编号:13110608 上传时间:2022-10-05 格式:DOC 页数:55 大小:995.24KB
下载 相关 举报
合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc_第1页
第1页 / 共55页
合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc_第2页
第2页 / 共55页
合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc_第3页
第3页 / 共55页
合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc_第4页
第4页 / 共55页
合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc

《合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc(55页珍藏版)》请在冰豆网上搜索。

合工大页面置换算法操作系统课程设计报告Word文档下载推荐.doc

2.关键代码 8

五、设计结果 22

六、设计体会 24

七、附录 24

一、设计题目

第15题:

1.建立相应的数据结构;

2.在屏幕上显示页面的状况;

3.时间的流逝可以用下面几种方法模拟:

(a)按键盘,每按一次可以认为过一个时间单位;

(b)相应WM_TIMER;

4.将一批页的置换情况存入磁盘文件,以后可以读出并重放;

5.计算页面的缺页次数、缺页后的页面置换次数;

6.支持算法:

FIFO、LRU、最佳置换算法。

二、开发环境与工具

开发环境:

Windows

开发工具:

VC6.0、Eclipse

三、设计原理

1.最佳(Optimal)置换算法

最佳置换算法是由Belady于1966年提出的一种理论上的算法。

其所选择的被淘汰页面将是以后永不使用的,或是在未来最长时间内不再被访问的页面。

采用最佳置换算法通常可以保证获得最低的缺页率,但由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以用该算法去评价其他算法。

现举例说明如下:

假定系统为某进程分配了三个物理快,并考虑有以下的页面号引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

进程运行时,先将7,0,1三个页面放入内存。

以后,当进程要访问页面2时,将会产生缺页中断。

此时OS根据最佳置换算法将将选择页面7予以淘汰。

这是因为页面0将作为第5个被访问的页面,页面1是第14个被访问的页面,而页面7则要在第18次页面访问是才需调入。

下次访问页面0时,因它已在内存而不必产生缺页中断。

当进程访问页面3时,又讲引起页面1被淘汰;

因为它在现在的1,2,0三个页面中,将是以后最晚才被访问的。

图1示出了采用最佳置换算法时的置换图。

由图可以看出,采用最佳置换算法发生了6次页面置换。

页面号

7

1

2

3

4

物理快1

物理快2

物理快3

2.先进先出(FIFO)页面置换算法

FIFO算法是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面予以淘汰。

该算法实现简单,只需要把已经调入内存的页面按先后次序排成一个队列,当发生缺页时,将队首页面出队,再将找到的页面入队,这样就完成了页面置换的任务。

以书上的为例有如下表格:

7 0 1 2 0 3 4 2 3 0 3 2 1 2 0 1 7 0

但该算法与程序的运行规律不相适应,它忽视了程序运行的局部性原理。

有可能造成需要访问的页面经常性的被置换。

3.最近最久未使用(LRU)页面置换算法

FIFO算法性能较差,它是根据页面进入的先后次序进行置换,并不能反映页面的使用情况。

最近最久未使用(LRU)算法的基本思想是利用“最近的过去”来预测“最近的未来”,这个也是根据程序运行的局部性原理。

由于最佳置换算法只有理论价值,实际系统中是无法使用的,所以就利用最近的过去来预测未来。

该算法每访问一个字段,记录一个自上次以来被访问以来所经历的时间t。

当需要淘汰一个页面时,选择所有页面中t值最大的,即最近最久未使用的页面予以置换。

以书上为例,有如下表格:

四、重要算法

1.算法流程图

FIFO算法流程图:

Y

i++

把p[i]的内容直接装入最上面一个空内存块,i++

把page[]中最先装入的页面置换出去.i++

Page[]是否有空

当前p[]中第i个元素是否已在内存中

页面走向存入数组p[]中,内存块用page[]表示初始化为0

开始

N

输出当前内存块状态

结束

LRU算法流程图:

开始

当前p[]中第i个元素是否已在内存

把page[]中最近最久未使用的页面置换出去.i++

OPT算法流程图:

结束

把page[]中以后一段时间都不使用或是使用时间离现在最远的换出.i++

2.关键代码

1.FIFO算法代码:

publicclassFIFOControl{

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

//使用无参构造函数

privateint[]num=newint[50];

privateintnumLength;

privateint[]pg=newint[10];

privateint[]timepg=newint[10];

privateintPageNum;

publicint[][]store;

FIFOControl()

{

this.PageNum=3;

numLength=20;

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

for(inti=0;

i<

numLength;

i++)

{

num[i]=numtemp[i];

}

for(inti=0;

10;

i++)

pg[i]=-1;

timepg[i]=1;

store=newint[numLength][PageNum+1];

for(inti=1;

PageNum+1;

for(intj=0;

j<

j++)

{

store[j][i]=-1;

}

for(intk=0;

k<

k++)

store[k][0]=0;

}

FIFOControl(intnump,int[]n,intnlength)//参数:

1.物理块数2.页面序列号3.页面序列号数组长度meiyong

this.PageNum=nump;

numLength=nlength;

for(intj=0;

nlength;

j++)

num[j]=n[j];

privatebooleancheckInPage(int[]p,intplength,intkeynum)

for(intjj=0;

jj<

plength;

jj++)

timepg[jj]++;

if(keynum==p[j])

returntrue;

returnfalse;

privatevoidcaculate()

//将物理页框装满

inttimer=0;

//横着的指针

PageNum;

pg[i]=num[i];

i;

j++)//加时间

timepg[j]++;

for(intjj=0;

jj++)//数据放到store中去

store[timer][jj+1]=pg[jj];

}

timer++;

//把后面的数据按先进先出的顺序放到物理块中

for(inti=PageNum;

if(checkIn

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

当前位置:首页 > 法律文书 > 辩护词

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

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