| 项目 | 值 |
|---|---|
| 核心概念 | 设备管理 |
| 关键公式/性质 | 轮询:每次传输(忙等);中断:每次传输(不忙等);DMA:每块传输;通道:每个 I/O 任务。CPU 介入逐步减少 |
| 考试频率 | ⭐⭐⭐⭐ |
| 类型 | 特点 | 例子 |
|---|---|---|
| 块设备 | 以块为单位传输,可随机访问 | 磁盘、SSD |
| 字符设备 | 以字符为单位传输,顺序访问 | 键盘、鼠标、串口 |
CPU ──命令──→ 设备控制器
←状态──
(反复轮询直到完成)
CPU 不断查询设备状态,CPU 利用率低(忙等待),实现简单。
CPU ──命令──→ 设备控制器
│ CPU 去执行其他进程
←──中断── 设备完成
CPU 处理中断,读取数据
设备完成时发中断通知 CPU,不忙等待;每次传输仍需 CPU 介入(按字/字节)。
| DMA 寄存器 | 说明 |
|---|---|
| MAR(内存地址寄存器) | 数据传输的内存目标地址 |
| DC(数据计数器) | 剩余传输字节数 |
| DR(数据寄存器) | 暂存传输数据 |
| CR(命令/状态寄存器) | 控制命令和状态 |
通道是专用处理器,有自己的指令集;CPU 只需启动通道,通道独立完成 I/O,一个通道可控制多个设备控制器。
| 方式 | CPU 介入频率 | 传输单位 | 并行性 |
|---|---|---|---|
| 轮询 | 每次传输 | 字/字节 | 无 |
| 中断 | 每次传输 | 字/字节 | 有限 |
| DMA | 每块传输 | 块 | 较好 |
| 通道 | 每个 I/O 任务 | 一组块 | 最好 |
┌──────────────────────────┐ │ 设备控制器 │ │ 控制逻辑(CPU接口) │ │ 状态/控制寄存器 │ │ 数据缓冲区 │ │ 设备接口 │ └──────────────────────────┘
功能:① 接收和识别 CPU 命令;② 数据缓冲;③ 控制设备操作;④ 向 CPU 报告设备状态。
用户程序 → 系统调用接口 → 设备无关软件 → 设备驱动程序 ←与控制器交互 → 设备控制器 → 硬件设备
功能:接收上层抽象 I/O 请求 → 转为具体的设备控制命令 → 启动设备操作 → 处理设备中断。特点:与硬件紧密相关,每类设备对应一个驱动,是 OS 中唯一了解设备细节的部分。
利用磁盘作为缓冲,将独占设备虚拟为共享设备。
进程1 ──→ 输出到磁盘缓冲区 进程2 ──→ 输出到磁盘缓冲区 SPOOLing守护进程 进程3 ──→ 输出到磁盘缓冲区 → 打印机(独占)
组成:输入井(磁盘,模拟输入设备)、输出井(磁盘,模拟输出设备)、输入进程、输出进程。优点:将独占设备虚拟为共享设备、提高设备利用率、实现设备的虚拟化。
记录每个设备的属性和状态。
| 策略 | 说明 | 评价 |
|---|---|---|
| 静态分配 | 进程运行前分配,结束后释放 | 安全但利用率低 |
| 动态分配 | 需要时分配,使用完释放 | 利用率高但可能死锁 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。