操作系统 - I/O 硬件


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

I/O 系统需要接受应用程序 I/O 请求并将其发送到物理设备,然后接受从设备返回的任何响应并将其发送到应用程序。I/O 设备可分为两类 -

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

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

设备控制器

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

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

每个设备总是有一个设备控制器和设备驱动程序来与操作系统进行通信。设备控制器可能能够处理多个设备。作为一个接口,它的主要任务是将串行比特流转换为字节块,并根据需要执行纠错。

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

设备控制器

同步与异步 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。

内存映射 I/O

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

这种方法的优点是每条可以访问内存的指令都可以用来操作 I/O 设备。内存映射 IO 用于大多数高速 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 的另一种方案是中断驱动方法。中断是需要注意的设备向微处理器发出的信号。

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