输入输出管理
考点定位
- 大纲章节:I/O 管理基础(I/O 设备分类、I/O 控制方式、I/O 软件层次结构);设备独立性软件(I/O 调度、设备分配、缓冲区管理、SPOOLing);设备驱动与中断处理
- 常见题型:选择题(层次归属判断、缓冲/SPOOLing 概念辨析)+ 计算小题(单/双缓冲处理一块数据的时间)——缓冲时间计算是本章唯一稳定计算考点
- 考查频率:中高(层次结构与缓冲几乎隔年考选择;SPOOLing 是高频概念题;大题偶与设备分配结合出)
- 工程师读者注意:你写过 epoll、ioctl,但考试考的是层次结构的教科书切分(某功能属于哪一层是必考填空式判断)与缓冲时间的流水线计算——别按 Linux 内核的层次答,按本站表格答
- 前置知识:操作系统概述(内核态/中断/系统调用);进程与线程(阻塞与唤醒是 I/O 流程的主线);硬件基础见计算机组成原理 输入输出系统(I/O 接口、三种控制方式程序查询/中断/DMA 的硬件视角,本章是其 OS 软件侧)
一、I/O 系统的层次结构
1.1 为什么分层
I/O 硬件千差万别(键盘、磁盘、网卡),而用户程序希望用统一接口读写。OS 在硬件与应用之间切出多层,每层只依赖下一层的抽象接口——这与网络协议栈、文件系统 VFS 的分层动机完全同构。"某个功能属于哪一层"是 408 高频选择/判断题,按下表背死。
1.2 I/O 软件层次结构与各层职责(必背表)
自上而下(用户→硬件):
判断技巧(选择题救命):"翻译成硬件指令、直接操作控制器寄存器"→驱动程序;"缓冲、分配、按逻辑名找设备"→设备独立性软件;"假脱机、库函数"→用户层;"保存断点与现场"→中断处理。系统调用的处理由内核各层配合完成,库函数本身属于用户层。
1.3 设备独立性(设备无关性)
定义:应用程序使用的逻辑设备名(如"打印机")与物理设备无关,由 OS 在运行时映射到具体物理设备(物理设备名)。好处:应用不绑定具体设备、设备更换/故障时只改映射、便于共享与重定向(Unix 把设备映射为 /dev/ 下的特殊文件,见文件管理的文件分类)。
二、设备控制器与 I/O 端口
2.1 设备控制器
设备不直接连 CPU,而是通过设备控制器(I/O 控制器,常集成在主控芯片/扩展卡上)接入。控制器是 CPU 与设备之间的翻译官:
- 接收并识别 CPU 命令:内有控制寄存器,存放 CPU 写入的命令与参数
- 数据交换:内有数据缓冲寄存器,设备慢速数据与 CPU 之间缓冲
- 报告设备状态:内有状态寄存器(忙/闲、错误、就绪),CPU 可查询
- 地址识别:识别 CPU 访问的是哪个寄存器/端口
- 数据格式与信号转换:串并转换、电平/编码转换等
控制器内部组成三件套(与计组 I/O 接口一致):数据寄存器(DR)、控制寄存器(CR)、状态寄存器(SR),多个设备的控制器还可经通道(专用 I/O 处理机)级联管理,通道进一步分字节多路/数组选择/数组多路通道——硬件细节见计算机组成原理 输入输出系统。
2.2 I/O 端口及其编址
I/O 端口 = 控制器中的寄存器。CPU 如何访问端口(两种编址方式,408 常考对比):
三、I/O 核心子系统
OS 内核中与 I/O 相关的服务统称 I/O 核心子系统(I/O 子系统),运行于内核态,包括:I/O 调度、缓冲与高速缓存、设备分配、设备保护、差错处理、SPOOLing。本节覆盖考点密集的四个:调度、分配、缓冲、SPOOLing。
3.1 I/O 调度
I/O 调度:确定服务 I/O 请求的先后顺序,改善整体性能(公平性与效率的折中)。典型例子:磁盘调度(见文件管理第六节);OS 还可为目标设备维护请求队列,或按优先级重排。I/O 调度常通过缓冲 + 重排请求实现。
3.2 设备分配(四表结构,大题可考推演)
设备分配的总原则:充分提高利用率、避免死锁(参考进程与线程死锁一节)、按用户逻辑设备名映射到物理设备(设备独立性)。分配方式:静态分配(独占式,用前分配用完释放,不会死锁但利用率低)与动态分配(进程用设备时申请)。安全性分配:发出 I/O 请求即阻塞本进程,则"请求和保持"不成立,不会死锁但并发度低;不安全分配反之。
四张数据结构(必背,考"哪个表含哪个字段"):
分配流程(含通道的系统,三层逐步"找到并占用"):
设备、控制器、通道三者全部分配成功才能启动 I/O;任一层忙则挂到该层等待队列(体现"逐层排队")。
3.3 缓冲区管理(必考计算)
为什么缓冲:① 缓和 CPU 与 I/O 设备速度不匹配的矛盾;② 减少对 CPU 的中断频率(一次搬一大块,而不是一字节一中断);③ 解决数据粒度不匹配(设备按字节/块产出,进程按记录消费);④ 提高 CPU 与设备间的并行性。缓冲的实体在内存:"缓冲区"是暂存数据的内存区域,"工作区"是进程直接使用的数据区。
硬件缓冲 vs 软件缓冲:用寄存器实现叫硬件缓冲,通常说的缓冲是内存软件缓冲。
时间计算公式(考试标准模型):设 = 设备把一块数据输入缓冲区的时间, = 缓冲区传送到工作区的时间, = CPU 处理一块数据的时间。稳态下每处理一块的平均耗时:
理解(不要死背):单缓冲时设备与 CPU 只能占用同一个缓冲区,二者中耗时长的串行占满一个周期,(缓冲区→工作区)期间设备无法开始装下一块,必须串行追加;双缓冲时设备总有空缓冲可用,瓶颈只剩"设备侧周期 "与"CPU 侧周期 "取大者。
例题(模拟题,完整推演):设备每输入一块数据到缓冲区需 ms,缓冲区数据传送到工作区需 ms,CPU 处理一块需 ms。求单缓冲与双缓冲下连续处理 10 块数据的总时间。
- 单缓冲:每块 ms,总时间 ms
- 双缓冲:每块 ms,总时间 ms
- 验证流水线:双缓冲时设备全程不停(每 100 ms 产出一块),CPU 每块忙 60 ms 还有 40 ms 空闲,瓶颈是设备
注意模型假设:数据必须先到缓冲区再到工作区(两次搬移)、一块为单位处理。若题目"CPU 直接从缓冲区处理"(无 M),单缓冲公式退化为 加上搬运安排,以题干描述为准,先画时间线再套公式。
3.4 假脱机 SPOOLing(高频概念题)
脱机技术的由来:早期用外围专门机器(卫星机)脱机完成慢速 I/O,主机只与快速的磁带打交道。SPOOLing(Simultaneous Peripheral Operations On-Line,外围设备联机操作)用一道程序模拟脱机时的卫星机,把独占设备改造成共享设备——核心是"用空间(磁盘井)换并行"。
SPOOLing 系统的组成(三件套,必背):
- 输入井与输出井:磁盘上开辟的两个存储区域,模拟脱机时的磁带;输入井暂存设备输入数据,输出井暂存待输出数据
- 输入缓冲区与输出缓冲区:内存中,中转:设备 ↔ 内存缓冲区 ↔ 磁盘井
- 输入进程 SPi 与输出进程 SPo:模拟脱机时的卫星机;SPi 把设备数据经输入缓冲区转存输入井,SPo 把输出井数据经输出缓冲区送设备
共享打印机实例(必考):打印机是典型独占设备,直接分配则一个进程打印期间其他进程全部阻塞等待。SPOOLing 化之后:
- 打印请求到达,假脱机管理进程在输出井中申请空闲盘块,将打印数据写入,并插入请求队列
- 进程立即返回继续干别的(对用户而言"打印瞬间完成")
- 打印机空闲时,SPo 从队列取出第一个请求,输出井数据经输出缓冲区送打印机打印
效果:独占设备被改造成共享设备(宏观上多进程同时"打印"),请求形式上是"虚拟设备"——每个进程都觉得自己有一台打印机。代价:占磁盘空间、有排队延迟。同理还有共享网卡、批处理任务队列。判断题口径:SPOOLing 系统必须有磁盘(井)且必须有并行的 CPU 处理,才能边计算边假脱机。
四、设备驱动与中断处理
4.1 设备驱动程序
设备驱动程序是上层抽象命令到硬件操作的翻译层:收到设备独立性软件传来的抽象请求(read/write/block number),把它翻译成对具体控制器寄存器的写操作序列(写命令寄存器、置 DMA 参数等),必要时阻塞自己等待完成。驱动与硬件紧密相关,每类设备一个;不同 OS、不同型号设备的驱动互不兼容。驱动程序通常运行在内核态(也有用户态驱动设计,408 口径按内核态)。
4.2 中断处理流程(与计组衔接)
以"进程请求读磁盘"为例的完整时序(大题按此叙述):
- 用户进程调用库函数 → 系统调用陷入内核,进入设备独立性软件:校验、申请设备与缓冲
- 设备驱动程序把请求翻译成控制器命令,写入控制器寄存器启动设备;CPU 可切换去运行其他进程(原进程阻塞,参考进程与线程的运行→阻塞)
- 磁盘控制器完成操作,向 CPU 发I/O 完成中断
- CPU 响应中断(前提:指令周期结束、开中断),执行中断处理程序:保存现场 → 检查状态/传输数据 → 唤醒等待该 I/O 的进程 → 恢复现场、中断返回
- 被唤醒进程转为就绪态,调度后从缓冲区取数据继续
中断隐指令、中断向量、多重中断与屏蔽等硬件视角在计算机组成原理 输入输出系统统一讲;本章掌握"OS 侧:谁阻塞、谁唤醒、哪层做什么"。
常见坑
- 层次归属:SPOOLing 在用户层软件(假脱机管理进程模拟脱机);缓冲管理在设备独立性软件;"向控制器寄存器写命令"是驱动程序;三个最容易互相搬家
- 缓冲公式别背反:单缓冲 ;双缓冲 。双缓冲不是简单减半;当 远大于 时双缓冲每块耗时就是 (设备是瓶颈)
- "缓冲区"与"工作区"是两段内存:题目问"处理一块数据需要几步搬移"时,设备→缓冲区→工作区共两跳, 只算第二跳
- SPOOLing 前提:没有磁盘井就没有 SPOOLing;SPOOLing 把独占设备改造为共享(虚拟)设备,不是提高设备本身速度——"提高了 I/O 速度"这类说法要按"宏观并行/减少等待"理解
- 设备分配四表名字别混:DCT 挂等待队列、SDT 全系统一张且含驱动入口、CHCT 指向通道——题目爱考"每台设备一张/全系统一张"
- 统一编址 vs 独立编址:统一编址"占内存空间、无需专用指令";独立编址"专用 I/O 指令、空间独立"——两两互为对方缺点,按对称背
自测
- "把逻辑块号转换为物理盘块号、并管理缓冲区"属于 I/O 层次结构中的哪一层?
- 设备分配的四张表中,全系统只有一张的是哪张?其中每个表项包含指向哪张表的指针?
- 单缓冲: ms, ms, ms,处理一块平均多少 ms?双缓冲呢?
- 判断:SPOOLing 技术将独占设备改造为共享设备,其实现必须依赖磁盘作为"井"。( )
- CPU 响应 I/O 完成中断后,由中断处理程序完成的、与进程管理直接相关的关键动作是什么?
自测答案
- 设备独立性软件(设备无关软件)。逻辑块映射与缓冲管理是其职责;具体寄存器操作才属于驱动程序。
- SDT(系统设备表);每个表项含指向该设备 DCT(设备控制表)的指针(以及设备类型、标识符、驱动程序入口)。
- 单缓冲 ms;双缓冲 ms。
- 对。井在磁盘上,没有磁盘(及井)无法实现假脱机;改造目标是共享/虚拟设备。
- 唤醒因等待该 I/O 而阻塞的进程(阻塞→就绪),随后恢复现场、中断返回。