资源描述:
《页面置换算法操作系统课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学号:专业班级:计算机科学与技术班2015年7月一、设计题目3二、开发环境与工具3三、设计原理31.最佳(Optimal)置换算法32.先进先出(FIFO)页面置换算法43.最近最久未使用(LRU)页面置换算法4四、重要算法51.算法流程图52.关键代码8五、设计结果22六、设计体会24七、附录24一、设计题目第15题:页面置换算法1.建立相应的数据结构;2.在屏幕上显示页面的状况;3.时间的流逝可以用下面几种方法模拟:(a)按键盘,每按一次可以认为过一个时间单位;(b)相应WM_TIMER;4.将一批页的置换情况存入磁盘
2、文件,以后可以读出并重放;5.计算页面的缺页次数、缺页后的页面置换次数;6.支持算法:FIFO、LRU、最佳置换算法。二、开发环境与工具开发环境:Windows开发工具:VC6.0、Eclipse三、设计原理1.最佳(Optimal)置换算法最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面将是以后永不使用的,或是在未来最长时间内不再被访问的页面。采用最佳置换算法通常可以保证获得最低的缺页率,但由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以用该算法去评价其他算法。现举例说明如下:假定
3、系统为某进程分配了三个物理快,并考虑有以下的页面号引用串: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示出了采用最佳置换算法时的置换图。由图可以看出,采用最佳置
4、换算法发生了6次页面置换。页面号70120304230321201701物理快1777222227物理快200004000物理快311333112.先进先出(FIFO)页面置换算法FIFO算法是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面予以淘汰。该算法实现简单,只需要把已经调入内存的页面按先后次序排成一个队列,当发生缺页时,将队首页面出队,再将找到的页面入队,这样就完成了页面置换的任务。以书上的为例有如下表格:701203423032120170777222444000000077000033222221111101111003333322222但该
5、算法与程序的运行规律不相适应,它忽视了程序运行的局部性原理。有可能造成需要访问的页面经常性的被置换。3.最近最久未使用(LRU)页面置换算法FIFO算法性能较差,它是根据页面进入的先后次序进行置换,并不能反映页面的使用情况。最近最久未使用(LRU)算法的基本思想是利用“最近的过去”来预测“最近的未来”,这个也是根据程序运行的局部性原理。由于最佳置换算法只有理论价值,实际系统中是无法使用的,所以就利用最近的过去来预测未来。该算法每访问一个字段,记录一个自上次以来被访问以来所经历的时间t。当需要淘汰一个页面时,选择所有页面中t值最大的,即最近最久未使用的页面予以置换。以书上为例,有如下表格:701
6、203423032120170777222444000111111000000033333300001113322222222277四、重要算法1.算法流程图FIFO算法流程图:Yi++把p[i]的内容直接装入最上面一个空内存块,i++把page[]中最先装入的页面置换出去.i++Page[]是否有空当前p[]中第i个元素是否已在内存中页面走向存入数组p[]中,内存块用page[]表示初始化为0开始NYN输出当前内存块状态结束LRU算法流程图:开始页面走向存入数组p[]中,内存块用page[]表示初始化为0Y当前p[]中第i个元素是否已在内存i++NNPage[]是否有空Y结束把p[i]的内容
7、直接装入最上面一个空内存块,i++输出当前内存块状态把page[]中最近最久未使用的页面置换出去.i++OPT算法流程图:开始Yi++结束输出当前内存块状态把page[]中以后一段时间都不使用或是使用时间离现在最远的换出.i++把p[i]的内容直接装入最上面一个空内存块,i++Page[]是否有空当前p[]中第i个元素是否已在内存页面走向存入数组p[]中,内存块用page[]表示初始化为0NNY2