跳转至

第 6 章 I/O 设备管理

依据:《操作系统概论》(2017 年版)第 6 章、配套自考大纲及附录答案。下文编号指大纲“考核内容与考核要求”;标注“自编”的算例为学习辅助,不是真题。

复习导航:大纲要求与笔记位置

大纲条目 层次 位置 学完应能做到
1.1–1.3 I/O 系统组成 识记 第 1 节 说出设备分类、控制器的结构与接口
2.1–2.3 控制方式 领会 第 2 节 说明轮询、中断、DMA 的完整过程
3.1–3.2 缓冲 领会 第 3 节 说明循环缓冲、公共缓冲池与同步
4.1、4.2 分配数据结构与方式 领会、识记 第 4 节 画出 SDT、DCT、COCT、CHCT 的关联,说出设备属性、安全性与分配步骤
4.3 设备独立性 领会 第 5 节 说明逻辑设备名到物理设备的映射
4.4 SPOOLing 识记 第 6 节 说出组成、打印流程与虚拟设备
4.5 I/O 软件层次 识记 第 7 节 说出各层职责与请求返回路径
4.6 磁盘结构与时间 识记 第 8 节 说明格式化与访问时间的组成
4.7 磁盘调度 领会 第 9 节 跟踪六类算法的运行过程并算移动量
4.8 访问加速方法 识记 第 10 节 说出缓存、虚拟盘与读写优化

全章分为三部分:第 1–2 节介绍设备、控制器、通道和三种 I/O 控制方式;第 3–7 节讨论缓冲、设备分配、设备独立性、SPOOLing 与 I/O 软件层次;第 8–10 节分析磁盘访问时间、磁头调度与读写加速。

本章学习目标

本章分析一次 I/O 请求涉及哪些硬件和软件:应用提交请求后,系统按需安排设备、缓冲与请求队列,再由驱动程序和控制器组织传输。磁盘请求还可能经过磁盘调度。

本章的区分点有两组:轮询、中断、DMA 看 CPU 是否等待以及由谁传送数据;磁盘调度则要根据题设的初始方向和扫描边界计算移动量。

1 I/O 系统、设备和控制器(1.1–1.3,识记)

微机中的 CPU、主存和设备控制器通过系统总线连接。大型主机还可在 CPU 与控制器之间设置 I/O 通道,由它执行通道程序,独立管理多台控制器的数据传输,以减少 CPU 的设备管理负担。

面对五花八门的外设,教材从三个维度做分类:

分类依据 类型 理解要点
传输速率 低速、中速、高速 低速如键盘鼠标(每秒几字节到几百字节),高速如磁盘网卡
交换单位 字符设备、块设备 字符设备按字节流收发、不可寻址(如键盘打印机);块设备按定长块读写、可随机寻址(如磁盘)
共享属性 独占、共享、虚拟设备 一段时间内只归一个进程用(打印机)、允许并发交叉访问(磁盘),或靠 SPOOLing 把独占设备包装成共享逻辑设备

CPU 通过设备控制器(I/O 接口)控制外设。控制器接收命令和地址、驱动设备、暂存数据,并报告忙闲与出错状态、完成差错校验。教材将控制器划分为三个部分:

  • 设备控制器与 CPU 的接口:摆着数据寄存器、控制/状态寄存器,靠数据线、地址线、控制线跟系统总线相连。
  • 设备控制器与设备的接口:接具体外设的数据、控制和状态信号线(一个控制器可挂一台或多台设备)。
  • I/O 逻辑:整块板子的指挥中枢,里面最核心的两个部件是指令译码器(识别 CPU 发来的是读命令还是写命令)和地址译码器(比对地址总线上的设备号,确认是不是在喊自己)。

设备控制器是硬件电路,设备驱动程序是操作系统中控制该硬件的软件模块,两者不能混用。通道也是硬件,能自行取出并执行通道指令,比单纯的数据搬运控制更进一步。

2 三种 I/O 控制方式(2.1–2.3,领会)

I/O 控制方式的差异主要有两点:CPU 如何获知设备状态,以及由谁传送数据。

方式 CPU 如何得知就绪/结束 谁组织数据搬运 主要代价
轮询/程序查询 CPU 反复读取状态寄存器 CPU 执行 I/O 指令,逐字或逐字节传送 等待期间持续占用 CPU
中断驱动 设备就绪后发出中断 CPU 在中断服务程序中传送数据 无需持续轮询;频繁传送时,中断处理开销较大
DMA(直接存储器访问) 数据块传完或发生错误后发出中断 DMA 控制器直接在设备与主存之间成块传送 需要 DMA 硬件,CPU 负责传送前配置和结束后处理

2.1 轮询与中断

使用程序查询(轮询)时,CPU 下达读命令后反复读取状态位,直到设备就绪,再读取一个字。传送过程中 CPU 持续检查设备,等待时间不能用于其他工作。

中断驱动由设备就绪事件触发 CPU 处理。CPU 发出命令后可执行其他工作;设备准备好数据时发出中断,CPU 再读取数据并处理。该方式适合低速字符设备。若传送 4 KB 数据时每 4 字节中断一次,则需处理 1024 次中断,保护和恢复现场会产生较大开销。

2.2 DMA 过程与寄存器

高速成块传输可使用 DMA 控制器。CPU 设置传输参数并启动 DMA,控制器完成数据块传送,结束后再通知 CPU:

  1. 预处理(CPU):CPU 设置读写命令、主存起始地址和传输长度,随后启动 DMA。
  2. 数据传送(DMA):外设准备好一个字时,DMA 控制器申请总线使用权,将数据直接写入或读出主存,并更新地址和剩余计数。
  3. 后处理(CPU):传输完成或发生错误时,DMA 控制器发出中断。CPU 检查状态,并按需唤醒等待数据的进程。

为了独立干完第 2 步,DMA 控制器内部必须配齐四类寄存器:

寄存器 教材名称 作用
CR 命令/状态寄存器 存 CPU 下达的读写命令、控制位以及设备状态
MAR 内存地址寄存器 存当前要读写的主存地址,每传完一单位自动递增
DC 数据计数器 存本次还剩多少数据没传,每传完一单位自动递减
DR 数据寄存器 暂存设备与主存之间中转的那个字或字节

DMA 仍需要 CPU 参与:开始时由 CPU 初始化寄存器,结束时由 CPU 处理中断;节省的是传输过程中的逐字搬运与大量中断。周期挪用方式下,DMA 访问主存还会与 CPU 竞争总线,占用期间可能延迟 CPU 的访存。

2.3 两种「等待」不是一回事(跨课程对照)

两门课对“等待”的讨论层次不同。操作系统中的“进程阻塞等待 I/O”涉及进程调度;计组中的“DMA 周期挪用”涉及总线仲裁。阻塞进程让出 CPU,并不表示 CPU 在整个 I/O 期间都停止工作。

比较 操作系统的“进程阻塞” 计组的“DMA 周期挪用”
发生在哪一层 操作系统软件:内核将进程置为阻塞并挂入等待队列,按需进行上下文切换 硬件电路:DMA 控制器向总线仲裁器申请使用权
时间尺度 等待时长取决于设备与调度,不能由“阻塞”一词确定 占用单个或若干存储周期;实际时长取决于硬件与传输方式
此时 CPU 在干什么 有其他就绪任务时可转去执行;否则可能运行空闲任务 需要使用同一总线或主存的 CPU 访问可能延迟,其他可独立进行的运算仍可推进
由谁发起 进程执行系统调用后条件未满足,或等待的事件尚未发生 外设控制器或 DMA 引擎发起总线请求
如何恢复 事件完成后唤醒进程,重新进入就绪队列,等调度程序选中 总线可用后,受延迟的访存可继续,无需为此进行进程调度
对执行的影响 涉及进程状态与调度;阻塞调用完成后才继续执行后续代码 不改变程序的指令语义,但可能增加执行时间

进程阻塞使当前进程让出 CPU,供其他就绪进程执行;DMA 周期挪用使 CPU 暂时让出总线,可能延迟访存。两者可在同一次 I/O 中出现,也可分别发生。轮询方式通常既不阻塞当前进程,也不使用 DMA。

三处口径差异,与《计算机组成原理》第 6 章「与《操作系统概论》的对照」那一小节对着看:

  1. 分类:本课把异常算作中断的一类(同步中断,也称内部中断或异常),与异步中断并列在中断之下;计组把内部异常与外部中断并列为两类来源,不设统称。
  2. 响应步数:本课单重中断按四步讲(关中断与保护断点、保护现场、查向量表、恢复现场并返回),计组只把前半段叫中断响应,三步止于转入服务程序入口。
  3. 分析对象:进程阻塞讨论任务等待与重新调度,DMA 周期挪用讨论总线或主存的使用。两者可在时间上重叠,不能把等待时长与总线占用时长不加区分地相加。

3 缓冲管理(3.1–3.2,领会)

CPU 与 I/O 设备的处理速度及数据粒度往往不同。内存中的缓冲区用于暂存传输数据,以缓和速度差、减少中断频率、匹配数据粒度,并提高计算与 I/O 的并行程度。但缓冲只能吸收暂时的不均衡,无法长期弥补生产速度高于消费速度的问题。

3.1 单缓冲、双缓冲、循环缓冲

  • 单缓冲:只设置一块系统缓冲区。输入数据先进入系统缓冲区,再复制到用户空间;复制完成后,系统缓冲区可接收下一块数据,进程可处理已复制的数据。输入和复制仍需协调对同一缓冲区的访问。
  • 双缓冲(缓冲对换):设置两块缓冲区轮换使用。设备向 A 输入时,进程可从已装满的 B 提取数据;下一轮交换两者角色,从而增加输入与处理重叠的机会。全双工通信也可为收、发方向分别设置缓冲,但这与同一方向上的双缓冲轮换需要区分。
  • 循环缓冲:将多块缓冲区首尾相接,适应连续或突发传输。教材将缓冲区分为三种状态:R(空,等待装入)、G(已满,等待提取)、C(正在生产或消费)。Nexti 指向下一个空缓冲 R,Nextg 指向下一个满缓冲 G,Current 指向当前读写的缓冲 C。
生产者:调 Getbuf 领一块空 R 当 Current 写入 → 写完调 Releasebuf 改成满 G
消费者:调 Getbuf 领一块满 G 当 Current 读取 → 读完调 Releasebuf 改回空 R

追空或追满时照旧得阻塞等待:生产者追上消费者说明没空缓冲了,生产者等;消费者追上生产者说明没新数据了,消费者等。

3.2 公共缓冲池

公共缓冲池由多个设备和进程共享,减少分别设置专用缓冲区的空间开销。缓冲区按状态加入三条队列:空缓冲队列 emq、输入队列 inq、输出队列 outq;使用时承担四种角色:收容输入 hin、提取输入 sin、收容输出 hout、提取输出 sout:

过程 从哪里取 做什么 放到哪里
收容输入 emq 外设把输入数据灌进 hin inq
提取输入 inq 进程从 sin 读走数据 emq
收容输出 emq 进程把待输出数据写进 hout outq
提取输出 outq 驱动把 sout 数据送交外设 emq

多个进程并发操作队列时,可用第 2 章的信号量机制同步。每条队列 type 设置资源信号量 RS[type],初值为队列中的缓冲块数;初始全部为空时,emq 的初值为池容量,其他两条为 0。另设互斥信号量 MS[type] 保护队列,初值均为 1:

Getbuf(type):
    P(RS[type])           // 先确认该队列有货(先资源)
    P(MS[type])           // 再锁住队列摘取(后互斥)
    b = 从该队列移除一个缓冲
    V(MS[type])
    return b

Putbuf(type, b):
    P(MS[type])
    把 b 插入该队列
    V(MS[type])
    V(RS[type])           // 挂好后通知等待者有货了

Getbuf 必须先 P(RS) 申请缓冲块,再 P(MS) 锁定队列。若次序相反,队列为空时,取块进程会持有队列锁等待;归还缓冲块的 Putbuf 又无法取得锁,从而形成死锁。

4 设备分配与数据结构(4.1–4.2,领会、识记)

一个进程伸手要一台打印机或磁带机,光看那台设备本身闲不闲还不够——连接它的控制器甚至上游通道要是正被同一条线上的别的设备占着,数据照样过不去。内核为此用四张逐级指向的控制表把整条物理通路管起来:

表 全称 用途与关联
SDT 系统设备表 全系统一张总表,每台物理设备占一栏,记着设备类型、标识符和指向其 DCT 的指针
DCT 设备控制表 每台设备一张,记设备忙闲状态、等待该设备的 PCB 队列,以及它挂在哪个控制器(COCT)下
COCT 控制器控制表 每个控制器一张,记控制器状态、等待控制器的队列,以及它连在哪个通道(CHCT)上
CHCT 通道控制表 每个通道一张,记通道忙闲状态、等待通道的队列及所辖控制器列表

带通道的系统沿 SDT → DCT → COCT → CHCT 查找并分配设备、控制器和通道。某一级忙时,进程进入相应等待队列,整条通路可用后才能启动传输。若应用只指定设备类别,系统便可选择空闲的同类设备,避免因指定某台设备而等待,这也是第 5 节设备独立性的用途。

做设备分配决策时,内核要兼顾三件事:设备固有属性(独占设备一段时间内只给一人,共享设备如磁盘可交叉服务,虚拟设备靠 SPOOLing 多人同享)、分配算法(先来先服务或高优先级优先,体现在阻塞队列怎么排)以及分配安全性:

  • 安全分配方式:进程发出 I/O 请求后阻塞,完成后再继续,因而不会在等待本次 I/O 时继续申请另一设备。在教材模型中,这避免了设备分配中的“请求和保持”;代价是该进程的计算不能与其自身 I/O 并行。
  • 不安全分配方式:进程发出 I/O 请求后继续运行,还可申请其他设备。并发程度较高,但存在相互等待而死锁的风险,需要配合安全性检查,可联系第 3 章银行家算法理解。

5 设备独立性(4.3,领会)

设备独立性(设备无关性)要求应用程序使用逻辑设备名,避免将物理端口号或特定硬件编号写入程序。这样,设备更换或重新分配时,可由系统调整映射,减少对应用程序的影响。

内核通过逻辑设备表(LUT)建立映射。每项记录逻辑设备名、所分配的物理设备名和设备驱动程序入口。运行时可将逻辑打印机映射到空闲物理打印机,也可通过调整映射实现输出重定向,例如将原本送往屏幕的输出写入文件。

相应地,内核 I/O 软件分为两层:设备无关软件处理命名映射、权限检查、公共缓冲、块大小转换、空间分配和通用差错等共性问题;设备驱动程序将标准请求转换为特定控制器的操作。

6 SPOOLing 与共享打印(4.4,识记)

打印机是慢速独占设备。SPOOLing(假脱机技术)利用多道程序环境和共享磁盘,先接收并保存各进程的请求,再由后台进程依次驱动设备,使多个用户可以提交任务。系统主要由三部分组成:

  • 输入井和输出井:位于磁盘上的专用存储区,分别暂存预先输入的数据和等待输出的文件,注意与内存缓冲区区分。
  • 输入缓冲区和输出缓冲区:在内存里辟出的中转站,用来垫平磁盘井与物理外设之间的瞬时速度差。
  • 预输入进程和缓输出进程:常驻后台的两个内核/系统服务进程,专门负责在物理外设与磁盘井之间搬运数据。

以共享打印机为例:用户提交打印任务后,系统在磁盘输出井保存数据,建立请求表并加入打印队列,用户进程即可继续执行。物理打印机空闲时,后台的缓输出进程按队列读取文件,经内存输出缓冲区送往打印机。提交完成与实际打印完成是两个阶段;SPOOLing 由此把一台物理独占设备提供为多个用户可用的逻辑设备。

7 I/O 软件层次与一次请求(4.5,识记)

把前面散落的模块从上往下摞齐,现代操作系统的 I/O 软件正好排成五层(连底层硬件共五层架构):

层次(自上而下) 主要职责
用户层 I/O 软件 运行在用户态,包括库函数接口、格式化输入输出(如 printf),以及 SPOOLing 假脱机守护进程
设备无关软件 统一命名与逻辑到物理设备映射、权限保护、缓冲管理、块设备空间分配、独占设备分配与公用差错处理
设备驱动程序 唯一认得具体控制器寄存器布局的一层:把抽象读写请求翻成控制器命令字、填好 DMA 参数并启动硬件
中断处理程序 外设干完活发中断时第一时间接手:保护现场、读控制器状态确认成败、唤醒阻塞在此次 I/O 上的进程
硬件 设备控制器、通道与物理外设实打实完成机械与电气传输

以未命中缓存的阻塞式磁盘读取为例:

  1. 用户进程调用库函数,经系统调用进入设备无关层。
  2. 缓存未命中后,设备无关层调用磁盘驱动;驱动配置控制器、启动 DMA,并将读进程置为阻塞。
  3. 磁盘完成寻道和旋转后,DMA 将数据传入内存缓冲区。
  4. 设备发出完成中断,中断处理程序检查状态并唤醒读进程。
  5. 被唤醒的进程回到就绪队列,待调度器选中后再交付数据并继续执行。中断返回时是否立即调度该进程,取决于内核的调度与抢占策略。

8 磁盘结构、格式化与访问时间(4.6,识记)

传统机械硬盘由同轴旋转的盘片组成。每个盘面分成许多同心圆,称为磁道;不同盘面上半径相同的磁道合称一个柱面。切换同一柱面上的磁道通常不需要移动磁头臂,因此传统模型会将连续数据尽量安排在相邻位置。

每条磁道又分为若干扇区,常见扇区容量为 \(512\ \text{B}\) 或 \(4\ \text{KB}\)。文件系统使用的簇由若干连续扇区组成,见第 5 章。

按教材的传统磁盘模型,使用前涉及三项工作:低级(物理)格式化划分磁道与扇区,写入标识和 CRC/ECC 校验信息;分区划分逻辑存储区域,传统 MBR 在主引导记录中保存分区表;高级(逻辑)格式化建立相应文件系统的引导块、空闲空间管理结构、文件管理结构和初始根目录。具体结构因文件系统而异。

磁头固定在每条磁道上的叫固定头磁盘(贵而罕见),日常全是所有磁道共用一个可伸缩磁头的移动头磁盘。移动头磁盘完成一次扇区读写,耗时由三段相加:

\[ \text{访问时间} = \text{寻道时间} + \text{旋转延迟} + \text{数据传输时间} \]
  1. 寻道时间:机械磁头臂横移到目标磁道正上方的时间(通常是三项里的大头,几毫秒量级)。
  2. 旋转延迟:磁头到位后,等待盘片转到目标扇区所需的时间。若目标扇区位置均匀分布,等待时间从 0 圈到 1 圈,平均旋转延迟为半圈。
  3. 数据传输时间:扇区划过磁头下方、真正读出或写入比特流的时间,一般只有零点几毫秒。

自编例:硬盘转速为 \(7200\ \text{r/min}\),每秒转 \(7200 / 60 = 120\) 圈,因此转一圈需 \(1 / 120\ \text{s} \approx 8.333\ \text{ms}\),平均旋转延迟为半圈,即约 \(4.167\ \text{ms}\)。若平均寻道时间为 \(5\ \text{ms}\),单块传输时间为 \(0.1\ \text{ms}\),则平均访问时间为 \(5 + 4.167 + 0.1 = 9.267\ \text{ms}\)。题目若另给控制器开销,再将其计入。

本例中寻道与旋转延迟共约 \(9.167\ \text{ms}\),远长于单块传输时间。连续读取较大的数据块,可以摊薄多次机械定位的开销。

9 磁盘调度(4.7,领会)

磁盘请求队列中可能有多个不同磁道的请求。磁盘调度通过调整服务次序,减少磁头移动和寻道开销。虽然 FCFS 等名称与第 3 章进程调度相同,这里的计算对象是磁道距离:

算法 服务规则 关注点
FCFS 先来先服务 按请求到达顺序处理 公平性较好,但请求若分散在磁盘两端,磁头移动距离可能很长
SSTF 最短寻道时间优先 每次选择距当前磁头最近的请求 通常可缩短局部移动距离;远处请求可能长期等待,形成饥饿
SCAN 扫描(电梯算法) 磁头沿一个方向服务请求,到端点后反向扫描 可避免请求长期饥饿;刚经过的磁道需等磁头折返,等待时间仍不完全均匀
C-SCAN 循环扫描 磁头单向服务,到端点后返回另一端继续同向扫描 各磁道的等待时间较均匀;回程是否计入移动距离按题设处理
NStepSCAN(N 步扫描) 将请求分成每组至多 \(N\) 个的子队列,逐组执行 SCAN 扫描期间新请求进入后续子队列,避免新请求持续改变当前扫描次序
FSCAN 使用两条队列:一条用于当前扫描,另一条接收新请求;完成后交换 可视为每组请求数量不设上限的 NStepSCAN,一轮扫描结束后再处理新队列

计算 SCAN 和 C-SCAN 前,先确认初始移动方向及折返边界。教材的标准 SCAN/C-SCAN 移动到物理边界(如 0 或 199)后折返或返回;LOOK/C-LOOK 则以该方向最远的实际请求为界。边界口径不同,总移动道数也不同。

9.1 自编完整例

磁道范围 0–199,磁头初始位于 50,等待队列按到达顺序为 10、90、20、80,本轮没有新请求。初始扫描方向为磁道号增大的方向。计算到最后一个请求完成为止,C-SCAN 的跨端返回计入移动距离。

算法 运动路径 总移动磁道数 每请求平均移动
FCFS 50→10→90→20→80 40+80+70+60=250 62.5
SSTF 50→20→10→80→90 30+10+70+10=120 30
SCAN 50→80→90→199→20→10 30+10+109+179+10=338 84.5
C-SCAN 50→80→90→199→0→10→20 30+10+109+199+10+10=368 92

若题目规定“到该方向最远请求即折返”,即采用 LOOK/C-LOOK,则路径分别为 50→80→90→20→10,总移动 120;以及 50→80→90→10→20,总移动 130。本例只有 4 个静态请求,标准 SCAN 因需到达 199 边界,总道数 338 大于 FCFS 的 250。单个短例的结果不能概括算法在其他负载下的表现。

跑 SSTF 时每走完一步都要站在新磁道上重算剩余距离;万一左右两边各有一个请求离得一样近,先写明按“先来先服务”或题设规则破平局。本例第 1 步站在 50 看 20 和 80 都差 30 道,按到达先后(20 在 80 前)先去 20。

9.2 逐步累加:每一步的移动量摆出来

上面那张表只给总和,考场上要写的却是逐步过程。一步一行,累计量就是把上一行加上本行增量。

SSTF

步 当前磁道 选中请求 移动量 累计
1 50 20 30 30
2 20 10 10 40
3 10 80 70 110
4 80 90 10 120

SCAN(向磁道号增大方向扫,撞到 199 边界再反向)

步 当前磁道 动作 移动量 累计
1 50 服务 80 30 30
2 80 服务 90 10 40
3 90 扫到边界 199 109 149
4 199 反向,服务 20 179 328
5 20 服务 10 10 338

C-SCAN(同向扫到 199,直接跳回 0 再继续)

步 当前磁道 动作 移动量 累计
1 50 服务 80 30 30
2 80 服务 90 10 40
3 90 扫到边界 199 109 149
4 199 跳回 0 199 348
5 0 服务 10 10 358
6 10 服务 20 10 368

三张表中,SCAN 从 199 返回 20,移动 179 道;C-SCAN 返回时移动 199 道,途中不处理请求。若题设规定回程不计距离,C-SCAN 总数应减去 199,计算前需明确这一约定。

9.3 分批扫描的队列组织

新请求若不断到达当前磁道,可能使磁头长期停留,形成磁臂粘着。NStepSCAN 将队列分成每批至多 \(N\) 个请求的小队列,每批按 SCAN 处理,新请求进入后续批次。FSCAN 使用两条队列:开始扫描时固定当前队列,新请求进入另一条等待队列;当前批次完成后交换两条队列的角色。若题目未提供到达时刻,通常按请求一次性到齐计算,不必自行分批。

10 提高磁盘访问速度(4.8,识记)

除通过调度减少磁头移动外,教材还介绍以下五种提高磁盘访问效率的方法:

方法 原理 代价或边界
提前读(预读) 顺序读取文件时,将相邻的下一块也读入内存 随机访问时,预读的数据可能未被使用,仍会占用带宽和缓存
延迟写 改写过的盘块先标脏留在内存缓存里,等攒够一批或空闲时再合并写回;中途若又被改写就省掉了重复写盘 还没落盘前万一突然断电或死机,内存里的修改就会丢
优化物理块分布 把同一个文件或经常一起读的块尽量排在同一柱面或相邻磁道,扇区编号也可按旋转速度做交错排列 依赖文件系统的空间分配策略配合
虚拟盘(RAM Disk) 划出一片真实内存装扮成块设备,安装文件系统当超高速临时盘使 读写是纯内存速度,但挤占宝贵主存,且默认断电即空
磁盘高速缓存(Disk Cache) 在主存里留出一大片缓存区,专门存近期读写过的真实磁盘块副本 命中时零磁盘 I/O,但要操心脏块何时刷盘与一致性

注意区分三者:虚拟盘以主存模拟独立磁盘,内容未必有硬盘副本;磁盘高速缓存保存硬盘数据块的内存副本,供后续命中时复用;I/O 缓冲区主要用于传输过程中的暂存与速度匹配。现代系统中,缓冲和缓存的功能可能由同一页缓存结构承担。

11 考核要求

本章大纲分 I/O 系统组成、控制方式、缓冲管理和设备管理四组。识记包括 1.1–1.3 组成与控制器、4.2 分配方式、4.4 SPOOLing、4.5 软件层次、4.6 磁盘结构与访问时间、4.8 提速手段;领会包括 2.1–2.3 三种控制方式、3.1–3.2 缓冲管理、4.1 设备分配、4.3 设备独立性和 4.7 磁盘调度。计算练习可重点核对第 8、9 节的访问时间求和与磁头移动道数追踪。

12 教材本章习题

题目取自教材第 6 章“思考题与练习题”(共 9 题),答案取自教材附录“部分习题参考答案”(全部收录)。

12.1 单项选择题

1. 关于 DMA 控制方式,下列说法正确的是【 】。

  • A. 采用 DMA 控制方式时,CPU 不用干预整个输入/输出过程

  • B. 采用 DMA 控制方式时,每传输完一个数据块,CPU 要执行中断处理

  • C. 采用 DMA 传输方式,CPU 只在输入/输出开始和结束时干预输入/输出

  • D. 采用 DMA 传输方式只能提高传输速度,不能提高 CPU 与输入/输出设备的并行程度

答案与解析

参考答案: C。CPU 在传输开始前设置参数,结束时处理完成或出错,中间过程由 DMA 控制器组织。A 忽略了初始化与结束处理;B 把完成通知说成每块必做的中断处理;D 与事实相反,DMA 正因解放 CPU 才提高了并行程度。

2. 关于 SPOOLing 系统的组成,下列说法正确的是【 】。

  • A. 输入井和输出井都在内存中

  • B. 输出井和输出缓存都在硬盘中

  • C. 输入井和输入缓存都在硬盘中

  • D. 输入井和输出井都在硬盘中

答案与解析

参考答案: D。输入井与输出井位于磁盘,用于暂存待处理与待输出的数据;输入缓存与输出缓存位于内存,用于在内存与设备之间中转。

3. 设备控制器的 I/O 逻辑包含的主要部件是【 】。

  • A. 仅指令译码器

  • B. 指令译码器和地址译码器

  • C. 仅地址译码器

  • D. 仅控制寄存器

答案与解析

参考答案: B。I/O 逻辑负责接收并解释 CPU 发来的命令与地址,因此需要指令(命令)译码和地址译码。前者区分命令种类,后者选定寄存器或设备。

12.2 填空题

4. I/O 设备按信息交换的单位分类,可分为字符设备和 ___ 设备。

答案与解析

参考答案: 块。

5. 在数据到达速率与数据离去速率不同的地方,都可以引入 ___。

答案与解析

参考答案: 缓冲区。

6. 设备独立性的基本含义是___独立于具体使用的物理设备。

答案与解析

参考答案: 应用程序。

12.3 简答题

7. 说明设备控制器的结构和功能。

答案与解析

参考答案: 设备控制器由 CPU 接口、设备接口和 I/O 逻辑三部分组成。CPU 接口用于与主机交换命令、地址、数据和状态;设备接口连接具体设备;I/O 逻辑含指令译码与地址译码。控制器承担命令接收、地址识别、数据交换、状态报告及差错控制等功能。

8. 说明 DMA 控制器的结构和控制方式。

答案与解析

参考答案: DMA 控制器通过命令/状态寄存器 CR、内存地址寄存器 MAR、数据计数器 DC 和数据寄存器 DR 保存命令、目标地址、剩余数量及传输数据。CPU 初始化这些参数后,控制器直接在主存与设备之间组织成块传输,并在完成或出错时通知 CPU,通常以中断方式报告。

9. 什么是设备驱动程序?

答案与解析

参考答案: 设备驱动程序是实现设备专用控制逻辑的软件模块。它接收上层请求,检查参数,把请求转换为控制器可执行的命令,配置寄存器并启动传输。完成状态的处理也有它参与,上层因此不必关心设备的具体硬件细节。

13 闭卷复习与跨章联系(补充)

一、闭卷自答(合上书逐题口述)

  1. I/O 设备按传输速率、交换单位、共享属性各分几类?
  2. 设备控制器由哪三部分组成,CPU 接口与设备接口各管什么?
  3. 轮询、中断、DMA 三种控制方式怎么区分,各自由谁搬数据?
  4. DMA 控制器有哪四个寄存器?单缓冲、双缓冲、循环缓冲与公共缓冲池各解决什么问题?
  5. 设备分配用哪四张表,设备独立性是什么,SPOOLing 由哪几部分组成?
  6. 磁盘访问时间由哪三段组成,六种调度算法怎么走?

二、本章易错

  1. 设备控制器是硬件,设备驱动程序是控制该硬件的软件,两者不是一回事(第 1 节)。
  2. DMA 只把块传输交给控制器,初始化和结束处理仍由 CPU 做(第 2.2 节)。
  3. 旋转等待平均约半圈,不是一整圈(第 8 节)。

三、本章骨架

板块 内容 所在节
硬件 设备分类、控制器、通道 第 1 节
控制方式 轮询、中断、DMA 第 2 节
软件 缓冲、分配、独立性、SPOOLing、层次 第 3–7 节
磁盘 访问时间、六种调度、加速方法 第 8–10 节

四、跨章指路

  1. 公共缓冲池的 Getbuf/Putbuf 与进程发起读盘后的阻塞—中断唤醒链路,直接复用信号量与三态转换机制(见第 2 章)。
  2. 一次读文件请求到底要把哪些簇号排进磁盘调度队列,由 FAT 或 i 结点地址结构决定(见第 5 章)。见《计算机组成原理》第 6 章:那边拆解总线仲裁、中断电路与 DMA 控制器的硬件细节,这边讲操作系统内核如何在其上做排队、分配、假脱机与缓冲。