页面置换算法
目的:深入掌握内存调度算法的概念原理和实现方法。
设计要求:编写程序实现:
- 先进先出页面置换算法(FIFO)
- 最近最久未使用页面置换算法(LRU)
- 最佳置换页面置换算法(OPT)
专题:设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程,并计算访问命中率。演示页面置换的三种算法。通过随机数产生一个指令序列,将指令序列转换成为页地址流。计算并输出各种算法在不同内存容量下的命中率
分析:
命中率= 1 - 中断淘汰次数/命令总数
1、先进先出页面置换算法(FIFO)
**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰.
实现:设置一个数组模拟内存,用一个int一直记录内存中最先进入的页面index,每次需要中断淘汰页面时则淘汰记录在小标中那一个
2、最近最久未使用页面置换算法(LRU)
**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**
分析:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。
实现:利用另一个数组记录每个内存页最后一次被使用的时钟;当需要淘汰时选取最久的那一页淘汰
3、最佳置换页面置换算法(OPT)
**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**
分析:从主存中移出永远不再需要的页面,如果没有这样的页面存在,那就选择最长时间不需要访问的页面,来保证最低的缺页率;但是人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但是可以利用该算法取评价其他的算法。
实现:见代码不想写了
JAVA代码实现如下
测试主类Test:
pu