操作系统 - I/O 硬件



操作系统的其中一项重要工作是管理各种 I/O 设备,包括鼠标、键盘、触控板、磁盘驱动器、显示适配器、USB 设备、位图屏幕、LED、模数转换器、开关、网络连接、音频 I/O、打印机等。

I/O 系统需要接收应用程序的 I/O 请求并将其发送到物理设备,然后接收来自设备的任何响应并将其发送到应用程序。I/O 设备可以分为两类:

  • 块设备 - 块设备是指驱动程序通过发送整个数据块来进行通信的设备。例如,硬盘、USB 摄像头、U 盘等。

  • 字符设备 - 字符设备是指驱动程序通过发送和接收单个字符(字节、八位字节)来进行通信的设备。例如,串行端口、并行端口、声卡等。

设备控制器

设备驱动程序是可以插入操作系统的软件模块,用于处理特定设备。操作系统借助设备驱动程序来处理所有 I/O 设备。

设备控制器充当设备和设备驱动程序之间的接口。I/O 单元(键盘、鼠标、打印机等)通常由机械部件和电子部件组成,其中电子部件称为设备控制器。

每个设备都有一个设备控制器和一个设备驱动程序来与操作系统通信。一个设备控制器可以处理多个设备。作为接口,其主要任务是将串行比特流转换为字节块,并在必要时执行错误校正。

任何连接到计算机的设备都通过插座连接,而插座连接到设备控制器。以下是连接 CPU、内存、控制器和 I/O 设备的模型,其中 CPU 和设备控制器都使用公共总线进行通信。

Device Controllers

同步 I/O 与异步 I/O

  • 同步 I/O - 在此方案中,CPU 执行等待 I/O 过程。

  • 异步 I/O - I/O 过程与 CPU 执行同时进行。

与 I/O 设备的通信

CPU 必须有一种方法可以将信息传递到 I/O 设备并从中获取信息。有三种方法可用于与 CPU 和设备通信。

  • 专用指令 I/O
  • 内存映射 I/O
  • 直接内存访问 (DMA)

专用指令 I/O

这使用专门用于控制 I/O 设备的 CPU 指令。这些指令通常允许数据发送到 I/O 设备或从 I/O 设备读取数据。

内存映射 I/O

使用内存映射 I/O 时,内存和 I/O 设备共享相同的地址空间。设备直接连接到某些主内存位置,以便 I/O 设备可以在不经过 CPU 的情况下将数据块传输到内存或从内存传输数据。

Memory-mapped I/O

在使用内存映射 I/O 时,操作系统在内存中分配缓冲区并通知 I/O 设备使用该缓冲区将数据发送到 CPU。I/O 设备与 CPU 异步操作,并在完成后中断 CPU。

此方法的优点是,每个可以访问内存的指令都可以用来操作 I/O 设备。内存映射 I/O 用于大多数高速 I/O 设备,例如磁盘和通信接口。

直接内存访问 (DMA)

像键盘这样的慢速设备在传输每个字节后都会向主 CPU 生成一个中断。如果像磁盘这样的快速设备为每个字节生成一个中断,则操作系统将花费大部分时间处理这些中断。因此,典型的计算机使用直接内存访问 (DMA) 硬件来减少这种开销。

直接内存访问 (DMA) 表示 CPU 将读取或写入内存的权限授予 I/O 模块,而无需参与。DMA 模块本身控制主内存和 I/O 设备之间的数据交换。CPU 仅在传输开始和结束时参与,并且仅在整个块传输完成后才被中断。

直接内存访问需要一个称为 DMA 控制器 (DMAC) 的特殊硬件来管理数据传输并仲裁对系统总线的访问。控制器使用源和目标指针(在何处读取/写入数据)进行编程,使用计数器跟踪传输的字节数,并设置包括 I/O 和内存类型、中断以及 CPU 周期的状态在内的设置。

DMA

操作系统如下使用 DMA 硬件:

步骤 描述
1 指示设备驱动程序将磁盘数据传输到缓冲区地址 X。
2 然后,设备驱动程序指示磁盘控制器将数据传输到缓冲区。
3 磁盘控制器启动 DMA 传输。
4 磁盘控制器将每个字节发送到 DMA 控制器。
5 DMA 控制器将字节传输到缓冲区,增加内存地址,减少计数器 C,直到 C 变为零。
6 当 C 变为零时,DMA 中断 CPU 以发出传输完成信号。

轮询 I/O 与中断 I/O

计算机必须有一种方法来检测任何类型的输入的到达。这可以通过两种方式发生,称为轮询中断。这两种技术都允许处理器处理任何时候可能发生的与它当前正在运行的进程无关的事件。

轮询 I/O

轮询是 I/O 设备与处理器通信的最简单方法。定期检查设备状态以查看是否到了进行下一个 I/O 操作的时间的过程称为轮询。I/O 设备只需将信息放在状态寄存器中,处理器必须来获取信息。

大多数情况下,设备不需要关注,当一个设备需要关注时,它必须等到轮询程序下次对其进行询问。这是一种低效的方法,处理器的很多时间都浪费在不必要的轮询上。

将此方法与一位老师不断地一个接一个地询问班上每个学生是否需要帮助进行比较。显然,更有效的方法是让学生在需要帮助时通知老师。

中断 I/O

处理 I/O 的另一种方案是中断驱动方法。中断是设备向微处理器发出的需要关注的信号。

当设备控制器需要 CPU 的注意力时,它会在总线上发出中断信号,当 CPU 接收到中断时,它会保存其当前状态并使用中断向量(OS 例程的地址以处理各种事件)调用适当的中断处理程序。处理完中断设备后,CPU 继续执行其原始任务,就好像从未被中断一样。

广告