30-页面置换算法与分配策略
页面置换算法
页面的换入、换出需要磁盘I/O,会有比较大的开销,因此好的页面置换算法应该追求更少的缺页率。
最佳置换算法(OPT)
每次选择淘汰的页面将是以后用不使用,或者在最长时间内不被访问的页面,这样可以保证最低的缺页率
最佳置换算法可以保证最低的缺页率,但是实际上,只有进程执行的过程中才知道接下来会访问的是哪个页面。操作系统无法预判页面序列。因此,最佳置换算法是无法实现的。
先进先出置换算法(FIFO)
实现方法:谁先进来,谁先走
只有先进先出算法会产生Belady异常,当为进程分配的物理块数增大时,缺页次数不减反增的现象。
最近最久未使用置换算法(LRU)
实现方法:每次淘汰的页面上最近最久未使用的页面
该算法性能好,实现难,开销大
时钟置换算法(CLOCK)
实现方法:最近未用算法
设置访问位,访问过设置为1,没访问过设为0
最多经过两轮扫描.
改进型时钟置换算法
只有被淘汰的页面被修改过时,才需要写回外存
因此除了考虑过一个页面最近有没有被访问过之外,操作系统还应该考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免了I/O操作
解决方法:
1.设置修改位
算法思想:设置循环队列
- 找到(0,0)进行淘汰,不修改任何标识位
- 若第一轮扫描失败,则重新扫描,寻找(0,1),本轮所有的帧访问位扫描后设置为0
- 第三轮扫描寻找(0,0),不修改标志位
- 第四轮扫描寻找(0,1)
页面分配策略
驻留集
请求分页存储管理中给进程分配的物理块的集合。
在虚拟存储技术中,驻留集大小一般小于进程的总大小。
若驻留集太小:会导致缺页频繁,系统要花大量的时间来处理缺页,实际用于进程推进的时间很少.
若驻留集太大:会导致多道程序并发度下降,资源利用率降低。
固定分配
操作系统为每个进程分配一组固定数目的物理块,即驻留集大小不变
可变分配
先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少,即驻留集大小可变。
局部置换
发生缺页的时候只能选择进程自己的物理块进行置换
全局置换
可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。
固定分配局部置换
缺点:很难在刚开始的时候确定应该为每个进程分配多少物理块
可变分配全局置换
只要某进程发生缺页,都将会获得新的物理块
被选择调出的页可能是系统中任意一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。
只要缺页就给分配新物理块
可变分配局部置换
要根据缺页的频率来动态的增加或减少进程的物理块
何时调入页面
预调页策略
根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更高效。但如果提前调入的页面中大部分都没有被访问过,则又是低效的。因此可以预测不久后可能访问到的页面,将它们预先调入内存但是目前预测成功率只有50%左右。故这种策略主要用于进程的首次调入
请求调页策略
进程在运行期间发现缺页时才讲所缺页面调入内存。由这种策略调入的页面一定会被访问到,但是由于每次只调入一页,而每次调页都要磁盘I/O操作,因此I/O开销较大。
从何处调入页面
对换区速度快,文件区大小大
- 页面的调入调出在对换区和内存进行[对换区大小足够]
- 不会被修改的数据从文件区调入调出[对换区大小不够]
- UNIX:第一次使用从文件区,之后保存在对换区
抖动(颠簸)现象
刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种现象叫做抖动。主要原因:进程频繁访问的页面数目高于可用的物理块数
工作集:每段时间内,进程实际访问的页面的集合。
工作集合的大小可能小于窗口尺寸。
驻留集的大小不能小于工作集的大小,否则会发生频繁的缺页。