计算机操作系统——页面置换算法

article/2025/10/8 8:35:57

声明:本篇博客参考书籍《计算机操作系统》(西安电子科技大学出版社)

文章目录

  • 一、最佳页面置换算法
    • 1、基本知识
    • 2、算法思想
  • 二、先进先出(FIFO)页面置换算法
    • 1、基本知识
    • 2、算法思想
  • 三、最近最久未使用(LRU)页面置换算法
    • 1、基本知识
    • 2、算法思想
    • 3、硬件支持
  • 四、最少使用(LFU)页面置换算法
    • 1、基本知识
    • 2、算法思想
  • 五、Clock页面置换算法
    • 1、基本知识
    • 2、算法思想
    • 3、改进型Clock置换算法
  • 六、页面缓冲(PBA)算法
    • 1、基本知识
    • 2、算法思想


首先说说影响页面换进换出的效率的几个因素:
(1)页面置换算法。该因素是影响页面换进换出效率的重要因素。一个好的页面置换算法可以使进程在运行过程中具有较低的缺页率,从而减少页面换进换出的频率。
(2)写回磁盘的频率。对于已经被修改的页面,换出时,需要写入到磁盘,也就是I/O操作。如果一个被修改的页面被换出后,系统暂时不将其写回到磁盘,而是挂在已经修改的换出页面的链表上。仅当被换出页面的数目达到一定值时,再将它们一起写入到磁盘中。显著的减少了磁盘I/O操作。
(3)读入内存的频率。设置了已修改换出页面链表后,在该链表上有一批换出且待写回磁盘的页面,如果有进程在这些页面被写回磁盘前再次需要访问该页面,那么可以直接从已修改的链表上获取该页面。可以减少从磁盘读取页面到内存的频率。

一、最佳页面置换算法

1、基本知识

最佳页面置换算法是一种理想化的页面置换算法,具有最好的性能,但是实际上没办法实现,其他页面置换算法的好坏,通常以最佳页面置换算法为比较标准。

2、算法思想

该算法选择的被淘汰的页是以后永不使用或者是在最长未来时间内不再被访问的页面,故最佳置换算法保证了最低的缺页率。但是由于人们目前无法预知一个进程在内存中的哪个页面是未来最长时间内不再被访问的,所以该算法到目前为止还只是一个理论算法,没有被实现。下面用举例说明该算法。
假设系统为某个进程分配了4个物理块,并且该进程的页面的引用顺序如下:
1 ,0,2,3,4,3,2,1,4,5,3,4,0 …
则各时刻页面被装入内存的情况如下:
在这里插入图片描述
当装入1,0,2之后,调用页面3时会发生缺页中断,需要将一个页面置换出去,将页面3置换进来,对于最佳置换算法,发现对于页面1,0,2来说,页面0是未来最久未使用到的页面,所以将页面0置换出去,将页面3置换进来。
当调用页面4时会发生页面中断,需要将一个页面置换出去,将页面4置换进来,对于最佳置换算法,发现对于页面1,3,2来说,页面1是未来最久未使用到的页面,所以将页面1置换出去,将页面4置换进来
. . . . .一直这样进行着页面置换,这就是最佳页面置换算法。由图可看出,画出来的部分进行了4次页面置换。

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

1、基本知识

先进先出置换算法是最早出现的算法,该算法实现简单,只需要将一个进程已调入内存的页面按照先后次序连接成一个队列,并且设置成一个指针,称为替换指针,总是指向该队列的头,即指向该进程已调入内存的页面中,最先调入的页面(即在内存中待的时间最长的页面)。
该算法的性能比较差,因为它所依据的条件是各个页面在内存中驻留的时间的长短,而页面调入的先后并不能反应页面的使用情况。

2、算法思想

思想为总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面淘汰。
以最佳置换算法中的页面和引用顺序举例:
在这里插入图片描述
当页面1,0,2装入内存后,调用页面3时,会发生页面中断,对于先进先出页面置换算法来说,由于1,0,2三个页面,页面1在内存中驻留时间最长,所以将页面1置换出去,将页面3置换进来。
当需要调用页面4时,会发生页面中断,由于页面3,0,2中页面0在内存中驻留时间最长,所以将页面0置换出去,将页面4置换进来。
. . . . . . 一直这样页面置换,总是将在内存中驻留时间最长的页面置换出去。从画出的图中可以看出进行了6次页面置换

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

1、基本知识

最近最久未使用页面置换算法是根据页面调入内存后的使用情况而做出决策的。由于无法预测页面未来的使用情况,所以只能根据页面最近的使用情况作为未来的使用情况的近似。

2、算法思想

最近最久未使用(LRU)页面置换算法是选择最近最久未使用的页面给予淘汰,该算法赋予每一个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面给予淘汰。
在这里插入图片描述
当第一次需要引用页面3时,会发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面1,0,2,页面1最近最久未使用,所以将页面1置换出,将页面3置换进内存。
当第一次引用页面4时,会发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面3,0,2,页面0最近最久未使用,所以将页面0置换出,将页面4置换进内存。
对于内存中驻留页面是3,4,2来说,需要引用页面1,发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面3,4,2,页面4最近最久未使用,所以将页面4置换出,将页面1置换进内存。
. . . . . . 按照最近最久未使用规则一直这样置换下去。
最近最久未使用置换算法是根据过去的使用情况来决定被置换出去的页,而最佳置换算法是根据未来的使用情况来决定被置换出去的页。也可以说最近最久未使用置换算法试图希望通过过去的页面使用情况来近似接近于未来页面的使用情况,而接近于最佳置换算法。但是这只是一种希望,因为页面过去的使用情况和未来的使用情况之间没有必然的联系。

3、硬件支持

为了了解一个进程在内存中的哪一个页面是最近最久未使用的,需要寄存器或者栈这两类硬件之一支持。
(1)移位寄存器
可以为在内存中的每个页面配置一个移位寄存器,假设该寄存器有n个位,每个位由R表示,最低位由R0表示,最高位由R(n-1)表示。
当进程访问某个物理块时,将相应的寄存器的位R(n-1)置为1,定时信号将每隔一定时间(比如100ms)将寄存器右移一位(相当于数值以>>1的方式缩小),也就是越久未使用,该页面对应的寄存器的值越小(除非该寄存器的值已经为0了),那么值最小的移位寄存器对应的页面就是最近最久未使用的页面。
(2)栈
可以利用一个特殊的栈保存一个进程被调入内存的页面的页面号。当一个页面被访问时,将该页面从栈中移出,将该页面重新压入栈中。因此栈顶保存的总是最近被访问的页面的页面号,而栈底就是最近最久未使用的页面号。

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

1、基本知识

使用最少使用(LFU)页面置换算法时,应该在内存中为每一个页面设置一个移位寄存器,用来记录被访问的频率。最少使用页面置换算法,顾名思义,选择使用频率最少的页面置换出去。

2、算法思想

思想即选择最近最少使用的页面淘汰。
由于存储器具有较高的访问速度,例如100ns,在1ms内可能对一个页面访问成千上万次,所以,只能采用较大的时间间隔来记录对存储器某页的访问,在最少使用置换算法中也使用了移位寄存器。
当某页被访问时,将该移位寄存器的最高位置为1,隔一定时间,将移位寄存器的值右移一位,故寄存器各个位值相加,值越小,说明该移位寄存器对应的页面在最近一段时间使用的次数最少。
这种算法并不能真正反应页面的使用情况,因为在每一个时间间隔内,只是用寄存器的一个位来记录该页在该间隔被使用了,但是在该时间间隔内,页面被使用1次和被使用10000次完全是等效的。

五、Clock页面置换算法

1、基本知识

最近最久未使用(LRU)算法是比较常见的页面置换算法,但是由于LRU置换算法需要较多的硬件支持,所以使用LRU算法的成本较高,所以在实际应用中大多采用LRU的近似算法,Clock就是其中一个用的较多的LRU近似算法。

2、算法思想

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

3、改进型Clock置换算法

当一个页面换出时,如果该页面已经被修改,那么需要将这个页面重新写回到磁盘上,但是如果该页面没有被修改,那么不必将它拷回到磁盘。所以对于修改过的页面来说,没有修改的页面的换出时付出的代价要更小。所以在改进型Clock置换算法中在考虑页面的使用情况之外,又考虑了页面置换代价,即是否被修改了。所以每个页面有两个标志位,分别为访问为A和修改位M,可以组合成以下四种情况:
(1)(A = 0, M = 0):表示该页最近既没有被访问也没有被修改,是最佳淘汰页。
(2)(A = 0, M = 1):表示该页最近没有被访问,但是被修改了,并不是很好的淘汰页。
(3)(A = 1, M = 0):表示该页最近被访问了,但是没有被修改,该页有可能会被再次访问。
(4)(A = 1, M = 1):表示该页最近既被访问又被修改,该页有可能被再次访问。
改进型Clock置换算法寻找淘汰页时,执行过程可以分为以下三步:
(1)从指针所指示的当前位置开始,扫描循环队列,寻找A = 0且M = 0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不修改访问位A。
(2)如果第一步失败,即查找一轮后未遇到第一类页面,则开始第二轮扫描,寻找A = 0且M = 1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置为0。
(3)如果第二步也失败,即第二类页面也没有找到,则将指针返回到开始位置,并且将所有的访问位都置为0,然后重复第一步,即寻找A=0且M=0的页面,如果仍然失败,必要时再重复第二步,寻找A=0且M=1的第二类页面,此时就一定能找到被淘汰的页。
该算法与普通Clock置换算法相比,可以减少磁盘I/O操作次数。实现该算法的本身的开销将增加。

六、页面缓冲(PBA)算法

1、基本知识

页面缓冲算法有以下两个特点:
(1)显著的降低了页面换进换出的频率,使磁盘I/O操作次数大为减少。
(2)由于磁盘I/O操作次数大为减少,使得页面换进换出的效率减少,所以使其可以采用较为简单的页面置换算法,比如先进先出页面置换算法。

2、算法思想

该算法主要由两类链表支撑,空闲页面链表和修改页面链表。页面缓冲算法主要是将换出的页面暂时不写回到磁盘中,而是将页面挂到相应的链表上。其一减少磁盘I/O操作次数,其二可以减少读入内存的频率。
(1)空闲页面链表
该链表是一个空闲物理块链表。是系统掌握的空闲物理块,用于分配给频繁发生缺页中断的进程,以降低该进程的缺页率。当这样的进程需要读入一个页面时,便可利用空闲物理块来装入该页。
当有一个未被修改的页面要换出时,实际上并不将它换回到外村,而是把它们所在的物理块挂在空闲链表的末尾。这些挂在空闲链表中的物理块是有数据的,如果以后某个进程需要访问这些页面时,可以直接从空闲链表中取下,免除了从磁盘读入数据的操作,减少了页面换进的开销。其实也减少了页面换出的开销,因为这个换出页面到目前为止都没有写回到磁盘。
(2)已修改页面的链表
该链表是由已修改的页面所形成的链表。设置该链表的目的是减少修改页面换出的次数。当进程需要将一个已经修改的页面换出时,系统并不立即将它换出到磁盘上,而是将它所在的物理块挂在修改页面链表的末尾。
当已修改页面的链表上的页面个数达到一定程度时,会一一起将这些页面写回到磁盘。如果这些被换出的页面在写回磁盘之前,有进程需要访问其中的页面,那么可以直接从已修改页面链表上获取该页面。所以可见,减少了磁盘I/O操作,并且减少了内存写入频率。


http://chatgpt.dhexx.cn/article/eRAMXc75.shtml

相关文章

页面置换算法

文章目录 一、什么是页面置换算法?二、常用的页面置换算法1. FIFO(先进先出算法)2. OPT(最佳置换算法)3. LRU(最近最少使用算法)4. Clock(时钟置换算法)5. LFU(最不常用算法)6. MFU(最常使用算法) 三、程序设计 一、什么是页面置换算法? 进程运行时&…

一文讲懂页面置换算法,带例题详解

目录 ​什么是页面置换算法? ​缺页中断次数和页面置换次数 ​啥子是缺页? ​啥子是中断? ​啥子是缺页中断? ​缺页中断次数 ​最佳置换算法OPT和先进先出置换算法FIFO ​最佳置换算法OPT ​算法思想 ​算法优点 ​算…

回声状态网络ESN(原理)

回声状态网络ESN(原理) 结构特点 网络有3层:输入层 - 隐含层 - 输出层

基于回声状态网络(ESN)的时间序列预测

基于回声状态网络(ESN)的时间序列预测 matlab代码 ID:69100644585791395

【回声状态网络ESN预测】基于粒子群优化回声状态网络ESN实现数据预测附matlab代码

1 简介 由于结构简单,收敛速度快等优点,回声状态网络(Echo State Network, ESN)已被广泛的用于时间序列的预测.针对回声状态网络中随机生成权值矩阵带来的不适用于特定时间序列的问题,本文提出利用粒子群优化算法来优化回声状态网络部分随机权值..实验结果表明,本文提出的方法…

第二十九课.回声状态网络ESN

目录 Echo State NetworkESN的训练与预测关于ESN工作原理的理解 基于Numpy的ESN Echo State Network ESN的训练与预测 回声状态网络(Echo State Network)又称为库计算,即Reservoir Computing,被视为是一种神经网络的扩展。 Res…

【无人机】回波状态网络(ESN)在固定翼无人机非线性控制中的应用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【MLPs+ESN】利用多层感知机MLPs对经典ESN(回声状态网络)的输出权值计算进行优化的MATLAB仿真

单独的ESN仿真: ESN的运行结果如下所示: 这个部分的误差为: 0.0435 ESN部分就不多做介绍了,你应该了解的,下面我们对ESN和BP改进和极限学习改进分别进行修改和说明,并进行仿真。 ESNBP的仿真: …

回声状态网络(ESN)实现手写数字识别(MNIST)

文章目录 回声状态网络状态方程输出方程分类问题 加载 MNIST 数据集标签 onehot 编码转化成时间序列训练 ESN储备池状态的时空分布测试结果 回声状态网络 状态方程 输出方程 分类问题 加载 MNIST 数据集 from torchvision.datasets import mnist train_set mnist.MNIST(./da…

回声状态网络(ESN)的公式推导及代码实现

1. ESN的任务 给定一段信号: u ( 0 ) , u ( 1 ) , ⋅ ⋅ ⋅ , u ( N t − 1 ) u(0),u(1),,u(N_t-1) u(0),u(1),⋅⋅⋅,u(Nt​−1) 和目标值: v (…

matlab 回声状态网络ESN的时间序列预测

1、内容简介 略 537-可以交流、咨询、答疑 2、内容说明 ESN是Jaeger于2001年提出一种新型递归神经网络,ESN一经提出便成为学术界的热点,并被大量地应用到各种不同的领域中,包括动态模式分类、机器人控制、对象跟踪核运动目标检测、事件监测…

手机esn不可用怎么解决_什么是ESN,为什么我不担心它是否干净?

手机esn不可用怎么解决 If you’re in the market for a cellphone, especially a used one, you’ll hear a lot of talk about ESNs with an emphasis on whether or not the phone is “clean”. What exactly does acronym stand for and what does it mean if the phone i…

回声状态网络(ESN)教程

回声状态网络(ESN)教程 基础概念 回声状态网络(Echo State Network)提出于2001年,曾经是研究的热点,但近年来随着RNN,LSTM与其它一些变种的网络的出现,现在研究比较少了,但是其在时间序列预测上还有着很不错的应用。…

Deep Learning之带你详细了解回声状态网络(ESN)

Abstract 首先呢写本篇博客的灵感来源于我在学习RNN(循环神经网络)时对于如何解决其循环结构,参数共享带来的长期依赖问题,我将在(一)中简要叙述RNN引出本文主角ESN(回声状态网络)。…

回声状态网络(echo state network,ESN)概述

一、提出 循环神经网络(Recurrent Neural Networks,RNNs)的训练是通过反向对权值直接优化来实现的,这种方式容易产生两个问题:收敛速度慢和易陷入局部最优。回声状态网络( echo state network,ESN) 由 Jaeger于2001年…

回声状态网络(ESN)原理详解(附源码实现)

最近在看回声状态网络(Echo State Network)的内容,因为很少搜到关于Echo State Network的快速入门讲解,所以打算写一下ESN的基本原理。 1、概念 回声状态网络作为一种新型的递归神经网络(如上图),也由输入层、隐藏层(即储备池)、输出层组成…

安装 Vue-devtools拓展程序

Chrome安装 Vue-devtools拓展程序 一、Vue-devtools简介二、安装1、打开终端下载仓库代码2、下载依赖node_modules3、编译打包4、修改manifest.json文件5、在Chrome浏览器中加载已解压的扩展程序 三、安装遇到的坑build 问题 四、换种方式下载1、安装命令2、修改manifest.json文…

Vue DevTools 使用指南 - 如何安装和使用 Vue DevTools 调试 Vue 组件

本文首发:《Vue DevTools 使用指南 - 如何安装和使用 Vue DevTools 调试 Vue 组件》 Vue Devtools 是 Vue 官方发布的调试浏览器插件,可以安装在 Chrome 和 Firefox 等浏览器上,直接内嵌在开发者工具中,使用体验流畅。Vue Devtoo…

Chrome DevTools 使用详解

【转自:https://segmentfault.com/a/1190000007877846】 基本够调试用了!有这么详细文章,真实很感谢作者! 写在前面:Chrome DevTools 系列文章正在紧张地整理当中,目前正在整理 DevTools 的第一部分&#…

Vue的devtools工具打包

Vue的devtools工具打包 最近想升级一下Vue的开发工具,因为升级到vue3后一直使用的是Vue.js devtools 6.0.0 beta 21。使用的是测试版,想到正式Vue3发布这么久了打算更新一下,用上最新的正式版(保持最新——来自程序员的执念&…