第五章 虚拟存储器----详细讲解

虚拟存储器

  • 前言
  • 5.1 虚拟存储器概述
    • 5.1.1 常规存储管理方式的特征和局部性原理
    • 5.1.2 虚拟存储器的定义和特征
    • 5.1.3 虚拟存储器的实现方法
  • 5.2 请求分页存储管理方式
    • 5.2.1 请求分页中的硬件支持
    • 5.2.2 请求分页中的内存分配
    • 5.2.3 页面调入策略
  • 5.3 页面置换算法
    • 5.3.1 最佳置换算法和先进先出置换算法
    • 5.3.2 最近最久未使用和最少使用置换算法
    • 5.3.3 Clock置换算法
    • 5.3.4 影响页面换进换出效率的若干因素
    • 5.3.5 访问内存的有效时间
  • 5.4 "抖动"与工作集
    • 5.4.1 多道程序度与“抖动”
    • 5.4.2 工作集
    • 5.4.3 “抖动”的预防方法
  • 5.5请求分段存储管理方式
    • 5.5.1 请求分段中的硬件支持
    • 5.5.2 分段的共享与保护


前言

虚拟存储器技术实现了内存扩充功能,该功能是从逻辑上实现对内存容量的扩充,而非物理上。该技术既满足了用户的需要,又改善了系统的性能


5.1 虚拟存储器概述

  第四章介绍的各种存储管理方式,都需要将作业全部装入内存后方可运行。 于是,出现了下面两种情况:
  ①当作业要求的内存空间超过内存总容量时,无法装入内存运行;
  ②有大量作业要求运行,但内存容量不足以容纳所有这些作业,只能将少量作业装入内存运行。
解决办法:①从物理上扩充内存;②从逻辑上扩充内存——虚拟存储器。

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

  1. 常规存储管理方式的特征
      第四章介绍的各种存储管理方式都有以下两个特征:
      ①一次性:作业必须一次性全部装入内存后才能运行;
      ②驻留性:作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
      导致不用或暂不用的程序(数据)占据了大量内存空间,使得需要运行的作业无法装入运行。
  2. 局部性原理(常规的)
      程序在执行时将呈现局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域。
      时间局部性——某指令一旦执行,则不久后该指令可能再次被执行(数据亦然)。产生时间局限性的典型原因是程序中存在大量循环操作。
      空间局部性——程序一旦访问了某个存储单元,不久后,附近的存储单元也将被访问。典型情况是程序的顺序执行。

5.1.2 虚拟存储器的定义和特征

  1. 虚拟存储器的定义
      虚拟存储器,是指具有请求调入功能置换功能,能从逻辑上对内存容量加以扩充的一种存储系统。
      其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存,但成本接近于外存.可见虚拟存储技术是一种性能非常优越的存储器管理技术,广泛应用于大中小型机器和微型机中.
  2. 虚拟存储器特征
    多次性: (相对于传统存储器管理方式的一次性而言)一个作业被分成多次调入内存运行(部分装入);多次性是虚拟存储器最重要的特征,其他存储管理方式不具有.
    对换性:(相对于传统存储器管理方式的常驻性而言)作业在运行过程中进行换进、换出;
    虚拟性:从逻辑上扩充内存,使用户看到的内存容量大于实际内存容量。有效改善内存利用率、提高程序执行的并发程度,从而增加系统的吞吐量。这是虚拟存储器所表现的最重要的特征,也是实现虚拟存储器的最重要的目标。

5.1.3 虚拟存储器的实现方法

  虚拟存储器基本原理:
  部分装入:应用程序在运行前,没有必要全部装入(局部性原理),仅将那些当前要运行的页面或段先装入内存便可以运行,其余部分暂留在磁盘上。
  请求调页:程序在运行时,如果所要访问的页(段)已调入内存,便可继续执行下去;否则,应利用OS所提供的请求调页(段)功能,将它们调入内存,以便继续运行。
  页面置换:如果此时内存已满,则需利用页(段)置换功能,将内存中暂不用的页(段)调到磁盘上在将访问的页(段)调入内存,使程序继续运行下去。

  1. 分页请求系统
      分页请求系统是是在分页系统基础上,增加了请求调页功能页面置换功能所形成的页式虚拟存储系统。允许用户程序只装入少数页面的程序(及数据)即可启动运行。
      必须提供硬件支持和相应的软件:
      (1)硬件支持主要有:
        ①请求分页的页表机制 :在纯分页的页表机制上增加若干项形成的,作为请求分页的数据结构
        ②缺页中断机构 :每当用户程序要访问的页面尚未调入内存时,便产生一次缺页中断,以请求OS将所缺的页调入
        ③地址变换机构 :在纯分页地址变换机构的基础上发展而来
      (2)实现请求分页的软件——请求调页、实现页面置换的软件
  2. 请求分段系统
      在分段系统基础上,增加了请求调段功能分段置换功能所形成的段式虚拟存储系统。允许用户程序只要装入少数段(而非所有段)的程序和数据即可启动运行。
      硬件支持和相应的软件:
      (1)硬件支持主要有:
        ①请求分段的段表机制 :在纯分段的段表机制上增加若干项形成的,作为请求分段的数据结构
        ②缺段中断机构 :每当用户程序要访问的段尚未调入内存时,便产生一次缺段中断,以请求OS将所缺的段调入
        ③地址变换机构 :在纯分段地址变换机构的基础上发展而来
      (2)实现请求分段的软件——请求调段、实现段置换的软件

5.2 请求分页存储管理方式

  每次调入调出的基本单位都是长度固定的页面。请求分页是目前最常用的一种实现虚拟存储器的方式。

5.2.1 请求分页中的硬件支持

  1. 请求页表机制
      请求分页系统中需要的主要数据结构是请求页表。其基本作用仍然是将用户地址空间中的逻辑地址映射为内存空间中的物理地址。
    每个页表项如图:
    在这里插入图片描述
    字段说明
    状态位P:指示该页是否已调入内存
    访问位A:记录本页在一段时间内被访问的次数
    修改位M:表示该页被调入内存后是否被修改过
    外存地址:指出该页在外存的地址,通常是磁盘物理块号。
  2. 缺页中断机构
      缺页中断是一种特殊的中断,与一般中断相比,主要有以下区别:
      (1)在指令执行期间产生和处理
       (2)一条指令执行期间可能要产生多次
  3. 地址变换机构
    地址变换时,首先检索快表
    第五章 虚拟存储器----详细讲解_第1张图片

5.2.2 请求分页中的内存分配

  为进程分配内存时,涉及到3个问题:

  1. 最小物理块数的确定
      分配的物理块数越少,缺页率越高,进程执行速度越低。
      最小物理块数是指能保证进程正常运行所需的最小物理块数。与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式
  2. 内存分配策略
      内存分配有固定和可变分配策略,置换时有全局和局部置换策略。于是组合出以下三种适用策略:
      (1)固定分配局部置换:固定指每个进程分配一组固定数目的物理块,在运行期间不改变;局部指进程在运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。
      (2)可变分配全局置换:可变指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加和减少;全局指如果进程运行时发现缺页,则将OS所保留的空闲物理块(一般为一个空闲队列)取出一块分配给该进程。
      (3)可变分配局部置换:由上自行类比
  3. 物理块分配算法
    固定分配策略时,所采用的分配算法:
    (1)平均分配算法:可供分配物理块平均分配给各个进程;eg.100个物理块5个进程,一个进程20块。会造成较高缺页率
    (2)按比例分配算法:根据进程大小按比例分配物理块。
    (3)考虑优先权的分配算法:重要、紧迫的任务分配较多的内存空间;通常将可供分配物理块分为两部分,一部分按比例分配,另一部分为高优先权进程适当增加相应份额。该法较为合理。

5.2.3 页面调入策略

  为使进程能正常运行,必须事先将要执行的那部分程序和数据所在的页面调入内存。
  需要解决的问题是:

  1. 何时调入页面
    (1)预调页策略:以预测为基础,将预计在不久后便会被访问的页面预先调入内存。但成功率仅有50%
    (2)请求调页策略 :在进程运行时,若缺少所需页面,则立即提出请求,由OS将所需页面调入内存。目前虚拟存储器中大多采用此策略,但一次仅调入一页,开销较大。
  2. 从何处调入页面
      在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。通常,对换区采用连续分配方式文件区采用离散分配方式,故对换区的数据存取(磁盘I/O)速度比文件区高。
      发生缺页请求时,系统从何处调用,分为以下三种情况:
      (1)系统有足够的对换区——全部从对换区调入。在系统运行之前需要将与该进程有关的文件从文件区拷贝到对换区。
      (2)系统缺少对换区——全部从文件区调入
      (3)UNIX方式——凡未运行的页面,从文件区调入;曾经运行过又被调出的页面,从对换区调入。共享页面有时无须调入
  3. 页面调入过程
      每当程序所要访问的页面未在内存(存在位为:“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘I/O,将该页调入内存,然后修改页表。如果内存满了,按照某种置换算法,从内存中选出一页换出,若该页未被修改过(修改位为“0”),可不必再写回磁盘,否则必须把它写回磁盘,再把所需的页面调入内存,并修改页表中对应的页表项,置存在位为“1”,并将此页表项写入快表。整个页面调入过程对用户是透明的。
  4. 缺页率
    S:访问页面成功次数
    F:缺页次数
    f(缺页率)=F/(S+F)
    缺页率所受因素影响:
    (1)页面大小:页面划分较大,缺页率较低;反之较高
    (2)进程所分配物理块数目:分配越多,缺页率越低
    (3)页面置换算法:算法优劣决定了缺页次数,缺页率是衡量页面置换算法的重要指标。
    (4)程序固有特性:程序本身编制方法对缺页中断次数有影响,根据程序执行的局部性原理,程序局部化程度越高,相对执行时缺页程度越低

5.3 页面置换算法

  置换算法的好坏直接影响系统的性能。
  不适当的算法可能会导致进程发生“抖动”,即——刚被换出的页很快又要被访问,需要将它重新调入,此时又需要再选一页调出;而次刚被调出的页很快又被访问了,又需要将它调入,如此频繁地更换页面,以致一个进程在运行中把大部分时间都花费在页面置换工作上,称该进程发生了“抖动”。

5.3.1 最佳置换算法和先进先出置换算法

  1. 最佳置换算法(OPT)
    算法:选择以后永不使用的或者是未来最长时间内不再使用的页面淘汰
    一种理论上的算法,无法实现,常用来去评价其他算法
    第五章 虚拟存储器----详细讲解_第2张图片
  2. 先进先出页面置换算法(FIFO)
    算法:选择在内存中驻留时间最长的页面(最先进入内存的)淘汰。
    实现:只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针(指向最老页面)。
    第五章 虚拟存储器----详细讲解_第3张图片

5.3.2 最近最久未使用和最少使用置换算法

  1. 最近最久未使用(LRU)
    算法:选择最近最久未使用的页面进行淘汰。——用“最近的过去”作为“最近的将来”的近似。
    硬件支持:须有寄存器(记录某进程在内存中各页的使用情况)和栈(栈顶始终是最新的,栈底是最近最久未使用的页面号)两类硬件之一的支持。
    第五章 虚拟存储器----详细讲解_第4张图片
  2. 最少使用(LFU)
      该算法选择近期使用最少的页面做淘汰页面
      LFU置换算法的页面访问图与LRU页面访问图完全相同。也就是说一套寄存器硬件即可以实现LRU也可实现LFU。

5.3.3 Clock置换算法

  虽然LRU是一种较好的算法,但它硬件支持要求较多,使用成本较高。因此实际应用中,大多采用LRU近似算法,Clock算法是用的较多的一种LRU近似算法。

  1. 简单的Clock置换算法(最近未用算法)
      内存中的所有页面组织在一个循环链表中,并设置一个指针pointer,用于指示页面查找的起始位置。
      页面设置一个访问位,当页面被访问时,便将访问位置1。
      置换页面时,从指针位置开始,查看指针所指页面的访问位是否为1,如果是1,则将该页面的访问位修改为0,并指向下一个页面。
       否则,挑选该页面换出内存,并将新的页面换入内存,置新页面访问位为1;最后让指针指向下一个页面。
       第1圈扫描结束后,若没有找到淘汰的页面,则进行第2圈扫描,此时,必定能够找到淘汰的页面。
    第五章 虚拟存储器----详细讲解_第5张图片
    第五章 虚拟存储器----详细讲解_第6张图片
    第三个到第四个(1—》2),刚开始指针在7,访问位为1,修改为0,指向下一个0,访问位仍为1,修改为0,指向下一个1,访问位为1,修改为0。进行第二轮扫描,指向7,此时访问位为0,置换该页面。

  2. 改进型Clock置换算法
      淘汰被修改过的页面时,需将其写回磁盘(置换代价高),因此应淘汰既未被访问又未被修改的页面。为此,每个页面除了有访问位A外,还增加一个修改位M。由访问位A与修改位M可以组成下面4种类型的页面:
      1类(A=0,M=0),是最佳淘汰页;
      2类(A=0,M=1) ;
      3类(A=1,M=0) ;
      4类(A=1,M=1) ,最近被访问且被修改过的页,最不应该淘汰。
    算法过程:
    (1)从指针当前位置开始,扫描循环队列,寻找A=0且M=0的第1类页面,将所遇到的第一个页面淘汰。
    (2)若第1步查找一周后未遇到第1类页面,则寻找A=0且M=1的第2类页面,将将所遇到的第一个页面淘汰。第2轮扫描中将所有扫描过的页面的访问位A清0。
    (3)若第2轮扫描失败,则返回(1)(淘汰原3类页),若仍失败,再重复第(2)(淘汰原4类页)步,此时就一定能找到被淘汰的页。

  该算法与简单Clock算法比较,可减少磁盘的I/O操作次数,但为了找到一个可置换页面,可能要经过几轮扫描,使得开销增大。

5.3.4 影响页面换进换出效率的若干因素

(1)页面置换算法。影响页面换进换出效率最重要的因素。
(2)写回磁盘频率。对于已经被修改过的页面,在将其换出时,应当写回磁盘,如果是采取每当有一个页面要被换出时就将它写回磁盘的策略,这意味着每换出一个页面,便需要启动一次磁盘。
(3)读入内存的频率。设置已修改换出页面链表(将需换出的页面暂不写回磁盘,而是挂载链表上,等达到一定值时,一起写回)不仅可以减少写回磁盘频率,也减少将页面从磁盘读入内存的频率。

5.3.5 访问内存的有效时间

  内存访问操作不同,有效时间的计算也不同。
(1)被访问也在内存中,且其对应的页表项在快表中。
  不存在缺页中断情况,内存的有效访问时间(EAT)分为查找快表的时间(f)和访问实际物理地址所需的时间(t):EAT=f+t
(2)被访问页在内存中,但不在快表中
  不存在中断情况,但需要两次访问内存,一次读取页表,一次读取数据,另外需要更新快表。EAT=f+t+f+t=2(f+t)
(3)被访问页不在内存中
  需要进行缺页中断处理,所以时间分为查找快表时间,查找页表时间,处理缺页中断时间(lack),处理更新快表时间和访问实际物理地址时间。EAT=f+t+lack+f+t=lack+2(f+t)

  若加入缺页率(l)和命中率(a):EAT=f+at+(1-a)[t+f*(l+t+f)+(1-f)*(t+f)]

5.4 "抖动"与工作集

  请求分页式虚拟存储器系统的性能优越,正常运行情况下可以有效减少内存碎片,提高处理机的利用率和吞吐量。但若系统中运行进程太多,进程在运行中会频繁地发生缺页情况,也会对系统的性能产生很大的影响,因此还需对请求分页系统的性能做简单的分析。

5.4.1 多道程序度与“抖动”

  1. 多道程序度与处理机利用率
      由于虚拟存储器系统能从逻辑上扩大内存,人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。
      如果多道程度过高,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动(thrashing) 。
    横轴为进程数
    第五章 虚拟存储器----详细讲解_第7张图片
  2. 产生“抖动”的原因  
      同时运行的进程数过多,进程频繁访问的页面数高于可用的物理块数,造成进程运行时频繁缺页。CPU 利用率太低时,调度程序就会增加多道程序度,将新进程引入系统中,反而进一步导致处理机利用率的下降。
      操作系统需要一种降低缺页率、防止抖动的内存管理方法:工作集策略
  3. 缺页率与系统为进程分配物理块的多少有关。
      缺页率随着分配物理块的增加而减少。
      当物理块数达到某个数值时,物理块数的增加对缺页率没有明显影响。当物理块数小于某个数值时,减少一块都会对缺页率有较大影响。
    第五章 虚拟存储器----详细讲解_第8张图片

5.4.2 工作集

  1. 工作集的基本概念
      工作集是指在某段时间间隔 ∆ 里,进程实际要访问的页面的集合。
      虽然程序只需要少量的几页在内存便可运行,但为了较少地产生缺页,应将程序的全部工作集装入内存中。然而我们无法事先预知程序在不同时刻将访问哪些页面,故仍只有像置换算法那样,用程序的过去某段时间内的行为作为程序在将来某段时间内行为的近似。
      把进程在某段时间间隔 ∆ 里,在时间 t 的工作集记为w(t,∆),变量 ∆ 称为工作集“窗口尺寸” 。
      对于给定的页面走向,如果 ∆ = 10 次存储访问,在 t1时刻的工作集是 W(t1,10)=(1,2,5,6,7),在 t2 时刻,工作集是 W(t2,10)=(3,4)
    窗口为3、4、5时进程的工作集
    第五章 虚拟存储器----详细讲解_第9张图片

5.4.3 “抖动”的预防方法

  1. 局部置换策略
      在页面分配和置换策略中,如果采取的是可变分配方式,则为了预防发生“抖动”,可采取局部置换策略。当某进程发生缺页时,只能在分配给自己的内存空间内进行置换,不允许从其他进程去获得新的物理块。

  2. 把工作集算法融入到处理机调度中 
      当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,来改善处理机的利用率。
      在调度中引入工作集策略,检查每个进程在内存中驻留页面是否够,防止因为引入新作业而导致缺页率增加。

  3. 利用“L=S”准则调节缺页率
      理论和实践都已证明有效的缺页率调节手段。L是缺页之间的平均时间S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。

  4. 选择暂停的进程
      当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。基于某种原则选择暂停某些当前活动的进程。通常采用与调度程序一致的策略。

5.5请求分段存储管理方式

  在请求分段系统中,程序运行之前,只需调入若干分段(不必调入所有分段),便可启动运行。(与请求分页系统实现原理十分相似)
  当所访问的段不在内存时,可请求OS将所缺的段调入内存。像请求分页系统一样,为实现请求分段存储管理功能,同样需要一定的硬件支持和相应的软件。

5.5.1 请求分段中的硬件支持

  请求分段中所需的硬件支持有段表机制缺段中断机构地址变换机构

  1. 请求段表机制
    请求分段式管理中,所需的最主要数据结构请求段表
    由于应用程序的段,只有一部分装入内存,故需在段表中增加若干项,以供程序在调进、调出时参考。
    在这里插入图片描述
    存取方式:用于标识本分段的存取属性是执行、只读、读/写
    访问字段A:用于记录该分段被访问的频繁程度
    修改位M:用于表示该段进入内存后是否被修改,供分段置换时参考
    存在位P:指示本段是否已调入内存,供程序访问时参考
    增补位:用于表示该段进入内存后是否做过动态增长
    外存始址:指示本段在外存中的起始地址,即起始盘块号

  2. 缺段中断机构
      在请求分段系统中,每当发现运行进程所要访问的段不 在内存时,便由缺段中断机构产生一缺段中断信号,进 入OS后由缺段中断处理程序将所需的段调入内存。
      同样需要在一条指令的执行期间,产生和处理中断(一 条指令执行期间可能产生多次缺段中断)
      缺段中断的处理比缺页中断复杂(段不是定长)
    第五章 虚拟存储器----详细讲解_第10张图片

  3. 地址变换机构
      请求分段系统的地址变换机构,是在分段系统的地址变换机构的基础上形成的。
      因为在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能利用段表进行地址变换。因此在地址变换机构中增加了缺页中断的请求和处理等功能。
    第五章 虚拟存储器----详细讲解_第11张图片

5.5.2 分段的共享与保护

  1. 共享段表(所有共享段都在共享段表中占有一表项)
    (1) 共享进程计数count。记录有多少个进程正在共享该分段。count为0时才回收。  
    (2) 存取控制字段。
    (3) 段号。
    第五章 虚拟存储器----详细讲解_第12张图片

  2. 共享段的分配与回收
     1) 共享段的分配:为第一个请求进程,分配一物理区,再把共享段调入该去,同时将该区的始址填入请求进程的段表的相应项中,还需在共享段表中添加一表项,填写使用该共享段进程的信息,并把count设为1.当又有其他进程需要调用时,由于该共享段已进入内存,只需在段表增加表项,并count+1.
     2)共享段的回收:count为0

  3. 分段保护
      在分段系统中,由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护。目前,常采用以下几种措施来确保信息的安全。
       1)越界检查  2) 存取控制检查  
    3)环保护机构:低编号的环具有高优。OS核心处于0环内;某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:
    ①一个程序可以访问驻留在相同环或较低特权环(外环)中的数据
    ②一个程序可以调用驻留在相同环或较低特权环(外环)中的服务
    第五章 虚拟存储器----详细讲解_第13张图片

你可能感兴趣的:(计算机操作系统)