操作系统原理——第六章:页面置换算法

article/2025/10/14 19:18:28

文章目录

  • 1. 功能与目标
  • 2. 实验设置与评价方法
  • 3. 局部页面置换算法
    • 3.1 最优页面置换算法(OPT,optimal)
    • 3.2 先进先出算法(FIFO)
    • 3.3 最近最久未使用算法(LRU,Least Recently Used)
    • 3.4 时钟页面置换算法(Clock)
    • 3.5 最不常用算法(LFU,Least Frequently Used)
    • 3.6 Belady现象
    • 3.7 LRU、FIFO和Clock算法
  • 4. 全局页面置换算法
    • 4.1 局部置换算法的问题
    • 4.2 工作集模型
    • 4.3 工作集页置换算法
    • 4.4 缺页率置换算法
    • 4.5 抖动问题

1. 功能与目标

功能:当出现缺页异常,需调入新页面而内存已满时,置换算法选择被置换的物理页面

目标:尽可能减少页面的调入调出次数(即缺页中断次数),把未来不再访问或短期内不访问的页面调出

页面锁定(frame locking):

  1. 描述必须常驻内存的逻辑页面
  2. 操作系统的关键部分
  3. 要求响应速度的代码和数据
  4. 页表中的锁定标志位(lock bit)

2. 实验设置与评价方法

模拟页面置换行为,记录产生缺页的次数
更少的缺页, 更好的性能

3. 局部页面置换算法

3.1 最优页面置换算法(OPT,optimal)

  • 基本思路 : 当一个缺页中断发生时, 对于保存在内存当中的每一个逻辑页面, 计算在它的下一次访问之前, 还需等待多长时间, 从中选择等待时间最长的那个, 作为被置换的页面.

  • 这是一种理想情况, 在实际系统中是无法实现的, 因为操作系统无法知道每一个页面要等待多长时间以后才会再次被访问.

  • 可用作其他算法的性能评价的依据.(在一个模拟器上运行某个程序, 并记录每一次的页面访问情况, 在第二遍运行时即可使用最优算法)

  • 在这里插入图片描述

3.2 先进先出算法(FIFO)

  • 基本思路 : 选择在内存中驻留时间最长的页面淘汰. 具体来说, 系统维护着一个链表, 记录了所有位于内存当中的逻辑页面. 从链表的排列顺序来看, 链首页面的驻留时间最长, 链尾页面的驻留时间最短. 当发生一个缺页中断时, 把链首页面淘汰出去, 并把新的页面添加到链表的末尾.

  • 性能较差, 调出的页面有可能是经常要访问的页面. 并且有 belady现象. FIFO算法很少单独使用.

  • 在这里插入图片描述

3.3 最近最久未使用算法(LRU,Least Recently Used)

  • LRU(Least Recently Used),通过局部性原理反推,以历史推测未来

  • 基本思路 : 当一个缺页中断发生时, 选择最久未使用的那个页面, 并淘汰.

  • 它是对最优页面置换算法的一个近似, 其依据是程序的局部性原理, 即在最近一小段时间(最近几条指令)内, 如果某些页面被频繁地访问, 那么再将来的一小段时间内, 他们还可能会再一次被频繁地访问. 反过来说, 如果过去某些页面长时间未被访问, 那么在将来它们还可能会长时间地得不到访问.

  • LRU算法需要记录各个页面使用时间的先后顺序, 开销比较大.

  • 两种可能的实现方法是 :
    ① 系统维护一个页面链表, 最近刚刚使用过的页面作为首节点, 最久未使用的作为尾结点. 再一次访问内存时, 找出相应的页面, 把它从链表中摘下来, 再移动到链表首. 每次缺页中断发生时, 淘汰链表末尾的页面.
    ② 设置一个活动页面栈, 当访问某页时, 将此页号压入栈顶, 然后, 考察栈内是否有与此页面相同的页号, 若有则抽出. 当需要淘汰一个页面时, 总是选择栈底的页面, 它就是最久未使用的.
    在这里插入图片描述

3.4 时钟页面置换算法(Clock)

  • LRU近似,FIFO改进

  • 基本思路 :
    ① 需要用到页表项的访问位, 当一个页面被装入内存时, 把该位初始化为0. 然后如果这个页面被访问, 则把该位置设为1;
    ② 把各个页面组织成环形链表(类似钟表面), 把指针指向最老的页面(最先进来);
    ③ 当发生一个缺页中断时, 考察指针所指向的最老页面, 若它的访问位为0, 立即淘汰; 若访问位为0, 然后指针往下移动一格. 如此下去, 直到找到被淘汰的页面, 然后把指针移动到下一格.

  • 流程 :
    ① 如果访问页在物理内存中, 访问位置1.
    ② 如果不在物理页, 从指针当前指向的物理页开始, 如果访问位0, 替换当前页, 指针指向下一个物理页; 如果访问位为1, 置零以后访问下一个物理页再进行判断. 如果所有物理页的访问位都被清零了, 又回到了第一次指针所指向的物理页进行替换.
    在这里插入图片描述
    因为考虑到时钟页面置换算法, 有时候会把一些 dirty bit 为1(有过写操作)的页面进行置换, 这样的话, 代价会比较大. 因此, 可以结合访问位和脏位一起来决定应该置换哪一页.

相当于说, 替换的优先级, 没有读写也没写过, 那么直接走, 如果写过或者访问过, 那么给你一次机会, 如果又写过, 又访问过, 那么久给你两次机会.
在这里插入图片描述

3.5 最不常用算法(LFU,Least Frequently Used)

  • 基本思路 : 当一个缺页中断发生时, 选择访问次数最少的那个页面, 并淘汰.

  • 实现方法 : 对每一个页面设置一个访问计数器, 每当一个页面被访问时, 该页面的访问计数器加1. 当发生缺页中断时, 淘汰计数值最小的那个页面.

  • LRU和LFU的对比 : LRU考察的是多久未访问, 时间越短越好. 而LFU考察的是访问的次数和频度, 访问次数越多越好

  • 在这里插入图片描述

3.6 Belady现象

在采用FIFO算法时, 有时会出现分配的物理页面数增加, 缺页率反而提高的异常现象;

出现原因 : FIFO算法的置换特征与进程访问内存的动态特征是矛盾的, 与置换算法的目标是不一致的(即替换较少使用的页面), 因此, 被他置换出去的页面不一定是进程不会访问的.
在这里插入图片描述
在这里插入图片描述

3.7 LRU、FIFO和Clock算法

在这里插入图片描述
在这里插入图片描述

4. 全局页面置换算法

4.1 局部置换算法的问题

程序运行的过程中,需要物理页帧的数量不是固定的

4.2 工作集模型

工作集 : 一个进程当前正在使用的逻辑页面集合.
可以使用一个二元函数 W(t, delta) 来表示 :
t 是当前的执行时刻;
delta 称为工作集窗口, 即一个定长的页面访问的时间窗口;
W(t, delta) = 在当前时刻 t 之前的 delta 时间窗口当中的所有页面所组成的集合(随着 t 的变化, 该集合也在不断的变化)
|W(t, delta)| 是工作集的大小, 即逻辑页的数量.
工作集大小的变化 : 进程开始执行后, 随着访问新页面逐步建立较稳定的工作集. 当内存访问的局部性区域的位置大致稳定时, 工作集大小也大致稳定; 局部性区域的位置改变时, 工作集快速扩张和收缩过渡到下一个稳定值.
在这里插入图片描述
在这里插入图片描述

常驻集是指在当前时刻, 进程实际驻留在内存当中的页面集合.

  • 工作集是进程在运行过程中固有的性质, 而常驻集取决于系统分配给进程的物理页面数目, 以及所采用的页面置换算法;
  • 如果一个进程的整个工作集都在内存当中, 即常驻集 包含 工作集, 那么进程将很顺利地运行, 而不会造成太多的缺页中断(直到工作集发生剧烈变动, 从而过渡到另一个状态);
  • 当进程常驻集的大小达到某个数目之后, 再给它分配更多的物理页面, 缺页率也不会明显下降.

4.3 工作集页置换算法

当工作集窗口在滑动过程中, 如果页面不在集合中, 那么就会直接丢失这个不在窗口中页面, 而不会等待缺页中断再丢弃.
在这里插入图片描述

4.4 缺页率置换算法

可变分配策略 : 常驻集大小可变. 例如 : 每个进程在刚开始运行的时候, 先根据程序大小给它分配一定数目的物理页面, 然后在进程运行过程中, 再动态地调整常驻集的大小.

  • 可采用全局页面置换的方式, 当发生一个缺页中断时, 被置换的页面可以是在其他进程当中, 各个并发进程竞争地使用物理页面.
  • 优缺点 : 性能较好, 但增加了系统开销.
  • 具体实现 : 可以使用缺页率算法来动态调整常驻集的大小.

缺页率 : 表示 “缺页次数 / 内存访问次数”

影响因素 : 页面置换算法, 分配给进程的物理页面数目, 页面本身的大小, 程序的编写方法.
在这里插入图片描述

  1. 对页的调整时机不一样
  2. 都是动态调整内存中页的数量

4.5 抖动问题

  • 如果分配给一个进程的物理页面太少, 不能包含整个的工作集, 即常驻集 属于 工作集, 那么进程将会造成很多的缺页中断, 需要频繁的在内存与外存之间替换页面, 从而使进程的运行速度变得很慢, 我们把这种状态称为 “抖动”.
  • 产生抖动的原因 : 随着驻留内存的进程数目增加, 分配给每个进程的物理页面数不断就减小, 缺页率不断上升. 所以OS要选择一个适当的进程数目和进程需要的帧数, 以便在并发水平和缺页率之间达到一个平衡.
    -在这里插入图片描述

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

相关文章

操作系统原理模拟实验(基于C/C++模拟处理机调度、存储管理和文件系统)

目录 引言一、处理机调度模拟1、下载链接2、目的与要求3、截图示例 二、存储管理模拟动态分区分配1、下载链接2、目的与要求3、截图示例 分页存储地址转换1、下载链接2、目的与要求3、截图示例 三、文件系统模拟1、下载链接2、目的与要求3、截图示例 引言 包含多个实验的完整源…

操作系统原理总结

转载:https://blog.csdn.net/yanglingwell/article/details/53745758 操作系统原理总结 made by 杨领well (yanglingwellsina.com) 一、基础知识点 1. 操作系统的资源管理技术 资源管理解决物理资源数量不足和合理分配资源这两个问题。 操作系统虚拟机为用户提供…

操作系统原理:覆盖技术、交换技术、虚拟内存概要

随着时间的推移,程序不断地更新,规模不断增长,运行的时候可能会发现内存会越来越不够用。所以希望一个容量大,更快,更便宜,数据不易丢失的存储器。 首先想到的就是硬盘,所以在硬盘的基础上建立了…

操作系统原理、实现与实践课后习题参考答案(已完结)

习题二–系统接口 通向操作系统内核的大门 1.调用fork()的父子进程执行“同样”的代码,如何理解”同样“? 答: fork()函数为系统调用,用于创建进程。创建的进程与原来进程几乎完全相同. 一个进程调用fork(&#xff09…

操作系统原理1-3章答案 黑新宏 胡元义主编

第1章引论 一、单项选择题 1.A 2. C 3. D 4. A 5.A 6. C 7. C 8. D 9. C 10.C 11. D 12.A 13.C 14.D 15.D 16.C 17.D 18.C 19.B 20.C 21.D 22.D 23.C 24.B 25.C 26.B 二、判断题 1.错误 2. 错误 3.错误 4. 错误 5.错误 6.错误 7.正确 8.错误 9.错误 10.错误 11.正确 12.错误 1…

操作系统原理:文件系统、磁盘调度

目录 一、相关概念 二、文件的分配 三、空闲空间列表 四、多磁盘管理-RAID 五、磁盘调度 一、相关概念 文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一…

Linux的操作系统原理详解

Linux的操作系统原理详解 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿/// 1.操作系统基本概念 操作系统是一个基本程序的集合,在这个集合中,最重要的程序称为内核(Kernel&a…

操作系统原理

操作系统原理 第一章第二章第三章第四章第五章第六章总结 第一章 计算机系统组成部分: 硬件 应用程序 操作系统 用户操作系统的作用: 1.操作系统是管理计算机硬件的程序,为应用程序提供基础并充当计算机用户和计算机硬件的中介。 2.操作系统…

操作系统基本原理

操作系统的类型与结构 操作系统是计算机系统中最基本的系统软件,它既管理计算机系统的软、硬件资源,又控制程序的执行。操作系统的基本类型有:批处理操作系统、分时操作系统和实时操作系统。从资源管理的角度看,操作系统主要是对处…

操作系统原理(概述)

1.操作系统的工作: (1)程序的执行:负责启动每个程序,以及结束程序的工作。 (2)完成与硬件有关的工作:实现代码中包含存储器的物理地址、对设备接口寄存器和设备接口缓冲区的读写等…

Unity UGUi之Panel

Unity UGUI之Panel制作滑块 新建一个Panel和一个Image,image放在Panel下做子物体。 给Panel添加 Scroll Rect 和 Mask 组件, Mask组件是用来隐藏image超出Panel的区域。 然后将image拖拽到Scroll Rect组件下的Content属性上。 Horizontal是水平滑动,…

winform 设置panel边框

var panel1 new Panel(); var old panel1.Margin; panel1.Margin new Padding(old.Left, -50, old.Right, old.Bottom);

EasyUI中Panel面板的简单使用

场景 效果 属性 名称类型描述默认值idstring面板(panel)的 id 属性。nulltitlestring显示在面板(panel)头部的标题文字。nulliconClsstring在面板(panel)里显示一个 16x16 图标的 CSS class。nullwidthnu…

[C# WinForm设计]Panel布局及TabControl增加关闭按钮和Treeview导航 源码

前段时间因工作需要做一个类似进销存的系统,这里要用到基于C/S架构的WinForm界面,为了给我一样的菜鸟多一个参考,现将过程及关键界面的实现代码贴在后面,供参考!老鸟飘过~~ 一、实现效果 演示 namespace TabTest {part…

C#Winform中如何将窗体显示在panel中

在窗体中我们有时候做美观就需要将一个窗体显示在panel或SplitContainer里的panel中如何实现呢? 代码: public void Showform(Form form) //定义方法 { //清除panel里面的其他窗体 this.splitContainer1.Panel2:要显示的panel this.splitCont…

从零开始学习CANoe(四)—— 设计panel

相关文章 从零开始学习CANoe(一)—— 新建工程从零开始学习CANoe(二)—— CANdb 创建 dbc文件从零开始学习CANoe(三)—— 系统变量的创建和使用从零开始学习CANoe(四)—— 设计pane…

winform无边框在panel上拖动窗口位置,改变窗口大小

将窗体的FormBorderStyles属性设置为None 窗体上放一个新的panel,设置Dock属性为Fill 创建变量 private bool isMouseDown false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction MouseDirection.None;//表示拖动的方向&#x…

C# Winform Panel 内控件大小不随Panel大小改变设置

(1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变。

Panel控件

今天小编来给大家介绍一下panel控件; 首先来看一下panel控件是什么? 是什么: Panel 控件提供了一种用于组织控件的分组机制。Panel 控件可被递归嵌套在 Form 控件(Panel 控件最外面的容器)中。面板呈现它本身包含的控件。 面板上…

UI的Panel面板

1.Panel panel控件又叫面板,该面板实际就是一个容器,在其上可放置其他UI控件 当移动该面板时,放在其中的UI控件会随着移动,这样更加合理与方便地移动与处理一组控件 当面板被创建时,会默认包含一个Image(Script) Sour…