第 6 章 I/O 设备管理¶
依据:本地《操作系统概论(2017年版)》第六章、书前考试大纲第六章、附录部分习题答案。括号编号对应大纲考核条目。磁盘调度计算例均为自编,明确给出方向和边界;教材的传统磁盘与硬件模型用于本课复习。
复习导航¶
| 大纲条目 | 层次 | 位置与目标 |
|---|---|---|
| 1.1—1.3 I/O 系统组成 | 识记 | 第 1 节:设备分类、控制器和接口 |
| 2.1—2.3 控制方式 | 领会 | 第 2 节:轮询、中断、DMA 的完整过程 |
| 3.1—3.2 缓冲 | 领会 | 第 3 节:循环缓冲、公共缓冲池与同步 |
| 4.1 分配数据结构 | 领会 | 第 4 节:SDT、DCT、COCT、CHCT |
| 4.2 分配因素与方式 | 识记 | 第 4 节:设备属性、安全性、分配步骤 |
| 4.3 设备独立性 | 领会 | 第 5 节:逻辑设备名到物理设备 |
| 4.4 SPOOLing | 识记 | 第 6 节:组成、打印流程、虚拟设备 |
| 4.5 I/O 软件层次 | 识记 | 第 7 节:各层职责与请求返回路径 |
| 4.6 磁盘结构与时间 | 识记 | 第 8 节:格式化、访问时间 |
| 4.7 磁盘调度 | 领会 | 第 9 节:六类算法及运行过程 |
| 4.8 访问加速方法 | 识记 | 第 10 节:缓存、虚拟盘、读写优化 |
一次 I/O 从应用请求开始,经设备分配、请求排队和驱动处理后,由控制器启动实际传输。设备完成操作时通知系统,系统再处理完成状态并唤醒等待进程。缓冲管理协调传输各阶段的速度差异,磁盘调度则安排多个请求的服务次序。
1 I/O 系统、设备和控制器(1.1—1.3)¶
微机 I/O 系统中,CPU、主存和设备控制器通过总线连接。主机系统还可以在 CPU 与控制器之间引入 I/O 通道。通道执行专门的 I/O 程序,减轻 CPU 管理大量设备的负担。
| 分类依据 | 类型 | 理解要点 |
|---|---|---|
| 传输速率 | 低速、中速、高速 | 比较数据传输能力 |
| 交换单位 | 字符设备、块设备 | 字符流与固定大小数据块;教材以键盘、磁盘等说明 |
| 共享属性 | 独占、共享、虚拟设备 | 是否允许并发请求、是否通过软件改造成共享接口 |
设备控制器负责接收、识别命令,控制设备,交换和暂存数据,报告状态,进行地址识别和差错检测等。其结构可概括为 CPU 接口、设备接口和 I/O 逻辑。
- CPU 接口包含数据、控制/状态等寄存器,通过数据线、地址线、控制线交互。
- 设备接口连接设备的数据、状态和控制信号。
- I/O 逻辑解释命令并选择设备,教材强调其中的指令译码器和地址译码器。
设备控制器不是设备驱动程序:前者属于硬件,后者是控制该硬件的软件。通道比一般 DMA 控制器具有更强的 I/O 程序控制能力。
2 三种 I/O 控制方式(2.1—2.3)¶
CPU 通过控制器操作设备,参与传输的程度却可以不同。轮询、中断和 DMA 的差别落在两处:CPU 怎样得知设备就绪,数据由谁搬运。
| 方式 | CPU 如何得知就绪/结束 | 谁组织数据搬运 | 主要代价 |
|---|---|---|---|
| 轮询/程序查询 | 循环读取状态 | CPU 执行传送指令 | 等待时占用 CPU |
| 中断驱动 | 设备产生中断 | 基本模型中 CPU 在中断服务中传送 | 频繁中断有处理开销 |
| DMA | 块传输结束等事件中断通知 | DMA 控制器直接在设备与主存之间传送 | 需设置传输参数并协调总线使用 |
2.1 轮询与中断¶
轮询方式下,CPU 发出命令后反复读取设备状态,设备就绪时执行数据传送,再判断本次操作是否完成。它的控制过程直接,但查询等待持续占用 CPU 时间。
中断方式下,CPU 发出命令后继续执行其他工作。设备就绪或完成时申请中断,CPU 保存现场、识别中断源并运行处理程序,之后返回。中断减少了主动等待,但每次中断仍要保存和恢复现场、执行处理程序。
2.2 DMA 过程与寄存器¶
DMA 按数据块组织传输,CPU 主要在开始和结束时介入:
- CPU 设置设备、方向、主存起址和传输长度,启动 DMA。
- DMA 控制器在获得总线使用权后直接搬运数据,更新地址和计数。
- 传输完成或出错后通知 CPU,系统处理状态、结束 I/O,必要时唤醒等待进程。
| 寄存器 | 教材名称 | 作用 |
|---|---|---|
| CR | 命令/状态寄存器 | 保存命令、方向与有关状态 |
| MAR | 内存地址寄存器 | 保存当前主存传送地址 |
| DC | 数据计数器 | 记录剩余传送量 |
| DR | 数据寄存器 | 暂存传输中的数据 |
DMA 将块传输交给控制器完成,CPU 仍负责初始化和结束处理。传输期间 CPU 可以执行其他工作;不过,DMA 与 CPU 可能竞争主存或总线,因此并行程度仍受硬件资源约束。
3 缓冲管理(3.1—3.2)¶
缓冲区是在传输两端之间暂存数据的内存区域。引入缓冲可以缓和速度差异,协调传输单位不一致。它还能减少中断频率、放宽中断响应时间限制,使 CPU 与设备有更多并行工作的机会。缓冲不能让慢设备的长期平均处理能力无限提高。
3.1 单缓冲、双缓冲、循环缓冲¶
单缓冲使用一个系统缓冲区接收数据。数据复制到用户空间后,进程可以处理它,系统缓冲区则用于下一次输入。双缓冲使用两个系统缓冲区:设备填充其中一个时,进程从另一个提取数据。这样能减少双方相互等待的时间,代价是额外的空间和同步管理开销。
循环缓冲由多个缓冲区构成环。教材区分空缓冲区 R、已装数据的 G 和正在使用的 C,指针有 Nexti、Nextg、Current 等。
生产者:申请空 R → 作为当前缓冲写入 → 释放为满 G
消费者:申请满 G → 作为当前缓冲读取 → 释放为空 R
Getbuf 提供可用缓冲区并移动相关指针;Releasebuf 使当前缓冲转换到可供另一方使用的状态。无空缓冲时生产者等待,无满缓冲时消费者等待。指针相等的含义必须结合状态/计数判断,不能脱离实现直接认定一定为空或一定为满。
3.2 公共缓冲池¶
公共池供多个进程的输入输出共同使用。三个队列是 emq 空队列、inq 输入队列、outq 输出队列。四种工作缓冲角色为 hin 收容输入、sin 提取输入、hout 收容输出、sout 提取输出。
| 过程 | 从哪里取 | 做什么 | 放到哪里 |
|---|---|---|---|
| 收容输入 | emq | 设备输入数据到 hin | inq |
| 提取输入 | inq | 进程从 sin 取数据 | emq |
| 收容输出 | emq | 进程把输出写到 hout | outq |
| 提取输出 | outq | 把 sout 数据交给设备 | emq |
教材用每队列的资源信号量 RS(type) 表示可用缓冲数,互斥信号量 MS(type) 保护队列结构。以下按记录型信号量整理:
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]) // 最后通知有可用缓冲
MS 初值为 1,RS 初值等于对应队列已有缓冲数。若先持有 MS 再等待 RS,可能在队列为空时锁住队列,使归还缓冲的进程无法进入,造成死锁。这与第二章生产者—消费者的同步顺序是同一原理。
4 设备分配与数据结构(4.1—4.2)¶
多个进程共享 I/O 系统时,操作系统需要记录各设备及其连接路径的占用状态,并管理等待请求。教材使用以下四类表描述设备、控制器和通道之间的关系。
| 表 | 全称 | 用途与关联 |
|---|---|---|
| SDT | 系统设备表 | 总览系统设备,含设备类型、标识及 DCT 入口等 |
| DCT | 设备控制表 | 某设备的类型、状态、等待队列及控制器关联 |
| COCT | 控制器控制表 | 控制器状态、等待队列及通道关联 |
| CHCT | 通道控制表 | 通道状态和等待队列等 |
具备通道的教材模型中,使用设备可能要求整条路径可用:设备 → 控制器 → 通道。设备空闲不保证它所依赖的控制器、通道也空闲。
分配独占设备时,系统先根据逻辑请求定位实际设备,再检查其 DCT;若设备忙,则将请求排队。设备可分配时,还需取得相应控制器和通道的使用权,条件满足后才能启动。某一级资源不可用时,请求如何等待、已占资源如何处置,由采用的安全策略决定。
分配时考虑:设备固有属性、请求先后和优先权、分配的安全性。独占设备在一段时间内由一个进程占用;共享设备可接受多个进程的请求并由系统组织访问;虚拟设备通过 SPOOLing 等技术提供多个逻辑使用接口。
安全分配方式下,教材模型让进程提出 I/O 后阻塞到完成。这样它不会在持有设备时再请求其他设备,形成复杂的循环等待。不安全分配方式允许进程在 I/O 期间继续运行并再次请求设备,并行性较高,但死锁风险要另行控制。这里的安全性靠限制进程的申请行为实现,第三章银行家算法则通过安全序列检查分配结果,两者机制不同。
5 设备独立性(4.3)¶
设备分配需要操作具体硬件,但应用程序不宜依赖固定的设备编号和控制方法。设备独立性通过逻辑命名和统一接口,将应用请求与具体设备的选择分开。
设备独立性指应用程序独立于具体物理设备。应用使用逻辑设备名或统一接口,系统完成到物理设备、相应驱动的映射。例如应用向“打印机”提交任务,系统可以根据配置选用某一台具体打印设备。
逻辑设备表可记录逻辑设备名、物理设备名及驱动程序入口等信息。映射改变时,应用通常不必按硬件细节重写,设备替换、重定向和统一管理也因此容易一些。
设备无关层负责统一命名、保护、分配、缓冲等公共功能;驱动负责具体控制器命令。统一接口并不意味着所有设备具有完全相同的硬件能力。
6 SPOOLing 与共享打印(4.4)¶
SPOOLing 是假脱机技术。它用磁盘输入/输出井暂存数据,由专门进程组织实际的设备传输,使用户提交任务和设备执行任务得以分开。教材系统包含:
- 输入井、输出井:位于磁盘,暂存输入和待输出数据。
- 输入缓冲区、输出缓冲区:位于内存,供实际数据传输周转。
- 输入进程、输出进程:组织设备与井之间的数据传送。
共享打印时,系统将用户生成的打印文件保存在输出井,并登记请求。输出进程按队列取出任务,经内存输出缓冲和设备驱动交给打印机。任务完成后,系统更新请求状态并回收临时空间。
多个用户可以在前一任务尚未打印完时继续提交请求,物理打印机则按顺序执行。系统以排队和暂存的方式,为多个用户提供逻辑上的打印设备使用接口;独占设备的虚拟化就建立在这一层排队与暂存之上。
SPOOLing 与一般缓冲的区别,在于磁盘井、作业队列和独立服务进程带来的解耦。它能让用户进程更早结束提交阶段,但消除不了设备故障,输出井的容量也不是无限的。
7 I/O 软件层次与一次请求(4.5)¶
设备独立性和具体硬件控制由不同的软件层承担。上层处理统一请求,下层处理设备命令和中断,各层协作完成一次 I/O。
| 层次,自上而下 | 主要职责 |
|---|---|
| 应用/用户层 I/O 软件 | 提供调用接口、格式处理,组织用户请求及假脱机等服务 |
| 设备无关软件 | 统一接口、命名映射、保护、缓冲、分配、公共差错处理 |
| 设备驱动程序 | 把通用请求翻译成具体设备命令,检查参数、设置寄存器、启动传输 |
| 中断处理程序 | 响应硬件事件,保存必要现场、确认状态和完成情况、通知后续处理 |
| 硬件 | 控制器和设备实际执行传输 |
自编情景:进程读磁盘文件并等待。文件系统先定位数据块;I/O 层组织请求,驱动设置控制器;数据通过 DMA 等方式到主存;设备产生中断;处理程序确认完成并由系统唤醒等待进程,进程进入就绪队列,之后才可能被调度执行。
完成通知只把等待进程恢复到就绪态。能否立即获得 CPU 仍由调度程序决定,因此一次中断处理未必伴随进程切换。
8 磁盘结构、格式化与访问时间(4.6)¶
磁盘含盘片、盘面、磁道、扇区;同一半径上的各盘面磁道构成柱面。扇区是记录数据和控制信息的物理单位;文件系统的簇可包含多个连续扇区。
物理/低级格式化划定磁道、扇区及标识和校验等控制信息;分区建立逻辑磁盘范围;逻辑/高级格式化建立文件系统的初始管理结构,如空闲空间记录、根目录等。教材的主引导记录与活动分区是相应历史启动模型,复习时避免把它写成所有机器的统一要求。
固定头磁盘在各磁道配置磁头;移动头磁盘通过移动磁头选择磁道。传统磁盘的一次访问时间可分为:
访问时间 = 寻道时间 + 旋转延迟 + 数据传输时间
寻道时间用于移动磁头到目标磁道;旋转延迟用于等待目标扇区转到磁头下;传输时间用于实际读写。旋转等待平均值在均匀随机到达的模型下约为半圈。
自编例:7200 转/分钟,单圈时间 60/7200 s≈8.333 ms,平均旋转等待约 4.167 ms;若寻道 5 ms、传输 0.1 ms,总计约 9.267 ms。若题目另给控制器开销,应再加入。批量读取可摊薄寻道和等待代价。
9 磁盘调度(4.7)¶
磁盘调度决定多个等待请求的服务顺序,目标常是减少磁头移动、改善响应与公平性。FCFS 等名称也用于 CPU 调度,但本节比较的是磁头移动与磁盘请求等待,计算对象与第三章不同。
| 算法 | 服务规则 | 关注点 |
|---|---|---|
| FCFS | 按请求到达顺序 | 公平直接,移动可能很长 |
| SSTF | 选离当前磁道最近的请求 | 局部移动短,远处请求可能长期等待 |
| SCAN | 沿一个方向服务,再反向 | 需说明初始方向、是否到物理边界 |
| CSCAN/C-SCAN | 只沿一个方向服务,回到另一端后继续 | 等待较均匀,回程是否计距离看题设 |
| NStepSCAN | 按长度不超过 N 划分子队列,逐队列 SCAN | 新请求放入后续队列,限制长期停留 |
| FSCAN | 两个队列交替:一个扫描,一个接新请求 | 当前扫描集合固定,避免新请求不断影响本轮 |
SCAN 与 CSCAN 的运动路径取决于初始方向和边界约定。标准 SCAN 到磁盘边界再反向,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,路径为 50→80→90→20→10,总移动 120;C-LOOK 为 50→80→90→10→20,总移动 130。边界约定会直接改变答案。在小型静态例中,SCAN 的移动量可能多于 FCFS,所以不能说某个算法对所有输入都更优。
SSTF 每服务一次后,都要从当前位置重新比较剩余请求距离。若存在相等距离,先声明按到达先后或题目给出的规则打破平局。
9.2 分批扫描的队列组织¶
NStepSCAN 先固定本批最多 N 个请求,对这一批执行 SCAN,再取下一批;扫描中到来的请求进入后续批。FSCAN 开始时把待处理集合固定为活动队列,新请求进入等待队列;活动队列处理完后交换角色。题目若没有给到达时刻,不能自行添加动态请求来改变队列。
10 提高磁盘访问速度(4.8)¶
磁盘调度通过调整请求顺序减少寻道开销。除此之外,还可以减少实际磁盘访问次数,或让一次访问传输更多有效数据。教材介绍的方法如下。
| 方法 | 原理 | 代价或边界 |
|---|---|---|
| 提前读 | 预计后续会用到相邻数据,提前装入 | 预测不准会浪费传输和缓存 |
| 延迟写 | 修改先留在内存,之后合并写回 | 写回前掉电或故障存在数据丢失风险 |
| 优化物理块分布 | 把相关数据安排在较近位置 | 需布局和分配策略支持 |
| 虚拟盘 | 用内存模拟磁盘空间 | 速度快但占用内存,通常需考虑易失性 |
| 磁盘高速缓存 | 在内存保留实际磁盘块的副本 | 命中可减少磁盘访问,需处理一致性和写回 |
虚拟盘把一片内存作为盘使用;磁盘高速缓存是实际磁盘内容的副本。设备缓冲着重协调数据流,缓存着重复用已访问的数据;同一块内存区域有时兼有两方面的作用。
11 考核要求¶
本章条目中,I/O 系统的组成与设备控制方式属识记。缓冲管理、设备分配、设备独立性与 I/O 软件层次属领会;磁盘调度与访问时间计算属简单应用。
本章重点为设备管理软件的构成及各部分实现的功能。难点为设备管理软件中涉及的数据结构、设备分配过程、设备独立性、设备管理软件与硬件的接口。
12 教材本章习题¶
题目取自教材第六章“思考题与练习题”,答案依据教材附录“部分习题参考答案”第六章。
12.1 单项选择题¶
1. 关于 DMA 控制方式,下列说法正确的是【 】。
答案与解析
参考答案:C。
CPU 在传输开始前设置参数,结束时处理完成或出错,中间过程由 DMA 控制器组织。A 忽略了初始化与结束处理;B 把完成通知说成每块必做的中断处理;D 与事实相反,DMA 正因解放 CPU 才提高了并行程度。
2. 关于 SPOOLing 系统的组成,下列说法正确的是【 】
答案与解析
参考答案:D。
输入井与输出井位于磁盘,用于暂存待处理与待输出的数据;输入缓存与输出缓存位于内存,用于在内存与设备之间中转。
3. 设备控制器的 I/O 逻辑包含的主要部件是【 】。
答案与解析
参考答案:B。
I/O 逻辑负责接收并解释 CPU 发来的命令与地址,因此需要指令(命令)译码和地址译码。前者区分命令种类,后者选定寄存器或设备。
12.2 填空题¶
1. I/O 设备按信息交换的单位分类,可分为字符设备和 ___ 设备。
答案与解析
块。
2. 在数据到达速率与数据离去速率不同的地方,都可以引入 ___。
答案与解析
缓冲区。
3. 设备独立性的基本含义是___独立于具体使用的物理设备。
答案与解析
应用程序。
12.3 简答题¶
1. 说明设备控制器的结构和功能。
答案与解析
设备控制器由 CPU 接口、设备接口和 I/O 逻辑三部分组成。CPU 接口用于与主机交换命令、地址、数据和状态;设备接口连接具体设备;I/O 逻辑含指令译码与地址译码。控制器承担命令接收、地址识别、数据交换、状态报告及差错控制等功能。
2. 说明 DMA 控制器的结构和控制方式。
答案与解析
DMA 控制器通过命令/状态寄存器 CR、内存地址寄存器 MAR、数据计数器 DC 和数据寄存器 DR 保存命令、目标地址、剩余数量及传输数据。CPU 初始化这些参数后,控制器直接在主存与设备之间组织成块传输,并在完成或出错时通知 CPU,通常以中断方式报告。
3. 什么是设备驱动程序?
答案与解析
设备驱动程序是实现设备专用控制逻辑的软件模块。它接收上层请求,检查参数,把请求转换为控制器可执行的命令,配置寄存器并启动传输。完成状态的处理也有它参与,上层因此不必关心设备的具体硬件细节。
13 闭卷复习与跨章联系(补充)¶
本章各部分围绕一次具体 I/O 串联起来:上层提出请求,设备分配确定可用路径,缓冲协调数据流。传输由驱动和控制器完成,中断处理负责报告结果。磁盘调度题单独考查请求次序与磁头移动。
第 2 章的资源信号量与这里“进程读取文件”的中断唤醒相衔接。进程发出请求后阻塞,I/O 完成中断到来时被唤醒,回到就绪队列。第 5 章的 FAT 与 i 结点决定一次读请求要访问哪些磁盘块,进而影响磁盘调度的实际队列。与计算机组成原理第 6 章对照:那边说明 DMA、总线与中断的硬件机制,这边说明操作系统如何在此之上排队、分配与缓冲。