操作系统--存储管理4

-----页面置换算法------
1.概念:当出现缺页异常的时候,并且内存中的空闲页面也用完,
此时必须把进行外存与内存的一个页面置换。
页面置换算法的功能:选择合适的页面进行置换。


2.置换算法追求的目标
* 尽可能减少页面置换的次数
* 将未来不用/短时间内不使用的页面换出。
注意:置换算法要考虑的是整个内存中所有进程执行的性能-并不只是某个进程


3.页面锁定:内存中不能被置换的页面
* 描述必须常驻内存的逻辑页面
* 操作系统内核页面
* 要求响应速度的代码和数据
* 页表中的锁定标志位


4.置换算法的评价方法
记录进程访问内存页面的轨迹,模拟置换算法,记录缺页次数


5.页面置换算法的分类
局部置换算法:每个进程分配的页面个数确定,置换只会发生在自己的所属页面
全局置换算法:置换页面是所有可能被置换的页面


6.局部置换算法--进程分配的页面数固定
最优算法:预测未来最长时间不会使用的页面--看的是后面的访问情况
OPT特点:缺页最少,但是是理想情况,实际系统无法预测未来的访问序列
可以作为其他置换算法的评价标准
先进先出:按照时间顺序置换,但是这个并不能保证是和程序的访问特性一致
其实根据的是队列的特性--时间。置换在内存中驻留时间最长的

FIFO实现:维护一个链表:链头放时间最长,刚进来的页面放在链尾
先进先出特点:实现简单;性能较差;增加进程页面个数,缺页率不一定会减少
(Belady现象)很少会单独使用该算法

最近最久未用算法:统计过去的访问特征,预测未来访问情况--算法过于复杂
OPT的近似。选择最近最久未访问的页面被置换
(LRU):依据最近最久没访问的页面在未来一段时间也不会访问
记录每个页面上次访问的时间,到现在的时间差
最大的一个页面被置换出来。
LRU实现:1.系统维护一个按照最近一次访问时间顺序的页面链表;
链头是刚刚访问的页面,链尾巴是最近未访问的;
访问时候将刚访问的页面置于链头,缺页置换链尾的页面。
2.维护一个活动页面栈
访问页面时候压栈顶并将相同的页面删除
缺页时候置换栈底的页面
LRU实现过程:开销比较大

时钟算法Clock:对LRU近似+FIFO综合;仅对页面访问情况进行大致的统计
仅仅记录页面是否被访问;没访问的页面按照进来的先后
顺序进行置换出去。
Clock数据结构:在页表项中增加访问位;把页面组织成环形链表
指针指向最先调入的页表
算法实现:页面装入的时候:访问位0;页面访问的时候,访问位1;
缺页时候指针从当前位置顺序查找环形链表
访问位位0,就置换该页面,新放入页面为1
访问位为1;则访问位置0;并移动到下一个页面直到找到
访问位为0可以被置换的页面。
特点:是在LRU和FIFO中做折中

改进的Clock: 减小修改页面的处理开销:对于修改的页面不进行替换
在页表项目:定义一个修改位;修改过1;未修改就0
改进的Clock思路:在访问页面的时候进行相应的修改
缺页,修改页面标志位,以跳过有修改的页面
对于修改过的页面写回操作会被统一操作

最不常用算法IFU:对LRU近似;缺页时候,置换的是最少次数访问的页面
实现:为每个页面设置计数,缺页时候,置换出计数小的
特点:算法开销大;开始频繁使用的页面,但是以后不使用就
难以被置换出去,通过定期对这些页面的计数减小。、


7.局部置换算法的特征
1.belady现象:分配给进程页面数增加,可能就出现缺页次数增加
产生的原因:FIFO算法的置换特征与进程访问的动态特征矛盾
被置换出去的页面可能进程下次还会要访问
产生belady的算法:FIFO
2.LRU,FIFO,CLOCK比较
LRU算法性能好,但是系统开销大(动态调整页面的顺序)
FIFO系统开销小,但是会产生Belady现象(不进行动态调整)
CLOCK是它们的折中;在访问的过程中通过标准描述动态的关系


8.全局置换算法
局部置换算法并没有考虑到进程的访问差异
思路:为进程分配可变数目的物理页面
在不同阶段为进程分配不同数目的物理页面
算法:如何确定给进程分配多少页面
进程个数与CPU利用率存在一个关系:前边是正比,但是存在极限限制
引入工作集:一个进程当前正在使用的逻辑页面的集合。w(t,V)
w(t,V):指的是当前时间之前的时间很短,访问页面的集合;工作集大小可变
工作集变化规律:不同的阶段工作集大小不同
常驻集:在当前时刻,进程实际驻留内存的页面集合。
工作集与常驻集的关系:
工作集是进程运行过程的固有特性
常驻集是取决于系统分配给进程的物理页面和页面置换算法
常驻集包含于工作集:缺页少
工作集发在剧烈变化,缺页多
进程的常驻集大小达到一定数目;缺页率不会明显下降
工作集算法:可以理解为最优算法在全局置换的体现
思路:换出不在工作集中的页面
实现:访问链表:维护窗口内的访存页面链表
访存时候换出不在工作集中的;更新链表
缺页时候,换入,更新链表

缺页率置换算法:缺页率定义:两次缺页时间间隔的倒数
影响缺页率原因:页面置换算法
分配给进程的页面数目
页面大小
程序的编写方法
缺页率置换算法: 访存的时候设置标志
缺页的时候计算时间间隔;>T置换未被引用<=T加入工作集
抖动和负载控制
抖动:进程拥有的物理页面过少,不能包含工作集
造成大量缺页,频繁置换
进程运行速度变慢
产生抖动原因:内存中的进程数,每个进程获取的页面个数
操作系统需要在并发和缺页率之间做折中
负载控制:通过控制并发进程数来进行系统的负载控制

原文地址:https://www.cnblogs.com/sun1993/p/7746833.html