“I/O”就是“输入/输出”(Input/Output)
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
字符设备
传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式
电脑显示器、键盘鼠标等看得见摸得着的东西
通常是插入主板扩充槽的印刷电路板
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。CPU可控制l/O控制器,又由I/O控制器来控制设备的机械部件。
功能:
1、接受和识别CPU发出的命令。I/O设备会设置控制寄存器
2、向CPU报告设备的状态。I/O设备会设置状态寄存器
3、数据交换。I/O设备会设置数据寄存器
4、地址识别。为了区分设备控制器中的各个寄存器
注意:
①一个I/O控制器可能会对应多个设备;
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
CPU干预的频率:
很频繁,/0操作开始之前、完成之后需要CPU介入,并且在等待I/0完成的过程中CPU需要不断地轮询检查。
数据传送的单位:
每次读/写一个字
数据的流向:
读操作(数据输入) : I/O设 备→CPU→内存
写操作(数据输出) :内存→CPU→I/O设备
优点:
实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可( 因此才称为“程序直接控制方式”)
缺点:
CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。
在CPU发出一次读写命令时,就会在I/O设备相应之前干其他的事,等I/O完成后,控制器会向CPU发送一个中断信号,然后继续执行。
与程序直接控制方式的区别在于中断驱动方式在等的时候干别的事
完成一次读/写操作的流程
CPU干预的频率:
每次I/0操作开始之前、完成之后需要CPU介入。
等待I/0完成的过程中CPU可以切换到别的进程执行。
数据传送的单位:
每次读/写一个字
数据的流向:
读操作(数据输入) : I/O设 备→CPU→内存
写操作(数据输出) :内存→CPU→I/O设备
优点:
与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/0已完成,CPU不再 需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
缺点:
每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。
直接存储器存放,主要用于块设备的I/O控制。
完成一次读/写操作的流程
DR (Data Register,数据寄存器) :暂存从设备到内存,或从内存到设备的数据。
MAR (Memory Address Register,内存地址寄存器) :在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置。
DC (Data Counter,数据计数器) :表示剩余要读/写的字节数。
CR (Command Register,命令/状态寄存器) :用于存放CPU发来的I/O命令,或设备的状态信息。
CPU干预的频率:
仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
数据传送的单位:
每次读/写一个或多个块(每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
数据的流向:
读操作(数据输入) : I/O设 备→内存
写操作(数据输出) :内存→I/O设备
优点:
数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内
存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。
缺点:
CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分 别发出多条I/O指令,进行多次中断处理才能完成。
一种硬件,通道可以识别并执行一系列通道指令。
刚开始CPU向通道发送指令,包括要进行的操作以及一些信息。然后通道收到后开始替CPU干活,CPU就可以去干其他的事请,等通道做完后,就发送一个中断信息给CPU。
完成一次读/写操作的流程
CPU干预的频率:
极低,通道会根据CPU的指示执行相应的通道程序,只有完成- -组数据块的读/写后才需要发出中断信号,请求CPU干预。
数据传送的单位:
每次读/写一组数据块
数据的流向:
读操作(数据输入) : I/O设 备→内存
写操作(数据输出) :内存→I/O设备
优点:
CPU、通道、I/0设 备可并行工作,资源利用率很高。
缺点:
实现复杂,需要专门的通道硬件支持
用户层软件:
实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。
设备独立性软件
又称为设备无关性软件,与设备的硬件特性无关的功能几乎都在这一层实现。
功能:
①向上提供统一的调用接口(如:write/read系统调用)
②设备的保护
③差错处理
④设备的分配与回收
⑤数据缓冲区管理
⑥建立逻辑设备名(用户看到的)到物理设备名的映射关系:根据设备类型选择调用相应的驱动程序。
设备独立性软件需要通过“逻辑设备表(LUT,Logical Unit Table)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序
操作系统系统可以采用两种方式管理逻辑设备表(LUT) :
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
第二种方式,为每个用户设置- -张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。
设备驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等。
不同的/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。
中断处理程序
当I/O任务完成时,I/O控制器 会发送-一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。