天天看点

操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间

文章目录

  • 一、最佳置换算法(OPT)
  • 二、先进先出页面置换算法(FIFO)
  • 三、最近最久未使用置换算法(LRU)
  • 四、最少使用置换算法(LFU)
  • 五、Clock置换算法(最近未使用算法 NRU)
  • 六、页面缓冲算法(PBA)
  • 七、访问内存的有效时间

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。

当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

一、最佳置换算法(OPT)

  • 其所选择的被淘汰页面是以后永不使用的,或许是在未来最长时间内不再被访问的页面。
  • 采用最佳置换算法,通常可以保证获得最低的缺页率。
  • 但由于人们目前无法预知,哪个页面是未来最长时间不被访问的,所以该算法是无法实现的,但可以用该算法去评价其他算法。
    操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间

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

  • 该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
  • 这种算法的实现和队列是一样,OS维护一个当前在内存中的所有页面的链表,最新进入的页面在尾部,最久的在头部,每当发生缺页中断,就替换掉表头的页面并且把新调入的页面加入到链表末尾。
    操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间

三、最近最久未使用置换算法(LRU)

  • 当需要淘汰一个页面时,总是选择最近最久未使用的页面予以淘汰
    操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间
  • LRU 置换算法的硬件支持
    • 寄存器
      • 为了记录某进程唉内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器。
        操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间
      • 每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。
      • 因此,栈顶始终是最新被访问的页面编号,栈底是最近最久未使用的页面编号。
        操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间

四、最少使用置换算法(LFU)

  • 采用该算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。
  • 当需要淘汰一个页面时,总是选择最近时期使用最少的页面予以淘汰。
  • LFU 与 LRU 的访问图完全相同。

五、Clock置换算法(最近未使用算法 NRU)

  • LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;
  • FIFO算法实现简单,但性能差。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。
  • 简单的CLOCK算法
    • 给每一帧关联一个附加位,称为使用位。当某一页首次装入主存时,该帧的使用位设置为1;当该页随后再被访问到时,它的使用位也被置为1。
    • 对于页替换算法,用于替换的候选帧集合看做一个循环缓冲区,并且有一个指针与之相关联。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一帧。
    • 每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,替换该帧中的页。
    • 由于该算法循环地检查各页面的情况,故称为CLOCK算法,又称为最近未用(Not Recently Used, NRU)算法。
      操作系统——虚拟存储器(页面置换算法)一、最佳置换算法(OPT)二、先进先出页面置换算法(FIFO)三、最近最久未使用置换算法(LRU)四、最少使用置换算法(LFU)五、Clock置换算法(最近未使用算法 NRU)六、页面缓冲算法(PBA)七、访问内存的有效时间
  • 改进的 Clock 算法
    • CLOCK算法的性能比较接近LRU,而通过增加使用的位数目,可以使得CLOCK算法更加高效。在使用位的基础上再增加一个修改位,则得到改进型的CLOCK置换算法。这样,每一帧都处于以下四种情况之一:
      • 最近未被访问,也未被修改(u=0, m=0)。
      • 最近被访问,但未被修改(u=1, m=0)。
      • 最近未被访问,但被修改(u=0, m=1)。
      • 最近被访问,被修改(u=1, m=1)。
    • 算法执行如下操作步骤:
      • 从指针的当前位置开始,扫描帧缓冲区。在这次扫描过程中,对使用位不做任何修改。选择遇到的第一个帧(u=0, m=0)用于替换。
      • 如果第1)步失败,则重新扫描,查找(u=0, m=1)的帧。选择遇到的第一个这样的帧用于替换。在这个扫描过程中,对每个跳过的帧,把它的使用位设置成0。
      • 如果第2)步失败,指针将回到它的最初位置,并且集合中所有帧的使用位均为0。重复第1步,并且如果有必要,重复第2步。这样将可以找到供替换的帧。
    • 改进型的CLOCK算法优于简单CLOCK算法之处在于替换时首选没有变化的页。由于修改过的页在被替换之前必须写回,因而这样做会节省时间。

六、页面缓冲算法(PBA)

七、访问内存的有效时间

继续阅读