文章目录
1:页面置换算法的相关概念
- 功能和目标
置换算法并不是针对一个进程,而是一系列进程
- 页面锁定
有些页面是不能把它放到外存里的
- 置换算法的评价方法
通过记录进程访问内存的页面轨迹来模拟页面置换行为,记录产生缺页的次数
- 页面置换算法分类
局部:在内存中,给每个进程分配的页面总数是不会变化的。
全局:置换页面的选择范围是所有可换出的物理界面
2:局部置换算法
1.最优、先进先出、最近最久未使用算法
-
最优算法(OPT optimal):不可实现
基本思路:置换在未来最长时间不访问的页面
算法示例:在1-4时刻,访问都是可以正常访问的,在时刻5,需要访问e页面,这时候根据最优算法调出d页面,产生一次缺页,然后6-9时刻也是可以正常访问的,在时刻10时,也产生一次缺页。
-
先进先出算法(FIFO):最简单
思路:选择在内存驻留时间最长的页面进行置换
算法示例:在时刻5,最先进来的页面是a,所以将e替换a,同时,逻辑链表变成了bcde
-
最近最久未使用算法(LRU Least Recently Used):开销大
思路:选择最长时间没有被引用的页面进行置换
算法示例:在时刻5时,最久未被引用的是c,替换c。
可能实现方法:
示例:在时刻5,置换栈底的页面c,同时将压入栈顶。在时刻6,将栈中的b移到栈顶(开销)
2.时钟置换算法和最不常用算法
这两个算法实际上是对FIFO和LRU的一些简化
- 时钟置换算法(Clock)(LRU和FIFO的折中)
- 思路:仅对页面的访问情况进行大致统计
- 数据结构:
- 算法:
- 示例:
- 先将各页面组成一个环形链表
- 当访问页号1时,将页号1的访问位置1,如果再次访问页号1,则访问为仍是1.
- 当缺页的时候,就从指针出开始顺时针寻找访问位为0的(在这过程中,将访问位为1的清零),在下图就是找到了页号4,将页号4置换出去
- 先将各页面组成一个环形链表
- 改进的时钟算法
在上图中,第二行时,修改位为1表示该页被修改过,这时候就修改位置0,同时将修改存入外存。第三行和第4行的处理方式和时钟算法一致。
- 最不常用算法(LFU,Least Frequently Used)
- 思路:缺页时,置换访问次数最少的页面
- 实现:
- 特征:算法开销大,开始时频繁使用,但以后不使用的页面很难置换(可以采用计数定期右移解决)。
- 示例:
3.Belady现象和局部置换算法的比较
-
Belady现象:FIFO有,LRU没有,
- 现象解释:局部置换算法给每个进程分配的物理页面数是一定的,当缺页次数过高时,就需要增加分配物理页面数,但此时并不一定会降低缺页次数(主要是置换算法采用的是FIFO算法等)。
- 原因:FIFO算法的置换特征与进程访问内存的动态特征是有矛盾的,被它置换出去的页面并不一定是进程近期不会访问的。
示例:
-
LRU、FIFO、Clock的比较
3:全局置换算法
1.工作集置换算法
在局部算法里面并没有考虑各个进程之间的访存差异,全局置换算法为进程分配可变数目的物理页面。常驻集是指进程在运行时,当前时刻实际驻留在内存当中的页面集合。而工作集是进行再运行过程所固有的特征。置换算法的工作就是在进程的工作集的前提下,确定常驻集的大小以及相应页面。
-
工作集置换算法相关概念
- 要解决的问题:
- cpu利用率与并发进程数之间的关系
- 工作集
当前时间t到过去一段时间它所访问的逻辑页面的集合。有了工作集,就能知道一个进程在某个时刻所需要的页面数,进而通过操作系统进行合理分配。
如果全局置换算法能近似的按照上面这条曲线来,那么效率就提高了很多。 - 常驻集
常驻集是指进程在运行时,当前时刻实际驻留在内存当中的页面集合。而工作集是进行再运行过程所固有的特征。置换算法的工作就是在工作集的前提下,确定常驻集的大小。
- 要解决的问题:
-
工作集置换算法
换成不在工作集中的页面(不一定是在缺页的时候),在实现方法可以看出复杂的是在访存时,怎么换出不在工作集的页面。
示例:- 在时间0时,假定了t=-1和t=-2时的几个页面,意义在于可以判断在时刻1时,过去的时间里是有几个页面超出了工作集。
- 时刻1,访问第一个页面c,发生缺页,按工作集置换算法,直接把页面c补进来
- 时刻2,c进行访存时,因为窗口大小为4,所以t=-2时所对应的页面e不在工作集,就将e换出。
- 时刻3,正常访问。
- 时刻4,访问b页面时,类似时刻1的将b补进来,同时将t=0时刻对应的a页面移出,后面的类似处理
2.缺页率置换算法
- 缺页率以及影响因素
- 缺页率置换算法(相比工作集算法,降低了开销)
- 算法实现
- 示例
- 时刻1,出现缺页,之间补页面
- 时刻2,正常访问,时刻3也是正常访问
- 时刻4,访问b时出现缺页,把b补进来,此时缺页时间间隔是3,大于窗口大小2,将两个缺页之间没有访问的页面剔除出去,也就是剔除a、e。后面类似,在时刻6时,缺页间隔为2,不进行剔除。
3.抖动和负载控制
- 抖动问题
系统中的进程数目很多
- 负载控制
希望内存的大小恰好是当前所有进程的工作集的总和。同时,当缺页间隔时间大于缺页异常处理时间时,处理器就来得及处理缺页,如果是小于的话,就满负荷运行了,处理不过来了。所以找到一个负载均衡点,使得两者恰好相等。