操作系统复习:12.缺页中断以及内存页面置换算法

目录

缺页中断(缺页异常)

页面置换算法

1.基本概述

2.OPT( 最佳⻚⾯置换算法)

3. FIFO(先进先出置换算法)

4. LRU(最近最久未使⽤的置换算法)

5. Lock(时钟⻚⾯置换算法)

6.最不常⽤算法(LFU)


缺页中断(缺页异常)

当 CPU 访问的⻚⾯不在物理内存时,便会产⽣⼀个缺⻚中断,请求操作系统将所缺⻚调⼊到物理内存。

与⼀般中断的主要区别:

(1)缺⻚中断在指令执⾏期间产⽣和处理中断信号,⽽⼀般中断在⼀条指令执⾏完成后检查和处理中断信号。

(2)缺⻚中断返回到该指令的开始重新执⾏该指令,⽽⼀般中断返回到该指令的下⼀个指令执⾏

缺页中断处理流程:

1. 在 CPU ⾥访问⼀条 Load M 指令,然后 CPU 会去找 M 所对应的⻚表项

2. 如果该⻚表项的状态位是有效的,那 CPU 就可以直接去访问物理内存了,如果状态位是⽆效的,则 CPU 则会发送缺⻚中断请求。

3. 操作系统收到了缺⻚中断,则会执⾏缺⻚中断处理函数,先会查找该⻚⾯在磁盘中的⻚⾯的位置

4. 找到磁盘中对应的⻚⾯后,需要把该⻚⾯换⼊到物理内存中,但是在换⼊前,需要在物理内存中找空 闲⻚,如果找到空闲⻚,就把⻚⾯换⼊到物理内存中

5. ⻚⾯从磁盘换⼊到物理内存完成后,则把⻚表项中的状态位修改为有效的  

6.最后,CPU 重新执⾏导致缺⻚异常的指令。

若找不到空闲页(上述第四步):

找不到空闲⻚的话,就说明此时内存已满了,这时候,就需要⻚⾯置换算法选择⼀个物理⻚,如果该物理⻚有被修改过(脏⻚),则把它换出到磁盘,然后把该被置换出去的⻚表项的状态改成⽆效的, 最后把正在访问的⻚⾯装⼊到这个物理⻚中

页表项

状态位:⽤于表示该⻚是否有效,也就是说是否在物理内存中,供程序访问时参考

访问字段:⽤于记录该⻚在⼀段时间被访问的次数,供⻚⾯置换算法选择出⻚⾯时参考

修改位:表示该⻚在调⼊内存后是否有被修改过,由于内存中的每⼀⻚都在磁盘上保留⼀份副本

如果没有修改,在置换该⻚时就不需要将该⻚写回到磁盘上,以减少系统的开销

如果已经被修改,则将该⻚重写到磁盘上,以保证磁盘中所保留的始终是最新的副本

硬盘地址:⽤于指出该⻚在硬盘上的地址,通常是物理块号,供调⼊该⻚时使⽤

页面置换算法

1.基本概述

⻚⾯置换算法:当出现缺⻚异常,需调⼊新⻚⾯⽽内存已满时,选择被置换的物理⻚⾯, 也就是说选择⼀个物理⻚⾯换出到磁盘,然后把需要访问的⻚⾯换⼊到物理⻚

常⻅的⻚⾯置换算法有如下⼏种:

①最佳⻚⾯置换算法(OPT)

②先进先出置换算法(FIFO)

③最近最久未使⽤的置换算法(LRU)

④时钟⻚⾯置换算法(Lock)

⑤最不常⽤置换算法(LFU)

2.OPT( 最佳⻚⾯置换算法)

最佳置换算法:其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面

在这个请求的⻚⾯序列中,缺⻚共发⽣了 7 次(空闲⻚换⼊ 3 次 + 最优⻚⾯置换 4 次),⻚⾯置换共发 ⽣了 4 次

注意:

最佳页面置换算法这很理想,但是实际系统中⽆法实现,因为程序访问⻚⾯时是动态的,我们是⽆法预知每个⻚⾯在下⼀ 次访问前的等待时间。 所以,最佳⻚⾯置换算法作⽤是为了衡量你的算法的效率,你的算法效率越接近该算法的效率,那么说明你的算法是⾼效的

3. FIFO(先进先出置换算法)

先进先出(First In first Out, FIFO) 页面置换算法的基本思想:每次置换最先调入内存的页面,即将内存中等待时间最长的页面进行置换。 此算法的适用范围是顺序结构程序

优点:先进先出页面置换算法的优点是其实现起来比较简单,可以不需要硬件的支持, 因而不需要增加系统的成本

缺点:先进先出页面置换算法没有考虑到缓存页面被使用的情况。如果一个页面被频繁访问, 我们应该将它保留在缓存中, 这样就能够提高程序的性能。但是使用FIFO算法, 很可能将一个被频繁访问的页面清除出缓存, 所以FIFO算法在实际的应用中是很少被使用到的, 但是这种思想是计算机系统中常常被采用的。
在大数情况下,先进先出页面置换算法缺页率比较低或会产生Belady异常现象 

4. LRU(最近最久未使⽤的置换算法)

最近最久未使⽤(LRU)的置换算法的基本思路是:发⽣缺⻚时,选择最⻓时间没有被访问的⻚⾯进⾏置换,也就是说,该算法假设已经很久没有使⽤的⻚⾯很有可能在未来较⻓的⼀段时间内仍然不会被使⽤

优点:算法性能好,效率高

缺点:在每次访问内存时都必须要更新整个链表。在链表中找到⼀个⻚⾯,删除它,然后把它移动到表头是⼀个⾮常费时的操作

5. Lock(时钟⻚⾯置换算法)

Lock(时钟⻚⾯置换算法):把所有的⻚⾯都保存在⼀个类似钟⾯的环形链表中,⼀个表针指向最⽼的⻚⾯。当发⽣缺⻚中断时,算法⾸先检查表针指向的⻚⾯:

(1)如果它的访问位位是 0 就淘汰该⻚⾯,并把新的⻚⾯插⼊这个位置,然后把表针前移⼀个位置

(2)如果访问位是 1 就清除访问位,并把表针前移⼀个位置,重复这个过程直到找到了⼀个访问位为 0 的⻚⾯为⽌

6.最不常⽤算法(LFU)

最不常⽤(LFU)算法:当发⽣缺⻚中断时,选择访问次数最少的那个⻚⾯,并将其淘汰

实现方式:对每个⻚⾯设置⼀个访问计数器,每当⼀个⻚⾯被访问时,该⻚⾯的访问计数器就 累加 1。在发⽣缺⻚中断时,淘汰计数器值最⼩的那个⻚⾯

LRU和LFU区别

(1)LRU关键是看页面最后一次被使用到发生替换的时间长短,时间越长,页面就会被置换;

LFU关键是看一定时间段内页面被使用的频率(次数),使用频率越低,页面就会被置换。

(2)LRU算法适合:较大的文件比如游戏客户端(最近加载的地图文件)

LFU算法适合:较小的文件和零碎的文件比如系统文件、应用程序文件 

(3)LRU消耗CPU资源较少,LFU消耗CPU资源较多

  • 28
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java从跨平台到跨行业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值