码迷,mamicode.com
首页 > 编程语言 > 详细

页面置换算法

时间:2020-03-18 22:09:52      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:入栈   frame   页面置换   least   链表   优先   改进   移动   锁定   

功能:当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中哪个物理页面被置换。

目标:尽可能地减少页面的换进换出次数(即缺页中断的次数)。具体来说,把未来不再使用的或短期内较少使用的页面换出,通常只能在局部性原理指导下依据过去的统计数据来进行预测

页面锁定(frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键的应用进程。实现的方法是:在页表中添加锁定标志位(lock bit)

记录一个进程对页访问的一个轨迹

1.最优页面置换算法:

基本思路-->当一个缺页中断发生时,对于保存在内存当中的每一个逻辑页面,计算在它的下一次访问之前,还需等待多长时间,从中选择等待时间最长的那个,作为被置换的页面。

这只是一种理想情况,在实际系统中是无法实现的,因为操作系统无从知道每一个页面要等待多长时间以后才会再次被访问。可用作其他算法的性能评价的依据(在一个模拟器上运行某个程序,并记录每一次的页面访问情况,在第二遍运行时即可使用最优算法)。

置换的页面是在将来最长时间不需要的页面

2.先进先出算法:First-In First-Out,FIFO

基本思路-->选择在内存中驻留时间最长的页面并淘汰之。具体来说,系统维护着一个链表,记录了所有位于内存当中的逻辑页面。从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面的驻留时间最短。当发生一个缺页中断时,把链首页面淘汰出局,并把新的页面添加到链表的末尾。

性能较差,调出的页面有可能是经常要访问的页面,并且有Belady现象。FIFO算法很少单独使用。

Belady:给的物理页帧越多反而可能出现更多的页缺失

3.最近最久未使用算法:Least Recently Used, LRU

基本思路-->当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。它是对最优页面置换算法的一个近似,其依据是程序的局部性原理,即在最近一小段时间(最近几条指令)内,如果某些页面被频繁地访问,那么在将来的一小段时间内,它们还可能会再一次被频繁地访问。反过来说,如果在过去某些页面长时间未被访问,那么在将来它们还可能会长时间地得不到访问。

LRU算法需要记录各个页面使用时间的先后顺序,开销比较大。两种可能的实现方法是:

系统维护一个页面链表,最近刚刚使用过的页面作为首节点,最久未使用的页面作为尾节点。每一次访问内存时,找到相应的页面,把它从链表中摘下来,再移动到链表之首。每次当缺页中断发生时,淘汰链表末尾的页面。

设置一个活动页面栈,当访问某页时,将此页号压入栈顶,然后,考察栈内是否有与此页面相同的页号,若有则抽出。当需要淘汰一个页面时,总是选择栈底的页面,它就是最久未使用的。

4.时钟页面置换算法:Clock页面置换算法,LRU的近似,对FIFO的一种改进

基本思路-->需要用到页表项当中的访问位,当一个页面被装入内存时,把该位初始化为0。然后如果这个页面被访问(读/写),则把该位置为1;把各个页面组织成环形链表(类似钟表面),把指针指向最老的页面(最先进来);当发生一个缺页中断时,考察指针所指向的最老页面,若它的访问位为0,立即淘汰;若访问位为1,则把该位置为0,然后指针往下移动一格。如此下去,直到找到被淘汰的页面,然后把指针移动到它的下一格。

access bit;硬件完成;操作系统,定期置0

维持一个环形页面链表保存在内存中:用一个时钟(或者使用/引用)位来标记一个页面是否经常被访问;当一个页面被引用的时候,这个位被设置(为1)

时钟头扫遍页面寻找一个带有used bit=0:替换在一个周转内没有被引用过的页面。

技术图片

 5.二次机会法:优先换出只读页,使得被写入的页换出机会减少

技术图片

6.最不常用算法:Least Frequently Used,LFU

基本思路-->当一个缺页中断发生时,选择访问次数最少的那个页面,并淘汰之

对每个页面设置一个访问计数器,每当一个页面被访问时,该页面的访问计数器加1。在发生缺页中断时,淘汰计数值最小的那个页面

LRU和LFU的区别:LRU考察的是多久未访问,时间越短越好;而LFU考察的是访问的次数或频度,访问次数越多越好。

问题:一个页面在进程开始时使用得很多,但以后就不使用了,实现也费时费力。

解决方法:定期把次数寄存器右移一位。

 

 

局部页面置换算法:针对一个进程

技术图片

 

 技术图片

 

页面置换算法

标签:入栈   frame   页面置换   least   链表   优先   改进   移动   锁定   

原文地址:https://www.cnblogs.com/liushoudong/p/12520358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!