文章目录
局部置换算法
- 功能:当缺页中断发生时,需要调入新的页面而内存页面已满时,选择内存当中哪个页面被置换
- 目标:尽可能的减少页面的换进换出次数。
- 页面锁定(frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键的应用程序。
- 实现方法:在页表中添加锁定标志位
最优页面置换算法
- 思路:把将来可能最长时间不会被访问的页面换出
- 理想情况,操作系统不能知道每个页面的下次访问时间
- 可作为其他算法的性能评价的依据(在一个模拟器上运行某个程序,并记录每一次页面的访问情况,在第二次运行时即可使用最优算法)
先进先出算法(first-in first-out,FIFO)
- 思路:选择在内存中驻留时间最长的页面淘汰
- 实现方法:
- 系统维护一个链表,记录所有位于内存的逻辑页面。链首页面的驻留时间最长,链尾页面驻留时间最短。
当发生中断时,把链首页淘汰,将新页面添加到链尾
- 系统维护一个链表,记录所有位于内存的逻辑页面。链首页面的驻留时间最长,链尾页面驻留时间最短。
- 实现简单 性能较差,调出的页面有可能是经常要访问的页面,并且有belady现象(给一个程序的物理页帧越多,缺页中断发生的次数一般会减少,但使用该算法可能会出现更多中断)。很少单独使用该算法
最近最久未使用算法(LRU)
- 最优置换算法的近似,是根据过去的数据推测下一步
- 依据程序局部性原理,如果某些页面被频繁的访问,那么在将来的一小段时间内还会被访问。
- 思路:选择最久未被使用的页面淘汰
- 方法:需要记录各个页面使用时间的先后顺序。开销大(每次访问页面都要查询,并且更新记录)
- 系统维护链表,最近刚刚使用过的页面放在链头,最久未使用放在链尾。
- 设置活动页面栈,栈顶是刚使用的页面,栈底是很久未使用的页面。
时钟页面置换算法
- LRU的近似,对FIFO的改进
- 思路:
- 当一个页面被装入内存时,将访问位初始化为0,当被访问时,则把该位置为1
- 把各个页面组织成环形链表(类似钟表面),把指针指向最老的页面(最先进来)
- 当发生缺页中断时,考察指针所指向的最老页面,若它的访问位为0,则直接淘汰,否则,则把改位置置0,然后指针往下移动,如此下去,直到找到被淘汰的页面,然后把指针移动到它的下一格。
- 开销小
二次机会法
- 思路:同时使用脏位和使用位来指导置换
- 两位都是0才能置换 两位都是1时,指针会经过两次,将更多次写的页面有机会留到内存中,从而减少对硬盘的访问次数
最不常使用算法(LFU)
- 思路:选择访问次数最少的页面淘汰。
- 实现:对每个页面设置一个访问计数器。
- LRU考虑的是时间,LFU考虑次数
- 问题:一个页面可能在某段时间内访问次数很多,后面就不再访问。
- 解决:定时将次数寄存器右移一位。时间越长次数越小
belady现象
在FIFO算法时,有时会出现分配的物理页面数增加,缺页率反而提高的异常现象。
原因:被置换出去的页面并不一定是进程不会访问的
全局页面置换算法
局部页面置换算法的缺点:
给程序分配的物理页帧会影响算法的效率。
根据程序的不同运行时间分配不同大小的页帧。
工作集模型
各种页面置换算法都基于程序的局部性原理,通过工作集分析局部性。
- 工作集:一个进程当前正在使用的逻辑页面集合。用一个二元函数W(t,Z)表示
- 工作集大小:与内存访问的局部性有关
- 常驻集:在当前时刻,进程实际驻留在内存当中的页面集合。
工作集置换算法
- 思路:
- 替换不在工作集里的页面,
- 工作集发生动态变化时,当某个页不属于工作集时,也会被丢掉。工作集的窗口,常驻集固定
缺页率页面置换算法
- 可变分配策略:常驻集大小可变。
- 可采用全局页面置换方式,发生缺页中断时,被置换的页面可以是在其他进程中,各个进程竞争地使用物理页面。
- 优缺点:性能较好,但增加系统开销。
- 具体实现:
- 通过缺页率算法(PPF)来动态调整常驻集的大小。
缺页率:缺页次数/内存访问次数。- 影响因素:页面置换算法
- 分配给进程的物理页面数目
- 页面本身大小
- 程序编写方法
- 当缺页率高,增加工作集 否则,减少 使运行的每个程序缺页率保持在一个合理的范围
- 将两次产生中断之间未被访问的页面踢出工作集。当产生中断时间很短,将缺的那一页调入工作集。
- 通过缺页率算法(PPF)来动态调整常驻集的大小。
抖动问题
-
概念:分配给一个进程的物理页面太少,常驻集<工作集 进程会造成很多缺页中断,需要频繁在内存与外存直接替换页面,从而使进程运行速度很慢,这种状态为“抖动”
-
原因:随着驻留内存的进程数目增加,分配到每个进程的物理页面减少,缺页率不断上升。
操作系统需要选择一个适当的帧数和进程数,达到平衡。- 平均缺页时间:(MTBF)两个缺页产生之间的时间= 完成一次缺页中断服务的时间 页缺失服务时间(PFST)
- 这时系统跑很多的程序 cpu利用率还可以。