虚拟存储器——调页策略

何时调入页面

1.预调页策略:

  • 以预测为基础,将预计不久后便会被访问的若干页面,预先调入内存。
  • 优点:一次调入若干页,效率较好
  • 缺点:预测不一定准确,预调入的页面可能根本不被执行到。主要用于进程的首次调入,由程序员指出应该先调入哪些页。

2.请求调页策略:

  • 运行中需要的页面不在内存,便立即提出请求,由OS将其调入内存。
  • 优点:由请求调页策略所确定调入的页,一定会被访问;比较容易实现。
  • 缺点:每次仅调入一页,需花费较大的系统开销,增加了磁盘的I/O的启动频率。

从何处调入页面

请求分页系统中的外存分为:

  • 对换区:连续存放数据,读写速度较快。
  • 文件区:离散分配方式,I/O速度较慢。
    发生缺页时,系统从何处讲所缺页调入内存分为以下三种情况:
  • 系统拥有足够的对换区空间:
    进程运行前将所有页面由文件区拷贝到对换区
    运行需要的页面全部从对换区调入内存,提高调页速度。
  • 系统缺少足够的对换区空间:
    不会被修改的部分,在文件区操作(即:直接从文件区调入,换出时不用写入文件,再调入时仍从文件区调入)
    可能被修改的部分,在对换区操作。
  • UNIX方式:(随运行方式逐渐从文件区转到对换区)
    未运行的页面从文件区调入;
    曾经运行,但又被换出的页面在对换区,下次调入应从对换区调入。
    进程请求的共享页面可能已经被其他进程调入,无需再从对换区调入。

即:
外存:文件区、对换区

  1. 系统拥有足够的对换区空间:对换区;
  2. 系统缺少足够的对换区空间:文件区/对换区;
  3. UNIX:首次->文件区/再请求调入->对换区。

页面调入过程

  • 程序运行前先装入内存;
  • 开始运行:先预调入一部分页面;
  • 运行中:需要的页面不在内存时,
    *向CPU发出一缺页中断,“中断处理程序”开始工作:
    *首先保留CPU环境
    *分析中断原因后,转入缺页中断处理程序。
    *处理:判断是否置换、页表信息更新
    *恢复现场,重新操作页面。

页面置换算法* * * *

  • 进程运行过程中,访问的页面不在内存,调入时内存已无空闲空间,需要将内存中的一页程序或数据调到外存。
  • 应具有较低的缺页率。
    在这里插入图片描述

1.最佳置换算法(Optimal)
换出以后永不再用的,或在最长(未来)时间内不再被访问的页面。
(PS:该方法为理论最佳算法,实际不能实现)
*优点:保证获得最低的缺页率
*不足:无法实现,因为无法预知一进程将来的运行情况
*作用:作为参照标准,评价其他算法。
在这里插入图片描述
2.先进先出置换算法(FIFO)
先进入的先淘汰,即选择内存中驻留时间最久的页面予以淘汰。
*优点:实现简单,把一进程已调入内存的页面按先后次序组织成一个队列,并设置一个指针(替换指针),使它总是指向队首最老的页面。
*不足:与进程实际运行规律不相适应(较早调入的页往往是经常被访问的页,频繁被对换造成运行性能降低)
在这里插入图片描述
补充:Belady现象
*Belady现象:出现分配的页框(物理块)数增多,缺页率反而提高的异常现象。
*描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。
*Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征矛盾,即被置换的页面并不是进程不会访问的。
在这里插入图片描述

3.最久未使用使用置换算法(LRU)
*无法预测将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法选择最近最久未使用(least recently used)的页面予以淘汰。
*不足:

  • 有时页面过去和未来的走向之间并无必然的联系。
  • 相应的需较多的硬件支持:记录每个页面自上次被访问以来所经历的时间t,淘汰时选择页面t值最大的;以及需要快速地知道哪一页是最近最久未使用的页面,用寄存器或栈。

在这里插入图片描述
①寄存器记录时间的原理
*一进程有8个页面,每个页面需配备一个8位的(移位)寄存器。
移位寄存器表示为
R=Rn-1Rn-2Rn-3…R2R1R0
*页面被访问后的操作:
将该页对应的寄存器的Rn-1位置为1
*如何记时:
由系统发出定时信号,每隔一定时间将所有寄存器右移1位。
某一时刻,比较各寄存器的值,被用到的标志1逐渐往低位上积累,若高位上没有1,就说明最近没用过。所以最近最久未使用的就是寄存器值最小的那个页。
在这里插入图片描述
②栈记录时间的原理
某页面被访问,便将该页面的页面号从栈中移出,将它压入栈顶。因此:栈顶始终是最新被访问页面的编号,越久未使用,页面越被压在栈底。
在这里插入图片描述
4.轮转置换算法(clock)
又称最近未使用算法(NRU, Not Recently Used)
每个页设一个使用标志位(use bit),若该页被访问则将其置为1。
设置一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。
若指针经过的页use bit=1,修改use bit=0(暂不凋出,给被用过的页面驻留的机会 ),指针继续向下。到所有页面末尾后再返回队首检查。

在这里插入图片描述
在这里插入图片描述

请求分页管理方式下,存在三种方式的内存访问

页在内存,且快表检索命中
EAT= λ+ t
页在内存,但快表检索没有命中
EAT= 快表检索时间+访问页表时间+修改更新快表时间+访问页面物理内存时间
= λ+t+λ+t=2*(λ+t)
页面不在内存
EAT=快表检索时间+访问页表时间+缺页中断处理时间+修改更新快表时间+访问页面物理内存时间
= λ+ t +ε + λ + t
加入概率的综合公式(a是快表命中率,f是缺页率)
EAT= λ + a* t +(1-a){ }
=λ + a * t +(1-a)
{t + f*(ε +λ+t) +(1-f)*(λ+ t) }

影响缺页率的主要因素

(1)分配给作业的主存块数:
多则缺页率低,反之则高。
(2)页面大小:
大则缺页率低;反之则高。
(3)页面调度算法:
对缺页中断率影响很大,但不可能找到一种最佳算法。
(4)程序编制方法:
以数组运算为例,如果每一行元素存放在一页中,则按行处理各元素缺页中断率低;反之,按列处理各元素,则缺页中断率高。

抖动

系统抖动:
为了提高处理机利用率,可增加多道程序并发度;
但进程数目增加过多,每个进程分配得到的物理块太少,在某个临界点上,会出现刚被淘汰的页很快又需重新调入;而调入不久又被淘汰出去;出现频繁缺页
大部分处理器时间都用在来回的页面调度上,这种局面称为系统抖动或颠簸(thrashing)
抖动的后果:
缺页率急剧增加
内存有效存取时间加长,
系统吞吐量骤减;系统已基本不能完成什么任务,而是忙于页面对换操作,cpu虽然忙,但效率急剧下降。
根本原因:
页面淘汰算法不合理;分配给进程的物理页面数(驻留集)太少。
常用防抖动方法:
局部置换策略;
页面调入内存前检查各进程工作集,为缺页率高的增加有限物理块;
L缺页间的平均时间=S置换一个页面所需时间,可使磁盘和cpu达到最大利用率;
抖动发生时选择暂停一些进程,调节多道程序度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值