操作系统第四章——页面置换算法

操作系统第四章——页面置换算法

需要页面置换算法的原因:在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出,须根据一定的算法来确定。置换算法的好坏将直接影响到系统的性能。

一些概念

抖动:刚被换出的页很快又要被访问,需要将它重新调入,此时又需要再选一页调出;而此刚被调出的页很快又被访问,又需将它调入,如此频繁地更换页面,以致一个进程在运行过程中把大量时间花费在页面置换工作上,我们称该进程发生了“抖动”。

最佳置换算法<Optional>

算法:选择被淘汰的页面将是以后永不使用的。
可以理解为预知未来。
采用最佳置换算法通常可保证获得最低的缺页率。
但实际上人们无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以去评价其他算法。

先进先出页面置换算法<FIFO>

算法:总先淘汰最先进入内存的页面,即选择在内存驻留时间最久的页面予以淘汰。
该算法实现简单:队列,指向最老页面的替换指针。
适用于线性访问。
缺点:会导致Belady异常

Belady异常:如果对一个进程未分配它所要求的所有页面,有时就会出现分配的页面数增多,而缺页率反而提高的异常现象。

Q:如果某页在物理块中,后面又有一次请求访问,那么是按“老”的还是“新”的时间算?
A:由算法描述中的“驻留”可知,应该按“老”的那个时间算。

做题技巧:
置换时,经常会搞混到底哪一个才是最“老”的?可以看做一个横着放的柱状图,谁的柱最高就置换哪一个。在这里插入图片描述

LRU最近最久未使用算法<Least Recently Used>

根据页面调入内存的使用情况做出决策。
利用“最近的过去”作为“最近未来的近似”。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t。当需淘汰一个页面时,找t最大的。
适用于符合时间局部性的进程。
缺点:需要硬件支持,实现所需成本较高。
硬件支持:寄存器,栈。

软件模拟实现(aging):为每个页框设置一个计数器R=Rn-1 Rn-2 … R0。每隔一段时间时钟中断到达时,R右移,最高位置1。
最小数值的页面即为最久未被访问的页面。
我的理解是:这样做更改了权重。越近使用,权重越大。
与LRU的区别:计数器范围有限,如果两个页框的计数器均为0,则无法区分;无法区分始终周期间的访问次序。

做题技巧:挑选要替换的块时,从内存中逐个向“过去”看哪一个数字出现过,便不会是这一个页被置换出去。直到剩最后一个页。

最少使用置换算法<LFU>

设置移位寄存器,用来记录该页面被访问的频率。

Clock置换算法

clock:循环检查个页面使用情况。

简单版本<最近未用算法><NRU>

实现:循环队列。每页设置一个访问位。
在这里插入图片描述

改进型

增加:考虑置换代价。
在这里插入图片描述

Q:如果没有空闲页框,一个新进程到来,OS会怎么做?
A:第一页的Access bit置0。

工作集算法

用于解决thrashing。
工作集:进程在一段时间(以自己的时间为准)delta内访问的页面的集合。

算法思想:将不在工作集中的页面替换出去。

Q:如果都在工作集中怎么办?
A:暂停一些进程(说明进程太多)

其他需要注意的

计算缺页率时,最开始装入的几块也是未命中的。

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值