操作系统——虚拟存储器


一、虚拟存储器概述

1. 常规存储管理方式的特征和局部性原理

  • 常规存储管理方式的特征
    我们把之前博客所介绍的各种存储器管理方式统称为传统存储器管理方式,它们全都具有如下两个共同的特征:
    • 一次性:作业在运行前需一次性地全部装入内存。将导致下面的问题。
    • 驻留性:作业装入内存后,便一直驻留内存,直至作业运行结束。
  • 常规存储管理方式导致的问题
    • 有的作业很大,所需内存空间大于内存总容量,使作业无法运行。
    • 有大量作业要求运行,但内存容量不足以容纳下所有作业,只能让一部分先运行,其它在外存等待。
    • 解决方案:增加内存容量。从逻辑上扩充内存容量----虚拟存储器(对换)
  • 局部性原理
    • 指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
  • 局部性表现为
    • 时间局部性:由于大量的循环操作,某指令或数据被访问后,则不久可能会被再次访问;
    • 空间局部性:如顺序执行,指程序在一段时间内访问的地址,可能集中在一定的范围之内。

2. 虚拟存储器的定义和特征

  • 虚拟存储器的定义
    • 虚拟存储器是指仅把作业的一部分装入内存便可运行作业的存储管理系统,
    • 它具有请求调入功能置换功能,能从逻辑上对内存容量进行扩充,
    • 其逻辑容量由外存容量和内存容量之和决定,其运行速度接近于内存成本接近于外存
  • 虚拟存储器的特征
    • 多次性(最基本特征):多次性是虚拟存储器最重要的特征。指一个作业被分成多次调入内存运行。
    • 对换性:对换性指允许在作业运行过程中进行换进、换出。换进、换出可提高内存利用率
    • 虚拟性(最本质特征):虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。虚拟性是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器最重要的目标。
    • 注:虚拟性以多次性和对换性为基础,而多次性和对换性又是离散分配为基础。

3. 虚拟存储器的实现方法

  • 虚拟存储器的实现都建立在离散分配内存的管理方式。所以,目前,所有的虚拟存储器都是采用下面两种方法之一实现的。
    • 分页请求系统
    • 分段请求系统
      在这里插入图片描述

二、请求分页存储管理方式

请求分页系统是在基本分页基础上的,增加了请求调页功能和页面置换功能,相应的每次调入和换出的基本单位都是长度固定的页面。

1. 请求分页的硬件支持

为了实现请求分页,系统必须提供一定的硬件支持。计算机系统除了要求一定容量的内存和外存外,还需要有请求页表机制缺页中断机构以及地址变换机构

  • 请求页表机制
    • 在请求分页系统中需要的主要数据结构是请求页表,即在页表的基础上进行了扩充。
      • 状态位P(存在位):指示该页是否已调入内存。判断是否缺页。
      • 访问字段A:记录本页在一段时间内被访问的次数或最近未被访问的时间。根据访问位来决定淘汰哪页。
      • 修改位M:表示该页在调入内存后是否被修改过。若修改过,则换出时需重写至外存。供置换页面时参考。
      • 外存地址:指出该页在外存上的地址。
        在这里插入图片描述
  • 缺页中断机构
    • 在请求分页系统中,当访问的页不在内存,便产生一缺页中断,请求OS将所缺页调入内存空闲块,若无空闲块,则需置换某一页,同时修改相应页表表目。
    • 缺页中断与一般中断的区别:
      • 在指令执行期间产生和处理中断信号。缺页中断要立即处理。
      • 一条指令在执行期间,可能产生多次缺页中断。
  • 地址变换机构
    • 请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,再增加了某些功能所形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等。
      在这里插入图片描述

2. 请求分页中的内存分配

为进程分配内存时,涉及到三个问题:(1)为保证进程能正常运行,所需要的最小物理块数的确定;(2)为每个进程分配物理块时,应采取怎样的内存分配策略,即物理块是固定的还是可变的;(3)为不同进程分配物理块时,是采用平均分配算法,还是根据进程的大小按比例分配。

  • 最小物理块数的确定
    • 最小物理块数是指能够保证进程正常运行所需的最小物理块数,进程应获得最小物理快数,与计算机的硬件结构有关,取决于指令的格式,功能和寻址方式。
  • 内存分配策略
    • 在请求分页系统中,可采用两种内存分配策略,即固定和可变分配策略。在进行置换使,也可以采取两种策略,即全局置换和局部置换。于是可以组合出一下三种适用的策略:
      • 固定分配局部置换
      • 可变分配全局置换
      • 可变分配局部置换
    • 固定分配:分配给进程的物理块数是固定的,不可变的。
    • 可变分配:分配给进程的物理快数不是是固定的,随着进程的运行时变化的。
    • 全局置换:是指在发生缺页时,在OS所保留的所有空闲物理块中选择一个,换入。
    • 局部置换:是指发送缺页时,只能从分配给该进程的n个物理块中,选择一个换出。
  • 物理块分配算法
    在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法:
    • 平均分配算法——即将系统中所有可供分配的物理块平均分配给各个进程。
    • 按比例分配算法——即根据进程的大小按比例分配物理块。
    • 考虑优先权的分配算法——在实际应用中,为了照顾到重要的、紧迫的作业能尽快地完成,应为它分配较多的内存空间。通常采取的方法是把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权进行分配,为高优先进程适当地增加其相应份额。在有的系统中,如重要的实时控制系统,则可能是完全按优先权为各进程分配其物理块的。

3. 页面调入策略

使进程能够正常运行,必须事先将要执行的那部分程序和数据所在的页面调入内存。此时会出现三个问题:(1)系统应在何时调入所需页面(2)系统应从何处调入这些页面(3)如何进行调入的。

  • 何时调入页面
    • 为确定系统将进程运行时所缺页表调入内存的时机,可以采用下面两种方法:
      • 预调页策略:将预计在不久之后便会被访问的页面预先调入内存,进程的页一般存放在外存的一个连续区域中。一次调入若干个相邻的页会比一次调入一页更高效。但如果调入的一批页面中的大多数都未被访问,则浪费了内存。
      • 请求调页策略:当进程在运行中发生缺页时,就立即提出请求,由系统将缺页调入内存。但这种策略每次仅调入一页,须花费较大的系统开销,增加了启动磁盘 I/O 的频率。
  • 从何处调入页面
    • 当发生缺页请求时,系统从何处将缺页调入内存,可分为下面三种情况
      • 系统拥有足够的对换区空间:这时可以全部从对换区调入所需页面,以提高调页速度。为此需将于该进程有关的文件从文件区复制到对换区。
      • 系统缺少足够的对换区空间:这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改,则不必再将它们重写到磁盘(换出),以后再调入时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时再从对换区调入。
      • UNIX方式:凡未运行过的页面都从文件区调入。运行过但又被换出的页面,都放在对换区,因此下次调入时,从对换区调入。同时UNIX系统运行页面共享,所以,某些进程所请求的页面有可能已经在内存中。
  • 页面调入过程
    • 每当程序所要访问的页面未在内存时(存在位为“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。 此时该程序通过查找找到该页面的物理块,然后将其换入到内存中。
  • 缺页率
    • 假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A = S + F,那么该进程在其运行过程中的缺页率即为 f = F / A 。

三、页面置换算法

页面置换算法

四、“抖动”与工作集

1. 多道程序度与“抖动”

  • 多道程序度与处理机的利用率
    • 由于虚拟存储器系统能从逻辑上扩大内存,这时,只需装入一个进程的部分程序和数据便可开始运行,故人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。
    • 但处理机的实际利用率却如图:(其中横轴表示进程的数量,纵轴表示多道程序度。之所以会发生后面阶段利用率趋于0的情况,是因为在系统中已发生抖动。)
      在这里插入图片描述
  • 产生“抖动”的原因
    • 发生“抖动”的根本原因是,同时在系统中运行的进程太多,由此分配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。这会使得在系统中排队等待页面调进/调出的进程数目增加。
    • 显然,对磁盘的有效访问时间也随之急剧增加,造成每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况。

2. 工作集

  • 工作集的基本概念
    • 进程发生缺页率的时间间隔与进程所获得的物理块数量有关。
      在这里插入图片描述
    • 1968 年 Denning 提出了工作集(Working Set) 理论。
  • 工作集的定义
    • 工作集是指在某段时间间隔 ∆ 里,进程实际要访问的页面的集合。
    • 把进程在某段时间间隔 ∆ 里,在时间 t 的工作集记为w(t,∆),变量 ∆ 称为工作集“窗口尺寸” 。
    • 对于给定的页面走向,如果 ∆ = 10 次存储访问,在 t1时刻的工作集是 W(t1,10)=(1,2,5,6,7),在 t2 时刻,工作集是 W(t2,10)=(3,4)
      在这里插入图片描述
  • 工作集的特点
    • 工作集的大小是变化的。
    • 相对比较稳定的阶段和快速变化的阶段交替出现。
    • 根据局部性原理,进程会在一段时间内相对稳定在某些页面构成的工作集上。
    • 当局部性区域的位置改变时,工作集大小快速变化。
    • 当工作集窗口滑过这些页面后,工作集又稳定在一个局部性阶段。

3. “抖动”的预防方法

  • 采取局部置换策略。即缺页时,只能在分配给自己的内存里进行置换,不允许从其他进程获取新的物理块,这样即使该进程发生抖动也不好影响其他进程。但效果不是很好,在某进程发生抖动后,他还会常去处于磁盘的io等待队列中,这会延迟其他进程区人员中断的处理时间。
  • 把工作集算法融入到处理机调度中。当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,来改善处理机的利用率。 在融入工作集算法后,在调度程序从外存调入作业之前,必须检查每个进程在内存驻留页面是否足够多。如果都足够多,此时便可以将新作业调入内存中,反之则不调入。
  • 利用“L=S”准则调节缺页率。Denning于1980年提出了“L=S”的准则来调节多道程序度,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。
  • 选择暂停的进程。当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。 此时根据某种算法选择一个进程,暂停该进程。

五、请求分段存储管理方式

请求分段存储管理方式和请求分页管理方式,在实现原理和所需要的硬件支持都是十分相似的。只不过,是以分段为单位进行换入和换出的。

1. 请求分段中的硬件支持

与请求分页系统相似,在请求分段系统中所需的硬件支持有段表机制缺段中断机构以及地址变换机构

  • 请求段表机制
    • 在请求分段系统中需要的主要数据结构是请求段表,即在段表的基础上进行了扩充,
      • 存取方式: 存取属性(执行、只读、允许读/写)。
      • 访问字段A:记录该段被访问的频繁程度。
      • 修改位M: 表示该段在进入内存后,是否被修改过。
      • 存在位P: 表示该段是否在内存中。
      • 增补位: 表示在运行过程中,该段是否做过动态增长。
      • 外存地址: 表示该段在外存中的起始地址。
        在这里插入图片描述
  • 缺段中断机构
    • 和与缺页中断机构类似,请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。
      在这里插入图片描述
  • 地址变换机构
    • 请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。
      在这里插入图片描述

2. 分段的共享与保护

  • 共享段表
    为了实现分段共享,可在系统中设置一个共享段表,所有共享段都在共享段表中占有一个表项,共享段表内容如下:
    在这里插入图片描述
  • 共享段的分配与回收
    • 共享段的分配:为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为之分配一个物理区,再把共享段表中增加一表项,修改添加相应的数据。对于后面申请使用该共享段的进程,只需要在该进程段表中增加一项,并添加修改相应的数据。
    • 共享段的回收:当共享此段的某进程不在需要该段时,将该段释放,包括撤销该进程段表中对应的表项。同时修改共享段表的数据,当没有一个进程调用该段时,则操作系统对该段进行回收。
  • 分段保护
    在分段系统中,由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护。目前,常采用以下几种措施来确保信息的安全。
    • 越界检查
    • 存取控制检查
    • 环保护机构

六、小结

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/pary__for/article/details/114538801