1. 概述

在本篇教程中,我们将探讨操作系统 I/O 子系统的基本结构,了解 I/O 硬件的工作原理与复杂性,并简要分析 I/O 硬件与软件的交互方式。

I/O 管理是操作系统设计中最重要的组成部分之一,原因如下:

  • I/O 设备种类繁多
  • 控制方式各异
  • 新型设备不断涌现

我们通过端口、设备控制器和总线来连接各种类型的设备。在连接过程中,设备驱动程序负责封装设备的细节,实现与操作系统的对接。

2. I/O 硬件

I/O 设备种类繁多,主要包括以下几类:

  • 存储设备(如磁盘、磁带)
  • 传输设备(如网卡、调制解调器)
  • 人机交互设备(如显示器、键盘、鼠标)
  • 特殊用途设备(如游戏手柄)

下图展示了一个典型的 PC 总线结构:

I/O hardware layout

要理解这些设备如何工作,我们先来了解几个关键概念:

  • 端口(Port):设备的连接点
  • 总线(Bus)或菊花链(Daisy Chain):不同类型的总线包括:
    • PCI 总线:常见于个人电脑和服务器中,如 PCIe(Peripheral Component Interconnect Express)
    • 扩展总线:用于连接速度较慢的设备
    • SAS(Serial-Attached SCSI):常见于磁盘接口
  • 控制器(Controller 或 Host Adapter):用于操作端口、总线和设备的电子组件。它们可能集成在主板上,也可能独立存在。有的控制器还带有自己的处理器、微码、私有内存或总线控制器。

⚠️ 资源争用(Resource Contention) 是计算中常见的问题。Dijkstra 曾通过“哲学家就餐问题”等模型来描述此类问题。例如,多个 I/O 设备可能同时争夺同一条总线,从而引发总线争用(Bus Contention)。

解决总线争用问题的方法称为 总线仲裁(Bus Arbitration),由总线仲裁器(Bus Arbiter)或总线控制器(Bus Controller)负责管理。常见的仲裁方式包括:

  • 菊花链式仲裁(Daisy Chaining)
  • 轮询(Polling)
  • 独立请求(Independent Requesting)

2.1. I/O 设备分类

I/O 设备大致可分为以下四类:

  • 存储类(Storage):如硬盘、磁带
  • 传输类(Transmission):如网卡、调制解调器
  • 人机接口类(Human-interface):如屏幕、键盘、鼠标
  • 专用类(Specialized):如游戏手柄、绘图板等

3. 设备控制器

从上图可以看出,设备控制器在设备和驱动之间起着桥梁作用。设备驱动是嵌入在操作系统中的软件模块,专门用于管理特定硬件。

I/O 设备通常由机械部件和电子部件组成,我们把电子部分称为设备控制器

每个 I/O 设备都必须有对应的设备控制器和驱动程序,才能与操作系统正常通信。否则设备将无法工作。

举个例子:在 Windows 10 之前,重装系统后往往需要手动安装各种驱动。而 Windows 10 则通过内置驱动库自动完成这一过程,大大简化了用户操作。

一个设备控制器可以管理多个设备,其主要功能包括:

  • 将串行比特流转换为字节块
  • 执行错误校正
  • 提高数据传输效率

4. I/O 控制器

前面我们讨论了各种 I/O 设备。这些设备的数据传输速率和接口方式各不相同。例如,键盘和鼠标的数据传输速率相近,且以异步方式与计算机通信。

如果所有 I/O 操作都由 CPU 处理,系统性能将受到严重影响。这时就需要 I/O 控制器 来缓解 CPU 的负担。

I/O 控制器是 CPU、内存与 I/O 设备之间的桥梁

它们不仅能处理不同设备的接口差异,还能在数据传输过程中充当缓冲区,提高整体系统效率。

5. 总结

本文我们探讨了 I/O 硬件的基本原理和关键概念,包括端口、总线、控制器、设备分类等内容。可以毫不夸张地说,I/O 管理是操作系统中不可或缺的重要组成部分

无论是从硬件设计、驱动开发还是系统优化的角度来看,理解 I/O 管理机制都是提升系统性能和稳定性的关键一步。


原始标题:I/O Management