这一章看懂就行了,就算考也考的比较简单,只要知道就能做(而且本来内容也简单)
I/O设备的分类和概念
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。
I/O控制器
I/O设备由机械部件和电子部件组成
机械部件主要用来执行具体的I/O操作,如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面
电子部件如印刷电路板,控制器(I/O控制器、设备控制器)。
1.I/O控制器的功能
2.I/O控制器的组成
①一个I/O控制器可能会对应多个设备
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备〉,且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
3.内存映像 vs 寄存器独立编址
小结
I/O控制方式
1.程序直接控制方式
CPU向控制器发出读指令,设备启动,状态设为未就绪,输入设备准备好数据传给控制器(同时报告状态),控制器把数据放到数据寄存器里,把状态改为就绪(期间CPU一直查询状态,处于一种“忙等的状态”),CPU发现状态为就绪,把数据从数据寄存器拿到CPU寄存器中,再从CPU寄存器挪到内存里去(充当了一个搬运工的角色)。
2.中断驱动方式
CPU发出命令后把I/O进程阻塞,等I/O设备自己弄,CPU先去搞别的进程,I/O完成后发出中断(控制器发出),CPU保存当前环境然后处理I/O进程,读一个字(每次就只能这么多)到CPU寄存器再写入主存。然后恢复环境继续之前的工作
注意: ①CPU会在每个指令周期的末尾检查中断;
②中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。
3.DMA方式
每次读写一个或多个块,如果是多个块要是连续的,在内存里也是连续的,因为CPU下命令的时候有说存到哪里(MAR),所以必须是连续的才能一次搞定。
以块为单位,CPU介入的频率更低了,并且直接从设备到内存,不需要CPU做搬运工,传输效率变高了。
4.通道控制方式
CPU发展了副手 通道,整了份任务清单,告诉通道任务清单(通道程序)在哪(给出首地址),操作哪个I/O设备,然后就去执行别的进程了。通道执行通道程序(里面有详细的要做什么,读写多少数据,分别都放在哪),通道按着这个做,就可以实现一次性搞定很多块,完成之后才发起中断叫CPU来处理。
小结
I/O软件层次结构
设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。 设备驱动程序,中断处理程序会和硬件直接打交道,设备独立性软件和用户层软件不会。
与中断有关的操作: ①用户通过调用用户层软件提供的库函数发出的I/O请求 ②用户层软件通过“系统调用”请求设备独立性软件层的服务 ③设备独立性软件层根据LUT调用设备对应的驱动程序 ④驱动程序向I/O控制器发出具体命令 ⑤等待I/O完成的进程应该被阻塞,因此需要进程切换,而进程切换必然需要中断处理
逻辑表的作用: ①建立逻辑设备名到物理设备名的映射关系 ②根据设备类型选择调用相应的驱动程序(不同的设备内部硬件有区别,所以要提供对应的驱动程序,系统安装设备的驱动程序之后就能知道怎么操作这些设备)
I/O核心子系统
就是中间三层
假脱机技术为I/O核心子系统的功能(大纲规定)
设备保护和文件保护很类似,把设备看成是特殊的文件就行了
假脱机技术(SPOOLing)
设备的分配与回收
设备的分配算法:先来先服务、优先级、短任务优先……
1.设备分配管理的数据结构
这些表都是由:唯一ID、状态、上一层位置(通道则是找到所有控制器COCT)、等待队列(如果状态为忙就挂在等待队列,分配从队首取,新的插到队尾)
设备分配的步骤: ①根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数) ②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。 ③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。 ④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。
注∶只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
2.设备分配步骤改进
用户编程时必须使用物理名会很麻烦,所以建立一个逻辑名到物理名的映射
小结
缓冲区管理
缓冲区可以由硬件也可以用内存
硬件:联想寄存器(快表),这种需要速度很高的时候
一般情况用内存作为缓冲区
1.单缓冲
缓冲区和工作区:取空才能放,放满才能取
T>C,要等缓冲区充满才能从缓冲区弄到工作区
T<C,CPU还没处理完,要处理完才能从缓冲区弄到工作区
2.双缓冲
这个不好找到与初始状态一样的情况,注意看周期就行
耗时:MAX(T,C+M)
单缓冲只能单向传输,双缓冲 能双向 管道其实就是缓冲区,所以要设置两个管道才能双向传输
3.循环缓冲区
4.缓冲池
hin:从空队列中取出一块,冲满后挂到输入队列队尾 sin:从输入队列中取出一块,读空后挂到空队列 hout:从空队列取出一块,冲满后挂到输出队列 sout:从输出队列取出一块,读空后挂到空队列
|