设备的分配与回收
一、设备分配时的考虑因素
(一)设备的固有属性
- 独占设备:一个时段只能分配给一个进程(如打印机)
- 共享设备:可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。
- 虚拟设备:采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
(二)设备分配算法
- 先来先服务
- 优先级高者优先
- 短任务优先
- ......
(三)设备分配中的安全性
(回顾:第二章的死锁及其处理策略)
(补充:不安全分配方式并不意味着进入了不安全状态(不安全状态见死锁的处理策略))
二、静态分配与动态分配
-
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
(有了全部资源才能开始运行。破坏了“请求和保持”条件(见死锁产生的四个条件),不会发生死锁)
-
动态分配:进程运行过程中动态申请设备资源
(可能发生死锁)
三、设备分配管理中的数据结构
(一)DCT 设备控制表 Device Control Table
(二)COCT 控制器控制表 Controller Control Table
(三)CHCT 通道控制表 Channel Control Table
(四)SDT 系统设备表 System Device Table
四、设备分配的步骤
- 根据进程请求的物理设备名查找 SDT(注:物理设备名是进程请求分配设备时提供的参数)。
- 根据 SDT 找到 DCT,若设备忙碌则将进程 PCB 挂到设备等待队列中,不忙碌则将设备分配给进程。
- 根据 DCT 找到 COCT,若控制器忙碌则将进程 PCB 挂到控制器等待队列中,不忙碌则将控制器分配给进程。
- 根据 COCT 找到 CHCT,若通道忙碌则将进程 PCB 挂到通道等待队列中,不忙碌则将通道分配给进程。
——重点:
只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动 I/O 设备进行数据传送。
五、设备分配步骤的改进
原本的第一步:根据进程请求的物理设备名查找 SDT(注:物理设备名是进程请求分配设备时提供的参数)。
改进方法:
建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。
LUT 逻辑设备表 Logical Unit Table 见 5.4 节 I/O 软件层次结构
——重点:
最终的设备分配步骤为:
逻辑设备名——(LUT——物理设备名——SDT)——DCT——COCT——CHCT