清华向勇《操作系统 》学习笔记6:页面置换算法
文章目录
- 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)最优置换算法(OPT)(理想置换算法) 最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基 ...
- 操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题
程序在运行过程中具有阶段性,可能刚开始的时候需要访问的内存很多,之后访问的内存可能会很少.如果操作系统给每个程序分配固定的物理页那么就显得不灵活,有没有办法动态地给程序分配页帧呢,在需要访问很多内存的 ...
- 操作系统中的全局页面置换算法
1 全局页面置换算法 以上页面置换算法都是针对单一的应用程序的页面置换算法, 且有一个前提, 就是给单一应用程序分配的物理页帧数量是一定的. 现实中, 给一个应用程序分配的物理页帧数, 该程序产生的缺 ...
- 【操作系统】FIFO先进先出页面置换算法(C语言实现)
FIFO页面置换算法,计算缺页率,文末附代码,及例题解析 1.内容 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系 ...
- 南京邮电大学操作系统——实验三:页面置换算法
文章目录 实验内容 实验源码 实验结果 结果分析 实验内容 理解请求分页式虚拟存储管理方案中的页面置换算法,理解缺页中断率的概念并可以进行正确地统计.具体要求如下: 使用数组存储一组页面请求,页面请求 ...
- 【操作系统实验】FIFO页面置换算法
一.实验描述 二.实验程序 #include<stdio.h> void main() {int i,j,k=0;char cc[13];//Y表示发生缺页中断,N表示未发生int a[1 ...
- lru页面置换算法_C|内存管理|从LRU王国到NRU王国
缓存机制中,当发生页冲突时,操作系统将会调用页面置换算法进行淘汰,而我们这篇文章中重点介绍随机访问情况下效率较高的两种算法. LRU:Least Recently Used NRU:Not Recen ...
- 操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记)
操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记) 题目要求 输入要求 输出要求 编程平台 实验成果 开始模拟 错误输入 退出程序 代码实现 抽象数据类型定义 指令地址流生成 指令地址流到页 ...
- 请求页式存储管理中页面置换算法的模拟设计_操作系统-存储管理与文件管理-笔记...
存储管理 一.页式存储 将各进程的虚拟空间划分成若干个长度相等的页,页式管理把内存空间按页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地 ...
最新文章
- jquery对象PHP转换,jquery对象和DOM对象如何相互转换?
- Android中的帧布局
- 通过 Route 配置的例子,学习SAP Cloud for Customer 的scoping操作
- 前端学习(970):fastclick插件使用
- 网页嵌入pdf、在线预览pdf工具及插件(转)
- 【Python】Python3.7.3 - Python内置函数
- 特斯拉Model 3本周平均日产约900辆 7000辆周产量有望
- excel填充序列_零基础、初学者必须掌握的10个Excel技巧,办公必备!
- 一揽子修改win10的IP地址
- 京东移动端URL自动跳转PC端URL插件
- Windows找不到合适的打印机驱动程序
- git 清除用户名密码
- h3c模拟器网络初级综合实验
- 【赛题解读】2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别
- php unlink没有权限,php中删除文件用unlink函数权限判断_PHP教程
- python麦克劳林级数展开
- 基于CNN 对车牌数字进行识别,(二)
- 微信公众号页面分享、禁止分享和显示右上角菜单
- NORDIC蓝牙芯片NRF51系列蓝牙4.0NRF51822/51802/51422/51824
- php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02