操作系统 (六): I/O 设备管理

本文详细探讨了操作系统中的I/O系统,包括I/O端口的编址方式、设备控制器、I/O通道和各种I/O控制方式。重点介绍了缓冲管理技术,如单缓冲、双缓冲、循环缓冲和缓冲池,以及Spooling技术如何实现虚拟设备。此外,还讨论了磁盘存储器管理,如磁盘调度算法(FCFS、SSTF、SCAN、CSCAN等)和磁盘高速缓存策略。通过对这些概念的深入理解,有助于提升系统效率和设备利用率。
摘要由CSDN通过智能技术生成

本文为《现代操作系统》的读书笔记

I/O 系统

I/O 接口

  • I/O 接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路
    • PC 机系统板的可编程接口芯片、I/O总线槽的电路板 (适配器) 都是接口电路
      在这里插入图片描述
  • I/O 接口的主要功能:
    • (1) 进行端口地址译码设备选择
    • (2) 向 CPU 提供 I/O 设备的状态信息和进行命令译码
    • (3) 进行定时和相应时序控制
    • (4) 对传送数据提供缓冲,以消除计算机与外设在“定时”或数据处理速度上的差异
    • (5) 提供计算机与外设间有关信息格式的相容性变换。提供有关电气的适配
    • (6) 以中断方式实现 CPU 与外设之间信息的交换
  • CPU 与 I/O 设备之间的接口信息
    • 数据信息 (Data)
    • 状态信息 (Status): 反映外设当前所处的工作状态,如 READY, BUSY
    • 控制信息 (Control): CPU 通过接口传送给外设的信息,如启、停
  • I/O 接口的基本结构 (下图中,控制总线应为单向总线) (状态信息、数据信息均通过数据总线传输)
    在这里插入图片描述

I/O 系统

  • I/O 系统的组成: I/O 设备、设备控制器、 I/O 通道、总线及相应软件

I/O 端口的编址方式

  • 输入输出接口包含一组称为 I/O 端口的寄存器。为了让 CPU 能够访问这些 I/O 端口,每个 I/O 端口都需有自己的端口地址(或端口号)。常见的 I/O 端口编址方式有两种:
    • (1) I/O 端口和存储器统一编址,也称存储器映像的 I/O 方式: 把 I/O 接口中可以访问的端口作为存储器的一个存储单元,统一纳入存储器地址空间,为每一个端口分配一个存储器地址,CPU 可以用访问存储器的方式来访问 I/O 端口
      • 优点可以用访向存储器的指令来访问 I/O 端口,而访问存储器的指令功能比较强,不仅有一般的传送指令,还有算术、逻辑运算指令,以及各种移位、比较指令等,并且可以实现直接对 I/O 端口内的数据进行处理
      • 缺点:用户的存储地址空间相对减小;由于利用访问存储器的指令来进行 I/O 操作,指令的长度通常比单独 I/O 指令要长,因而指令的执行时间也较长
    • (2) I/O 端口和存储器分开编址 (8086 CPU) ,也称 I/O 映像的 I/O 方式: 将存储器与 I/O 端口分为两个独立的地址空间进行编址,设置专用的输入/输出指令对 I/O 端口进行访问
      • 优点不会减少用户的存储器地址空间;单独 I/O 指令的地址码较短,地址译码方便,执行速度快;采用单独的 I/O 指令,使程序中I/O操作和其他操作层次清晰,便于理解
      • 缺点单独 I/O 指令的功能有限,只能对端口数据进行输入 /输出操作,不能直接进行移位、比较等其他操作;由于采用了专用的 I/O 操作时序及 I/O 控制信号线,因而增加了微处理器本身控制逻辑的复杂性

I/O 设备

I/O 设备的类型

  • (1) 按使用方式/共享属性分类:
    • 独享设备: 一次只允许一个用户进程访问
    • 共享设备
    • 虚拟设备 : 通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户进程同时使用
  • (2) 按传输速率分类: 低速设备、中速设备、高速设备
  • (3) 按信息交换的单位分类:
    • 块设备: 信息交换的基本单位为字符块,属于有结构设备; 基本特征:传输速率较高、可寻址、I/O 常采用 DMA 方式
    • 字符设备: 信息交换的基本单位为字符; 基本特征:传输速率较低,不可寻址、I/O 常采用中断驱动方式

设备控制器

接口线路

  • 通常,外围设备与设备控制器通信。而在设备与设备控制器之间有一个接口,通过数据信号线控制信号线状态信号线传输数据、控制和状态三种类型信号 (下图为 I/O 设备及其设备控制器)
    在这里插入图片描述

设备控制器

  • 设备控制器位于 CPU 与设备之间,控制一个或多个 I/O 设备,以实现 I/O 设备和主机之间的数据交换,它能有效地将 CPU 从设备控制事务中解脱出来
    • 可分为:控制字符设备的控制器、控制块设备的控制器
    • 设备控制器是一个可编址设备,它含有多少个设备地址,就可以连接多少个同类型设备,并且为它所控制的每一个设备分配了一个地址
  • 设备控制器的基本功能
    • (1) 接受和识别命令: 设备控制器接受并识别 CPU 发出的多种不同命令
    • (2) 数据交换: 设备控制器实现 CPU 与控制器、控制器与设备之间的数据交换
    • (3) 表示和报告外围设备的工作状态
    • (4) 地址识别: 设备控制器必须能够识别它所控制的每个设备的地址
    • (5) 数据缓冲: 解决高速的 CPU 与慢速的 I/O 设备之间速度不匹配的问题
    • (6) 差错控制: 设备控制器还负责对由 I/O 设备传送来的数据进行差错检测
  • 设备控制器的组成: 由设备控制器与 CPU 接口设备控制器与设备接口以及 I/O 逻辑三部分组成
    在这里插入图片描述

I/O 通道

  • CPU 与设备控制器之间增设了自成独立体系的通道结构以获得 CPU 与外围设备之间更高的并行工作能力
    • 通道技术主要解决了输入/输出操作的独立性和各部件工作的并行性 ,实现了外围设备与 CPU 之间的并行操作,通道与通道之间的并行操作,各个通道上的外围设备之间的并行操作,提高了整个系统效率

I/O 通道

  • 通道具有执行 I/O 指令的能力,并通过执行通道程序来控制 I/O 操作,完成主存储器和外围设备之间的信息传送
  • 具有通道装置的计算机系统,主机、通道、设备控制器和设备之间采用四级连接,实施三级控制 (通常,一个中央处理器可以连接若干通道,一个通道可以连接若干个控制器,一个控制器可以连接若干台设备)
    在这里插入图片描述

字节多路通道

  • 字节多路通道是一种按字节为单位以交叉方式工作的通道。它通常含有许多非分配型子通道,其数量可达数百个,每一个子通道连接一台 I/O 设备,并控制该设备的输入/输出操作,这些子通道按时间片轮转方式共享主通道。一个子通道完成一个字节的传送后,立即让出字节多路通道(主通道),给另一个子通道使用
    • 字节多路通道主要用于连接大量的低速外围设备; 例如数据传输率是 1000B/s,即传送 1 个字节的间隔是 1ms,而通道从设备接收或发送一个字节只需要几百纳秒,因此通道在传送两个字节之间有很多空闲时间,字节多路通道正是利用这个空闲时间为其他设备服务
      在这里插入图片描述

T S T_S TS设备选择时间,即从通道响应设备发出数据传送请求开始,到通道实际为这台设备传送数据所需要的时间
T D T_D TD传送一个字节所用的时间
p p p 为在一个通道上连接的设备台数,且这些设备同时都在工作
n n n 为每一个设备传送的字节个数 (假设每一台设备传送的字节数都相同)
D i j D_{ij} Dij: 连接在通道上的第 i i i 台设备传送的第 j j j 个数据
T T T:通道完成全部数据传送工作所需要的时间。
当一个字节多路通道上连接有 p p p 台外围设备,每一台外围设备都传送 n n n 个字节时,总共所需要的时间 T = ( T S + T D ) p n T=(T_S+T_D)pn T=(TS+TD)pn

数组选择通道

  • 数组选择通道以为单位成批传送数据。它只含有一个分配型子通道, 一旦选中某一设备,通道就进入“忙”状态,直到该设备的数据传输工作全部结束为止
    • 选择通道主要用于连接高速外围设备
    • 每次传送一批数据,传送速度高。但是,这类设备的寻址等辅助操作的时间往往很长,在这样长的时间里通道一直处于等待状态,因此,整个通道的利用率还不是很高
      在这里插入图片描述

数组多路通道

  • 数组多路通道连接控制多个高速外设并以成组交叉方式传送数据。当某个设备进行数据传送时,通道只为该设备提供服务;当设备在执行寻址等控制性动作时,通道暂时断开与该设备的连接,挂起该设备的通道程序,而转去为其他设备提供服务,即执行其他设备的通道程序。所以,数组多路通道很像一个多道程序的处理器
    在这里插入图片描述

k k k: 一个数据块中的字节个数


字节多路通道和数组多路通道的不同之处

  • (1) 数组多路通道允许多个设备同时工作,但只允许一个设备进行传输型操作,其他设备进行控制型操作;而字节多路通道不仅允许多个设备同时操作,而且也允许它们同时进行传输型操作
  • (2) 数组多路通道与设备之间进行数据传送的基本单位是数据块,而字节多路通道与设备之间进行数据传送的基本单位则是字节

I/O 控制方式

在这里插入图片描述

查询控制方式

  • CPU 需要先查询外设的工作状态,然后在外设就绪时实现数据输入或输出 (通过设备控制器实现)
    • 缺点: CPU 必须循环等待,使用效率低
      在这里插入图片描述

中断控制方式

  • CPU 不再主动循环查询,可以执行其它程序,一旦外设准备就绪就主动向 CPU 提出中断服务请求,CPU 如果响应请求,便暂时停止当前程序的执行,转去执行与该请求相应的服务程序
    • 优点:提高了 CPU 的工作效率,还满足了外设的实时性要求
    • 缺点硬件复杂 (系统需要为每个 I/O 设备分配一个中断请求号和编写相应的中断服务程序,此外还需要一个中断控制器来管理 I/O 设备提出的中断请求); 每次数据传送都要进行一次中断,在中断服务程序中还需保留和恢复现场以便能继续原程序的执行 ,工作量较大。如果需要大量数据交换,系统的效率较低

DMA 控制方式

Why DMA?

  • 采用程序控制方式以及中断方式进行数据传送时,都是靠 CPU 执行程序指令来实现数据的输入/输出的。对于通常的 PC 机来说,执行一条程序指令平均需要几 μs 时间。对于高速外设,传输一个字节的时间也只需几 μs。显然,CPU 的传送方式满足不了其数据传输率的要求

DMA

  • DMA 方式不需要 CPU 干预(不需 CPU 执行程序指令),完全由硬件执行 I/O 交换。在这种方式中, DMA 控制器向主存发出地址和控制信号,修改主存地址,对传送的字的个数进行计数,并且以中断方式向 CPU 报告传送操作的结束
  • DMA 方式的工作过程如下:首先,当要求通过 DMA 方式传输数据时,DMA 控制器向CPU发出请求,CPU 释放总线控制权,交由 DMA 控制器管理;然后,DMA 控制器向外设返回一个应答信号,外设与主存开始进行数据交换;最后,当数据传输完毕后,DMA 控制器把总线控制权交还给 CPU
    在这里插入图片描述
    • 优点: 速度快 (主存地址的修改、传送字个数的计数等也不由软件实现,而是用硬件线路直接实现的)、能够满足高速 I/O 设备的要求,也有利于 CPU 效率的发挥,一般用于高速传送成组数据 (数据传输的基本单位是数据块)
    • 缺点:数据传送方向、字节数、内存地址等需由 CPU 控制 (DMA 预处理),且每一设备需一台 DMA 控制器,设备增多时,不经济

DMA 的几种形式

在这里插入图片描述

通道控制方式

即,使用 I/O 通道

  • (1) 需数据的进程向 CPU 发出指令,CPU 发启动指令指明 I/O 操作、设备号和对应的通道,之后该进程便放弃 CPU 等待输入完成,CPU 被其它进程占用
  • (2) 通道接收到 CPU 发来的启动指令后,取出内存中的通道程序执行,控制设备将数据传送到内存指定区域
  • (3) 传送完数据后,通道向 CPU 发中断请求,CPU 响应后转向中断服务程序,唤醒进程,并返回被中断进程; 以后某时刻,该进程再次被调度,从内存取出数据进行处理

  • 与 DMA 方式不同的是,在通道控制方式中,数据传送方向、存放数据的内存始址及传送的数据块长度均由一个专门负责输入/输出的硬件——通道来控制。另外,通道控制方式中,一个通道可控制多台设备与内存进行数据交换

缓冲管理

引入缓冲技术的原因

  • (1) 缓和 CPU 与 I/O 设备间速度不匹配的矛盾
  • (2) 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制: 如果 I/O 操作每传送一个字节就要产生一次中断,那么设置了 n n n 个字节的缓冲区后,则可以等到缓冲区满才产生中断,这样中断次数就减少到 1 / n 1/n 1/n,而且中断响应的时间也可以相应的放宽
  • (3) 提高 CPU 和 I/O 设备之间的并行性,提高系统的吞吐量和设备的利用率
    • 例如,在 CPU 和打印机之间设置了缓冲区后,便可使 CPU 与打印机并行工作

缓冲技术实现的基本思想

  • 进程执行写操作输出数据时,向系统申请一个缓冲区,若为顺序写请求,则不断把数据填到缓冲区,直到被装满。此后,进程继续它的计算,系统将缓冲区内容写到 I/O 设备上
    • 在输出数据时,只有在系统还来不及腾空缓冲区而进程又要写数据时,它才需要等待
  • 进程执行读操作输入数据时,向系统申请一个缓冲区,系统将一个物理记录的内容读到缓冲区,根据进程要求,把当前需要的逻辑记录从缓冲区中选出并传送给进程
    • 在输入数据时,仅当缓冲区空而进程又要从中读取数据时,它才被迫等待

缓冲的实现方式

  • (1) 采用硬件缓冲器实现 (成本高)
  • (2) 在内存划出一块区域,专门用来存放临时输入输出的数据,这个区域称为缓冲区 (Buffer)
    • 缓冲区特点:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满后,才能从缓冲区把数据传出 (也就是说,缓冲区不能一边输入一边输出)

单缓冲技术 (Single Buffer)

  • 在单缓冲情况下,每当用户进程发出一 I/O 请求时,操作系统便在主存中为之分配一缓冲区。在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为 T T T ,操作系统将该缓冲区中的数据传送到用户区的时间为 M M M,而 CPU 对这一块数据处理(计算)的时间为 C C C,则系统处理大量数据时,一块数据的处理时间 ( T T T C C C 是可以并行的) 为
    max ⁡ ( C , T ) + M \max(C,T)+M max(C,T)+M
    • 计算一块数据的处理时间的方法:假设一种初始状态,然后计算下一次到达相同状态所需要的时间
    • 单缓冲中,初始状态为:工作区满、缓冲区空 (默认工作区和缓冲区一样大)。此时 CPU 处理工作区数据,同时 I/O 设备向缓冲区冲入数据。在这两个过程 (第一阶段) 中的任意一个未结束时,都不能从缓冲区向工作区传数据,因此第一阶段耗时 max ⁡ ( C , T ) \max(C,T) max(C,T)。第一阶段之后,缓冲区向工作区传送数据,耗时 M M M,回到初始状态
      在这里插入图片描述

双缓冲技术 / 缓冲对换 (Double Buffer / Buffer Swapping)

  • 设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程。接着由 CPU 对数据进行计算 (注意:必须等缓冲区 2 满后,才能从缓冲区 2 取数); 在双缓冲情况下,系统处理大量数据时,一块数据的处理时间
    max ⁡ ( C + M , T ) \max(C+M,T) max(C+M,T)
    • 假设初始状态为工作区空,缓冲区一满一空。现在假设缓冲区 1 空,缓冲区 2 满。此时缓冲区 2 需要向工作区传送数据,传送完毕后由 CPU 处理 ( M + C M+C M+C),同时 I/O 设备向缓冲区 1 冲入数据 ( T T T)。这两个过程必须都完成后,才能回到初始状态
    • 如果 C + M < T C+M<T C+M<T,可使块设备连续输入;如果 C + M > T C+M>T C+M>T,则可使 CPU 不必等待设备输入在这里插入图片描述

循环缓冲技术

  • 当对缓冲区中数据的输入和提取的速度基本相匹配时,采用双缓冲可使两者并行工作,获得较好的效果。但是如果两者的速度相差甚远时,双缓冲的效果就不够理想了。如果增加缓冲区的个数,情况就会有所改善。我们可以将多个缓冲区组织成循环队列的形式
    • 主存中分配一组大小相等的存储区作为缓冲区,并将这些缓冲区链接起来,每个缓冲区中有一个指向下一个缓冲的指针,最后一个缓冲区的指针指向第一个缓冲区,这样 n n n 个缓冲区就成了一个环形。此外,系统中有个缓冲区链首指针指向第一个缓冲区
    • 作为输入的多缓冲区可分为三种类型:用于装输入数据的空缓冲区 R R R 、已装满数据的缓冲区 G G G 以及计算进程正在使用的现行工作缓冲区 C C C
      在这里插入图片描述

循环缓冲区的使用

  • (1) Getbuf 过程
    • 当计算进程要使用缓冲区中的数据时,可调用 Getbuf 过程。该过程将由指针 Nextg 所指示的缓冲区提供给进程使用,相应地,须把它改为现行工作缓冲区,并令 Current 指针指向该缓冲区的第一个单元,同时将 Nextg 移向下一个 G 缓冲区
    • 类似地,每当输入进程要使用空缓冲区来装入数据时,也调用 Getbuf 过程,由该过程将指针 Nexti 所指示的缓冲区提供给输入进程使用,同时将 Nexti 指针移向下一个 R 缓冲区
      在这里插入图片描述
  • (2) Releasebuf 过程
    • 计算进程把 C 缓冲区中的数据提取完毕时,便调用 Releasebuf 过程,将缓冲区 C 释放。此时,把该缓冲区由当前(现行)工作缓冲区 C 改为空缓冲区 R
    • 类似地,当输入进程把缓冲区装满时 ,也应调用 Releasebuf 过程,将该缓冲区释放,并改为 G 缓冲区
      在这里插入图片描述

缓冲池技术

  • 一组缓冲仅适用于某个特定的 I/O 进程和计算进程, 当系统配置较多的设备时,使用专用缓冲区就要消耗大量的内存空间,且其利用率不高
  • 为了提高缓冲区的利用率,目前广泛使用公用缓冲池,池中的缓冲区可供多个进程共享
    • 对于同时用于输入/输出的公用缓冲池,至少含有三种类型的缓冲区:空缓冲区装满输入数据的缓冲区装满输出数据的缓冲区。为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是就形成三个队列空缓冲区队列 (emq)输入缓冲区队列 (inq)输出缓冲区队列 (outq)
    • 另外还应具有四种工作缓冲区:用于收容输入数据的工作缓冲区 (hin);用于提取输入数据的工作缓冲区 (sin);用于收容输出数据的工作缓冲区 (hout);用于提取输出数据的工作缓冲区 (sout)
      在这里插入图片描述

缓冲池的工作方式

  • 输入进程需要输入数据时:输入设备 → \rightarrow 收容输入缓冲区 getbuf(emq)
    • (1) 从空缓冲队列的队首取一空缓冲区用作收容输入缓冲区
    • (2) 输入设备将数据输入收容输入缓冲区并装满,之后将此缓冲区挂到输入缓冲区队列队尾
  • 计算进程需要输入数据时:提取输入缓冲区 → \rightarrow CPU getbuf(inq)
    • (1) 从输入缓冲区队列队首取一满缓冲区用作提取输入缓冲区
    • (2) CPU 从提取输入缓冲区中取出数据至用完,将空缓冲区挂到空缓冲队列队尾
  • 计算进程需要输出数据时:CPU → \rightarrow 收容输出缓冲区 getbuf(emq)
    • (1) 从空缓冲队列队首取一空缓冲区用作收容输出缓冲区
    • (2) CPU 将数据输入其中并装满,之后将收容输出缓冲区挂到输出缓冲区队列队尾
  • 输出进程需要输出数据时:提取输出缓冲区 → \rightarrow 输出设备 getbuf(outq)
    • (1) 从输出缓冲区列队首取一满缓冲区用作提取输出缓冲区
    • (2) 输出设备从中取出数据至用完,之后将空缓冲区挂到空缓冲队列队尾

Spooling 技术

外部设备联机并行操作 (Simultaneaus Periphernal Operations On-Line)

脱机输入、输出技术

  • 为了缓和 CPU 的高速性与 I/O 设备的低速性间矛盾而引入,该技术在外围控制机的控制下实现低速的 I/O 设备与高速的磁盘之间进行数据传送

Spooling 技术

  • 在多道程序下,用一道程序来模拟输入时的外围控制机功能,将低速 I/O 设备上的数据传送到高速磁盘上;再用另一道程序来模拟输出时的外围控制机功能,将数据从磁盘传送到低速的输出设备上。从而可在主机的直接控制下,实现脱机输入、输出功能,进而实现外围操作与 CPU 对数据的处理同时进行
  • 它是操作系统中采用的一项将独占设备改造成为共享设备的技术

Spooling 系统的组成

  • (1) 输入井、输出井: 在磁盘上开辟的两个大的存储空间,模拟脱机输入/输出时的磁盘设备,暂存数据
  • (2) 输入缓冲区、输出缓冲区: 为了缓和 CPU 和磁盘之间速度不匹配的矛盾,在内存中开辟了两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备
  • (3) 输入进程、输出进程: 模拟脱机 I/O 时的外围控制机
    在这里插入图片描述

虚拟设备

  • 在操作系统中,引入虚拟设备的原因: 克服独占设备速度较慢、降低设备资源利用率的缺点,从而提高设备的利用率
  • 虚拟设备: 通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户进程使用,通常把这种经过虚拟技术处理后的设备称为虚拟设备
    • e.g. 共享打印机 : 利用 SPOOLing 技术,可将属于独占设备的打印机改造为一台可供多个用户共享的设备,从而提高设备的利用率 ,也方便了用户,已被广泛地用于多用户系统和局域网络中。当用户进程请求打印输出时,SPOOLing 系统同意为它打印输出,但并不真正立即把打印机分配给该用户进程,而只为它做两件事:
      • (1) 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中
      • (2) 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上
    • 如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区 ,再由打印机进行打印。如此下去,直至请求打印队列为空,输出进程才将自己阻塞起来。仅当下次再有打印请求时,输出进程才被唤醒

SPOOLing 系统的特点

  • 提高了 I/O 的速度: 对数据进行的 I/O 操作,已从对低速 I/O 设备进行的 I/O 操作,演变为对输入井或输出井中数据的存取
  • 独占设备改造成共享设备: 实际上并没有为任何进程分配设备,只是在输入井或输出井中为进程分配一个存储区和建立一张 I/O 请求表
  • 实现了虚拟设备功能: 宏观上,多个进程同时使用一台独占设备;对每个进程来说,认为是自己独占了一个设备

磁盘存储器管理

磁盘性能简述

  • 存 储 容 量 = 磁 头 数 × 磁 道 ( 柱 面 ) 数 × 每 道 扇 区 数 × 每 扇 区 字 节 数 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数 ×××

磁盘访问时间

  • 磁盘访问时间 T a = 寻 道 时 间 + 旋 转 时 间 + 传 输 时 间 T_a=寻道时间+旋转时间+传输时间 Ta=++
    • 寻道时间 T s T_s Ts: 把磁臂(磁头)移动到指定磁道上所经历的时间。该时间是启动磁臂的时间 s s s 与磁头移动 n n n 条磁道所花费的时间之和,即
      T s = m × n + s T_s = m ×n +s Ts=m×n+s( m m m 为一常数,与磁盘驱动器的速度有关)
    • 旋转延迟时间 T r T_r Tr: 将磁头移动到指定扇区下面所经历的时间
      T r = 1 / ( 2 r ) T_r=1 /(2r) Tr=1/(2r)( r r r 为磁盘转速(转数/单位时间); 平均情况下,需要旋转半圈)
    • 传输时间 T t T_t Tt: 把数据从磁盘读出或向磁盘写入数据所经历的时间
      T t = b r N T_t=\frac{b}{rN} Tt=rNb( b b b 为每次所读/写的字节数; r r r 为磁盘每秒钟的转数; N N N 为一条磁道上的字节数)
  • 在访问时间中,寻道时间和旋转延迟时间与所读/写数据的多少无关,它通常占据了访问时间中的大部分

磁盘调度算法

  • 磁盘调度: 当多个进程需要访问磁盘时,磁盘调度的目标是使磁盘的平均寻道时间最少,以使进程对磁盘的平均访问时间最少

先来先服务 FCFS

  • 假设一个请求序列:55, 58, 39, 18, 90, 160, 150, 38, 184。磁头当前的位置在 100,按进程请求访问磁盘的先后次序进行调度
    在这里插入图片描述

最短寻道时间优先 SSTF (Shortest Seek Time First)

  • 假设一个请求序列:55, 58, 39, 18, 90, 160, 150, 38, 184。磁头当前的位置在 100,选择从当前磁头位置所需寻道时间最短的请求
    • 优点:寻道性能比 FCFS 好,但不能保证平均寻道时间最短
    • 缺点:有可能引起某些请求的饥饿 (只要不断有新进程的请求到达, 且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的 I/O 请求必须优先满足)
      在这里插入图片描述

扫描 (SCAN) 算法

  • 假设一个请求序列:55, 58, 39, 18, 90, 160, 150, 38, 184。磁头当前的位置在 100,磁头从磁盘的一端开始向另一端移动,沿途响应访问请求,直到到达了磁盘的另一端,此时磁头反向移动并继续响应服务请求。有时也称为电梯算法
    • 优点:寻道性能较好,避免了饥饿
    • 缺点:不利于远离磁头一端的访问请求
      在这里插入图片描述

循环扫描 (CSCAN) 算法

  • 假设一个请求序列:55, 58, 39, 18, 90, 160, 150, 38, 184。磁头当前的位置在 100,规定磁头单向移动
    • 特点:消除了对两端磁道请求的不公平
      在这里插入图片描述

N-STEP-SCAN 调度算法

磁臂粘着

  • 在 SSTF、SCAN 及 CSCAN 几种调度算法中,可能出现磁臂停留在某处的情况,即反复请求某一磁道,从而垄断了整个磁盘设备

N-STEP-SCAN 调度算法

  • 将磁盘请求队列分成若干个长度为 N N N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列,而每一子队列按 SCAN 算法处理
    • N = 1 N=1 N=1: FCFS
    • N N N 很大 (只有一个子队列): SCAN 算法
    • N N N 取半长度 (分成两个子队列): FSCAN 算法

FSCAN 调度算法

  • FSCAN 算法实质上是 N N N 步 SCAN 算法的简化, 即 FSCAN 只将磁盘请求队列分成两个子队列
    • (1) 一个是由当前所有请求磁盘 I/O 的进程形成的队列,由磁盘调度按 SCAN 算法进行处理
    • (2) 在扫描期间,将新出现的所有请求磁盘 I/O 的进程,放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理

磁盘高速缓存 (Disk Cache)

  • 目前,由于磁盘的 I/O 速度远低于内存的访问速度,而致使磁盘的 I/O 成为计算机系统的瓶颈。为提高磁盘的 I/O 速度,便采用磁盘高速缓存

磁盘高速缓存的形式

  • 磁盘高速缓存: 内存中的一部分存储空间,用来暂时存放从磁盘读出的一系列盘块中的信息。所以它是一组在逻辑上属于磁盘,而物理上是驻留在内存中的盘块
  • 磁盘高速缓存的形式:
    • (1) 在内存中开辟一个单独的存储空间作为磁盘高速缓存 (大小固定)
    • (2) 把未利用的存储空间作为一个缓冲池,供磁盘 I/O 使用 (大小不固定)

数据交付方式

  • 数据交付方式: 磁盘高速缓存中的数据传送给请求进程
    • (1) 数据交付: 系统直接将磁盘高速缓存中的数据传送到请求进程的内存工作区
    • (2) 指针交付: 只将指向磁盘高速缓存中该数据的指针,交付给请求进程

置换算法

  • 在将磁盘中的盘块读入到磁盘高速缓存中时,若因磁盘高速缓存已满,则采用常用的算法进行置换:
    • 最近最久未使用算法 LRU
    • 最近未使用算法 NRU
    • 最少使用算法 LFU
  • 置换时除算法外还应考虑的问题: 访问频率可预见性数据的一致性: 将系统中所有盘块数据,拉成一条 LRU 链,对将会严重影响到数据一致性的数据和很久都可能不再使用的盘块数据, 放在 LRU 头部,到时优先写回磁盘

周期性地写回磁盘

  • 系统中所有盘块数据,拉成一条 LRU 链,对将会严重影响到数据一致性的数据和很久都可能不再使用的盘块数据, 放在 LRU 头部,到时才优先写回磁盘。若经常访问的数据将一直保留磁盘高速缓存中,长期不会被写回磁盘,若系统出故障,则存在磁盘高速缓存中的数据将丢失
    • 问题解决: (1) 周期性地将磁盘高速缓存中的数据写回磁盘 (2) 磁盘高速缓存中的数据若修改,则立即写回磁盘

提高磁盘 I/O 速度的其它方法

提前读 (Read Ahead)

  • 由于用户对文件的访问常用顺序方式,在读当前块时,可预知下一次要读的盘块,所以,可采用预先读方式,即在读当前块的同时,连同将下一块提前读入缓冲。当访问下一块数据时,其已在缓冲中,而不需去启动磁盘 I/O

延迟写

  • 在缓存中的数据,本应立即写回磁盘, 考虑不久之后可能会再用, 故不立即写回磁盘

优化物理块的分布

  • 使磁头移动的距离最小 (优化物理块的分布、优化索引结点的分布)。

虚拟盘

  • 利用内存去仿真磁盘,又称为 RAM 盘 (与磁盘高速缓存的区别:RAM 盘中的内容由用户控制,而缓存中的内容则由 OS 控制)

廉价磁盘冗余阵列(RAID)

Redundant Array of Inexpensive Disks)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值