文章目录

  • 6.1 页面置换算法概念
  • 6.2 局部页面置换算法
    • 6.2.1 最优置换算法(OPT)
    • 6.2.2 先进先出算法(FIFO)
    • 6.2.3 最近最久未使用算法(LRU)
    • 6.2.4 时钟算法(Clock)
    • 6.2.5 最不常用算法(LFU)
    • 6.2.6 Belady现象
    • 6.2.7 几种算法的对比
  • 6.3 全局页面置换算法
    • 6.3.1 背景
    • 6.3.2 工作集置换算法
    • 6.3.3 缺页率置换算法

6.1 页面置换算法概念

本节强烈建议看视频:课程第九讲。其中给出了大量的动画示例,有助于理解。
另外,我认为需要足量的练习。留待下一阶段

处理缺页异常(需要调入新页面而内存已满)时,用于选择被置换的物理页面的算法。

设计目标:减少调入调出次数,寻找未来不再访问或短期内不访问的页面调出

在给出页面置换的结构之前,我们有一类特例,即不被替换的页面:
页面锁定(frame locking)

  • 操作系统的关键部分,描述必须常驻的逻辑页面,这部分页面对响应速度有要求
  • 利用页表中的锁定标志位来实现

评价方法:页面轨迹统计,模拟页面置换行为,记录缺页次数

页面置换算法分类:

  • 局部页面置换算法(选择范围仅限当前进程占用的物理页面)

    • 最优算法:全知全能,量身定制
    • 先进先出算法:先调入的页先调出
    • 最近最久未使用算法:一个统计方法,实现较麻烦
    • 时钟算法,最不常用算法
  • 全局置换算法(选择防卫是所有可换出的物理页面)
    • 工作集算法
    • 缺页率算法

6.2 局部页面置换算法

6.2.1 最优置换算法(OPT)

置换在未来的最长时间不访问的页面。

缺页时计算内存中每个逻辑页面的下一次访问时间。全知全能,缺页次数最少,是理想情况。

  • 实际系统中无法实现
  • 无法预制每个页面在下次访问前的等待时间
  • 但具有理论意义:用于评定置换算法的性能

6.2.2 先进先出算法(FIFO)

由于上述以未来情况为依据的算法不可实现,所以我们要使用如下的基于过去情况的算法。

选择在内存中驻留时间最长的页面进行置换,即FIFO算法。

具体实现过程通过维护一个记录所有位于内存中的逻辑页面队列(双向链表)实现。

  • 实现简单

  • 性能较差,调出的页面可能是经常访问的

  • Belady现象:进程分配物理页面数增加时,缺页并不一定减少,例子(内存中能装4页,但实际有5页,最优算法为2次):

  • 很少单独使用

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

Least Recently Used(LRU)
选择最长时间没有被引用的页面进行置换
局部性原理表明你,如某些页面长时间未被访问,则它们在将来可能会长时间不会访问

缺页时,计算内存中每个逻辑页面的上一次访问时间,排序找最远。

LRU是最优置换算法的一种近似,但由于算法复杂度过大,仍然在实际情况中无法实施。

实际实现可以使用页面链表或者活动页面栈来构建优先队列,从而降低复杂度:

  • 队头:最久未使用的
  • 队尾:刚刚使用过的

当然维护队列维护队列所带来的复杂度也是不可小视的。

6.2.4 时钟算法(Clock)

前面两种算法各有优劣,FIFO考虑得太过简单,导致性能较差,而LRU的核心问题在于统计得过于仔细,所以难以实施。

所以考虑对页面访问的情况进行大致统计。

  • 在页表项中增加访问位,描述页面在过去一段时间中的访问情况。形成环形链表。
  • 缺页时,从指针处开始顺序查找未被访问(LRU因素)的第一个(FIFO因素)页面进行置换。
  • 有环、有指针,所以形象地称为时钟算法。它是LRU和FIFO的折中。

算法描述如下:

页面装入内存
初始化为0
访问页面没有缺页置1缺页循环,从当前指针位置顺序检查环形链表访问位为0:替换退出循环为1:访问位置零继续查找

一个示例如下:

改进的clock算法,

合并写出的延时

6.2.5 最不常用算法(LFU)

每个页面增加访问计数,访问页面时,计数加1;
缺页时置换计数最小的页面。

相比于优先队列来说,附加一个计数器(只是一个成员)的链表是比较好维护的。

问题:

  • 算法开销较大(不论是时间还是空间,标志位数也增加了不少)
  • 开始时频繁使用,但以后不使用(计数定期右移)

6.2.6 Belady现象

采用FIFO等算法时可能出现分配的物理页数增加但缺页次数增加的现象。
比如对于1,2,3,4,1,2,5,1,2,3,4,5这个序列,

  • 如果FIFO队列长为3,缺页次数为9,
  • 如果FIFO队列长为4,缺页次数为10

原因是

  • FIFO算法的置换特征与局部性原理不相符。
  • 与进程访问的动态特征相矛盾。
    被它置换出去的页面并不一定是进程近期不会访问的。

哪些算法没有Belady现象?(了解)

  • LRU没有Belady现象,思考为什么
  • Clock和改进Clock是否有,为什么

6.2.7 几种算法的对比

都是依据时间排序,LRU依据页面最近访问时间排序,FIFO依据页面进入内存的时间排序

LRU需要动态调整,FIFO页面进入时间固定不变

LRU性能较好,但是系统开销较大,FIFO开销较小,但是会发生Belady现象。Clock算法是一种折中。

LRU可以退化成FIFO,比如页面进入内存之后没有被访问,最近访问时间就和最近进入内存的时间同(LRU适合单曲循环,但放电视剧只用FIFO即可)。这时LRU和Clock算法表现也相同

6.3 全局页面置换算法

6.3.1 背景

很多时候,很少量的页面数限制成为算法的瓶颈,比如这个例子:


增加一个物理页面之后,整个置换过程中缺页数量都大大减小。

因而我们思考,可以通过进程之间的物理页面数目的均衡,来改善不同进程的置换算法的表现。

全局置换算法就为进程分配可变数目的物理页面。

  • 进程在不同阶段的内存需求是变化的。
  • 分配给进程的内存也需要在不同阶段也不同。
  • 全局置换算法需要确定分配给进程的物理页面数

CPU利用率与并发进程数相互相互促进、相互制约。

  • 进程数少时,提高并发进程数,可以提高CPU利用率
  • 并发进程导致内存访问增加
  • 并发进程的内存访问会降低访存的局部性特征(各自为政的害处qwq)

6.3.2 工作集置换算法

这也能表现出局部性原理的正确性。

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

工作集置换算法和LRU相似,但是是在访存时将不在工作集内的页面换出。
在缺页时直接补入。

6.3.3 缺页率置换算法

缺页率(page fault rate):
P F R = 缺 页 次 数 / 访 存 次 数 或 1 M T B F PFR = {缺页次数}/{访存次数}\quad或\quad \frac{1}{MTBF} PFR=缺页次数/访存次数或MTBF1​
通过调节常驻集大小,使每个进程的缺页率保持在一个确定的范围内

  • 如果PFR过高,则增加常驻集大小
  • 如果PFR过低,则会降低并发度,使CPU利用率下降

具体实现时:

  • 访存时,设置引用位标志
  • 缺页时,计算MTBF
    • 如果MTBF>T,则置换所有这个区间中未被引用的页
    • 如果MTBF<T,则增加缺失页到常驻集

负载控制

清华向勇《操作系统 》学习笔记6:页面置换算法相关推荐

  1. 操作系统:几种页面置换算法

    1)最优置换算法(OPT)(理想置换算法) 最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基 ...

  2. 操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题

    程序在运行过程中具有阶段性,可能刚开始的时候需要访问的内存很多,之后访问的内存可能会很少.如果操作系统给每个程序分配固定的物理页那么就显得不灵活,有没有办法动态地给程序分配页帧呢,在需要访问很多内存的 ...

  3. 操作系统中的全局页面置换算法

    1 全局页面置换算法 以上页面置换算法都是针对单一的应用程序的页面置换算法, 且有一个前提, 就是给单一应用程序分配的物理页帧数量是一定的. 现实中, 给一个应用程序分配的物理页帧数, 该程序产生的缺 ...

  4. 【操作系统】FIFO先进先出页面置换算法(C语言实现)

    FIFO页面置换算法,计算缺页率,文末附代码,及例题解析 1.内容 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系 ...

  5. 南京邮电大学操作系统——实验三:页面置换算法

    文章目录 实验内容 实验源码 实验结果 结果分析 实验内容 理解请求分页式虚拟存储管理方案中的页面置换算法,理解缺页中断率的概念并可以进行正确地统计.具体要求如下: 使用数组存储一组页面请求,页面请求 ...

  6. 【操作系统实验】FIFO页面置换算法

    一.实验描述 二.实验程序 #include<stdio.h> void main() {int i,j,k=0;char cc[13];//Y表示发生缺页中断,N表示未发生int a[1 ...

  7. lru页面置换算法_C|内存管理|从LRU王国到NRU王国

    缓存机制中,当发生页冲突时,操作系统将会调用页面置换算法进行淘汰,而我们这篇文章中重点介绍随机访问情况下效率较高的两种算法. LRU:Least Recently Used NRU:Not Recen ...

  8. 操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记)

    操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记) 题目要求 输入要求 输出要求 编程平台 实验成果 开始模拟 错误输入 退出程序 代码实现 抽象数据类型定义 指令地址流生成 指令地址流到页 ...

  9. 请求页式存储管理中页面置换算法的模拟设计_操作系统-存储管理与文件管理-笔记...

    存储管理 一.页式存储 将各进程的虚拟空间划分成若干个长度相等的页,页式管理把内存空间按页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地 ...

最新文章

  1. jquery对象PHP转换,jquery对象和DOM对象如何相互转换?
  2. Android中的帧布局
  3. 通过 Route 配置的例子,学习SAP Cloud for Customer 的scoping操作
  4. 前端学习(970):fastclick插件使用
  5. 网页嵌入pdf、在线预览pdf工具及插件(转)
  6. 【Python】Python3.7.3 - Python内置函数
  7. 特斯拉Model 3本周平均日产约900辆 7000辆周产量有望
  8. excel填充序列_零基础、初学者必须掌握的10个Excel技巧,办公必备!
  9. 一揽子修改win10的IP地址
  10. 京东移动端URL自动跳转PC端URL插件
  11. Windows找不到合适的打印机驱动程序
  12. git 清除用户名密码
  13. h3c模拟器网络初级综合实验
  14. 【赛题解读】2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别
  15. php unlink没有权限,php中删除文件用unlink函数权限判断_PHP教程
  16. python麦克劳林级数展开
  17. 基于CNN 对车牌数字进行识别,(二)
  18. 微信公众号页面分享、禁止分享和显示右上角菜单
  19. NORDIC蓝牙芯片NRF51系列蓝牙4.0NRF51822/51802/51422/51824
  20. php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02

热门文章

  1. java调用cmd执行maven命令
  2. python二级证书含金量排名_设备点检一二级技师证书含金量高不高
  3. 我把全国旅游数据用Python爬下来后发现,这个地方才是真正的旅游胜地
  4. HBuilderX快捷键设置
  5. bazel 安装和使用
  6. 敏捷,路在何方?最新完整敏捷状态报告(专业点评版)出炉
  7. IDEA Swagger 配置
  8. 软考:招标投标法(1)2-3分
  9. 10种排毒养颜家常食物
  10. 上级练习3--制作全国公安机关互联网管理服务平台