五 输入输出系统
5.1 I/O 系统简介
设备管理的对象:主要是 I/O 设备。
设备管理的基本任务:完成用户提出的 I/O 请求,提高 I/O 速率以及改善 I/O 设备的利用率。
设备管理的主要功能:缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。
I/O 系统的基本功能:
- 设备分配
- 设备映射
- 设备驱动
- I/O 缓冲区的管理
通用设备管理分层模型:
-
分层原因:使 I/O 软件具有清晰的结构、更好的可移植性和易适应性。
-
目前普遍采用层次式的结构,通常划分为四层,如下:
用户层软件 ⇕ 设备独立性软件 ⇕ 设备驱动程序 ⇕ 中断处理程序 ⇕ 设备硬件 \fbox{用户层软件} \\ \Updownarrow \\ \fbox{设备独立性软件} \\ \Updownarrow \\ \fbox{设备驱动程序} \\ \Updownarrow \\ \fbox{中断处理程序} \\ \Updownarrow \\ \fbox{\textbf{设备硬件}} \\ 用户层软件⇕设备独立性软件⇕设备驱动程序⇕中断处理程序⇕设备硬件
I/O 设备和设备控制器等硬件:
-
在 I/O 系统中,需要有与 I/O 设备相应的设备控制器和高速总线。
-
在有的大、中型计算机系统中,还配置了 I/O 通道或 I/O 处理机。
-
通常,设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此,在设备与设备控制器之间应有一接口,该接口与设备之间有数据状态线、状态信号线与控制信号线。
- 数据信号线:在设备与控制器之间传送数据信号。
- 状态信号线:传送指示设备当前状态的信号,有:正在读/写,或准备好新的数据传送。
- 控制信号线:由设备控制器向 I/O 发送控制信号时的通路,如:读、写控制等。
-
有关设备控制器:
- 设备控制器是 CPU 与 I/O 设备之间的接口,它接收从 CPU 发来的命令,并控制 I/O 设备工作。
- 设备控制器主要职责是控制一个或多个 I/O 设备,以实现 I/O 设备和计算机之间的数据交换。
-
有关 I/O 通道:
- I/O 通道是一种特殊的执行 I/O 指令的处理机。
- 其引入目的是使一些原来由 CPU 处理的 I/O 任务转由通道来承担,从而把 CPU 从繁杂的 I/O 任务中解脱出来。
- 采用通道有以下特点:
- DMA(直接存储器存取)方式显著地减少了 CPU 的干预。
- 只需向 I/O 通道发送一条 I/O 指令,即可完成一组相关的读(或写)操作及有关控制。
- 可实现 CPU、通道和 I/O 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。
5.2 中断处理程序和设备驱动程序
5.2.1 中断简介(一些简单概念)
中断和陷入——CPU 外部事件和内部事件导致
中断向量表和中断优先级
对多中断源的处理方式:
- 屏蔽(禁止)中断
- 嵌套中断
5.2.2 中断处理程序
中断处理层的主要工作:
- 进行进程上下文的切换
- 对处理中断信号源进行测试
- 读取设备状态和修改进程状态等
中断处理程序的处理过程:
-
首先保护被中断进程的 CPU 环境。
-
测定是否有未响应的中断信号。
- 程序完成当前指令后测试是否有未响应的中断信号。
- 如果没有,继续执行下一条指令。
- 如果有,则停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权转交给中断处理程序做准备。
-
通常由硬件自动将处理机状态字 PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中。
-
把被中断进程的 CPU 现场信息(即包括所有的 CPU 寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中。
-
-
然后转入相应的设备处理程序。
-
由处理机对各个中断源进行测试,以确定引起本次中断的 I/O 设备,并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号。
-
将相应的设备中断处理程序的入口地址装入到程序计数器中,使处理机转向中断处理程序。
-
-
然后进行中断处理。
6. 该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断,还是异常结束中断。
- 若是前者,中断程序便进行结束处理;若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。
- 若是异常结束中断,则根据发生异常的原因做相应的处理。 -
最后恢复被中断进程的现场。
7. 中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址 N+1、处理机状态字 PSW,以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从 N+1 处开始,最终返回到被中断的程序。
5.2.3 设备驱动程序
设备驱动程序概述
设备驱动程序的处理过程
对 I/O 设备的控制方式:
- 使用轮询的可编程 I/O 方式
- 使用中断的可编程 I/O 方式
- 直接存储器访问方式
- I/O 通道控制方式
使用轮询的可编程 I/O 方式:
- 程序 I/O(Programmed I/O)方式,或称为忙-等待方式。
- 处理机向控制器发出一条 I/O 指令启动输入设备输入数据时,同时把 busy 置为 1,再不断循环测试 busy。
- Busy=0,完成输入,处理机读取数据,送入指定单元,完成一次 I/O。
- 对状态寄存器中的忙/闲标志 busy 的检查实现控制。
- 效率比较低,现在几乎不用了。
使用中断的可编程 I/O 方式:
- 由于处理器与 I/O 设备间有着几个数量级的速度差异,所以为了提高整体效率,减少在程序直接控制 I/O 设备与处理器进行数据交互是很必要的。
- 中断驱动方式则可以成百倍地提高 CPU 的利用率,因为 CPU 与 I/O 设备并行工作。
直接存储器(DMA)访问方式:
-
DMA 访问方式的引入:为了进一步减少 CPU 对 I/O 的干预。
-
特点:
- 数据传输的基本单位是数据块,即在 CPU 与 I/O 设备之间,每次传送至少一个数据块。
- 所传送的数据是从设备直接送入内存的,或者相反。
- 仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。
-
DMA 方式较之中断驱动方式,又是成百倍地减少了 CPU 对 I/O 的干预,进一步提高了 CPU 与 I/O 设备的并行操作程度。
I/O 通道控制方式:
- I/O 通道控制方式的引入:I/O 通道方式是 DMA 方式的发展,它可进一步减少 CPU 的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。可实现 CPU、通道和 I/O 设备三者的并行操作,从而更有
效地提高整个系统的资源利用率。
5.3 与设备无关的 I/O 软件
5.3.1 设备独立性
设备独立性指应用程序独立于具体使用的物理设备,换种说法,即应用程序不局限于使用某个具体的物理设备。
为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。
在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
因此,系统须具有将逻辑设备名称转换为某物理设备名称的功能。
实现设备独立性的好处:
- 设备分配时的灵活性:进程能以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备已全部分配完毕时,进程才会阻塞。
- 易于实现 I/O 重定向:所谓 I/O 重定向,是指用于 I/O 操作的设备可以更换(即重定向),而不必改变应用程序。
5.3.2 设备独立性软件
为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为设备独立性软件。
设备独立性软件的主要功能可概括为以下两个方面:
- 执行所有设备的公有操作
- 它们通常包括:
- 对独立设备的分配与回收
- 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序
- 对设备进行保护,禁止用户直接访问设备
- 缓冲管理
- 差错控制
- 提供独立于设备的逻辑块
- 它们通常包括:
- 向用户层(或文件层)软件提供统一接口
- 无论何种设备,它们向用户所提供的接口应该是相同的。
5.4 磁盘系统及磁盘调度
对文件的操作,都将涉及到对磁盘的访问,磁盘 I/O 速度的高低和磁盘系统的可靠性,都将直接影响到系统性能。因此,设法改善磁盘系统的性能,已成为现代操作系统的重要任务之一 。
提高磁盘 I/O 速度的主要途径:
- 选择性能好的磁盘
- 采用好的磁盘调度算法
- 设置磁盘高速缓存(Disk Cache)
- 其它方法
- 采用高度可靠、快速的容量磁盘系统–磁盘冗余阵列
磁盘访问时间分成以下三个部分:
-
寻道时间 T s T_s Ts:指把磁头移动到指定磁道上所经历的时间。
T s = m × n + s T_s=m \times n + s Ts=m×n+s
其中, s s s为启动磁头的时间, n n n为磁头需要移动的磁道条数, m m m为移动每一条磁道所花费的时间。 -
旋转延迟时间 T τ T_\tau Tτ:指定扇区移动到磁头下面所经历的时间。
-
传输时间 T t T_t Tt:指把数据从磁盘读出或向磁盘写入数据所经历的时间。
-
T
t
T_t
Tt的大小与每次所读/写的字节数
b
b
b和旋转速度有关:
T t = b r N T_t=\frac{b}{rN} Tt=rNb
其中, r r r为磁盘每秒钟的转数, N N N为一条磁道上的字节数。
-
T
t
T_t
Tt的大小与每次所读/写的字节数
b
b
b和旋转速度有关:
磁盘调度:
- 磁盘是可供多个进程共享的设备。
- 当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。
- 目前常用的磁盘调度算法有:
- 先来先服务(FCFS)
- 最短寻道时间优先(SSTF)
- 扫描(SCAN)算法
- 循环扫描(CSCAN)算法
先来先服务(FCFS):
- 根据进程请求访问磁盘的先后次序进行调度。
- 算法的优点是公平、简单,且每个进程的请求都能依次地得到处理。
最短寻道时间优先(SSTF):
- 选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。
- 虽然能获得较好的寻道性能,但却可能导致某个进程发生“饥饿”现象。
扫描(SCAN)算法:
- 该算法优先考虑的是磁头当前的移动方向。
- 例如,磁头自里向外移动,并同时自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向自外向里移动。
循环扫描(CSCAN)算法:
- 算法规定磁头单向移动。
- 例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描。