Operating System - I/O Hardware

Operating System - I/O Hardware

操作系统的一个很重要的工作就是管理多种I/O设备包括鼠标,键盘,触摸板,磁盘驱动,显示器,USB设备,Bit-mapped屏幕,LED,模拟到数字转换器,开关,网络连接,音频I/O,打印机等等。

一个操作系统有责任接纳一个应用程序的I/O请求并将其发送到物理设备,然后把不管那个设备返回的回复是什么,将它发送到该应用程序。I/O设备可以被分为两个种类 -

  • 块设备 - 块设备是驱动器发送整块数据与之交流的。例如,硬盘、USB摄像头,随身磁盘等
  • 字符型设备 - 字符型设备是驱动器靠发送和接收单个字符(bytes, octets)来交流的设备。例如:串行端口、并行端口、声卡等

设备控制器

设备驱动器是软件模块,可以被插入操作系统,来控制一个特定的设备。操作系统借助设备驱动器的帮助控制所有的I/O设备。

设备控制器的工作机制像设备和设备驱动器的之间的接口。I/O单元(键盘,鼠标,打印机等)特别包含了一个机械组件和一个电子组件,其中电子组件叫做设备控制器。

每一个与操作系统交流的设备都有一个设备控制器和设备驱动器。一个设备控制器也许可以控制多个设备。作为一个接口,它的主要任务是把串行的bit流转化为一块字节,必要时进行错误纠正。

任何连接到计算机的设备都是由一个plug和socket连接的,socket连接到一个设备控制器。以下是一个连接CPU,内存,控制器,I/O设备的模型,其中CPU和设备控制器都用一个公用的总线来交流。

同步 vs 异步I/O

  • 同步I/O - 在这个方案里CPU执行会等待I/O处理
  • 异步I/O - I/O的进行和CPU执行同时发生

与I/O 设备的交流

CPU必须有一种方式可以从和向I/O设备传递信息。有三种可行的方法来使CPU和设备交流。

  • Special Instruction (特殊指令) I/O
  • Memory-mapped (内存映射) I/O
  • Direct memory access (直接内存访问) (DMA)

Special Instruction I/O,特殊指令

这个方法使用特别为控制I/O设备制作的CPU指令。这些指令允许数据被发送到I/O设备或从I/O设备读取。

Memory-mapped I/O,内存映射

当使用memory-mapped I/O时,同样的地址空间被内存和I/O设备使用。设备可以直接与特定主存区域相连,所以I/O设备可以一块一块的转移数据而不需要经过CPU。

Direct Memory Access (DMA) 直接内存访问

慢的设备比如键盘每一个byte传输后会对主CPU产生一个打断。如果快的设备比如磁盘为每一个byte产生一个打断,操作系统会花费它大部分的时间处理这些打断。所以一个典型的计算机使用直接内存访问(DMA)来减少这个开销。

直接内存访问意味着CPU给予I/O模块权利以读取或写入主存而自己不参与。DMA模块自己控制主存和I/O设备的数据交换。CPU只在传输的开始和结束参与,且只在整个块传输后打断。

直接内存访问需要一个特殊的硬件叫做DMA控制器(DMAC),它管理数据传输和对系统总线访问的仲裁。这个控制器被编程具有源和目的地指针(读/写数据的位置),记录传输字节的计数器(counter),和设置,包括I/O和内存种类,CPU循环的打断和状态。

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

步骤 描述
1 设备驱动器被告诉去传输磁盘数据到一个缓冲地址X
2 设备驱动器然后告诉磁盘控制器去传输该数据到缓存
3 磁盘控制器开始DMA传输
4 磁盘控制器发送每一个字节到DMA控制器
5 DMA控制器传输字节到缓存,增加内存地址,减小计数器C直到C变成0
6 当C变成0时,DMA打断CPU来通知传输结束。

轮询与打断 I/O

计算机必须具有检测任何类型的输入到达的方式。发生这种情况的方式有两种,称为轮询打断。这两种技术都允许处理器来处理可能在任何时候发生的事件,并且该事件与CPU正在运行的进程无关。

轮询I/O

轮询是一个I/O设备与处理器沟通的最简单的方式。周期性的检查设备的状态来看是不是下一个I/O操作的时候,这样的进程叫做轮询(polling)。I/O设备简单的把信息放进一个状态寄存器,处理器必须来拿到这个信息。

大多数时候,设备不会要求注意,而且当一个设备这样做的时候它不得不等待直到它下一次被轮询程序问询。这是一个效率低的方法,而且很多处理器的时间都浪费在了不必要的轮询上。

将这个方法与老师不断地询问课堂上的每一个学生,一个接着一个,来去查看他们是否需要帮助比较。显而易见更有效率的一种方法将是一个学生来告诉老师每当他们需要帮助。

打断I/O

另外一种处理I/O的方案叫做以打断驱动的方法。一个打断是一个从需要注意的设备发来的对微处理器的信号。

一个设备控制器将一个打断信号放在总线上,当它需要CPU的注意时。当CPU收到一个打断时,它保存它当前的状态并且使用打断矢量(处理多种事件的OS例程地址)调用适当的打断处理器。当这个打断的设备已经被处理,CPU继续它之前的任务就像它从来没有被打断过一样。

原文地址:https://www.tutorialspoint.com/operating_s...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!