【操作系统】内存管理——请求分页管理方式(个人笔记)

学习日期:2024.6.27

内容摘要:介绍了请求分页存储管理和分页置换算法


请求分页的概念

我们已经学习过了《基本分页存储管理》,请求分页存储管理与基本分页存储管理的区别是,在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存(即为“请求调页”),然后继续执行程序。若内存空间不够,操作系统还需要把内存中暂时用不到的信息换出到外存。

请求分页所增加的功能

与基本分页管理系统相比,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存,如果还没调入,需要知道该页面在外存中存放的位置。

当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到底换出哪个页面,有的页面没有被修改过,就不必浪费时间写回外存,有的页面修改过,就需要将外存中的旧数据覆盖,因此,操作系统也需要记录各个页面是否被修改的信息。

缺页中断机构

每当要访问的页面不在内存时,就会产生缺页中断,然后由操作系统的缺页中断处理程序处理,此时缺页的进程阻塞,放入阻塞队列,调页完成后再唤醒,放回就绪队列。

如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入,并修改页表中相应的页表项。

如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将外存中的旧数据覆盖,写回外存;未修改过的页面不用写回外存

缺页中断是因为当前执行的指令想要访问的目标页面未调入内存产生的,因此属于内中断

地址变换机构

查找地址时,要判断查到的页表项是否在内存当中,在需要调入页面时,如果没有空闲内存块,则要进行页面置换,再修改请求页表中新增的表项。

(左上字为“缺页中断处理”)

补充细节:

①只有写指令才需要修改“修改位”。而且一般来说只需要修改快表中的数据,只有要将快表项删除的时候才需要写回内存中的慢表,这样可以减少访存次数。

②和普通的中断处理一样,缺页中断处理需要保留CPU现场。

③换入换出页面都需要启动慢速的I/O操作,如果换入换出太频繁,会有很大开销。

④页面调入内存后,需要修改慢表,同时也需要将表项复制到快表当中。


页面置换算法(重点)

使用请求分页管理方式,当内存中没有空闲块时,操作系统会将内存中暂时用不到的信息换出到外存,而具体换出哪一个,就是由页面置换算法决定的。

因为页面的换入换出需要磁盘的I/O,是很大的时间开销,因此更好的页面置换算法应该追求尽可能少的缺页率。

缺页时不一定发生页面置换,如果还有可用的空闲内存块,就不用进行页面置换,直接请求调入即可,页面置换本质上是“腾空间”的方法,如果还有空间,自然不用换出。

最佳置换算法(OPT)

最佳置换算法(OPT,Optimal,adj.最佳的,最优的):每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。

但是,实际上,只有在进程执行的过程中才会知道接下来要访问的是哪个页面,操作系统无法未卜先知,因此,最佳置换算法是理想化的算法,是无法实现的

在2号页面放入时,缺页。对于0,1,7这三个页面要淘汰一个,按顺序往后找,先要访问0,然后要访问1,所以淘汰7,把2放到原来7的位置。

在3号页面放入时,缺页。对于2,0,1这三个页面要淘汰一个,按顺序往后找,先要访问0,然后访问2,所以淘汰1,把3放到原来1的位置。

依此类推即可,整个过程缺页中断发生了9次,页面置换发生了6次。

先进先出置换算法(FIFO)

先入先出置换算法(FIFO,First In First Out):每次淘汰的页面是最早进入内存的页面

实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可,队列的最大长度取决于系统为进程分配多少个内存块。

在0号页面放入时,缺页。对于3,2,1三个内存块,淘汰一个,3最先来,淘汰3,把0放在原来3的位置。

在下一步,3号页面放入时,缺页。对于0,2,1三个内存块,2最先来,淘汰2,把3放在原来2的位置。

依此类推即可,整个过程中缺页中断发生了9次,页面置换发生了6次。

当为这个进程分配4个内存块时,反而会缺页10次(可以自己画图试试),这种异常被称为Belady异常

(Belady异常:当为进程分配的物理块数增大时,缺页次数不减反增的现象)

只有FIFO算法会产生贝拉迪异常。FIFO算法虽然实现简单,但是该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最常被访问,算法性能差

最近最久未使用置换算法(LRU)

最近最久未使用置换算法(LRU,Least Recently Used):每次淘汰的页面是最近最久未使用的页面

实现方法:赋予每个页面对于的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t,当需要淘汰一个页面时,选择现有页面中t最大的,即是最近自上次访问最久的页面。

当3号页面调入时,缺页,在1,8,7,2中选择一个淘汰。往前看,最近访问的分别是8,1,2。

7是最久没有访问的页面,所以淘汰7,把3放在原来7的位置。

当7号页面调入时,缺页,在1,8,3,2中选择一个淘汰。往前看,最近访问的分别是1,3,2。

8是最久没有访问的页面,所以淘汰8,把7放在原来8的位置。

该算法的实现需要专门的硬件支持(要计时),虽然算法性能好,但是实现很困难,开销大

最近未用算法(NRU)

最近未用算法(NRU,Not Recently Used):换出最近没有访问过的页面。

最近未用算法又称时钟置换算法,CLOCK算法,是一种性能和开销较均衡的算法。

简单的最近未用算法

简单的NRU算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列,当某页被访问时,其访问位为1,当需要淘汰一个页面时,只需检查访问位。如果是1,就改为0,暂不换出,再继续检查下一个页面,如果是0,则将该页换出。

这个1,好比页面有“1滴血”,第一次搜到就扣一滴,第二次搜到就死了,换出去,而访问一次就补满血。这样可以保证换出的页面都是至少检查过一次的,不是最近访问过的。如果所有页面的访问位都是1,就会扫描第二轮,第二轮一定会有访问位为0的页面,因此简单的NRU算法最多扫描两轮。

当要访问6时,队列已满,缺页,要从1,3,4,2,5中选择一个页面淘汰。此时指针指向1(队头),然后指针转一圈,访问位全部变为0,此时指针回到了1,1的访问位为0,将该页换出,把6放到原来1的位置,指针指向下一个位置,即3号页。

下一步访问3号页,已经在内存中,访问位改为1。

下一步访问4号页,已经在内存中,访问位改为1。

下一步访问7号页,队列已满,缺页,要从6,3,4,2,5当中选择一个页面淘汰,指针从6开始转,首先指到3,3的访问位变为0,然后是4,4的访问位变为0。然后是2,2的访问位为0,淘汰,将该页换出,把7放到原来2的位置,指针指向下一个位置,即5号页。

这个过程很像时钟指针转圈,这就是别称的由来。

简单的NRU算法开销小,效果不错,但是没有考虑被淘汰的页面是否被修改过。

改进型最近未用算法

简单的最近未用算法仅考虑一个页面最近是否被访问过,事实上,如果被淘汰的页面没有被修改过, 就不需要执行I/O操作写回外存。

因此,除了考虑一个页面最近有没有被访问过以外,操作系统还应该考虑页面有没有被修改过,在其它条件相同时,应当优先淘汰没有修改过的页面,从而避免I/O操作,节约资源。这就是改进型最近未用算法的思想。

实现方式:除了访问位以外,再引入一个修改位,修改位=0表示页面没有被修改过,修改位=1表示页面被修改过。

为了方便讨论,通常用(访问位,修改位)的形式表示各页面状态。如(1,1)表示一个页面最近被访问过,且被修改过。

算法规则:将所有可能被置换的页面排成一个循环队列,按顺序扫描,每一轮扫描若失败就进行下一轮,直到找到用于替换的帧

第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换,本轮扫描不修改任何标志位。(先看看有没有最近没访问,而且没修改过的,最不受待见的第一个踢了)

第二轮:从当前位置开始扫描到第一个(0,1)的帧用于替换,本轮将所有扫描过的帧的访问位设为0。(看看有没有最近没访问,但是修改过的)

第三轮:从当前位置开始扫描到第一个(0,0)的帧用于替换,本轮扫描不修改任何标志位。(同第一步,换掉最近访问过,但没修改的页面)

第四轮:从当前位置开始扫描到第一个(0,1)的帧用于替换。(同第二步,最差情况,换掉最近访问过,也被修改过的页面)

由于第二轮已经将所有帧的访问位设为0(能进到第三轮说明第二轮全部的访问位都是1),因此三、四两轮一定会有一个帧被选中,最极端的情况就是全部(1,1)会进第四轮。改进型NRU算法选择一个淘汰页面最多需要四轮扫描。

改进型NRU算法开销较小,性能也不错


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

  • 36
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值