虚拟存储器

  • 虚拟存储器的基本概念

常规存储器管理方式的特征:一次性,即作业在运行前必须一次性装入内存。驻留性,即作业装入内存后,便一直驻留在内存中,直到作业运行结束。

局部性原理:是指程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应的它所访问的空间页局限于某个区域。具体表现为以下两个方面:

时间局部性:如果程序中的某条指令一旦执行,则不久以后该指令将有可能再次执行;某个数据一旦访问,则不久以后该数据将有可能再次访问。产生时间局部性的典型原因是程序中存在大量的循环操作。

空间局部性:一旦程序访问了某个存储单元,则在不久以后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一个范围内,其典型的情况便是程序的顺序执行。

基于上述局部性原理,应用程序不需要在运行前全部装入内存,仅须将当前要运行的那部分程序和数据装入内存便可启动程序进行访问,其余部分驻留在外存,当要执行的指令或访问的数据不在内存时,再由OS自动通过请求调入功能将它们调入内存,以使得程序能继续运行;如果内存已满则需要置换功能,将内存中暂时不用的程序或数据调至磁盘,将要访问的数据或程序调入内存,使程序继续运行,这样就可以使得一个较大的用户程序在较小的内存空间里运行,也可在内存中装入更多的程序使它们并发执行。我们将这种具有请求调入功能和置换功能、能从逻辑上对内存容量加以扩充的存储器系统称为虚拟存储器。

虚拟存储器具有以下特征:多次性,与常规存储器管理中的“一次性”相反;对换性,与常规存储器管理的“驻留性”相反;虚拟性,存储器对内存的扩充是在逻辑上进行的,用户感觉到的大内存是一种假象,并不实际存在。

  • 请求分页存储管理方式

在分页的基础上增加了调页功能和页面置换功能,便形成了能支持虚拟存储器功能的方式,是一种常用的虚拟存储器的方式。请求分页机制中的页表项除了内存块号和存取访问字段以外,还增加了状态位P、范围字段A、修改位M、外存地址。

①状态位:用于指示该页是否已调入内存。

②访问字段:用于记录本页最近一段时间内被访问的次数或最近已有多长时间未被访问,供置换算法在选择换出页面时参考。

③修改位:表示该页在调入内存后是否被修改过,供换出页面时参考,以决定是否将换出页面写会内存。

④外存地址:用于指出该页在外存的地址,供调入页面时参考。

在请求分页的系统中,当进程访问某个数据或某条指令时,硬件地址变换机制会将根据逻辑地址中的页号页检索页表,并根据页表中的存在位判断页面是否被调入内存,若已经调入内存则可立即从页表项中得到该页的内存块号,并与页内地址合成物理地址,同时修改页表中的访问位,若是写指令则需要将修改位置为1,若访问的页面未被调入内存,则会产生缺页中断,此时上述访问缺页的作业被中断,控制将转向缺页中断处理程序。若程序内存有空闲块,则根据页表项中的外存地址将页面装入内存,然后修改页表项中状态位和内存块号即可;否则,没有空闲块则需要将置换算法淘汰内存中的一页,对已被修改过的淘汰页则需要重新写会磁盘,然后将所缺页面装入内存。

内存分配策略和置换策略:在请求分页系统中,可采用两种内存分配策略,即固定分配和可变分配。在进行置换时,也可采用两种策略,即全局置换和局部置换。于是可组合出三种适用的策略:

①固定分配局部置换策略:为进程分配的物理块数目在进程的整个生命周期都不改变,若进程因调入页面而需要换出页面则只能换出它自己内存页面。采用此策略在进程运行过程中可能会用完内存块太少而频繁缺页,或者因内存块太多而浪费空间。

②可变分配全局置换策略:系统先为每个进程分配一定数目的进程块,当进程发生缺页时,若系统中有空闲的内存块,则为其分配一个物理块并装入缺页;若系统已经没有空闲物理块则需要从内存中选择一页换出,被换出的页可以是系统任一进程页面。

③可变分配局部置换策略:为每个进程分配一定数目的物理块后,若某个进程发生缺页,则只能在自己的内存里置换页面。如果进程频繁进行缺页则为该进程额外分配若干物理块,直到缺页率减少的合适程度;反之则适当减少该进程的物理块,因此,该策略可获得较高的内存空间利用率,同时又能保证每个进程有较低的缺页率。

  • 置换算法

最佳置换算法(OPT):选择以后不再使用或最长时间不再被访问的内存页面予以淘汰。可以保证获得最低的缺页率,但由于人无法预知哪个页面是未来最长时间不被采用的,所以该算法只能是一种理论的算法。

先进先出置换算法(FIFO):选择最先进入的内存最先淘汰的算法。实现简单,但往往与实际运行的规律不相符,在实际情况下很少使用纯粹的FIFO算法。

最近最久未使用置换算法(LRU):LRU算法赋予每个页面一个访问字段,用于记录相应页面自上次被访问以来所经历的时间t,当淘汰一个页面时,应选择所有页面中t值最大的页面,即内存中最近一段时间最久未被访问的页面。

Clock算法:每个页面设置一个访问位,,将内存中所有页面通过链接指针链接成一个循环队列。当某页被访问时,其访问位由硬件置1,置换算法是从替换指针开始顺序检查循环队列中的各个页,如果访问位为0,则选择该页进行替换;若访问位为1,则置0,并继续向下一个查找。

改进的Clock算法:由于未修改的页面不用写回磁盘,所以可以利用修改为一同进行置换检测。首先从替换指针开始第一次扫描循环队列,并选择首个访问位和修改位都为0的页面进行置换,如一轮扫描未出现理想页面,则开始第二轮,选择首个访问位为0,修改位为1的页面进行置换,同时将所有扫描过的页面访问位置为0;若还没找到,则重复以上两轮循环。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值