程序执行时会呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,所访问的存储空间也局限于某个区域。
由局部性原理可知,程序运行前没有必要将其全部装入内存,仅须将少数的页面或段装入内存,其他可以暂时放在外存上。程序运行时,如果所需的数据已经调入内存,则继续执行;否则发出缺页(段)中断,OS将相应的段或页面调入内存。如果内存已满,则利用页(段)置换功能,将所需段或页置换到内存中。
具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存和外存容量决定,运行速度接近内存速度,成本接近外存。
虚拟性以多次性和对换性为基础,只有系统运行作业多次调入内存,并能将暂时不用的程序和内存从内存调出,才能实现虚拟存储器而多次性和对换性又建立在离散分配的基础上,即要使用分段存储或者分页管理。
系统提供必要的硬件支持和实现请求分页的软件(分段式为例)。 硬件支持: 请求分段的段表机制,缺页中断机构。 软件支持:实现请求调页的软件和实现段置换的软件。
本质就是在页式存储管理的基础上,增加请求调页和页面置换的功能。
在基本页表基础上增加四个字段,如下:
缺页中断也需要经历保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,中断处理完成后恢复CPU环境这几步骤。但是缺页中断和普通中断不同:
在分页系统地址变换机构的基础上,为了实现虚拟存储器,增加某些新的功能,具体变换过程如下:
这是一种理想的算法,置换下来的页面是未来不会再被访问的页面。由于无法预知哪些页面不会被使用,所以该算法无法实现,可以用作评判置换算法优劣的标准。
选择在内存内驻留时间最长的页面进行置换,由于队列的性质就是先进先出,所以可以使用一个队列实现该算法。FIFO的优点是实现起来简单,缺点是与进程的运行规律不符合,可能会将经常被访问的进程置换出去,由于效率低,一般不会拿来使用,但是其实现简单的思想对后面的算法具有一定启发作用。
由于无法实现OPT中未来的最优, 退而求其次,用最近的过去当作最近的将来的近似。以最近的时间为评判标准,每个页面的访问字段中记录距离上次访问的时间t,每次置换时选取t值最大的置换出去。这种用过去近似未来的方法比FIFO更优,但页面的过去和未来没有明显的联系,所以在极端情况下,该算法还是会退化为FIFO的。
思想类似于LRU,但是以最近一段时间页面访问次数为评判依据,每次将最近访问次数最少的置换出去。实现方式也是利用一个寄存器,每次被访问则将最高位置1,每隔一定时间右移一位,则寄存器中1个数最少的就是最近时间内访问次数最少的。
LRU和LFU比FIFO的策略较科学,但是实现起来比FIFO复杂,那么有没有一种折中的算法?Clock算法就结合了两者的优点。 具体实现方式如下:
由于每次只能判断某个页面是否被访问过,,置换时将未使用过的页面置换出去,又把该算法称为最近未用算法(NRU)。
某个页面被换出后,如果该页面被修改过,则还需写入内存,如果未被修改过则无需写入内存。所以,在选择置换的页面时,同样是访问位为0的页面,置换出未被修改过的页面显然是更好的方法。
实现方法是,增加一个修改位M:
定义: 采用FIFO等算法时,可能出现分配的物理页面数增加,缺页次数反而升高的异常现象。 原因: FIFO算法的置换特征与进程访问内存的动态特征矛盾,被它置换出去的页面并不一定是进程近期不会访问的
没有Belady现象的算法: LRU算法
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有