操作系统第五章:虚拟存储器 之 页面置换算法

在进程运行过程中,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,需从内存中调出一页程序或数据,送入磁盘的对换区。
但应将哪个页面调出,需根据一定的算法来确定。把选择换出页面的算法称为页面置换算法,其好坏直接影响系统的性能。
一个好的置换算法应具有较低的页面更换频率。从理论上讲,应将那些以后不会再访问的页面换出,或者把那些在较长时间内不会再访问的页面换出。

设作业执行中访问页面的总次数为A,其中有F次访问的页面尚未装入主存,故产生了F次缺页中断。
现定义缺页中断率为:

f = F/A

1.最佳置换算法(理想算法,无法实现,用于评价其他算法)

最佳置换算法是一种理想化的算法,具有最好的性能,但难于实现。

原理:
其所选择的被淘汰页面,将是以后永不再用的,或许是在最长(未来)时间内不再被访问的页面
 
优点:保证获得最低的缺页率
缺点:无法预知一个进程在内存的若干个页面,哪个在未来最长时间内不再被访问。
 
算法无法实现,但可评价其他算法。

在这里插入图片描述
在这里插入图片描述





2.先进先出置换算法(FIFO:first in first out)

先进先出置换算法最直观,但可能性能最差,故应用极少。

例子:
在这里插入图片描述
Belady现象
如果对—个进程未分配它所要求的全部页面,有时就会出现 “分配的页面数增多但缺页率反而提高” 的异常现象。发生在FIFO(先进先出)置换算法。
白话解释:就是上面的叶页框增多,理想上缺页率会降低,但有可能缺页率反而提高-----》就叫:Belady现象





3.最近最久未使用算法(LRU : Least Recently Used)

3.1LRU置换算法的描述

算法根据页面调入内存后的使用情况进行决策。由于无法预测各页面将来的使用情况,
只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
在这里插入图片描述

3.2 LRU置换算法的硬件支持(实现)

LRU置换算法虽然较好,但需较多的硬件支持,为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及如何快速地知道哪一页是最近最久未使用的页面,需有以下两类硬件之一的支持:

  • 寄存器

    为每个在内存中的页面配置一个移位寄存器,用来记录某进程在内存中各页的使用情况。
    移位寄存器表示为:
                   R=Rn-1Rn-2Rn-3…R2R1R0
    当进程访问某物理块时,要将相应寄存器的Rn-1位置成1。此时,定时信号将每隔一定时间将寄存器右移一位。
    如果把n位寄存器的数看作一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面
    在这里插入图片描述

  • 利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。
    因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号
    在这里插入图片描述





4.Clock置换算法

4.1 简单的Clock置换算法(又称最近未使用算法(NRU))是LRU 和FIFO的折衷。

原理:
NRU算法是根据访问位来确定谁是最近一个时期内未被访问的页,循环扫描,若遇到的访问位为0,则选中置换,若遇到的访问位为1,则将其改为0,让其继续驻留内存,继续循环扫描下一个。
每页有一个使用标志位(use bit),若该页被访问则置user bit=1。 置换时采用一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。指针经过的user bit=1的页都修改user bit=0,若检查到队列的最后一个页面时,访问位仍为1,则再返回到队首去检查第一个页面。

  • 例子1:

    在这里插入图片描述

  • 例子2:

    在这里插入图片描述
    在这里插入图片描述

4.2 改进的Clock置换算法(又称改进的NRU)

原理:
改进型NRU算法是通过多轮扫描访问位和修改位来一起确定谁是淘汰的页。
过程:

  • 第一次扫描寻找A=0,M=0的页;
  • 若失败进行第二次扫描,寻找A=0,M=1的页,同时把遇到的A为1的都改为0;
  • 若仍失败,进行第三次扫描,此时重复第一次扫描的任务,寻找A=0,M=0的页面;若仍失败,则重复第二步扫描,此时一定能找到淘汰页。





5.其它置换算法

5.1 最少使用置换算法LFU(Least Frequently Used)

在这里插入图片描述

5.2 页面缓冲算法(Page Buffering Algorithm)

该算法在页面分配时,采用可变分配和局部置换的方式。

被置换页面的选择和处理:
用FIFO算法选择被置换页,把被置换的页面放入两个链表之一。如果页面未被修改,就将其归入到空闲页面链表的末尾,否则将其归入到已修改页面链表。
当有一个未被修改的页要换出时,实际上并不将它换出内存,而是把它挂在自由页链表的未尾;类似的置换一个已修改的页面时,将其挂在修改页面链表的未尾。
空闲页面和已修改页面,仍停留在内存中一段时间,如果这些页面被再次访问,只需较小开销,而被访问的页面可以返还作为进程的内存页。
当已修改页面达到一定数目后,再将它们一起写回到磁盘上,然后将它们归入空闲页面链表,这样能大大减少I/O操作的次数。





6. 综合习题

6.1 例题1

某内存管理系统中,现假定分配给某进程4个页框,该进程中的4个逻辑页进驻内存及被调用访问的情况如下表:
在这里插入图片描述
设若接下来要访问的进程页号是5,需要进行页面置换。
(设表中时间单位 : ns , NRU和改进型NRU算法中,置换指针当前位置均指向第0页所在处)

问:
(1)请问FIFO、LRU、NRU 、以及改进型的NRU各将替换哪一页?
(2)请简要叙述出这几种算法的基本思想。

答:

(1)请问FIFO、LRU、NRU 、以及改进型的NRU各将替换哪一页?
答案:2、1、0、2
分析:

  • FIFO
    先进先出,看装入时刻谁最早,谁最早就是先进----->故页号2被置换
  • LRU
    最近最久未使用,看上次引用时刻,谁最小说明最近最久未使用 ---->故页号1被置换
  • NRU

    在这里插入图片描述
    在这里插入图片描述

  • 改进型NRU算法

    在这里插入图片描述
    第一次扫描:没有A=0,M=0的页
    在这里插入图片描述
    若失败进行第二次扫描,寻找A=0,M=1的页,同时把遇到的A为1的都改为0
    在这里插入图片描述
    若仍失败,进行第三次扫描,此时重复第一次扫描的任务,寻找A=0,M=0的页面;若仍失败,则重复第二步扫描,此时一定能找到淘汰页。
    在这里插入图片描述

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些关于虚拟存储器页面置换算法的信息。 虚拟存储器是一种机制,它允许操作系统将进程使用的内存分为两个部分:虚拟内存和物理内存。虚拟内存是一个抽象的概念,它允许进程使用比物理内存更大的地址空间,而不必将所有数据都存储在物理内存中。当进程需要访问虚拟内存中的某个页面时,操作系统将会检查该页面是否已经在物理内存中。如果是,则直接将页面返回给进程;如果不是,则将该页面从磁盘中读入到物理内存,并且将之前的某个页面换出到磁盘上,以便为新页面腾出空间。 页面置换算法是用来选择哪个页面被换出的算法。最近最久未使用(LRU)算法是一种常用的页面置换算法,它会选择最近最久未使用的页面进行替换。具体来说,当一个页面需要被换出时,操作系统会选择最近最久未被使用的页面进行替换。这种算法的优点是可以最大限度地减少缺页率,但是需要维护一个记录页面使用时间的数据结构,这会增加算法的复杂度。 您可以使用模拟器来模拟虚拟内存的页面调度和页面错误处理过程。在模拟器中,您可以设置页面置换算法和物理内存大小等参数,并且可以通过模拟进程的内存访问来测试各种算法的效果和缺页率。 希望这些信息可以帮助您设计一个页面置换算法,并且模拟虚拟内存的页面调度和页面错误处理过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你说的白是什么白_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值