当前位置:   article > 正文

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

lfu页面置换算法例题

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

设作业执行中访问页面的总次数为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的页面;若仍失败,则重复第二步扫描,此时一定能找到淘汰页。
    在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号