一.I/O设备
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
注:UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。
Write操作:同外部设备写出数据
Read操作:从外部设备读入数据
二.I/O设备的分类
(1)按使用特性分类
•人机交互类外部设备
鼠标、键盘、打印机等,用于人机交互,这些设备的数据传输较慢,一般都是以字节为单位。
•存储设备
移动硬盘、光盘等,用于数据存储,数据传输速度较快
•网络通信设备
调制解调器等,用于网络通信,数据传输速度介于二者之间
(2)按传输速率分类
•低速设备
鼠标、键盘等--传输速率为每秒几个到几百字节。
•中速设备
如激光打印机等--传输速率为每秒数千至上万个字节。
•高速设备
如磁盘等--传输速率为每秒数千字节至千兆字节的设备。
(3)按信息交换的单位分类
•块设备
如磁盘等--数据传输的基本单位是“块”,传输速率较高,可寻址,即对它可随机地读/写任一块。
•字符设备
鼠标、键盘等--数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式。
三.I/O控制器
I/O设备由机械部件和电子部件(I/O控制器,设备控制器)组成:
机械部件:I/O设备的机械部件主要用来执行具体I/O操作。
如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面。
电子部件:I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。
接下来主要讲电子部件
当I/O设备连接电脑时,CPU无法直接控制I/O设备的机械部件,因此/O设备还要有一个电子部件作为CPU和VO设备机械部件之间的“中介”,用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备
的机械部件。
I/O控制器的功能:
1.接受和识别CPU发出的命令:如CPU发来的 read/write 命令,I/O控制器中会有相应的控制寄存器来存放命令和参数
2.向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录I/O设备的当前状态。如:1表示空闲,0表示忙碌。
3.数据交换:I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据。
4.地址识别: 类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。I/O控制器通过CPU提供的“地址”来判断CPU要读/写的是哪个寄存器。
I/O控制器的组成:
1.CPU与控制器的接口:
用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据。
2.控制器与设备的接口:
用于实现控制器与设备之间的通信。一个控制器可能控制许多的I/O设备,为了区别这些设备,需要为这些设备分配不同的地址,CPU访问设备时需指明自己访问的地址。
3.I/O逻辑:
负责接收和识别CPU的各种命令(如地址译码),并负责对设备发出命令。
CPU与控制器的接口:
CPU首先通过I/O控制线向I/O设备发出具体指令,同时CPU通过地址线传输自己要操纵哪一个设备的数据信息。
若此时需要输出一个数据,CPU会把要输出的数据通过数据总线放到数据寄存器中。I/O逻辑就可以从该寄存器中取到数据。
若CPU此时发出的指令有相应的参数,那么这些参数会放到控制寄存器中,I/O逻辑就可以从控制寄存器中读出这些参数了。
为了实现对各个设备的管理,CPU还会从各个状态寄存器中读入各个设备的状态,而I/O逻辑会往状态寄存器中写入相应数据,告诉CPU各个设备此时的状态。
控制器与设备的接口:
•传送输入/输出数据
若此时CPU需要输出数据,CPU通过数据总线,将数据写到数据寄存器中,I/O逻辑从数据寄存器中读出数据,接着通过控制器与设备的接口,将数据输出到外部设备中。
若CPU需要从外部设备读入数据,那么与上面过程相反即可。
•设备要反馈状态(忙碌/空闲)
设备通过与I/O控制器的接口向I/O控制器报告自己的状态,I/O逻辑会将此设备的状态写入到状态寄存器中,CPU从状态寄存器中,即可读入此设备状态相关信息。
•控制器会向设备发出控制信息
I/O逻辑会通过CPU发出的控制命令和寄存器传来的数据,对相应的设备发出控制信息。
① 一个I/O控制器可能会对应多个设备;
② 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
内存映像I/O:
控制器中的寄存器与内存地址统一编址。
优点:简化了指令。可以采用对内存进行操作的指令来对控制器进行操作。
寄存器独立编制:
控制器中的寄存器使用单独的地址。
缺点:需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号。
四.I/O控制器的控制方式
I/O控制器有以下四种控制方式:
(1)程序直接控制方式
•完成一次读/写操作的流程:
若要进行一次读操作:
① CPU向控制器发出读指令。于是设备启动,并且状态寄存器设为1(未就绪)。
② 轮询检查控制器的状态(其实就是在不断地执行程序的循环,若状态位一直是1,说明设备正忙,还没准备好要输入的数据,于是CPU会不断地轮询)。
③ 输入设备准备好数据后将数据传给控制器,并报告自身状态。
④ 控制器将输入的数据放到数据寄存器中并将状态改为0(已就绪)。
⑤ CPU不停轮询,发现设备已就绪后,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存。
⑥ 若还要继续读入数据,则CPU继续发出读指令。
具体流程如下:
注:输入的数据最终要放到内存中,也就是CPU在获得输入数据后,需要将输入数据放到内存中。同理输出的数据也存放在内存中,需要从内存中取出,经过CPU再输出到设备。
•CPU干预的频率:
很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查。
•数据传送的单位:
每次读/写一个字
•数据的流向:
读操作(数据输入):I/O设备---->CPU的寄存器---->内存
写操作(数据输出):内存---->CPU的寄存器---->I/O设备
每个字的读/写都需要CPU的帮助。
主要缺点和主要优点:
优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。
(2)中断驱动方式
•完成一次读/写操作的流程:
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/0控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/0的进程(或其他进程)的运行环境,然后继续执行。
① CPU会在每个指令周期的末尾检查中断。
② 中断处理过程中需要保存、恢复进程的运行环境这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。
•CPU干预的频率:
每次I/O操作开始之前、完成之后需要CPU介入。等待I/O完成的过程中CPU可以切换到别的进程执行。
•数据传送的单位:
每次读/写一个字
•数据的流向:
读操作(数据输入):I/O设备--->CPU--->内存
写操作(数据输出):内存--->CPU--->I/O设备
主要缺点和主要优点优点:
优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。
(3)DMA方式
•完成一次读/写操作的流程:
与“中断驱动方式”相比,DMA方式(Direct Memory Access)直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
①数据的传送单位是“块”。不再是一个字、一个字的传送;
②)数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”
③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
CPU会给I/O模块发出读/写块命令,CPU就可以做其他事情,DMA控制器会根据CPU发出的命令完成CPU指定的读写操作。当读写操作执行完成,DMA会向CPU发出中断信号,CPU再介入处理。
CPU发出读/写指令时:CPU指明此次要进行的操作(如:读操作),并说明要读入多少数据、数据要存放在内存的什么位置、数据在外部设备上的地址(如:在磁盘上的地址)
DMA控制器也是一种I/O控制器,也是由三部分组成:主机-控制前期的接口,I/O逻辑,块设备-控制器接口
主要的主机-控制器接口如下:
DR(DataRegister,数据寄存器):暂存从设备到内存,或从内存到设备的数据。MAR(MemoryAddressRegister,内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时 MAR表示要输出的数据放在内存中的什么位置。
DC(DataCounter,数据计数器):表示剩余要读/写的字节数。
CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/0命令,或设备的状态信息。
例如:内存想要读入外设某个数据,DMA控制器通过主机-控制器接口, 得到CPU提供的一系列信息,从磁盘中读入数据,再写到内存中,这一过程不需要CPU的干预,只有DMA控制器完成了CPU指定操作,才会向CPU发出中断信号,CPU再介入进行后续处理。
注:DMA控制器读入数据时,也是一个字一个字读入的, 每次读入的字都会先存放再DR(数据寄存器)中,再从DR写入内存中。
操作系统(15)-----I/O设备管理(万字总结~)(2):https://developer.aliyun.com/article/1511387