一、I/O设备的基本概念和分类
操作系统既需要对上层的应用软件进行管理,也需要对下层的硬件进行管理,在之前的学习中,操作系统对处理机、存储器这些硬件进行管理,这些硬件其实是在计算机的主机内部的,这个章节探讨的设备管理其实操作系统对计算机主机外部的那些硬件设备的管理。
总结:
二、I/O控制器
可以有多个控制器与设备的接口,一个IO控制器有可能控制多个具体的IO设备,为了区别CPU此时要操作的具体是哪个设备,同样需要给这些设备进行一个编号或者给各个设备一个地址,CPU在发出IO命令的时候,也需要指明自己操作的哪个设备。
CPU首先通过一个控制线向IO控制器发出一个具体的指令,同时CPU在地址线这个线路上说明自己要操作的是哪一个设备,如果说此时要输出一个数据的话,CPU会通过数据总线把自己要输出的数据放到IO控制器的数据寄存器中,之后IO逻辑就可以从数据寄存器中取得CPU想要输出得数据,类似得此时CPU发出的IO指令会有一些相应的参数,这些参数会放到控制寄存器中,IO逻辑就可以从控制寄存器中读出相应的参数,另外,为了实现对各个设备的管理,CPU还会从状态寄存器中读出各个设备的一个状态,比如说忙碌空闲还是故障等等,IO逻辑会往状态寄存器中写入相应的数据来告诉CPU各个设备的状态到底是什么样子的,这就是CPU和控制器的接口所需要完成的一些事情,这个接口主要就是用于完成CPU与控制器之间的通信,类似的,控制器与设备的接口来完成控制器与设备之间的通信。
比如说,此时要输出一个数据的话,首先由CPU通过数据总线把数据写入到数据寄存器中,然后IO逻辑取出数据寄存器中的内容,通过右边的接口,把数据输出到设备上。输入与这个过程相反。
总结:
三、IO控制方式
程序直接控制方式:
中断驱动方式:
IO设备速度很慢而CPU是一种很快的设备,所以当CPU发出IO指令之后,可以把等到IO进程阻塞,线切换其他进程执行。
DMA方式:
DMA控制器可以直接和内存进行读写,不在经过CPU。
CPU实现提供一些参数,之后就是内存从磁盘中读数据,这个过程就不需要CPU进行干预,只有DMA控制器完成了CPU指定的一系列人物之后,才会向CPU发出一个中断信号,然后CPU介入后续的处理。
NOTE:DMA控制器并不是每次直接读入一整块数据,然后直接把一整块放到内存当中,其实DMA控制器再读入数据的过程当中也是一个字一个字读入的,然后每次读入的一个字都是先存放在DR,再从数据寄存器中写入到内存当中,最后就可以完成一整块一整块的数据的读入工作。
通道控制方式:
总结:
一个通道可以控制多个IO控制器,而一个IO控制器又可以控制多个IO设备。
四、IO软件层次结构
Windows API就是用户层软件向用户提供的库函数接口。
设备驱动程序和中断处理程序都会直接和硬件打交道,而上面的设备驱动程序和设备独立性软件不会和硬件直接打交道,此外中断处理程序处理完成后,还会交由设备驱动程序、设备独立性软件以及用户层软件处理,处理过程是由下到上的。
总结:
五、IO核心子系统
IO调度:
设备保护:
总结:
六、假脱机技术(SPOOLing技术)
假脱机技术用软件的方式实现了脱机技术。
根据打印请求表执行打印任务,比如说用户进程提出的打印人物挂在队列的对头,所以此时输出进程应该满足队头的任务,因此根据打印任务表就可以知道此时打印输出的数据在输出井缓冲区内,所以会从缓冲区内读出数据,然后把这些数据数据首先挪入到内存的输出缓冲区,之后再从输出缓冲区把数据输出到打印机上,让打印机执行具体的打印任务。当打印任务完成了之后,这个打印文件表就可以从队列中删除了,之后只要打印机空闲,就可以从队列中再取出下一个任务,然后根据任务的指示执行后续的打印任务。
所以在采用了SPOOLing技术,虽然系统只有一台打印机,但是可以实现对打印机的共享。
总结:
七、设备的分配与回收
静态分配和动态分配:
一个系统中可能有多个通道。
设备分配的步骤:
总结:
八、缓冲区管理
有了缓冲区,只有缓冲区满了,CPU才回去处理,没有缓冲区,没发出一个数据就中断一次,中断频率会很高。
没有采用缓冲区的话,输出进程只能一个字符一个字符的给IO设备传送数据,如果采用的缓冲区策略的话,输出进程可以把一整块的数据放入缓冲区里,让IO设备从缓冲区里一个字符一个字符的读数据,输入的时候也是类似的。
单缓冲:
键盘输入的数据最终是要被传到用户进程的内存空间的。
双缓冲:
单缓冲和双缓冲在通信时的区别:
循环缓冲区:
缓冲池:
总结:
总结
本节主要学习了IO设备的相关知识,包括IO设备分类、IO控制器、IO控制方式、IO软件层次结构、IO核心子系统、假脱机技术、IO设备的分配与回收,最后学习了缓冲区的管理。