操作系统笔记 虚拟存储器和 I/O 设备

5. 虚拟存储器

5.1 概念

前面讲的各种存储器管理方式,有一个共同的特点,即它们都要求将一个作业全部装入内存后才能运行,所以可能会出现:

  1. 作业很大,导致作业不能全部装入内存中,无法运行;
  2. 作业很多,只能将少数作业装入内存运行,而将其他大量的作业留在外存等待。

出现这些情况的一种原因是由于内存容量不够大,而另一种是从逻辑上扩充内存容量,这即是虚拟存储器所解决的问题。

P.Denning 提出:局部性原理(principle of locality),指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。所以程序没必要全部装入内存,只需要将少量页面或段先装入内存即可运行。如果程序要访问的页(段)尚未调入内存,便发出缺页(段)请求。将相应的页或段调入到内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。

所以,虚拟存储器的定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统

5.2 实现

请求分页系统

  • 在分页系统的基础上增加请求调页功能和置换功能所形成的页式虚拟存储器系统。

  • 硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构。

  • 软件支持:调入和分配策略、置换算法

请求分段系统

  • 在分段系统的基础上增加请求调段功能和分段置换功能所形成的段式虚拟存储器系统。
  • 硬件支持:请求分段的段表机制、缺段中断机构、地址变换机构
  • 软件支持

5.3 请求分页存储管理方式

在进程开始运行之前,不是装入全部页面,而是装入几个或零个页面,之后根据进程运行的需要,动态装入其它页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。

这个管理方式大致如图:
这里写图片描述

页表机制

这里写图片描述

  • 状态位:表示该页是否装入内存;
  • 访问位:此页在一段时间被访问的次数,可用来决定淘汰哪页(由不同的算法决定);
  • 修改位:查看此页是否在内存中被修改过;
  • 外存地址:该页在外存上的位置。

例子

页表的部分列,其中第1、2、3列分别是页号、块号、状态位,页长4k:
这里写图片描述

缺页中断(Page Fault)处理

  1. 在地址映射过程中,在页表中发现所要访问的页不在内存,则产生缺页中断
  2. 操作系统接到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,准备将该页调入内存。此时应将缺页的进程挂起(调页完成唤醒);
  3. 如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项的状态位及相应的内存块号;
  4. 若此时内存中没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存)。

缺页中断一般中断都是中断,相同点是:

  1. 保护现场;
  2. 中断处理;
  3. 恢复现场;

不同点

  1. 一般中断是一条指令完成后中断,缺页中断是一条指令执行期间中断;
  2. 一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页中。

基于以上特征,请求分页系统中的硬件机构应能保存多次中断时的状态,并保证最后能返回中断前产生缺页中断的指令处,继续执行。

调入策略 (fetch policy)

调入策略确定在外存中页面的调入时机。在页式虚拟管理中有两种常用策略。

  • 请求调页(demand paging):只调入发生 缺页时所需的页面。
    • 优点:容易实现
    • 缺点:对外存I/O次数多,开销较大
  • 预调页(prepaging):在发生缺页需要调入某页时, 一次调入该页以及相邻的几个页。
    • 优点:提高调页的I/O效率
    • 缺点:基于预测,若调入的页在以后很少被访问,则效率低。常用于程序装入时的调页

调入页面来源

将请求分页系统中的外存分为用于存放文件的文件区和用于存放对换页面的对换区。通常,对换区采用连续分配方式,而文件区采用离散分配方式。所以,发生缺页请求后,系统从何处调入页面,分为:

  1. 系统有足够的对换空间,进程装入时,将其全部页面复制到交换区,以后总是从交换区调入。
  2. 没有足够的对换空间,这时凡是未被修改的页面,都直接从文件区读入,而被置换时不需调出;已被修改的页面,被置换时需调出到交换区,以后从交换区调入。
  3. UNIX 方式,由于与进程相关的文件都放在文件区,故凡是没有运行过的页面,都应该从文件区调入,而对于曾经运行过但被换出的页面,由于是被放在对换区,因此下次调入从对换区调入。

分配策略 (assignment policy)

最小物理块:能保证进程正常运行所需的最小物理块数。

物理块的分配策略

  • 固定分配+局部置换(Fixed Allocation,Local Replacement):
    • 为每个进程分配固定数目的物理块,在运行期间不变;
    • 缺页时只能从本进程的物理块中选择一个用于换出;
    • 很难确定为每个进程分配多少个物理块。
  • 可变分配+全局置换(Variable Allocation,Global Replacement):
    • 先为每个进程分配一定数目的物理块,OS 也保持一个空闲物理块队列,当进程缺页时,由系统从空闲物理块队列中取一个分配给该进程;
    • 当系统空闲物理块队列用完,OS 从内存中按某算法选出一页调出,可能任一进程中的页;
    • 最易实现,但会影响到其他页。
  • 可变分配+局部置换(Variable Allocation,Local Replacement):
    • 为每个进程分配一定数目的物理块,当缺页时,只允许从该进程在内存的页面选一页调出。此时,进程的物理块数不变;
    • 如进程在运行中频繁发生缺页中断,则系统会为该进程分配多个附加的物理块,直至缺页率减少到适当程度。此时,进程的物理块会变化。

物理块采用固定分配策略的分配算法

  1. 平均分配:所有可供分配的物理块平均分配给各进程,对大进程不利,而小进程可能全部调入内存。

  2. 按比例分配:根据进程的大小按比例分配物理块。

    这里写图片描述

    其中 Si 为 i 进程的页数,S 为各进程总的页数,m 为内存页面数

  3. 考虑优先权分配:为紧急作业分配较多的物理块。

页面置换算法

  • 功能:需要调入页面时,选择内存中哪个物理页面被置换。称为replacement policy。

  • 目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测;

  • 页面锁定(frame locking):必须常驻内存的 OS 关键部分或时间关键(time-critical)的应用进程。实现方法为在页表中加上锁定标志位(lock bit)。

最佳页面算法(OPT)

选择“未来不再使用的”或“在离当前最远位置上出现的”页面被置换。这是一种理想情况,实际执行中是无法预知的,因而不能实现。它可用作其他算法性能评价的依据。

先进先出页面置换算法(FIFO)

置换原理:选择建立最早的页面被置换。可以通过链表来表示各页的建立时间先后。

特点:性能较差。较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出。并且有 Belady 现象

Belady 现象即如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多缺页率反而提高的异常现象。

Belady 现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。

Belady 现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。

Belady 现象例子

有一虚拟存储系统,采用先进先出的页面淘汰算法。在内存中为每个进程分配 3 块。进程执行时使用页号的顺序为 4 3 2 1 4 3 5 4 3 2 1 5:

  1. 该进程运行时总共出现几次缺页。

  2. 若每个进程在内存有4块,又将产生几次缺页。

  3. 如何解释所出现的现象。

答:

  1. 共缺页 9 次。
  2. 缺页 10 次。
  3. FIFO页面淘汰算法会产生异常现象(Belady现象),即:当分配给进程的物理页面数增加时,缺页次数反而增加

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

置换原理:选择最后一次访问时间距离当前时间最长的一页并淘汰之。即淘汰没有使用的时间最长的页。

特点

  • ​ 局部性原理的合理近似,性能接近最佳置换(OPT)算法。
  • 实现代价很高(软件方法或硬件方法)

实现原理:

  • 硬件方法:系统为每页设置一个寄存器 R,每当访问该页时,将该页对应的寄存器R的高位置为 1,以后每个时间间隔将所有的R右移一位,当淘汰一页时就选择R值最小的页。显然,R的位数越多越精确。但系统硬件成本也就越高
  • 软件方法:设置一个页号栈,当一个页面被访问时,就立即将它的页号压入页号栈,并检查栈中是否有与刚压入栈顶相同的页号,若有,则从页号栈中抽出,以保证页号栈中无相同的页号。当系统要淘汰一页时,总是从页号栈底取出一个页号淘汰,即淘汰的页是最久未使用的。

轮转算法(clock)

也称最近未使用算法(NRU, Not Recently Used),它是 LRU 和 FIFO 的折衷。每页有一个使用标志位(use),若该页被访问则置use=1。置换时采用一个指针,从当前指针位置开始按地址先后检查各页,若页的use=0,则该页被置换。若页的use=1,则修改use,置为0,最后指针停留在被置换页的下一个页。

图例

这里写图片描述

改进的轮转算法:选中某页淘汰时,若该页被修改过,需要先写入外存,再调入所需页。若未被修改,则可直接调入。改进的Clock算法淘汰页时,选择最近未使用且未修改的页淘汰,该算法需要使用页表中的访问位和修改位。由访问位 A 和修改位 M 组合为:

  1. A = 0,M = 0:表示该页既没有被访问,又没有被修改,是最佳淘汰页
  2. A = 0,M = 1:表示该页既没有被访问,但被修改
  3. A = 1,M = 0:表示该页被访问,但没有被修改
  4. A = 1,M = 1:表示该页既被访问,又被修改,该页很可能再次访问

最不经常使用(LFU)

算法原理:选择到当前时间为止被访问次数最少的页面被置换;每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1;发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零。

例题

题1:某程序在内存中分配三个块,访问页的走向为4,3,2,1,4,3,5,4,3,2,1,5,按FIFO、LRU、OPT算法分别计算缺页次数。假设开始时所有页均不在内存。
这里写图片描述

这里写图片描述
这里写图片描述

颠簸(抖动-thrashing)

在虚拟存储器系统中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸抖动

原因

  • 页面置换算法不合理
  • 分配给进程的物理页面数太少

5.4 请求分段存储管理方式

请求段表机制

这里写图片描述

  • 状态位(在/不在内存)
  • 权限位(读,写,执行)

  • 修改位(是否修改过,能否移动)

  • 访问位(记录被访问的次数)

  • 外存地址

  • 扩充位(固定长/可扩充 )

缺段中断处理

检查内存中是否有足够的空闲空间

  1. 若有,则装入该段,修改有关数据结构,中断返回
  2. 若没有,检查内存中空闲区的总和是否满足要求,是则应采用紧缩技术,转步骤 1 ;否则,淘汰一(些)段,转步骤 1。

分段保护

  1. 越界检查
  2. 存取控制
  3. 环保护:处理器状态分为多个环(ring),分别具有不同的存储访问特权级别,通常是级别高的在内环(如OS核心),编号最小(0环),级别最高;程序可访问同环或更低级别环的数据;可调用同环或更高级别环的服务。

6.I/O系统

6.1 I/O系统的基本功能

  1. 隐藏物理设备的细节
  2. 与设备的无关性
  3. 提高处理机和 I/O 设备的利用率
  4. 对 I/O 设备进行控制
  5. 确保对设备的正确共享
  6. 错误处理

6.2 I/O 设备控制器

设备控制器是一个可编址设备,分为字符设备控制器和块设备控制器,是CPU与设备间的接口,控制一个或多个 I/O 设备,实现计算机和I/O设备的数据交换。

基本功能

  1. 接收和识别命令
  2. 数据交换
  3. 标识和报告设备的状态
  4. 地址识别
  5. 数据缓冲区
  6. 差错控制

组成

控制器由以下三部分组成:

  • 设备控制器与处理机的接口
    • 数据线(数据寄存器、控制/状态寄存器)
    • 地址线
    • 控制线
  • 设备控制器与设备的接口
    • 数据信号、状态信号、控制信号
  • I/O逻辑:实现对设备的控制

组成如图:

这里写图片描述

6.3 I/O 控制方式

循环测试 I/O 方式

I/O 中断方式

优点

  • CPU利用率大大提高。(相对于忙等待方式)

缺点

  • 每台设备每输入/出一个字(节)的数据都有一次中断。如果设备较多时,中断次数会很多,使CPU的计算时间大大减少。

  • 不适合块设备。中断次数多,效率极低。

  • 为减少中断对CPU造成的影响,可采用DMA方式和通道方式。

DMA 方式

控制器功能更强,除有中断功能外,还有一个 DMA 控制器(DMAC)。在DMAC的控制下,设备同主存之间可成批交换数据,不用 CPU 干预。

其中 DMAC 由三部分组成:

  1. 主机与 DMAC 的接口
  2. DMAC 与块设备的接口
  3. I/O 控制逻辑

中断方式和 DMA 方式

中断方式是在数据缓冲寄存器满后,发中断请求,CPU进行中断处理。

而 DMA 方式则是在所要求传送的数据块全部传送结束时要求CPU进行中断处理;这样大大减少了CPU进行中断处理的次数。

中断方式的数据传送是由 CPU 控制完成的;DMA 方式则是在 DMAC 的控制下完成的。

通道方式

在 CPU 和 I/O 设备之间增加了设备控制器后,CPU和外部设备已能在一定程度上并行工作,但每传一个信息单位(一个字节或一个字符块),就要插入一次中断处理,每次中断处理CPU少则要执行几十条指令,多则要执行上千条指令,当一个系统配置的设备较多时,I/O操作较为频繁的情况计算机系统的效率,解决的方法就是通道技术。

现代大、中型计算机系统中设置了专门处理I/O操作的处理机,并把这种处理机称为通道。通道在CPU的控制下独立地执行通道程序,对外部设备的I/O操作进行控制,以实现内存与外设之间成批的数据交换。

通道在完成CPU交给的任务后,向CPU发出中断信号,请求CPU的处理。这样就使得CPU基本上摆脱了I/O操作的处理工作,提高了CPU与设备之间的并行程序,从而提高了整个计算机系统的效率。通道程序是由通道指令组成,一个通道可以分时的方式执行几道程序。每道程序控制一台外部设备,因此每道通道程序称为子通道。

通道的种类

  • 字节多路通道(Byte Multiplexor Channel):字节多路通道是以字节为基本传输单位,当一子通道控制的某台外设交换了一个字节后,就转向下一个子通道,以控制下一台设备传送一个字节。这就实现了子通道的循环轮转,以达到多路控制的目的。字节多路通道主要用来控制低速、并且以字节为基本传送单位的设备。如打印机。

  • 数组选择通道(Block Selector Channel):一次执行一个通道程序,控制一台设备连续地传送一批数据,当一个程序执行完后,才转向下一个程序。

    优点:传输速度高

    缺点:一次只能控制一台设备进行I/O操作。它主要用来控制高速外设。如磁盘。

  • 数组多路通道(Block Multiplexor Channel):是上述两种通道的折衷,可以分时的方式执行多道程序,每道程序可传送一组数据。主要用于中速设备的控制。如磁带机。

通道指令和通道程序

通道有自己的指令系统,用这些指令编写的程序叫通道程序,通道只能执行通道程序,不可能执行用户进程。通道程序保存在内存中。

通道的工作过程

  1. 某进程在运行过程中,若提出了I/O请求,则通过系统调用进入OS;

  2. 系统首先为I/O操作分配通道和外设;

  3. 按I/O请求生成通道程序并存入内存;
  4. 把起始地址送入通道的首地址寄存器(CAW);
  5. 接着CPU发出启动通道的指令。

通道的发展

6.4 缓冲技术

各种设备(包括CPU)的速度差异大。CPU的运行速度是以微秒甚至以纳秒计,而设备的运行速度则是以毫秒甚至以秒计。系统的负荷也不均匀。有时CPU进行大量的计算工作,没有I/O操作;有时又会进行大量的I/O操作,这两个极端都会造成系统中的一些设备过于繁忙,一部分设备过于空闲,严重地影响CPU与外设的并行工作。

为此提出用缓冲技术来匹配CPU与设备的速度的差异和负荷的不均匀,从而提高处理机与外设的并行程度。引入缓冲可缓和CPU与外设的速度差异。凡是数据到达和离去速度不匹配的地方均可采用缓冲技术。

实现

  • 硬件缓冲器,在设备控制器中有硬件缓冲器,通常容量较小。
  • 软件缓冲技术是广泛应用的一种缓冲技术,它由缓冲区和对缓冲区的管理两部分组成。

优点

  1. 缓和 CPU 和 I/O 设备间速度不匹配的矛盾
  2. 减少 CPU 中断频率
  3. 解决数据粒度不匹配的问题
  4. 提高 CPU 和 I/O 设备的并行性

常用的缓冲技术

  1. 单缓冲
  2. 双缓冲
  3. 环形缓冲
  4. 缓冲池

6.5 设备分配

数据结构

设备控制表(DCT)

DCT 是设备管理的重要数据结构,在这个结构中较全面地反映了每台设备的特性、连接和使用的状态等信息。当一台设备进入系统时必须创立相应的DCT。每个设备有一张DCT。

内容

  1. 设备标识符:系统有许多设备,为区别起见为每台设备取个名,这个名叫设备标识符。

  2. 设备属性:反映设备的相应特性和类型。

  3. 设备状态:指设备当时所处的状态。

  4. 设备队列指针:等待使用该设备的进程组成等待队列,这里存放等待队列的队首指针。

  5. 与设备连接的控制器表指针(可有多个)

  6. 重复执行次数或时间:数据出错重发次数/时间

控制器控制表(COCT)

控制器标识符:controllerid
控制器状态:忙/闲
与控制器连接的通道表指针
控制器队列的队首指针
控制器队列的队尾指针

每个控制器有一张COCT。

通道控制表(CHCT)

通道标识符:channelid
通道状态:忙/闲
与通道连接的控制器表首址
通道队列的队首指针
通道队列的队尾指针

每个通道有一张CHCT。

系统设备表(SDT)

这里写图片描述

整个系统有一张SDT。

设备分配方式

静态分配

在作业级进行的,当一个作业运行之前由系统一次分配满足需要的全部设备,这些设备一直为该作业占用,直到作业撤消。设备的利用效率较低,不会出现死锁。

动态分配

在进程运行的过程中进行的,当进程需要使用设备时,通过系统调用命令向系统提出设备请求,系统按一定的分配策略给进程分配所需设备,一旦使用完毕立即释放。有利于提高设备的使用效率,会出现死锁,应力求避免。

设备分配算法

先请求先服务

优先级高的优先服务

设备分配技术

根据设备的特性设备分成三种:独占设备、共享设备和虚拟设备。

针对这三种设备采用三种分配技术:

  1. 独享分配:独占设备有行打印机、键盘、显示器。磁带机可作为独占设备,也可作为共享设备。独占设备采用独享分配策略,即当进程申请独占设备时,系统把设备分配给这个进程,直到进程释放设备后,系统才能再将该设备分配给其他进程使用。

  2. 共享分配:共享设备包括磁盘,磁带和磁鼓。对这类设备的分配是采用动态分配的方式进行的,当一个进程要请求某个设备时,系统按照某种算法立即分配相应的设备给请求者,请求者使用完后立即释放。

  3. 虚拟分配:系统中独占设备的数量总是有限的,这些独占设备一旦分配给某个进程,往往只有很少时间在工作,许多时间一直处于空闲状态。而别的进程又因得不到相应的设备而不能运行,因此严重地影响到整个计算机系统的效率。另外独占设备一般是低速的,若采用联机操作,也会增加进程的运行时间,影响计算机系统的效率。为提高计算机系统的效率,提出了在高速共享设备上模拟低速设备功能的技术,称为虚拟设备技术

SPOOLing 系统

Simultaneous Peripheral Operations On-Line(外部设备同时联机操作)即将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,这样也就允许多个用户共享一台物理 I/O设备。

在单道批处理时期,利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,等处理机需要输入数据时,可以提高CPU利用率。多道出现后可以利用一道程序来模拟脱机I/O中的外围机,这样可实现在主机控制下的脱机I/O功能。这种在联机情况下实现的同时外围操作称为SPOOLing,也称为假脱机操作。

原理

  • 作业执行前预先将程序和数据输入到输入井中;
  • 作业运行后,使用数据时,从输入井中取出;
  • 作业执行不必直接启动外设输出数据,只需将这些数据写入输出井中;
  • 作业全部运行完毕,再由外设输出全部数据和信息。

图示

这里写图片描述

特点

  1. 提高 I/O 的速度
  2. 将独占设备改造为共享设备
  3. 实现了虚拟设备的功能

猜你喜欢

转载自blog.csdn.net/qq_37138933/article/details/80954730