页面置换 FIFO LRU OPT 算法在不同内存容量下的命中率(JAVA实现)

页面置换算法

目的:深入掌握内存调度算法的概念原理和实现方法。

设计要求:编写程序实现:

  1. 先进先出页面置换算法(FIFO)
  2. 最近最久未使用页面置换算法(LRU)
  3. 最佳置换页面置换算法(OPT)

专题:设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程,并计算访问命中率。演示页面置换的三种算法。通过随机数产生一个指令序列,将指令序列转换成为页地址流。计算并输出各种算法在不同内存容量下的命中率

分析:

命中率= 1 - 中断淘汰次数/命令总数

1、先进先出页面置换算法(FIFO)

**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**

该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰.

实现:设置一个数组模拟内存,用一个int一直记录内存中最先进入的页面index,每次需要中断淘汰页面时则淘汰记录在小标中那一个

2、最近最久未使用页面置换算法(LRU)

**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**

分析:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。

实现:利用另一个数组记录每个内存页最后一次被使用的时钟;当需要淘汰时选取最久的那一页淘汰

3、最佳置换页面置换算法(OPT)

**设内存分成3个页帧,X表示中断,{}中为CPU要调用的页面**

分析:从主存中移出永远不再需要的页面,如果没有这样的页面存在,那就选择最长时间不需要访问的页面,来保证最低的缺页率;但是人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但是可以利用该算法取评价其他的算法。

实现:见代码不想写了

 

 

JAVA代码实现如下

测试主类Test:



public class Test {
    public static void main(String[] args) {
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FIFO算法(先进先出):将最先进入内存的页面淘汰,对于内存容量较小的情况下,FIFO算法的缺页率较高,因为页面的访问顺序与时间顺序无关,可能会将最常用的页面淘汰掉,而且FIFO算法也无法考虑到页面的重要性和历史访问情况。因此,随着内存容量的增加,FIFO算法的缺页率会逐渐降低。 LRU算法(最近最少使用):将在最近一段时间内最久未被使用的页面淘汰,因此LRU算法能够更好地利用页面的历史访问情况,具有较低的缺页率。但是,LRU算法需要记录每个页面最近一次的访问时间,需要更多的内存空间来维护,因此在内存容量较小的情况下,LRU算法的缺页率会增加。 LFU算法(最不经常使用):将最近一段时间内访问次数最少的页面淘汰,LFU算法能够更好地利用页面的重要性和历史访问情况,但是需要记录每个页面的访问次数,需要更多的内存空间来维护。在内存容量较小的情况下,LFU算法的缺页率会增加。 OPT算法(最佳置换):将未来最长时间内不再被访问的页面淘汰,OPT算法需要预测未来的页面访问情况,因此需要完全了解程序的运行情况。在实际应用中,OPT算法是无法实现的,只能通过模拟算法来近似预测,因此缺页率通常比其他算法高。 NUR算法(不经常使用且未修改):将最近一段时间内未被使用且未被修改的页面淘汰,NUR算法类似于LFU算法,但是只考虑了页面的访问情况和修改情况,因此需要更少的内存空间来维护。在内存容量较小的情况下,NUR算法的缺页率会增加。 总体来说,不同算法不同内存容量下会有不同的表现,没有哪种算法是完美的,需要根据实际情况选择合适的算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值