页面置换算法是用来选择换出页面的算法。

页面置换算法的优劣直接影响到系统的效率,若选择不合适,可能会出现抖动(Thrashing)现象。

抖动:刚被淘汰出内存的页面,过后不久又要访问它,需要再次将其调入,而该页调入内存后不久又再次被淘汰出内存,然后又要访问它,如此反复,使得系统把大部分时间用在了页面的调进换出上,这种现象称为抖动。

最佳置换算法 OPT

最佳置换算法 OPT

选择永远不再需要的页面或最长时间以后才需要访问的页面予以淘汰。

最佳置换算法是一种理想化的算法,性能最好,实际上这种算法无法实现,因为页面访问的未来顺序很难精确预测,但可用该算法评价其它算法的优劣。

例:假定系统为某进程分配了3个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 3 个物理块均为空,计算采用最佳置换算法时的缺页率?

简单解释一下:

由于开始物理块为空,所以最开始,1 2 3,都缺,当要将4调入时,由于3个物理块已满,所以需要换出,换出规则是选择永远不再需要的页面或最长时间以后才需要访问的页面予以淘汰 而1 2 将要用到,所以将3换出,一次类推。

先进先出置换算法 FIFO

先进先出置换算法 FIFO

选择先进入内存的页面予以淘汰。

例:假定系统为某进程分配了3 个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 3 个物理块均为空,计算采用先进先出置换算法时的缺页率?

简单解释一下:

由于开始物理块为空,所以最开始,1 2 3,都缺,当要将4调入时,由于3个物理块已满,所以需要换出,换出规则是选择先进入内存的页面予以淘汰 而1为最先调入的,所以将1换出,一次类推。

例:假定系统为某进程分配了4 个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 4 个物理块均为空,计算采用先进先出置换算法时的缺页率?

例:假定系统为某进程分配了5 个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 5 个物理块均为空,计算采用先进先出置换算法时的缺页率?

先进先出置换算法的出发点是最早调入内存的页面,其不再被访问的可能性会大一些。
被置换的页可能含有一个初始化程序段,用过后再也不会用到;但也可能含有一组全局变量,初始化时被调入内存,在整个程序运行过程中都将会用到。
FIFO 算法易于理解与编程,但它的效率不高。

Belady 异常现象

先进先出算法存在一种异常现象,即在某些情况下会出现分配给进程的物理块数增多,缺页次数有时增加,有时减少的奇怪现象,这种现象称为 Belady 异常现象(Belady’s Anomaly) 。

例题

温馨提示:以下为动图,注意观察

最近最久未使用算法(LRU)

最近最久未使用算法 LRU

选择最近一段时间最长时间没有被访问过的页面予以淘汰。

算法的出发点:如果某个页面被访问了,则它可能马上还要访问。如果很长时间未被访问,则它在最近一段时间也不会被访问。

该算法的性能接近于最佳算法,但实现起来较困难。因为要找出最近最久未使用的页面,必须为每一页设置相关记录项,用于记录页面的访问情况,并且每访问一次页面都须更新该信息。这将使系统的开销加大,所以在实际系统中往往使用该算法的近似算法。

例:假定系统为某进程分配了3 个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 3 个物理块均为空,计算采用最近最久未使用算法时的缺页率?

简单解释一下:

由于开始物理块为空,所以最开始,1 2 3,都缺,当要将4调入时,由于3个物理块已满,所以需要选择换出,换出规则是选择最近一段时间最长时间没有被访问过的页面予以淘汰 而2 3刚刚访问过,所以将1换出,一次类推。

最近最久未使用算法的硬件支持

LRU 置换算法虽然是一种比较好的算法,但实现开销很大,必须有硬件的支持。

1.寄存器

为了记录某个进程在内存中各页的使用情况,为每个在内存中的页面配置一个移位寄存器,可表示为

每当进程访问某页面时,将该页面对应寄存器的最高位(R n−1 ) 置 1,系统定期 (如 100ms) 将寄存器右移一位并将最高位补 0,如果把 n 位寄存器的数看作是一个整数,于是寄存器数值最小的页面是最久未使用的页面。

2.栈

利用一特殊的栈保存当前使用的页号,每当进程访问某页面时,把被访问页面移到栈顶,于是栈底的页面就是最久未使用的页面。

最近最少使用置换算法(LFU)

最近最少使用置换算法 LFU

选择在最近时期使用最少的页面为淘汰页。

LFU 置换算法为在内存中的每个页面设置一个移位寄存器来记录该页面被访问的频率。

LRU 与 LFU 的区别

LRU 是最近最久未使用页面置换算法 (Least Recently Used),也就是首先淘汰最长时间未被使用的页面。

LFU 是最近最少使用置换算法 (Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页。

例如,进程分配了 3 个物理块,若所需页面走向为2 1 2 1 2 3 4(请求页面 4 时会发生缺页中断)

按 LRU 算法, 应换页面 1(1 页面最近最久未被使用) 。

但按 LFU 算法应换页面 3(页面 3 最近最少使用,最近只使用了一次) 。

LRU 是看时间长短,而 LFU 是看使用频率。

Clock 置换算法

Clock 置换算法是 LRU 和 FIFO 的折衷(LRU 的近似算法,减少硬件消耗) 。也称为最近未使用算法 (NotRecently Used,NRU)

该算法为每页设置一个访问位,并将内存中的所有页链接成一个循环队列。当某页被访问时,其访问位被置 1。

置换算法在选择一页淘汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不换出,而给该页第二次驻留内存的机会,再按照FIFO 算法检查下一个页面(循环,不是回到队首) 。

当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面。

假如某个页被频繁访问,那么它就不会被置换出去

5位置有点绕,那就解释一下喽:

当调入5时,2,3,1访问位都为1,就按顺序,将2置0,3置0,1置0,然后再重头开始,2访问位,此时为0,则淘汰,将5调入,并将访问位置1。

改进型 Clock 置换算法

改进型 Clock 置换算法:除须考虑页面的使用情况外,还增加一个因素,即置换代价,这样选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。

由访问位 A 和修改位 M 可以组合成下面四种类型的页面:

  • 从指针所指示的当前位置开始扫描循环队列,寻找 A=0且 M=0 的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
  • 如果第一步失败,开始第二轮扫描,寻找 A=0 且 M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置 0。
  • 如果第二步也失败,则将指针返回到开始的位置,并将所有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步。

双指针 Clock 置换算法

双指针 Clock 置换算法:定时淘汰页面。前指针清除访问位,后指针淘汰页面。

影响页面换入换出效率的若干因素

  • 页面置换算法。
  • 回写磁盘的频率。已经被修改过的页面,换出时应当回写磁盘。如果建立一个已修改换出页面链表,可以暂不回写。当达到一定数目后,再将它们一起写入磁盘,这样能大大减少 I/O 操作的次数。
  • 读入内存的频率。已修改换出页面链表上的页面在回写前,如果需要被再次访问,就不需要从外存调入,直接从链表中获取。

页面缓冲算法 PBA

页面缓冲算法:用 FIFO 算法选择被置换页,选择换出的页面不是立即换出,而是放入两个链表之一,如果页面未被修改,就将其归入到空闲页面链表的末尾,否则将其归入已修改页面链表末尾。

这些空闲页面和已修改页面会在内存中停留一段时间。如果这些页面被再次访问,只需将其从相应链表中移出,就可以返回进程,从而减少一次 I/O 开销。

需调入新页,则将新页读入到空闲页面链表的第一个页面中,然后将其从该链表中移出。

当已修改的页面达到一定数目后,再将它们一起写入磁盘。这样能大大减少 I/O 操作的次数。

页面置换算法的比较

访问内存的有效时间 EAT

被访问页面在内存,且对应的页表项在快表中。设访问快表的时间为 λ,访问内存的时间为 t。

被访问页面在内存,但对应的页表项不在快表中。这种情况不缺页,但需两次访问内存。一次读页表,并更新快表,一次读数据。

更新快表 λ 与读数据t可并行。

被访问页面不在内存。缺页。设缺页中断处理时间为 ϵ。

上面的几种讨论没有考虑快表的命中率和缺页率等因素。

如果考虑快表的命中率 a和缺页率 f

如果不考虑快表,仅考虑缺页率 f,即令上式中 λ = 0
和 a = 0,

【操作系统】虚拟存储器--页面置换算法相关推荐

  1. 操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)

    操作系统之页面置换算法(FIFO.LFU.LRU.OPT算法) TIPS: 主存:实际上的物理内存. 虚存(虚拟内存):虚拟存储技术.虚拟内存使计算机系统内存管理的一种技术.它使得应用程序认为它拥有的 ...

  2. 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告

    操作系统实验报告 一.实验名称 :页面置换算法 二.实验目的: 在实验过程中应用操作系统的理论知识. 三.实验内容: 采用C/C++编程模拟实现:FIFO算法.LRU算法.LFU算法.NRU算法四个页 ...

  3. 【操作系统】页面置换算法

    页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置 ...

  4. 操作系统:页面置换算法(LRU、FIFO、OPT)

    继续重温操作系统系列知识,页面置换的三种常见算法为:LRU(最近最久未使用).FIFO(先进先出).最佳置换. 部分公司的面试会考到LRU的知识. LRU置换算法 所谓LRU置换算法,单看字面意思较为 ...

  5. 操作系统实验--页面置换算法(OPT/FIFO/LRU/LFU)cpp

    前言 学习笔记 void IntoPage(int m);//将第m条指令转化为对应的页数 int isInside(int number,int Msize);//判断页号是否在内存中 void O ...

  6. FIFO页面置换算法详解

    页面置换算法的基本思想: FIFO每次置换最先调入内存的页面,即将内存中等待时间最长的页面进行置换.此算法的适用范围是顺序结构程序. 实现过程 比如有下述页面走向:1, 2, 3, 4, 2, 1, ...

  7. 页面置换算法最佳页面置换算法模拟JAVA实现

    操作系统存储管理页面置换算法-----最佳页面置换算法模拟(JAVA实现) 话不多说,我们直接展示 package com.company;import java.util.Arrays;/*** @ ...

  8. 操作系统 请求分页存储管理方式(含页面置换算法)

    1. 请求分页存储管理方式 请求分页系统是建立在基本分页基础上的,为了能支持虚拟存储器功能,而增加了请求调页功能和页面置换功能. 相应地,每次调入和换出的基本单位都是长度固定的页面.因此,请求分页便称 ...

  9. 虚拟存储页面置换算法c语言,虚拟存储器管理页面置换算法模拟实验.doc

    虚拟存储器管理页面置换算法模拟实验 淮海工学院计算机工程学院 实验报告书 课程名:< 操作系统原理A > 题 目: 虚拟存储器管理 页面置换算法模拟实验 班 级: 软件*** 学 号: 2 ...

最新文章

  1. 【LintCode: 3. 统计数字】算法题解析
  2. FAT16文件系统结构扇区数据分析
  3. 自然语言处理python进阶(二)
  4. 竞价推广账户创意撰写的技巧之核心思路
  5. javascript权威指南读书笔记之二——词法结构
  6. 微软官方宣布:Edge 浏览器将采用 Chromium 内核
  7. 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)
  8. .Net Core----关于MVC中TempData持久化问题
  9. c语言自己编译自己,TCC研究(一): Tiny C Compiler最小的C语言编译器,自己编译自己...
  10. stringr | 文本处理方法(Ⅰ-3):字符串处理函数(下)
  11. 2021年中国磁感应芯片市场趋势报告、技术动态创新及2027年市场预测
  12. Qt获取系统时间并格式化输出
  13. nodejs下载安装
  14. 暗黑2纯Linux服务器构建
  15. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  16. [Lonlife1031]Bob and Alice are eating food(递推,矩阵快速幂)
  17. 微服务架构系列一:关键技术与原理研究
  18. 域名网在线出售域名源码
  19. MNIST 数据集分类
  20. 小菜鸡的Three.js学习笔记(一)-三维模型压缩DRACO初探

热门文章

  1. 张量(五):张量学习——BGCP
  2. 塞拉利昂一公司计划投资10亿美元用于建设光伏农业项目
  3. 教育的未来--我的感想
  4. 通用Excel表格导出(Map类型数据导出为表格)
  5. 第十四篇,STM32的CAN总线通信
  6. 专业办公套件(Office 2019)for Mac
  7. 一名年薪百万阿里P8架构师写给Java程序员一些建议(架构师必备)
  8. Kafka源码-发送器Sender类型的的sendProducerData 模版方法
  9. #今日论文推荐# 将有色液体图像转换成透明液体,CMU教机器人准确掌控向杯中倒多少水
  10. pandas常用操作以及eda分析笔记(自用)