I/O管理
-
执行I/O的三种技术
无中断 使用中断 通过处理器实现I/O和内存间的传送 程序控制I/O 中断驱动I/O I/O和内存间直接传送 直接存储器访问/通道 - 程序控制:进入忙等待,即CPU不断试探状态寄存器,查看设备是否可以使用。设备空闲后先读入CPU的寄存器,再把CPU寄存器中的内容放入内存,如scanf/printf。CPU干预频率很频繁,需要不断轮询检查。CPU和I/O设备只能串行工作。按字存取数据。
- 中断驱动:(若I/O指令非阻塞,处理器继续执行其后续指令,若阻塞则操作系统将其设为阻塞态并调度其他进程,这里讨论后者)CPU中断后不进行轮检而是中断,当目标设备设备完成后向CPU发出中断信号,CPU检测到后就回去执行。(每个指令周期结束后都会检查一次中断)数据同样需要存到CPU寄存器后再存到内存或I/O设备。每次只能读/写一个字
- DMA:是操作系统必须支持的主要数据传送方式,使得处理可以不再参与I/O处理,主要用于块设备。数据传送单位是块。
-
I/O模块的发展实际上就是将CPU逐步从I/O任务中解脱出来,为其设立了单独的处理器/指令集/局部存储器,即DMA。DMA可以模拟处理器,并有系统总线的控制权。
- 请求读或写操作的信号通过在处理器和DMA模块之间使用读写控制线发送。
- 相关的IO设备地址,通过数据线传送。
- DMA获得存储器的读或者写的起始地址,在数据线上传送,并由DMA保存其地址寄存器中。
- 读或者写的数据长度(字数),由DMA保存在其数据计数寄存器DC中。
以上是CPU的工作,之后就交给DMA了。DMA要完成的:
- 直接从存储器中或向存储器中逐字传送整块数据。(读入时是以字为单位,只是传送给I/O是整块进行,每次如果读写多个块只能是连续的多个块,并且存放内存后也需要是连续的,如果要不连续的块,需要CPU重新给指令,这就是缺点,离散数据块会导致多条CPU指令)
- 传送结束后向CPU发送中断信号。
-
通道控制方式:根据DMA改进的,为了解决读取不连续块的问题
通道作为一种硬件,需要和CPU共享主机内存,可以识别一系列通道指令,CPU可以一次性写入通道一堆信息,每次读写一组数据块。DMA传输单位是块。 -
DMA的配置
- (a)中DMA模块充当代理处理器,使用程序控制I/O通过DMA模块在存储器和I/O模块之间交换数据。
- (c)是对(b)