📅  最后修改于: 2020-12-13 15:43:39             🧑  作者: Mango
操作系统的重要工作之一是管理各种I / O设备,包括鼠标,键盘,触摸板,磁盘驱动器,显示适配器,USB设备,位图屏幕,LED,模数转换器,On /关闭开关,网络连接,音频I / O,打印机等。
需要一个I / O系统接收应用程序I / O请求并将其发送到物理设备,然后接受设备返回的所有响应并将其发送到应用程序。 I / O设备可以分为两类-
块设备-块设备是驱动程序通过发送整个数据块与之通信的设备。例如,硬盘,USB摄像头,Key-On-Key等。
字符设备-字符设备是驱动程序通过发送和接收单个字符(字节,八位字节)与之通信的字符设备。例如,串行端口,并行端口,声卡等
设备驱动程序是可以插入操作系统以处理特定设备的软件模块。操作系统从设备驱动程序获得帮助来处理所有I / O设备。
设备控制器的工作方式类似于设备和设备驱动程序之间的接口。 I / O单元(键盘,鼠标,打印机等)通常由机械组件和电子组件组成,其中电子组件称为设备控制器。
每个设备始终都有一个设备控制器和一个设备驱动程序来与操作系统进行通信。设备控制器可能能够处理多个设备。作为接口,其主要任务是将串行位流转换为字节块,并根据需要执行纠错。
连接到计算机的任何设备都通过插头和插座连接,并且该插座连接到设备控制器。以下是用于连接CPU,内存,控制器和I / O设备的模型,其中CPU和设备控制器都使用公共总线进行通信。
同步I / O-在此方案中,CPU执行在I / O继续进行时等待
异步I / O -I / O与CPU执行同时进行
CPU必须具有一种与I / O设备之间传递信息的方法。有三种方法可用于与CPU和设备通信。
这使用专门用于控制I / O设备的CPU指令。这些指令通常允许将数据发送到I / O设备或从I / O设备读取。
使用内存映射的I / O时,内存和I / O设备共享相同的地址空间。该设备直接连接到某些主内存位置,因此I / O设备可以在不经过CPU的情况下向/从内存传输数据块。
在使用内存映射的IO时,操作系统会在内存中分配缓冲区,并通知I / O设备使用该缓冲区将数据发送到CPU。 I / O设备与CPU异步运行,完成后中断CPU。
该方法的优势在于,可以访问存储器的每条指令都可以用于操作I / O设备。内存映射的IO用于大多数高速I / O设备,如磁盘,通信接口。
传输完每个字节后,键盘等速度较慢的设备将向主CPU产生中断。如果诸如磁盘之类的快速设备为每个字节生成一个中断,则操作系统将花费大部分时间来处理这些中断。因此,典型的计算机使用直接内存访问(DMA)硬件来减少这种开销。
直接内存访问(DMA)意味着CPU授予I / O模块权限以在不涉及内存的情况下读取或写入内存。 DMA模块本身控制着主存储器和I / O设备之间的数据交换。 CPU仅在传输的开始和结束时才涉及,并且仅在整个块都已传输后才中断。
直接内存访问需要一种称为DMA控制器(DMAC)的特殊硬件,该硬件可管理数据传输并仲裁对系统总线的访问。控制器通过源指针和目标指针(在何处读取/写入数据),计数器(用于跟踪传输的字节数)和设置(包括I / O和存储器类型,CPU周期的中断和状态)进行编程。
操作系统使用DMA硬件如下-
Step | Description |
---|---|
1 | Device driver is instructed to transfer disk data to a buffer address X. |
2 | Device driver then instruct disk controller to transfer data to buffer. |
3 | Disk controller starts DMA transfer. |
4 | Disk controller sends each byte to DMA controller. |
5 | DMA controller transfers bytes to buffer, increases the memory address, decreases the counter C until C becomes zero. |
6 | When C becomes zero, DMA interrupts CPU to signal transfer completion. |
计算机必须具有检测任何类型的输入到达的方式。发生这种情况的方式有两种,称为轮询和中断。这两种技术都允许处理器处理随时可能发生的事件,这些事件与其当前正在运行的进程无关。
轮询是I / O设备与处理器通信的最简单方法。定期检查设备状态以查看是否需要进行下一个I / O操作的过程称为轮询。 I / O设备只需将信息放入状态寄存器中,处理器就必须来获取信息。
在大多数情况下,设备不需要引起注意,当设备需要等待时,则必须等待轮询程序对其进行下一次查询。这是一种低效的方法,并且许多处理器时间浪费在不必要的轮询上。
将此方法与教师进行比较的方法是,教师不断地询问班上的每个学生是否需要帮助。显然,更有效的方法是让学生在需要帮助时通知老师。
处理I / O的另一种方案是中断驱动方法。中断是需要引起注意的设备发出给微处理器的信号。
当CPU收到中断时,设备控制器在需要CPU注意时将中断信号放在总线上,它保存其当前状态,并使用中断向量(OS例程的地址来处理各种事件)调用适当的中断处理程序。处理完中断设备后,CPU会继续执行其原始任务,就好像从未中断过一样。