跳转至

第 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 主要在开始和结束时介入:

  1. CPU 设置设备、方向、主存起址和传输长度,启动 DMA。
  2. DMA 控制器在获得总线使用权后直接搬运数据,更新地址和计数。
  3. 传输完成或出错后通知 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 控制方式,下列说法正确的是【 】。

  • 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 填空题

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、总线与中断的硬件机制,这边说明操作系统如何在此之上排队、分配与缓冲。