本次笔记内容:
6.1 最优页面置换算法
6.2 先进先出算法
6.3 最近最久未使用算法
6.4 时钟页面置换算法
6.5 二次机会法
6.6 最不常用法
6.7 Belady现象、LRU、FIFO、Clock的比较
6.8 局部页替换算法的问题、工作集模型
6.9 两个全局置换算法
6.10 抖动问题
文章目录
页面置换算法功能与目标
功能
- 当缺页中断发生时,需要调入新页面;
- 而此时物理内存已满,则需要选择页面进行替换。
目标
- 尽可能减少页面的换进换出的次数(即缺页中断的次数)。因为读取磁盘比读取内存慢几个数量级。
- 同时,操作系统常用的数据段要一直保留在内存中。
- 页面锁定(Frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键(time critical)的应用进程。实现方法是:在页表中添加锁定标志位(lock bit)。
如上图,只保留进程对 页号 的访问轨迹,查看你产生缺页中断的次数。越少的缺页数量,越好的性能。
最有页面置换算法
-
提出愿景:预知将来程序会访问哪些页面,由此决定替换谁。
-
基本思路:一个缺页中断发生时,对于保存在内存当中的一个逻辑页面,计算在它的下一次访问之前,还需等待多长时间,从中选择等待时间最长的那个,作为被置换页面。
-
这只是一种理想情况, 在实际系统中无法实现。 因为操作系统无法预知每一个页面要等待多长时间以后才会再次被访问。
-
可以把本算法作为一个评价标准(在模拟器上运行,第二遍运行时采用这最优算法)。
最优置换算法例子如上。
先进先出(FIFO)算法
- 基本思路:选择在内存中驻留时间最长的页面并淘汰之。具体来说,系统维护着一个链表,记录了所有位于内存当中的逻辑页面。从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面的驻留时间最短。
- 性能较差,调出页面可能是经常要访问的页面,并且有 Belady现象 ,FIFO算法很少单独使用。
例如上,产生了更多的缺页中断。
最近最久未使用算法
- Least Recently Used, LRU;
- 基本思路:当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。
- 它是对最优页面置换算法的一个近似,其依据是程序的局部性原理,即在最近一小段时间(最近几条指令)内,如果某些页面被频繁地访问,那么在将来的一小段时间内,它们还可能会再一次被频繁地访问。
LRU算法例如上。
LRU算法需要记录各个页面使用时间的先后顺序,两种可能的实现方法
- 系统维护一个页面链表,最近刚刚使用过的页面作为首节点,最久未使用的作为尾结点。每一次访问内存时,找到相应的页面,把它从链表中摘