2.4 设备管理
操作系统设备管理与I/O系统详解
一、外部设备与I/O系统概述
1.1 外部设备的定义
设备是计算机系统和外界交互的工具,具体负责计算机与外部的输入/输出工作,因此常称为外部设备(简称外设)。在计算机系统中,除 CPU 和主存以外的所有硬件统称为外设,包括键盘、鼠标、显示器、打印机、磁盘、网卡等。
1.2 I/O系统的定义与组成
在计算机系统中,负责管理设备和输入/输出的机构称为 I/O 系统(Input/Output System)。I/O 系统由以下部分组成:
- I/O 设备(外部设备)
- 设备控制器:CPU 与 I/O 设备之间的接口,负责控制一个或多个 I/O 设备
- 通道(具有通道的计算机系统):一种专用的 I/O 处理器,进一步解放 CPU
- 总线:连接各部件的数据通路
- I/O 软件:管理设备操作的软件层
从逻辑结构上讲,I/O 系统具有四级连接层次:
CPU 与主存 ↔ 通道 ↔ 设备控制器 ↔ 外围设备
二、设备的分类
I/O 设备种类繁多,可以从多个维度进行分类。
2.1 按数据组织方式分类
| 类型 | 特点 | 典型设备 |
|---|---|---|
| 块设备 | 以固定大小的数据块为单位传输数据,支持随机访问 | 硬盘、SSD、磁带 |
| 字符设备 | 以字符(字节)流为单位传输数据,通常为顺序访问 | 键盘、鼠标、打印机 |
2.2 按设备功能分类
- 输入设备:键盘、鼠标、扫描仪等
- 输出设备:显示器、打印机等
- 存储设备:磁盘、磁带、光盘等
- 网络通信设备:网卡、调制解调器等
- 供电设备:UPS 等
2.3 按资源分配角度分类
| 类型 | 特点 | 典型设备 |
|---|---|---|
| 独占设备 | 一段时间内只允许一个进程使用 | 打印机、磁带机 |
| 共享设备 | 允许多个进程交替使用 | 磁盘 |
| 虚拟设备 | 通过 SPOOLing 技术将独占设备虚拟为多台逻辑设备 | SPOOLing 打印机 |
2.4 按数据传输速率分类
| 类型 | 速率范围 | 典型设备 |
|---|---|---|
| 低速设备 | 数百~数千字节/秒 | 键盘、鼠标、终端 |
| 中速设备 | 数千~数万字节/秒 | 打印机 |
| 高速设备 | 数百 KB~数 MB/秒以上 | 磁盘、SSD、网卡 |
三、设备管理的任务与功能
3.1 设备管理的任务
设备管理的核心任务是:保证在多道程序环境下,当多个进程竞争使用设备时,按一定的策略分配和管理各种设备,控制设备的各种操作,完成 I/O 设备与主存之间的数据交换。
3.2 设备管理的主要功能
- 动态掌握并记录设备状态:通过设备控制表(DCT)等数据结构跟踪设备的忙/闲状态
- 设备分配和释放:按照一定策略为进程分配设备,使用完毕后回收
- 缓冲区管理:协调 CPU 与 I/O 设备之间的速度差异
- 实现物理 I/O 设备的操作:通过驱动程序控制硬件完成实际的 I/O 操作
- 提供设备使用的用户接口:向用户程序提供统一的、与设备无关的 I/O 接口
- 设备的访问和控制:实施设备保护,确保只有授权进程才能访问特定设备
四、I/O 软件层次结构
I/O 设备管理软件采用分层结构,从上到下共分为五层。每一层对上层屏蔽下层的实现细节,同时依赖下层提供的基础能力完成自身功能:
I/O 请求方向 ↓ I/O 应答方向 ↑
┌──────────────────────────────────────────────────────────┐
│ 用户进程(用户层 I/O 软件) │
│ 功能:进行 I/O 调用,格式化 I/O,SPOOLing │
├──────────────────────────────────────────────────────────┤
│ 设备无关软件(设备独立性软件) │
│ 功能:命名、保护、阻塞、缓冲、分配 │
├──────────────────────────────────────────────────────────┤
│ 设备驱动软件 │
│ 功能:置设备寄存器;检查状态 │
├──────────────────────────────────────────────────────────┤
│ 中断处理程序 │
│ 功能:当 I/O 结束时唤醒驱动程序 │
├──────────────────────────────────────────────────────────┤
│ 硬件(设备 + 控制器) │
│ 功能:执行 I/O 操作 │
└──────────────────────────────────────────────────────────┘
各层详细说明
- 用户层 I/O 软件:位于用户空间,提供库函数(如
printf、fread、fwrite)封装系统调用,支持 SPOOLing 技术,负责数据格式化及用户缓冲区管理。 - 设备无关软件:位于内核空间,是 I/O 核心子系统的核心。向上提供统一的系统调用接口(如
read/write),执行设备命名、保护、缓冲管理、设备分配与回收等所有设备的公有操作。 - 设备驱动程序:位于内核空间,与硬件直接相关。将上层抽象 I/O 请求翻译为设备控制器能理解的具体指令,向设备控制器寄存器写入命令以启动 I/O 操作。
- 中断处理程序:位于内核空间,是 I/O 软件最底层。负责响应 I/O 完成或出错中断,唤醒等待 I/O 的阻塞进程。
- 硬件层:设备控制器接收指令并控制 I/O 设备执行实际的数据传输操作。
五、虚拟设备与 SPOOLing 技术
5.1 问题背景
一台实际的物理设备(例如打印机),在同一时间只能由一个进程使用,其他进程只能等待,且不知道什么时候打印机空闲,这极大地浪费了外设的工作效率。
5.2 SPOOLing 技术原理
SPOOLing(Simultaneous Peripheral Operations On-Line,即外围设备同时联机操作),通常称为假脱机技术。其核心思想是:以联机方式获得脱机效果,将独占设备改造为共享设备。
具体做法是在磁盘(高速外存)上开辟两个存储区域:
- 输入井:用于收容来自低速输入设备的数据
- 输出井:用于收容用户程序待输出的数据
以打印机共享为例:无论多少进程都需要打印,只需将打印请求发出,数据就会排队存储在磁盘的输出井中,由后台输出进程按顺序依次将数据从输出井经内存缓冲区传送到打印机进行实际打印。这样每个进程都感觉自己在使用一台专属的打印机,实现了物理设备的虚拟化。
5.3 SPOOLing 系统的组成
SPOOLing 系统主要由以下部分组成:
- 输入井和输出井(磁盘上的存储区域)
- 输入缓冲区和输出缓冲区(内存中的暂存区)
- 输入进程 SPi 和输出进程 SPo(模拟脱机外围控制机的系统进程)
- 井管理程序(管理输入井和输出井的空间分配与回收)
5.4 SPOOLing 技术的特点
- 提高 I/O 速度:将对低速设备的操作变为对高速磁盘井的操作,缓和了 CPU 与低速设备速度不匹配的矛盾
- 设备并未真正分配:在输入井或输出井中,分配给进程的仅是一块存储区和一张 I/O 请求表
- 实现虚拟设备功能:多个进程同时使用一台独占设备,每个进程都认为自己独占该设备,实际上使用的是逻辑设备
总结:设备管理是操作系统的核心功能之一。通过合理的设备分类、分层软件架构以及 SPOOLing 等虚拟化技术,操作系统能够在多道程序环境下高效地管理和调度各类 I/O 设备,实现设备共享、提高系统资源利用率,并为用户提供统一、便捷的设备访问接口。

浙公网安备 33010602011771号