CH5 设备管理设备管理通常应具有以下功能:
l 外围设备中断处理
l 缓冲区管理
l 外围设备的分配
l 外围设备驱动调度
l 虚拟设备及其实现
5.1 I/O硬件原理
操作系统的设计者的立足点主要是针对如何利用 I/O硬件的功能进行程序设计提供一个方便用户的实用接口
5.1.1 I/O系统
通常把 I/O设备及其接口线路、控制部件、
通道和管理软件称为 I/O系统,
把计算机的主存和外围设备的介质之间的信息传送操作称为输入输出操作。
按照输入输出特性,I/O设备可以划分为输入型外围设备,输出型外围设备和存储型外围设备三类 。 按照输入输出信息交换的单位,I/O设备则可以划分为字符设备和块设备 。 输入型外围设备和输出型外围设备一般为字符设备,它与内存进行信息交换的单位是字节,即一次交换 1个或多个字节 。
所谓块是连续信息所组成的一个区域,块设备则一次与内存交换的一个或几个块的信息,存储型外围设备一般为块设备 。
存储型外围设备又可以划分为顺序存取存储设备和直接存取存储设备 。 顺序存取存储设备严格依赖信息的物理位置进行定位和读写,如磁带 。 直接存取存储设备的重要特性是存取任何一个物理块所需的事件几乎不依赖于此信息的位置,
如磁盘 。
不同设备的物理特性存在很大差异,其主要差别在于,
l数据传输率 从每秒几十个字符 (键盘输入 )到每秒几个 KB(磁盘 ),相差万倍 ;
l数据表示方式 不同设备采用不同字符表和奇偶校验码 ;
l传输单位 慢速设备以字符为单位,快速设备以块为单位,可相差几千倍 ;
l出错条件 错误的性质,形式,后果,报借方法,应对措施等每类设备都不一样 。
5.1.2 I/O控制方式
按照 I/O控制器功能的强弱,以及和 CPU
之间联系方式的不同,可把 I/O设备的控制方式分为四类,它们的主要差别在于中央处理器和外围设备并行工作的方式不同,并行工作的程度不同。
5.1.2.1 询问方式
询问方式又称程序直接控制方式,在这种方式下,输入输出指令或询问指令测试一台设备的忙闲标志位,决定主存储器和外围设备是否交换一个字符或一个字。
设置计数值设置内存缓冲首址启动外设就绪传送一个字修改内存地址修改计数值完是是结束 I/O
一旦 CPU启动 I/O设备,便不断查询 I/O的准备情况,终止了原程序的执行 。 CPU在反复查询过程中,浪费了宝贵的 CPU时间;
另一方面,I/O准备就绪后,CPU参与数据的传送工作,此时 CPU也不能执行原程序,可见 CPU和 I/O设备串行工作,使主机不能充分发挥效率,外围设备也不能得到合理使用,整个系统的效率很低 。
5.1.2.2 中断方式
CPU在启动 I/O设备后,不必查询 I/O设备是否就绪,而是继续执行现行程序,对设备是否就绪不加过问。直到在启动指令之后的某条指令 (如第 K条 ) 执行完毕,CPU响应了 I/O中断请求,才中断现行程序转至 I/O中断处理程序执行。在中断处理程序中,CPU全程参与数据传输操作,
它从 I/O接口读一个字 (字节 ) 并写入主存,如果
I/O设备上的数据尚未传送完成,转向现行程序再次启动 I/O设备,于是命令 I/O设备再次作准备并重复上述过程;否则,中断处理程序结束后,
继续从 K+1条指令执行。
返回断点
CPU读 I/O状态
<有错 > 处理无
CPU从 I/O接口读一个字
CPU等一个字到主存
<完成 >
未
I/O中断处理程序启动 I/O(读操作)
继续执行
第 K条指令第 K+ 1条指令
现行程序启动命令返回源程序
I/O控制器工作
I/O设备就绪发 I/O中断响应中断
由于输入输出操作直接由中央处理器控制,每传送一个字符或一个字,都要发生一次中断,因而仍然消耗大量中央处理器时间 。 例如,输入机每秒传送 1000
个字符,若每次中断处理平均花 100微秒,为了传输 1000个字符,要发生 1000
次中断,所以,每秒内中断处理要花去约 100毫秒 。 但是程序中断方式 I/O,由于不必忙式查询 I/O准备情况,在 CPU和
I/O设备可实现部分并行,与程序查询的串行工作方式相比,使 CPU资源得到较充分利用 。
5.1.2.3 DMA方式
如果 I/O设备能直接与主存交换数据而不占用 CPU,那么,CPU
资源的利用率还可提高,这就出现了直接存储器存取 (Direct
Memory Access,DMA)方式 。
DMA至少需要以下逻辑部件
l 主存地址寄存器 存放主存中需要交换数据的地址,DMA传送前,
由程序送入首地址,在 DMA传送中,每交换一次数据,把地址寄存器内容加 1。
l字计数器 记录传送数据的总字数,每传送一个字,字计数器减 1。
l 数据缓冲寄存器或数据缓冲区 暂存每次传送的数据 。 DMA与主存间采用字传送,DMA与设备间可能是字位或字节传送 。 所以,DMA中还可能包括有数据移位寄存器,字节计数器等硬件逻辑 。 可能有人会提出疑问:为什么控制器从设备读到数据后不立即将其送入内存,而是需要一个内部缓冲区呢? 原因是一旦磁盘开始读数据,从磁盘读出比特流的速率时恒定的,不论控制器是否做好接受这些比特的准备 。 若此时控制器要将数据直接拷贝到内存中,则它必须在每个字传送完毕后获得对系统总线的控制权 。 如果由于其他设备争用总线,则只能等待 。 当上一个字还未送入内存前另一个字到达时,控制器只能另找一个地方暂存 。 如果总线非常忙,则控制器可能需要大量的信息暂存,
而且要做大量的管理工作 。 从另一方面来看,如果采用内部缓冲区,
则在 DMA操作启动前不需要使用总线,这样控制器的设计就比较简单,
因为从 DMA到主存的传输对时间要求并不严格 。
l 设备地址寄存器 存放 I/O设备信息,如磁盘的柱面号,磁道号,块号 。
l 中断机制和控制逻辑 用于向 CPU提出 I/O中断请求和保存 CPU发来的 I/O命令及管理 DMA的传送过程 。
I/O中断处理程序处理 DMA
I/O结束中断现行程序启动 I/O(读操作)
启动 I/O(读操作)
继续执行
第 K条指令第 K+ 1条指令
启动命令返回原程序响应中断返回断点
DMA工作传输准备
DMA向内存发出询问挪用内存周期读 /写操作修改内存地址和计数
<块结束 >
发 I/O账号未
5.1.2.4 通道方式
通道方式是 DMA方式的发展,它又进一步减少了 CPU对 I/O操作的干予,减少为对多个数据块,而不是仅仅一个数据块,
及有关管理和控制的干予 。 同时,为了获得中央处理器和外围设备之间更高的并行工作能力,也为了让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构 。 通道的出现是现代计算机系统功能不断完善,性能不断提高的结果,是计算机技术的一个重要进步 。
通道 (输入输出处理器 )
它能完成主存储器和外围设备之间的信息传送,
与中央处理器并行地执行操作 。 采用通道技术主要解决了输入输出操作的独立性和各部件工作的并行性 。 由通道管理和控制输入输出操作,
大大减少了外围设备和中央处理器的逻辑联系 。
从而,把中央处理器从琐碎的输入输出操作中解放出来 。 此外,外围设备和中央处理器能实现并行操作;通道和通道之间能实现并行操作;
各通道上的外围设备也能实现并行操作,以达到提高整个系统效率这一根本目的 。
采用输入输出通道设计后,输入输出操作过程如下:
中央处理机在执行主程序时遇到输入输出请求,则它启动指定通道上选址的外围设备,一旦启动成功,通道开始控制外围设备进行操作 。 这时中央处理器就可执行其它任务并与通道并行工作,直到输入输出操作完成 。 通道发出操作结束中断时,中央处理器才停止当前工作,
转向处理输入输出操作结束事件 。
按照信息交换方式和加接设备种类不同,通道可分为三种类型:
l 字节多路通道 。
l 选择通道 。
l 数组多路通道。
5.1.3设备控制器
I/O设备通常包括一个机械部件和一个电子部件 。 为了达到设计的模块性和通用性,一般将其分开 。
电子部件称为设备控制器或适配器,在个人计算机中,它常常是一块可以插入主板扩充槽的印刷电路板;
机械部件则是设备本身 。
区分控制器和设备本身是因为操作系统基本上是与控制器打交道,而非设备本身 。 大多数微型计算机的 CPU和控制器之间的通信采用单总线模型,CPU直接控制设备控制器进行输入输出;而主机则采用多总线结构和通道方式,以提高
CPU与输入输出的并行程度 。
控制器与设备之间的接口是一种很低层次的接口 。 例如一个磁盘,可以被格式化成为一个每道 16个 512字节的扇区,实际从磁盘读出来的是一个比特流,以一个前缀开始,随后是一个扇区的 4096比特,最后是一个纠错码 ECC;其中前缀是磁盘格式化时写进的,包括柱面数,扇区数,扇区大小等,以及同步信息 。 控制器的任务是把这个串行的转换成字节块并在必要时进行纠错,通常该字节块是在控制其中的一个缓冲区中逐个比特汇集而成,在检查和校验后,该块数据将被拷贝到主存中 。
引入了控制器后,操作系统只需通过传递几个简单的参数就可以对控制器进行操作和初始化,从而大大简化了操作系统的设计,特别是有利于计算机系统和操作系统对各类控制器和设备的兼容性 。
每个控制器都有一些用来与 CPU通信的寄存器,在某些计算机上,这些寄存器占用内存地址的一部分,称为内存映像 I/O;
另一些计算机则采用 I/O专用地址,每个寄存器占用其中的一部分 。 设备的 I/O地址分配由控制器上的总线解码逻辑完成 。
除 I/O端口外,许多控制器还通过中断通知 CPU它们已经做好准备,寄存器可以读写 。 以 IBM奔腾系列为例,它向 I/O设备提供 15条可用中断 。
有些控制器做在计算机主板上,如 IBM PC
机的键盘控制器 。 对于那些单独插在主板插槽上的控制器,有时上面设有一些可以用来设置 IRQ号的开关和跳线,以便避免
IRQ冲突 。 中断控制器芯片将每个 IRQ输入并映像到一个中断向量,通过这个中断向量就可以找到相应的中断服务程序 。 图 5-4
给出了 PC机部分控制器的 I/O地址,硬件中断和中断向量号 。
操作系统通过向控制器寄存器写命令字来执行 I/O功能 。 例如 PC机的软盘控制器可以接收 15条命令,包括读,写,格式化,重新校准等 。 许多命令字带有参数,这些参数也要同时装入控制器寄存器 。 一旦某个控制器接受到一条命令后,
CPU可以转向其它工作,而让该设备控制器自行完成具体的 I/O操作 。 当命令执行完毕后,控制器发出一个中断信号,
以便使操作系统重新获得 CPU的控制权并检查执行结果,此时 CPU仍旧是从控制器寄存器中读取若干字节信息来获得执行结果和设备的状态信息 。
设备控制器的功能和结构小结
。 设备控制器是 CPU和设备之间的一个接口,
它接收从 CPU发来的命令,控制 I/O设备操作,实现主存和设备之间的数据传输操作 。 设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址 。 设备控制器的主要功能为,① 接收和识别 CPU或通道发来的命令,例如磁盘控制器能接收读,写,查找,搜索等各种命令 ;② 实现数据交换,包括设备和控制器之间的数据传输 ;通过数据总线或通道,控制器和主存之间的数据传输 ;③ 发现和记录设备及自身的状态信息,供 CPU处理使用 ;④ 设备地址识别 。
为了实现上面列举的各项功能,设备控制器必须有以下组成部分,命令寄存器及译码器,数据寄存器,状态寄存器,地址译码器,以及用于对设备操作进行控制的 I/O逻辑 。
5.2 I/O软件原理
l 外围设备中断处理
l 缓冲区管理
l 外围设备的分配
l 外围设备驱动调度
l 虚拟设备及其实现
5.1 I/O硬件原理
操作系统的设计者的立足点主要是针对如何利用 I/O硬件的功能进行程序设计提供一个方便用户的实用接口
5.1.1 I/O系统
通常把 I/O设备及其接口线路、控制部件、
通道和管理软件称为 I/O系统,
把计算机的主存和外围设备的介质之间的信息传送操作称为输入输出操作。
按照输入输出特性,I/O设备可以划分为输入型外围设备,输出型外围设备和存储型外围设备三类 。 按照输入输出信息交换的单位,I/O设备则可以划分为字符设备和块设备 。 输入型外围设备和输出型外围设备一般为字符设备,它与内存进行信息交换的单位是字节,即一次交换 1个或多个字节 。
所谓块是连续信息所组成的一个区域,块设备则一次与内存交换的一个或几个块的信息,存储型外围设备一般为块设备 。
存储型外围设备又可以划分为顺序存取存储设备和直接存取存储设备 。 顺序存取存储设备严格依赖信息的物理位置进行定位和读写,如磁带 。 直接存取存储设备的重要特性是存取任何一个物理块所需的事件几乎不依赖于此信息的位置,
如磁盘 。
不同设备的物理特性存在很大差异,其主要差别在于,
l数据传输率 从每秒几十个字符 (键盘输入 )到每秒几个 KB(磁盘 ),相差万倍 ;
l数据表示方式 不同设备采用不同字符表和奇偶校验码 ;
l传输单位 慢速设备以字符为单位,快速设备以块为单位,可相差几千倍 ;
l出错条件 错误的性质,形式,后果,报借方法,应对措施等每类设备都不一样 。
5.1.2 I/O控制方式
按照 I/O控制器功能的强弱,以及和 CPU
之间联系方式的不同,可把 I/O设备的控制方式分为四类,它们的主要差别在于中央处理器和外围设备并行工作的方式不同,并行工作的程度不同。
5.1.2.1 询问方式
询问方式又称程序直接控制方式,在这种方式下,输入输出指令或询问指令测试一台设备的忙闲标志位,决定主存储器和外围设备是否交换一个字符或一个字。
设置计数值设置内存缓冲首址启动外设就绪传送一个字修改内存地址修改计数值完是是结束 I/O
一旦 CPU启动 I/O设备,便不断查询 I/O的准备情况,终止了原程序的执行 。 CPU在反复查询过程中,浪费了宝贵的 CPU时间;
另一方面,I/O准备就绪后,CPU参与数据的传送工作,此时 CPU也不能执行原程序,可见 CPU和 I/O设备串行工作,使主机不能充分发挥效率,外围设备也不能得到合理使用,整个系统的效率很低 。
5.1.2.2 中断方式
CPU在启动 I/O设备后,不必查询 I/O设备是否就绪,而是继续执行现行程序,对设备是否就绪不加过问。直到在启动指令之后的某条指令 (如第 K条 ) 执行完毕,CPU响应了 I/O中断请求,才中断现行程序转至 I/O中断处理程序执行。在中断处理程序中,CPU全程参与数据传输操作,
它从 I/O接口读一个字 (字节 ) 并写入主存,如果
I/O设备上的数据尚未传送完成,转向现行程序再次启动 I/O设备,于是命令 I/O设备再次作准备并重复上述过程;否则,中断处理程序结束后,
继续从 K+1条指令执行。
返回断点
CPU读 I/O状态
<有错 > 处理无
CPU从 I/O接口读一个字
CPU等一个字到主存
<完成 >
未
I/O中断处理程序启动 I/O(读操作)
继续执行
第 K条指令第 K+ 1条指令
现行程序启动命令返回源程序
I/O控制器工作
I/O设备就绪发 I/O中断响应中断
由于输入输出操作直接由中央处理器控制,每传送一个字符或一个字,都要发生一次中断,因而仍然消耗大量中央处理器时间 。 例如,输入机每秒传送 1000
个字符,若每次中断处理平均花 100微秒,为了传输 1000个字符,要发生 1000
次中断,所以,每秒内中断处理要花去约 100毫秒 。 但是程序中断方式 I/O,由于不必忙式查询 I/O准备情况,在 CPU和
I/O设备可实现部分并行,与程序查询的串行工作方式相比,使 CPU资源得到较充分利用 。
5.1.2.3 DMA方式
如果 I/O设备能直接与主存交换数据而不占用 CPU,那么,CPU
资源的利用率还可提高,这就出现了直接存储器存取 (Direct
Memory Access,DMA)方式 。
DMA至少需要以下逻辑部件
l 主存地址寄存器 存放主存中需要交换数据的地址,DMA传送前,
由程序送入首地址,在 DMA传送中,每交换一次数据,把地址寄存器内容加 1。
l字计数器 记录传送数据的总字数,每传送一个字,字计数器减 1。
l 数据缓冲寄存器或数据缓冲区 暂存每次传送的数据 。 DMA与主存间采用字传送,DMA与设备间可能是字位或字节传送 。 所以,DMA中还可能包括有数据移位寄存器,字节计数器等硬件逻辑 。 可能有人会提出疑问:为什么控制器从设备读到数据后不立即将其送入内存,而是需要一个内部缓冲区呢? 原因是一旦磁盘开始读数据,从磁盘读出比特流的速率时恒定的,不论控制器是否做好接受这些比特的准备 。 若此时控制器要将数据直接拷贝到内存中,则它必须在每个字传送完毕后获得对系统总线的控制权 。 如果由于其他设备争用总线,则只能等待 。 当上一个字还未送入内存前另一个字到达时,控制器只能另找一个地方暂存 。 如果总线非常忙,则控制器可能需要大量的信息暂存,
而且要做大量的管理工作 。 从另一方面来看,如果采用内部缓冲区,
则在 DMA操作启动前不需要使用总线,这样控制器的设计就比较简单,
因为从 DMA到主存的传输对时间要求并不严格 。
l 设备地址寄存器 存放 I/O设备信息,如磁盘的柱面号,磁道号,块号 。
l 中断机制和控制逻辑 用于向 CPU提出 I/O中断请求和保存 CPU发来的 I/O命令及管理 DMA的传送过程 。
I/O中断处理程序处理 DMA
I/O结束中断现行程序启动 I/O(读操作)
启动 I/O(读操作)
继续执行
第 K条指令第 K+ 1条指令
启动命令返回原程序响应中断返回断点
DMA工作传输准备
DMA向内存发出询问挪用内存周期读 /写操作修改内存地址和计数
<块结束 >
发 I/O账号未
5.1.2.4 通道方式
通道方式是 DMA方式的发展,它又进一步减少了 CPU对 I/O操作的干予,减少为对多个数据块,而不是仅仅一个数据块,
及有关管理和控制的干予 。 同时,为了获得中央处理器和外围设备之间更高的并行工作能力,也为了让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构 。 通道的出现是现代计算机系统功能不断完善,性能不断提高的结果,是计算机技术的一个重要进步 。
通道 (输入输出处理器 )
它能完成主存储器和外围设备之间的信息传送,
与中央处理器并行地执行操作 。 采用通道技术主要解决了输入输出操作的独立性和各部件工作的并行性 。 由通道管理和控制输入输出操作,
大大减少了外围设备和中央处理器的逻辑联系 。
从而,把中央处理器从琐碎的输入输出操作中解放出来 。 此外,外围设备和中央处理器能实现并行操作;通道和通道之间能实现并行操作;
各通道上的外围设备也能实现并行操作,以达到提高整个系统效率这一根本目的 。
采用输入输出通道设计后,输入输出操作过程如下:
中央处理机在执行主程序时遇到输入输出请求,则它启动指定通道上选址的外围设备,一旦启动成功,通道开始控制外围设备进行操作 。 这时中央处理器就可执行其它任务并与通道并行工作,直到输入输出操作完成 。 通道发出操作结束中断时,中央处理器才停止当前工作,
转向处理输入输出操作结束事件 。
按照信息交换方式和加接设备种类不同,通道可分为三种类型:
l 字节多路通道 。
l 选择通道 。
l 数组多路通道。
5.1.3设备控制器
I/O设备通常包括一个机械部件和一个电子部件 。 为了达到设计的模块性和通用性,一般将其分开 。
电子部件称为设备控制器或适配器,在个人计算机中,它常常是一块可以插入主板扩充槽的印刷电路板;
机械部件则是设备本身 。
区分控制器和设备本身是因为操作系统基本上是与控制器打交道,而非设备本身 。 大多数微型计算机的 CPU和控制器之间的通信采用单总线模型,CPU直接控制设备控制器进行输入输出;而主机则采用多总线结构和通道方式,以提高
CPU与输入输出的并行程度 。
控制器与设备之间的接口是一种很低层次的接口 。 例如一个磁盘,可以被格式化成为一个每道 16个 512字节的扇区,实际从磁盘读出来的是一个比特流,以一个前缀开始,随后是一个扇区的 4096比特,最后是一个纠错码 ECC;其中前缀是磁盘格式化时写进的,包括柱面数,扇区数,扇区大小等,以及同步信息 。 控制器的任务是把这个串行的转换成字节块并在必要时进行纠错,通常该字节块是在控制其中的一个缓冲区中逐个比特汇集而成,在检查和校验后,该块数据将被拷贝到主存中 。
引入了控制器后,操作系统只需通过传递几个简单的参数就可以对控制器进行操作和初始化,从而大大简化了操作系统的设计,特别是有利于计算机系统和操作系统对各类控制器和设备的兼容性 。
每个控制器都有一些用来与 CPU通信的寄存器,在某些计算机上,这些寄存器占用内存地址的一部分,称为内存映像 I/O;
另一些计算机则采用 I/O专用地址,每个寄存器占用其中的一部分 。 设备的 I/O地址分配由控制器上的总线解码逻辑完成 。
除 I/O端口外,许多控制器还通过中断通知 CPU它们已经做好准备,寄存器可以读写 。 以 IBM奔腾系列为例,它向 I/O设备提供 15条可用中断 。
有些控制器做在计算机主板上,如 IBM PC
机的键盘控制器 。 对于那些单独插在主板插槽上的控制器,有时上面设有一些可以用来设置 IRQ号的开关和跳线,以便避免
IRQ冲突 。 中断控制器芯片将每个 IRQ输入并映像到一个中断向量,通过这个中断向量就可以找到相应的中断服务程序 。 图 5-4
给出了 PC机部分控制器的 I/O地址,硬件中断和中断向量号 。
操作系统通过向控制器寄存器写命令字来执行 I/O功能 。 例如 PC机的软盘控制器可以接收 15条命令,包括读,写,格式化,重新校准等 。 许多命令字带有参数,这些参数也要同时装入控制器寄存器 。 一旦某个控制器接受到一条命令后,
CPU可以转向其它工作,而让该设备控制器自行完成具体的 I/O操作 。 当命令执行完毕后,控制器发出一个中断信号,
以便使操作系统重新获得 CPU的控制权并检查执行结果,此时 CPU仍旧是从控制器寄存器中读取若干字节信息来获得执行结果和设备的状态信息 。
设备控制器的功能和结构小结
。 设备控制器是 CPU和设备之间的一个接口,
它接收从 CPU发来的命令,控制 I/O设备操作,实现主存和设备之间的数据传输操作 。 设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址 。 设备控制器的主要功能为,① 接收和识别 CPU或通道发来的命令,例如磁盘控制器能接收读,写,查找,搜索等各种命令 ;② 实现数据交换,包括设备和控制器之间的数据传输 ;通过数据总线或通道,控制器和主存之间的数据传输 ;③ 发现和记录设备及自身的状态信息,供 CPU处理使用 ;④ 设备地址识别 。
为了实现上面列举的各项功能,设备控制器必须有以下组成部分,命令寄存器及译码器,数据寄存器,状态寄存器,地址译码器,以及用于对设备操作进行控制的 I/O逻辑 。
5.2 I/O软件原理