合工大页面置换算法操作系统课程设计报告.doc
- 文档编号:179142
- 上传时间:2022-10-05
- 格式:DOC
- 页数:55
- 大小:995.24KB
合工大页面置换算法操作系统课程设计报告.doc
《合工大页面置换算法操作系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《合工大页面置换算法操作系统课程设计报告.doc(55页珍藏版)》请在冰豆网上搜索。
计算机与信息学院
《操作系统综合设计》报告
设计题目:
页面置换算法
学生姓名:
学号:
专业班级:
计算机科学与技术班
2015年7月
一、设计题目 3
二、开发环境与工具 3
三、设计原理 3
1.最佳(Optimal)置换算法 3
2.先进先出(FIFO)页面置换算法 4
3.最近最久未使用(LRU)页面置换算法 4
四、重要算法 5
1.算法流程图 5
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
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
物理快1
7
7
7
2
2
2
2
2
7
物理快2
0
0
0
0
4
0
0
0
物理快3
1
1
3
3
3
1
1
2.先进先出(FIFO)页面置换算法
FIFO算法是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面予以淘汰。
该算法实现简单,只需要把已经调入内存的页面按先后次序排成一个队列,当发生缺页时,将队首页面出队,再将找到的页面入队,这样就完成了页面置换的任务。
以书上的为例有如下表格:
7 0 1 2 0 3 4 2 3 0 3 2 1 2 0 1 7 0
7
7
7
2
2
2
4
4
4
0
0
0
0
0
0
0
7
7
0
0
0
0
3
3
2
2
2
2
2
1
1
1
1
1
0
1
1
1
1
0
0
3
3
3
3
3
2
2
2
2
2
但该算法与程序的运行规律不相适应,它忽视了程序运行的局部性原理。
有可能造成需要访问的页面经常性的被置换。
3.最近最久未使用(LRU)页面置换算法
FIFO算法性能较差,它是根据页面进入的先后次序进行置换,并不能反映页面的使用情况。
最近最久未使用(LRU)算法的基本思想是利用“最近的过去”来预测“最近的未来”,这个也是根据程序运行的局部性原理。
由于最佳置换算法只有理论价值,实际系统中是无法使用的,所以就利用最近的过去来预测未来。
该算法每访问一个字段,记录一个自上次以来被访问以来所经历的时间t。
当需要淘汰一个页面时,选择所有页面中t值最大的,即最近最久未使用的页面予以置换。
以书上为例,有如下表格:
7 0 1 2 0 3 4 2 3 0 3 2 1 2 0 1 7 0
7
7
7
2
2
2
4
4
4
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
3
3
3
3
3
3
0
0
0
0
1
1
1
3
3
2
2
2
2
2
2
2
2
2
7
7
四、重要算法
1.算法流程图
FIFO算法流程图:
Y
i++
把p[i]的内容直接装入最上面一个空内存块,i++
把page[]中最先装入的页面置换出去.i++
Page[]是否有空
当前p[]中第i个元素是否已在内存中
页面走向存入数组p[]中,内存块用page[]表示初始化为0
开始
N
Y
N
输出当前内存块状态
结束
LRU算法流程图:
开始
页面走向存入数组p[]中,内存块用page[]表示初始化为0
Y
当前p[]中第i个元素是否已在内存
i++
N
N
Page[]是否有空
Y
结束
把p[i]的内容直接装入最上面一个空内存块,i++
输出当前内存块状态
把page[]中最近最久未使用的页面置换出去.i++
OPT算法流程图:
开始
Y
i++
结束
输出当前内存块状态
把page[]中以后一段时间都不使用或是使用时间离现在最远的换出.i++
把p[i]的内容直接装入最上面一个空内存块,i++
Page[]是否有空
当前p[]中第i个元素是否已在内存
页面走向存入数组p[]中,内存块用page[]表示初始化为0
N
N
Y
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 { num[i]=numtemp[i]; } for(inti=0;i<10;i++) { pg[i]=-1; timepg[i]=1; } store=newint[numLength][PageNum+1]; for(inti=1;i { for(intj=0;j { store[j][i]=-1; } } for(intk=0;k { store[k][0]=0; } } FIFOControl(intnump,int[]n,intnlength)//参数: 1.物理块数2.页面序列号3.页面序列号数组长度meiyong { this.PageNum=nump; numLength=nlength; for(intj=0;j { num[j]=n[j]; } for(inti=0;i<10;i++) { pg[i]=-1; timepg[i]=1; } store=newint[numLength][PageNum+1]; for(inti=1;i { for(intj=0;j { store[j][i]=-1; } } for(intk=0;k { store[k][0]=0; } } privatebooleancheckInPage(int[]p,intplength,intkeynum) { for(intjj=0;jj { timepg[jj]++; } for(intj=0;j { if(keynum==p[j]) { returntrue; } } returnfalse; } privatevoidcaculate() { //将物理页框装满 inttimer=0;//横着的指针 for(inti=0;i { pg[i]=num[i]; for(intj=0;j { timepg[j]++; } for(intjj=0;jj { store[timer][jj+1]=pg[jj]; } timer++; } //把后面的数据按先进先出的顺序放到物理块中 for(inti=PageNum;i { if(checkIn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 合工大 页面 置换 算法 操作系统 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)