Appearance
设备分配与回收
考情分析
设备分配的数据结构和分配策略偶有考查。🔥 低频。
多个进程都想用打印机,但打印机一次只能服务一个——谁来分配、怎么排队、会不会死锁?这就是设备分配要解决的问题。
设备分配中的数据结构
设备分配依赖四张表:
各表的功能
| 数据结构 | 内容 | 说明 |
|---|---|---|
| SDT(系统设备表) | 全部设备信息 | 每个设备一个表项,指向 DCT |
| DCT(设备控制表) | 单个设备状态 | 设备类型、状态、等待队列、指向 COCT |
| COCT(控制器控制表) | 控制器状态 | 控制器状态、等待队列、指向 CHCT |
| CHCT(通道控制表) | 通道状态 | 通道状态、等待队列 |
设备分配策略
分配方式
| 方式 | 说明 | 适用设备 |
|---|---|---|
| 独占式 | 设备分配给一个进程后,直到释放前其他进程不能用 | 打印机 |
| 共享式 | 多个进程可交替使用 | 磁盘 |
| 虚拟式 | 通过 SPOOLing 将独占设备虚拟为共享设备 | 虚拟打印机 |
分配算法
| 算法 | 说明 |
|---|---|
| 先来先服务(FCFS) | 按请求顺序分配 |
| 优先级高者优先 | 高优先级进程优先获得设备 |
安全性考虑
| 方式 | 说明 | 特点 |
|---|---|---|
| 安全分配 | 进程发出 I/O 请求后立即阻塞,I/O 完成后才被唤醒 | 不会死锁,但 CPU 与 I/O 串行 |
| 不安全分配 | 进程发出 I/O 请求后可继续执行,可同时使用多个设备 | 可能死锁,但效率高 |
设备分配的步骤
- 根据设备名查 SDT,找到设备的 DCT
- 检查 DCT 中设备状态,若空闲则分配;否则进入等待队列
- 根据 DCT 找到 COCT,检查控制器是否空闲
- 根据 COCT 找到 CHCT,检查通道是否空闲
- 三者(设备、控制器、通道)都空闲时,分配成功
设备独立性
用户程序使用逻辑设备名请求设备,系统通过逻辑设备表(LUT) 将逻辑设备名映射到物理设备。这就像你在餐厅只说"来一杯美式",至于用哪台咖啡机做的,你不关心——逻辑设备名就是那杯"美式"。
| 概念 | 说明 |
|---|---|
| 逻辑设备名 | 用户使用的设备标识(如 "/dev/printer") |
| 物理设备名 | 设备的真实标识 |
| LUT | 逻辑设备名 → 物理设备名 + 驱动程序入口 |
好处:更换物理设备时,用户程序不需要修改。
考研高频考点
- 🔥🔥 设备分配的四张表(SDT/DCT/COCT/CHCT)
- 🔥 设备独立性(逻辑设备名 → 物理设备名)
- 🔥 安全分配 vs 不安全分配
分配机制能防止冲突,但对于打印机这种独占设备,排队等待太浪费时间。下一篇来看 SPOOLing 如何把独占设备"变成"共享设备。