操作系统理论 第五章(虚拟存储器)—第三节(页面置换算法)

本文主要是介绍操作系统理论 第五章(虚拟存储器)—第三节(页面置换算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面:

  1. 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili

一、概述

        在进程运行过程中,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,需从内存中调出一页程序或数据,送入磁盘的对换区,但应将哪个页面调出,需根据一定的算法来确定。把选择换出页面的算法称为页面置换算法,其好坏直接影响系统的性能。

        不适当的算法可能会导致进程发生“抖动”,即刚被换出的页很快又要被访问,需要将它重新调入,此时又需要再选一页调出而此刚被调出的页很快又被访,又需将它调入,如此频繁地更换页面,以致一个进程在运行中把大部分时间都花费在页面置换工作上,我们称该进程发生了抖动

        一个好的置换算法应具有较低的页面更换频率,从理论上讲,应将那些以后不会再访问的页面换出,或者把那些在较长时间内不会再访问的页面换出。

二、最佳置换算法和先进先出算法

1、最佳置换算法

(1)最佳置换算法是由Belady于1966年提出的一种理论上的算法,其所选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面

(2)采用最佳置换算法通常可保证获得最低的缺页率,但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。

(3)假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串。

①进程运行时,先将7、0、1三个页面装入内存。

②以后,当进程要访问页面2时,将会产生缺页中断,此时OS根据最佳置换算法将选择页面7予以淘汰,这是因为页面0将作为第5个被访问的页面,页面1是第14个被访问的页面,而页面7则要在第18次页面访问时才需调入。

③下次访问页面0时,因它已在内存而不必产生缺页中断。

④当进程访问页面3时,又将引起页面1被淘汰,因为它在现有的1、2、0三个页面中,将是以后最晚才被访问的。

⑤以此类推,可得到下图所示的最佳置换算法置换图。

2、先进先出算法

(1)该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰

(2)该算法实现简单,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中有些页面经常被访问,比如含有全局变量、常用函数、例程等的页面,先进先出算法(FIFO)并不能保证这些页面不被淘汰。

(3)沿用上面的例子,采用FIFO算法进行页面置换。

①当进程第一次访问页面2时,将把第7页换出,因为它是最先被调入内存的。

②在第一次访问页面3时,又将把第0页换出,因为它在现有的2、0、1三个页面中是最老的页。

③以此类推,可得到下图所示的先进先出算法置换图。

(4)如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象,这种现象发生在FIFO(先进先出)置换算法

三、最近最久未使用和最少使用置换算法

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

(1)LRU置换算法根据页面调入内存后的使用情况进行决策。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰

(2)该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

(3)沿用上面的例子,利用LRU算法进行页面置换。

①当进程第一次对页面2进行访问时,由于页面7是最近最久未被访问的,故将它置换出去。

②当进程第一次对页面3进行访问时,第1页成为最近最久未使用的页,将它换出。

③以此类推,可得到下图所示的LRU算法置换图。

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

①寄存器:

        为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为R=R_{n-1}R_{n-2}R_{n-3}\cdots R_{2}R_{1}R_{0}当进程访问某物理块时,要将寄存器相应的R_{n-1}位置成1,此时定时信号将每隔定时间将寄存器右移一位,如果把n位寄存器的数看作是一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。(简单说,这个寄存器的作用就是计时,记录一个页面自上次被访问以来所经历的时间)

        下图示出了某进程在内存中具有8个页面、为每个内存页面配置一个8位寄存器时的LRU访问情况,把8个内存页面的序号分别定为1~8。由图可以看出,第3个内存页面的R值最小,当发生缺页时,应首先将它置换出去。

②栈:

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

        假定现有一进程,它分有五个物理块,所访问的页面的页面号序列如下图所示。

        [1]在前三次访问时,系统将依次将4、7、0放入栈中,4是栈底,0是栈顶;第四次是访问第7页,使7成为栈顶。

        [2]在第八次访问页面2时,该进程的五个物理块都已装满,在第九和十次访问时,未发生缺页。

        [3]在第11次访问页面6时发生了缺页,此时页面4是最近最久未被访问的页,应将它置换出去。

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

(1)在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用次数最少的页面作为淘汰页

(2)在最少使用置换算法中采用了移位寄存器方式,每次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间右移一次,这样,在最近一段时间使用最少的页面将是\sum R_{i}最小的页。LFU置换算法的页面访问图与LRU置换算法的访问图完全相同,或者说,利用这样一套硬件既可实现LRU 算法,又可实现LFU 算法。

(3)需要说明的是,这种算法并不能真正反映出页面的使用情况,因为在每一时间间隔内只是用寄存器的一位来记录页的使用情况,因此,在该时间间隔内,对某页访问1次和访问1000次是完全等效的。

四、Clock置换算法

1、简单的Clock置换算法

(1)为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列,当某页被访问时,其访问位被置1置换算法在选择一页淘汰时,只需检查页的访问位,如果是0就选择该页换出;若为1则重新将它置0,暂不换出,给予该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面,当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面

(2)简单的Clock置换算法又称最近未使用算法。

2、改进型Clock置换算法

(1)在改进型Clock算法中,除须考患页面的使用情况外,还须再增加一个因素——置换代价(对于修改过的页面,在换出时需要重新写回磁盘上,开销比较大),这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面,把同时满足这两个条件的页面作为首选淘汰的页面。

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

①A=0,M=0:表示该页最近既未被访问,又未被修改,是最佳淘汰页。

②A=0,M=1:表示该页最近未被访问,但已被修改,并不是很好的淘汰页。

③A=1,M=0:表示最近已被访问,但未被修改,该页有可能再被访问。

④A=1,M=1:表示最近已被访问且被修改,该页可能再被访问。

(3)在进行页面置换时,可采用与简单 Clock算法相类似的算法,其差别在于该算法须同时检查访问位与修改位,以确定该页是四类页面中的哪一种。其执行过程可分成以下三步:

①从指针所指示的当前位置开始扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。

②如果第一步失败,即查找一轮后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0。

③如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0,然后重复第一步,即寻找A=0目M=0的第一类页面,如果仍失败必要时再重复第二步,寻找A=0且M=1的第二类页面,此时就一定能找到被淘汰的页。

五、页面缓冲算法

1、影响页面换进换出效率的若干因素

(1)页面置换算法。影响页面换进换出效率最重要的因素,无疑是页面置换算法,因为一个好的页面置换算法,可使进程在运行过程中具有较低的缺页率,从而可以减少页面换进换出的开销。

(2)写回磁盘的频率。对于已经被修改过的页面,在将其换出时应当写回磁盘。如果是采取每当有一个页面要被换出时就将它写回磁盘的策略,这意味着每换出一个页面,便需要启动一次磁盘,但如果在系统中已建立了一个已修改换出页面的链表,则对每一个要被换出的页面(已修改),系统可暂不把它们写回磁盘,而是将它们挂在已修改换出页面的链表上,仅当被换出页面数目达到一定值时,再将它们一起写回到磁盘上,这样就显著地减少了磁盘 I/O的操作次数,或者说,减少已修改页面换出的开销。

(3)读入内存的频率。在设置了已修改换出页面链表后,在该链表上就暂时有一批装有数据的页面,如果有进程在这批数据还未写回磁盘时需要再次访问这些页面时,就不需从外存上调入,而直接从已修改换出页面链表中获取,这样也可以减少将页面从磁盘读入内存的频率,减少页面换进的开销。

2、页面缓冲算法PBA的实现

(1)PBA算法的主要特点是:

①显著地降低了页面换进、换出的频率,使磁盘I/O的操作次数大为减少,因而减少了页面换进、换出的开销。

②正是由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出算法,它不需要特殊硬件的支持,实现起来非常简单。

(2)VAX/NMS操作系统中所使用的页面缓冲算法,内存分配策略上采用了可变分配和局部置换方式,系统为每个进程分配一定数目的物理块,系统自己保留一部分空闲物理块。为了能显著地降低页面换进、换出的频率,在内存中设置了如下两个链表:

①空闲页面链表:

        实际上该链表是一个空闲物理块链表,是系统掌握的空闲物理块,用于分配给频繁发生缺页的进程、以降低该进程的缺页率,当这样的进程需要读入一个页面时,便可利用空闲物理块链表中的第一个物理块来装入该页。

        当有一个未被修改的页要换出时,实际上并不将它换出到外存,而是把它们所在的物理块挂在空闲链表的末尾,这些挂在空闲链表上的未被修改的页面中是有数据的,如果以后某进程需要这些页面中的数据时,便可从空闲链表上将它们取下,免除了从磁盘读入数据的操作,减少了页面换进的开销。

②修改页面链表:

        它是由已修改的页面所形成的链表,设置该链表的目的是为了减少已修改页面换出的次数,当进程需要将一个已修改的页面换出时,系统并不立即把它换出到外存上,而是将它所在的物理块挂在修改页面链表的末尾,这样做的目的是降低将已修该页面写回磁盘的频率,降低将磁盘内容读入内存的频率。

这篇关于操作系统理论 第五章(虚拟存储器)—第三节(页面置换算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859269

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖