Operating System 简明教程
Operating System - I/O Hardware
操作系统的一项重要任务是管理各种 I/O 设备,包括鼠标、键盘、触摸板、磁盘驱动器、显示适配器、USB 设备、位图屏幕、LED、模数转换器、开/关开关、网络连接、音频 I/O、打印机等。
需要一个 I/O 系统来接收应用程序 I/O 请求并将其发送到物理设备,然后接收设备发回的任何响应并将其发送到应用程序。I/O 设备可分为两类−
-
Block devices − 块设备是驱动程序通过发送整个数据块与之通信的设备。例如,硬盘、USB 摄像头、Disk-On-Key 等。
-
Character devices − 字符设备是驱动程序通过发送和接收单个字符(字节、八位字节)与之通信的设备。例如,串口、并口、声卡等
Device Controllers
设备驱动程序是可以插入操作系统以处理特定设备的软件模块。操作系统借助设备驱动程序来处理所有 I/O 设备。
设备控制器充当设备和设备驱动程序之间的接口。I/O 单元(键盘、鼠标、打印机等)通常由机械组件和电子组件组成,电子组件称为设备控制器。
对于每个设备,始终有一个设备控制器和一个设备驱动程序与操作系统通信。一个设备控制器可能会处理多个设备。作为接口,其主要任务是将串行比特流转换为字节块,根据需要执行纠错。
连接到计算机的任何设备都是通过插头和插槽连接的,插槽连接到设备控制器。以下是用于连接 CPU、内存、控制器和 I/O 设备的模型,其中 CPU 和设备控制器都使用公共总线进行通信。
![device controllers](https://www.iokays.com/tutorialspoint/operating_system/_images/device_controllers.jpg)
Synchronous vs asynchronous I/O
-
Synchronous I/O − 在此方案中,CPU 执行在 I/O 进行时等待
-
Asynchronous I/O − I/O 与 CPU 执行同时进行
Communication to I/O Devices
CPU 必须有一种方法来与 I/O 设备之间传递信息。有三种方法可用于与 CPU 和设备通信。
-
Special Instruction I/O
-
Memory-mapped I/O
-
Direct memory access (DMA)
Direct Memory Access (DMA)
像键盘这样的慢速设备将在传输每个字节后向主 CPU 生成一个中断。如果像磁盘这样的快速设备为每个字节生成中断,则操作系统将花费其大部分时间来处理这些中断。因此,一台典型的计算机使用直接内存访问 (DMA) 硬件来减少此开销。
直接内存访问 (DMA) 表示 CPU 授予 I/O 模块在不参与的情况下读写内存的权限。DMA 模块本身控制主内存和 I/O 设备之间的数据交换。CPU 只参与传输的开始和结束,并且仅在整个块传输完成后才中断。
直接内存访问需要一种称为 DMA 控制器 (DMAC) 的特殊硬件,它管理数据传输并仲裁对系统总线的访问。这些控制器使用源指针和目标指针(读取/写入数据的目的地)、用于跟踪传输字节数的计数器以及设置(包括 I/O 和内存类型、中断和 CPU 周期的状态)进行编程。
![dma](https://www.iokays.com/tutorialspoint/operating_system/_images/dma.jpg)
操作系统使用 DMA 硬件如下所示 −
Step |
Description |
1 |
指示设备驱动程序将磁盘数据传输到缓冲区地址 X。 |
2 |
然后,设备驱动程序指示磁盘控制器将数据传输到缓冲区。 |
3 |
磁盘控制器开始DMA传输。 |
4 |
磁盘控制器将每个字节发送至DMA控制器。 |
5 |
DMA控制器将字节传输到缓冲区,增加内存地址,减小计数器C,直至C变为零。 |
6 |
当C变为零时,DMA中断CPU以指示传输完成。 |
Polling vs Interrupts I/O
计算机必须有办法检测到任何类型的输入的到达。有两种可能发生的情况,称为 polling 和 interrupts 。这两种技术都可以让处理器处理随时可能发生并且与其当前正在运行的进程无关的事件。