🎉作者简介:👓 博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢 c + + , g o , p y t h o n , 目前熟悉 c + + , g o 语言,数据库,网络编程,了解分布式等相关内容 \textcolor{orange}{博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢c++,go,python,目前熟悉c++,go语言,数据库,网络编程,了解分布式等相关内容} 博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢c++,go,python,目前熟悉c++,go语言,数据库,网络编程,了解分布式等相关内容
📃 个人主页: \textcolor{gray}{个人主页:} 个人主页: 小呆鸟_coding
🔎 支持 : \textcolor{gray}{支持:} 支持: 如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦 \textcolor{green}{如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦} 如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦👍 就是给予我最大的支持! \textcolor{green}{就是给予我最大的支持!} 就是给予我最大的支持!🎁
💛本文摘要💛
本专栏主要是讲解操作系统的相关知识 本文主要讲解 虚拟内存管理技术页面置换算法
清华操作系统系列文章:可面试可复习
1. 操作系统—概述
2. 操作系统—中断、异常、系统调用
3. 操作系统—物理内存管理
4. 操作系统—非连续内存分配
5. 虚拟内存管理
6. 操作系统—虚拟内存管理技术页面置换算法
7. 进程管理
8. 调度算法
9. 同步与互斥
10. 信号量和管程
11. 死锁和进程通信
12. 文件系统管理
页面置换算法
局部页面置换算法
全局页面置换算法
功能
目标
尽可能地减少页面的换进换出次数(即缺页中断的次数)
. 具体来说, 把未来不再使用的或短期内较少使用的页面换出, 通常只能在局部性原理指导下依据过去的统计数据来进行预测.页面锁定
常驻内存的操作系统的关键部分或时间关键的应用进程
. 实现的方式是 : 在页表中添加锁定标记位(lock bit).
例如操作系统的代码和程序是随时要访问的,它属于常驻内存,通过锁定技术,锁在内存中,使得这些页在做页面置换算法时不会被置换出去,确保OS随时能正常工作基本思路
当一个缺页中断发生时, 对于保存在内存当中的每一个逻辑页面, 计算在它的下一次访问之前, 还需等待多长时间, 从中选择等待时间最长的那个, 作为被置换的页面.
实例
基本思路
选择在内存中驻留时间最长的页面淘汰
. 具体来说, 系统维护着一个链表
, 记录了所有位于内存当中的逻辑页面. 从链表的排列顺序来看, 链首页面的驻留时间最长, 链尾页面的驻留时间最短. 当发生一个缺页中断时, 把链首页面淘汰出去, 并把新的页面添加到链表的末尾.belady现象
. FIFO算法很少单独使用.Belay现象
:当分配给一个运行程序更多的物理页后,按理是缺页的现象变少了,但是如果使用FIFO算法,可能会导致缺页现象变多实例
基本思路
LRU:最久未被使用,FIFO:最长驻留时间
LRU与最优页面置换算法
依据原理
实例
LRU算法需要记录各个页面使用时间的先后顺序,需要遍历整个链表和栈,开销比较大
两种可能的实现方法是![在这里插入图片描述](https://img-blog.csdnimg.cn/6b690f9c19cc4e50ae00d3bbb8b6c99e.png) :
实例
基本思路
具体流程
实例
时钟置换与LRU产生中断缺页次数接近的,他用了一个bit模拟了整个List信息
,它不精确,它达不到LRU最佳的效果,但是可以接近相当于说, 替换的优先级, 没有读写也没写过, 那么直接走, 如果写过或者访问过, 那么给你一次机会, 如果又写过, 又访问过, 那么久给你两次机会.
实例
优先换出只读的页,对于可写页多给一次机会,减少硬盘的读写次数
基本思路
实现方法
LFU和LRU区别
LRU考察的是多久未访问, 时间越短越好. 而LFU考察的是访问的次数和频度, 访问次数越多越好.
问题
实例
局部页面置换算法
Belady现象
Belady现象的原因
Belady现象实例
为什么LRU没有Belady现象
LRU考虑驻留时间和最近访问时间,考虑页的位置时,如果该页被访问到了,则从栈或者链表中取出来,放到头部去,但是FIFO没有这个过程
注意
为了有效的减少缺页次数,除了算法本身,还有一个最重要的是本身的访问序列有一定要求,它最好具有局部性特征,才会使得这些算法能够发挥效果
局部算法
(因为程序在运行的过程中有阶段性,可能最开始可能访问多,需要很多内存,中间一段可能需要很少,在结束时又需要很多,它是动态的过程,物理页帧的需求是不断变化的)
全局算法
例子
常驻集是指在当前时刻, 进程实际驻留在内存当中的页面集合.
工作集和常驻集区别
理解:常驻集是当前运行的程序,需要访问的页哪些在内存中,而工作集是当程序运行过程中它所需要访问的页有哪些,可能在内存中也可能没在内存中
思想
当工作集窗口在滑动过程中, 如果页面不在集合中, 那么就会直接丢失这个不在窗口中页面, 而不会等待缺页中断再丢弃.
与局部页面相比
在物理内存中放哪些页,取决于是否在这个工作集窗口之内,如果工作集窗口设置为4,那么超出4的窗口的那些老的页都会被换出去,这样可以确保物理内存中始终有足够多的页存在,可以给 其他运行的程序提供更多的内存,从而进一步减少页面置换的次数
在整个系统层面(多个程序,不是一个程序)确保缺页次数会降低
缺页率
影响因素
缺页率算法
方法
例如阈值t = 2,当前产生中断的时刻和上一次产生中断的时刻,差值大于2,那就把不在这个时间内访问的那些页全都清出这个工作集,但是如果当前中断访问时刻和上次中断访问时刻小于2等于,就会把当前缺的页加入到工作集中
实例
例如阈值t = 2,当前产生中断的时刻和上一次产生中断的时刻,差值大于2,那就把不在这个时间内访问的那些页全都清出这个工作集,但是如果当前中断访问时刻和上次中断访问时刻小于2等于,就会把当前缺的页加入到工作集中
工作集页面置换算法和缺页率置换算法区别
全局页算法和局部页算法不一样
全局页算法根据工作集和缺页率来动态调整整个内存需要置换的物理页
局部页算法只是在满的情况下进行调整,全局页算法即使没有满也会进行置换