设备分配与回收
操作系统中的设备分配与回收;
这是一个核心的I/O管理功能,其核心目标是:在多个进程竞争使用有限设备的情况下,安全、高效、公平地将设备分配给进程,并在使用完毕后妥善回收,以供其他进程使用。
为什么需要设备分配与回收?
- 设备稀缺性:设备数量(如打印机、扫描仪)远少于进程数量。
 - 设备独占性:某些设备(如打印机)在一段时间内只能被一个进程独占使用,不能像CPU那样时间片轮转。
 - 避免冲突:如果没有管理,多个进程同时向一台打印机发送数据,输出会交织在一起,完全无法使用。
 - 提高利用率:通过合理的分配策略(如假脱机技术),让慢速的独占设备能被多个进程“同时”使用,减少设备空闲时间。
 
设备分类是分配的基础
操作系统会根据设备的特性,采用截然不同的分配策略:
| 设备类型 | 特点 | 例子 | 分配策略 | 
|---|---|---|---|
| 独占设备 | 在一段时间内只允许一个进程访问,直到该进程释放。 | 打印机、磁带机、绘图仪 | 独占分配。需要复杂的分配与回收机制,通常配合SPOOLing技术。 | 
| 共享设备 | 一段时间内允许多个进程交替访问(宏观共享,微观交替)。 | 磁盘、光盘 | 共享分配。无需分配,直接通过驱动访问。重点在于调度访问顺序(如磁盘臂调度算法)。 | 
| 虚拟设备 | 通过SPOOLing技术将独占设备模拟成的共享设备。 | 通过打印服务程序管理的打印机 | 虚拟分配。进程将数据输出到高速设备(磁盘)即算完成,由后台守护进程真正分配物理设备。 | 
设备分配与回收的流程
这个过程主要针对独占设备。其核心数据结构是设备控制表。
1. 核心数据结构:设备控制表
系统为每一台设备都维护一个设备控制表,用于记录设备的详细状态和分配情况。其主要包含:
- 设备标识符:设备的唯一ID。
 - 设备状态:忙碌/空闲、故障/正常。
 - 指向控制器表的指针:设备连接的是哪个控制器。
 - 等待队列指针:指向所有因请求该设备而未成功的进程队列。
 - ...其他信息
 
2. 分配流程
当一个进程向系统发出I/O请求时,操作系统的设备分配程序会遵循以下步骤(以请求一台打印机为例):
flowchart TD
    A[进程发出I/O请求<br>(如申请打印机)] --> B[检查设备状态<br>查询设备控制表]
    B -- 设备“忙碌”? --> C[是:进程进入设备等待队列]
    B -- 设备“空闲”? --> D{分配设备}
    D --> E[检查设备安全性<br>(分配是否会导致死锁?)]
    E -- 安全 --> F[分配设备<br>将设备控制表状态改为“忙碌”<br>建立设备与进程的连接]
    F --> G[进程开始使用设备]
    E -- 不安全 --> C
    C --> H[进程阻塞等待]
    H -- 设备被回收时 --> B
3. 回收流程
当进程使用完设备或正常终止时,操作系统会执行回收操作:
- 解除占用:操作系统将该进程与设备之间的连接断开。
 - 更新状态:将设备控制表中的状态从“忙碌”修改为“空闲”。
 - 唤醒进程:检查该设备的等待队列。如果队列不为空,则取出队首的进程,按照上述分配流程重新尝试为其分配设备。
 - 清理资源:释放被进程占用的所有相关数据结构。
 
分配策略与算法
在进行分配时,系统需要考虑以下策略:
- 
静态分配 vs. 动态分配
- 静态分配:在进程运行前就将其所需的所有设备分配给它。直到进程结束,才回收所有设备。
- 优点:简单,不会死锁。
 - 缺点:设备利用率极低。例如,进程只需要最后5分钟用打印机,但整个运行期间都占着它。
 
 - 动态分配:在进程运行过程中需要设备时才提出申请,用完立即释放。
- 优点:设备利用率高。
 - 缺点:分配算法复杂,可能产生死锁(如进程A占着扫描仪等打印机,进程B占着打印机等扫描仪)。
 
 
 - 静态分配:在进程运行前就将其所需的所有设备分配给它。直到进程结束,才回收所有设备。
 - 
设备分配算法
- 根据设备的特性,选择不同的算法。
 - 先来先服务:最简单的算法,公平。
 - 高优先级优先:根据进程的优先级进行分配。
 
 
关键技术:SPOOLing(假脱机技术)
这是管理独占设备最重要的技术,它将独占设备改造成共享设备,极大地提高了设备利用率和系统效率。
- 
工作原理:
- 创建SPOOLing目录:在高速磁盘上开辟两个区域:输入井和输出井。
 - 输入/输出重定向:
- 对于输出:当用户进程请求打印时,SPOOLing系统并不是直接把打印机分配给它,而是将数据高速写入磁盘的输出井。进程此时认为打印任务已完成,可以继续执行。
 - 对于输入:待输入的数据预先由SPOOLing系统从输入设备读入到磁盘的输入井中。
 
 - 后台操作:由后台守护进程(如
lpdfor printer)控制物理设备,它独立且负责地将输出井中的数据逐个、连续地送到物理打印机上打印。 
 - 
SPOOLing中的分配与回收:
- 分配:实际上分配的是磁盘空间(输出井中的一段存储),而不是物理打印机本身。因为磁盘是共享设备,所以可以快速、高效地“分配”给多个进程。
 - 回收:当一个打印任务的数据完全传输到输出井后,该进程占用的“虚拟设备”(磁盘空间)就被回收了。物理打印机的分配与回收由后台守护进程管理,它对用户进程是透明的。
 
 
总结
| 方面 | 描述 | 
|---|---|
| 核心目标 | 解决多进程对有限设备的竞争,提高设备利用率,避免冲突。 | 
| 基础 | 根据设备的独占性、共享性和虚拟性采用不同策略。 | 
| 核心机制 | 通过设备控制表记录设备状态,采用安全性检查和等待队列进行管理。 | 
| 关键技术 | SPOOLing技术,将慢速独占设备转换为高速共享设备(磁盘)上的操作,是解决打印机等设备分配问题的完美方案。 | 
| 分配方式 | 静态分配(简单低效)和动态分配(复杂高效,需防死锁)。 | 
设备分配与回收是操作系统资源管理能力的集中体现,它确保了系统的稳定性和效率,让用户能够无缝、无冲突地使用各种硬件资源。
    Do not communicate by sharing memory; instead, share memory by communicating.

                
            
        
浙公网安备 33010602011771号