设备分配与回收


操作系统中的设备分配与回收
这是一个核心的I/O管理功能,其核心目标是:在多个进程竞争使用有限设备的情况下,安全、高效、公平地将设备分配给进程,并在使用完毕后妥善回收,以供其他进程使用。


为什么需要设备分配与回收?

  1. 设备稀缺性:设备数量(如打印机、扫描仪)远少于进程数量。
  2. 设备独占性:某些设备(如打印机)在一段时间内只能被一个进程独占使用,不能像CPU那样时间片轮转。
  3. 避免冲突:如果没有管理,多个进程同时向一台打印机发送数据,输出会交织在一起,完全无法使用。
  4. 提高利用率:通过合理的分配策略(如假脱机技术),让慢速的独占设备能被多个进程“同时”使用,减少设备空闲时间。

设备分类是分配的基础

操作系统会根据设备的特性,采用截然不同的分配策略:

设备类型 特点 例子 分配策略
独占设备 在一段时间内只允许一个进程访问,直到该进程释放。 打印机、磁带机、绘图仪 独占分配。需要复杂的分配与回收机制,通常配合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. 回收流程

当进程使用完设备或正常终止时,操作系统会执行回收操作:

  1. 解除占用:操作系统将该进程与设备之间的连接断开。
  2. 更新状态:将设备控制表中的状态从“忙碌”修改为“空闲”。
  3. 唤醒进程:检查该设备的等待队列。如果队列不为空,则取出队首的进程,按照上述分配流程重新尝试为其分配设备。
  4. 清理资源:释放被进程占用的所有相关数据结构。

分配策略与算法

在进行分配时,系统需要考虑以下策略:

  1. 静态分配 vs. 动态分配

    • 静态分配:在进程运行就将其所需的所有设备分配给它。直到进程结束,才回收所有设备。
      • 优点:简单,不会死锁。
      • 缺点:设备利用率极低。例如,进程只需要最后5分钟用打印机,但整个运行期间都占着它。
    • 动态分配:在进程运行过程中需要设备时才提出申请,用完立即释放。
      • 优点:设备利用率高。
      • 缺点:分配算法复杂,可能产生死锁(如进程A占着扫描仪等打印机,进程B占着打印机等扫描仪)。
  2. 设备分配算法

    • 根据设备的特性,选择不同的算法。
    • 先来先服务:最简单的算法,公平。
    • 高优先级优先:根据进程的优先级进行分配。

关键技术:SPOOLing(假脱机技术)

这是管理独占设备最重要的技术,它将独占设备改造成共享设备,极大地提高了设备利用率和系统效率。

  • 工作原理

    1. 创建SPOOLing目录:在高速磁盘上开辟两个区域:输入井输出井
    2. 输入/输出重定向
      • 对于输出:当用户进程请求打印时,SPOOLing系统并不是直接把打印机分配给它,而是将数据高速写入磁盘的输出井。进程此时认为打印任务已完成,可以继续执行。
      • 对于输入:待输入的数据预先由SPOOLing系统从输入设备读入到磁盘的输入井中。
    3. 后台操作:由后台守护进程(如lpd for printer)控制物理设备,它独立且负责地将输出井中的数据逐个连续地送到物理打印机上打印。
  • SPOOLing中的分配与回收

    • 分配:实际上分配的是磁盘空间(输出井中的一段存储),而不是物理打印机本身。因为磁盘是共享设备,所以可以快速、高效地“分配”给多个进程。
    • 回收:当一个打印任务的数据完全传输到输出井后,该进程占用的“虚拟设备”(磁盘空间)就被回收了。物理打印机的分配与回收由后台守护进程管理,它对用户进程是透明的。

总结

方面 描述
核心目标 解决多进程对有限设备的竞争,提高设备利用率,避免冲突。
基础 根据设备的独占性共享性虚拟性采用不同策略。
核心机制 通过设备控制表记录设备状态,采用安全性检查等待队列进行管理。
关键技术 SPOOLing技术,将慢速独占设备转换为高速共享设备(磁盘)上的操作,是解决打印机等设备分配问题的完美方案。
分配方式 静态分配(简单低效)和动态分配(复杂高效,需防死锁)。

设备分配与回收是操作系统资源管理能力的集中体现,它确保了系统的稳定性和效率,让用户能够无缝、无冲突地使用各种硬件资源。

posted @ 2025-08-31 18:17  guanyubo  阅读(45)  评论(0)    收藏  举报