930 likes | 1.13k Views
第六章 输入 / 输出系统. 6.1 I/O 设备管理概述 6.2 采用通道模型的 I/O 系统 6.3 I/O 系统的软件组织 6.4 缓冲技术 6.5 磁盘的驱动调度 6.6 设备分配程序 6.7 WindowsNT 的 I/O 系统. 6.1 I/O 设备管理概述. 6.1.1 I/O 设备类型. 1. 按使用特性分类. 2. 按所属关系分类 外部设备按其所属关系可分为系统设备和用户设备。
E N D
第六章 输入/输出系统 6.1 I/O设备管理概述 6.2 采用通道模型的I/O系统 6.3 I/O系统的软件组织 6.4 缓冲技术 6.5 磁盘的驱动调度 6.6 设备分配程序 6.7 WindowsNT的I/O系统
6.1 I/O设备管理概述 6.1.1 I/O设备类型 1. 按使用特性分类
2. 按所属关系分类 外部设备按其所属关系可分为系统设备和用户设备。 (1) 系统设备。这是指在操作系统生成时已经登记在系统中的标准设备, 如打印机、磁盘等。时钟也是一个特殊的系统设备,它的全部功能就是按事先定义的时间间隔发出中断。 (2) 用户设备。这是指在系统生成时未登记在系统中的非标准设备。这类设备通常是由用户提供的,因此该类设备的处理程序也应该由用户提供, 并通过适当的手段把这类设备登记在系统中,以便系统能对它实施统一管理。
3. 按资源分配角度分类 • 独占设备。 只能为某一进程所独占。 • (2) 共享设备。 允许若干个进程同时使用。 • (3) 虚拟设备。通过假脱机(Spooling)技术把原来的独占设备改造可为若干个进程所共享的设备,以提高设备的利用率。
4. 按传输数据数量分类 外部设备按传输数据的数量,分为字符设备和块设备。 (1) 字符设备。每次传输数据以字节为单位的设备称为字符设备,如打印机、终端、键盘等低速设备。 (2) 块设备。传输以数据块为单位进行的设备称为块设备。 如磁盘、磁带等高速外存储器等。
6.1.2 目标 1.方便性 向用户提供使用外部设备的方便接口,使用户摆脱繁琐的编程负担。 2.并行性 充分利用各种技术(通道,中断,缓冲等)提高CPU与设备、设备与设备之间的并行工作能力。 3.均衡性 充分利用资源,提高资源利用率。 4.独立性 与设备无关性。用户在编制程序时,使用逻辑设备名,由系统实现从逻辑设备到物理设备的转换。用户能独立于具体物理设备而方便的使用设备。 统一性:对不同的设备采取统一的操作方式,在用户程序中使用的是逻辑设备。
6.1.3 设备管理的基本功能 1.外设的分配和回收 记录设备的状态。根据用户的请求和设备的类型,采 用一定的分配算法,选择一条数据通路。 2.实现外设的启动 特权指令完成 3.实现对磁盘的驱动调度 4.处理外部设备的中断处理 5.实现虚拟设备 6.按一定算法在进程间分配设备 先来先服务
6.1.4 I/O设备的物理特性 1. 磁盘 图 6.2 磁盘物理结构概念图
2. 时钟 图 6.3 可编程时钟 可编程时钟的优点是它的中断频率可由软件控制。 如果使用振荡频率为1 MHz的晶体,那么计数器每一微秒接收到一个脉冲, 对于16位的寄存器, 中断可编程为按 1μs至 65536μs 的间隔发生。
时钟硬件所做的工作仅仅是按给定的时间间隔产生中断, 其它和时间有关的工作必须由软件(时钟驱动程序)来做。 时钟软件的任务包括: • ① 维护日期和时间; • ② 防止进程运行时间超过允许界限; • ③ 对CPU使用进行记帐; • ④ 处理用户进程提出的时间闹钟系统调用; • ⑤ 对系统某些部分提供监视定时器; • ⑥ 支持直方图监视和统计信息搜集。
3. 终端 (1) 存储映像终端 图 6.4 存储映像终端直接写入视频RAM
视频存储卡上有一个芯片称为视频控制器(Video Controller)。 这个芯片从视频RAM中取出字符,产生用于驱动显示器(监视器)的视频信号。监视器产生水平扫描屏幕的电子束。典型的屏幕有 480 至 1024 行, 每行 640 至 1200 点。 这些点称为像素(Pixel)。视频控制器调节电子束,决定一个像素是亮的还是黑的。彩色监视器有三个电子束,分别对应红色、 绿色和蓝色。
一个简单的单色显示器可显示 25 行,每行 80 个字符。每个字符的宽度为 9 个像素,高度为 14 个像素(包括字符间的空白)。 这种显示器有 350 行扫描线,每行扫描线有 720 个点,每帧每秒重画 45 至 70 次。视频控制器被设计成首先从视频RAM中取出 80 个字符,产生 14 行扫描线,再取 80 个字符, 再产生 14 行扫描线, 这样一直工作下去。事实上,大多数视频控制器显示每个字符的每行扫描线时,都取一次字符以便在控制器中不需要缓冲。每个字符的 9 列宽 14 行高的位模保存在视频控制器的视频ROM中(也可以使用RAM,以支持用户字体)。ROM按 12 位编址,8 位来自字符代码,4位指定扫描线。ROM中每个字节的 8 位控制 8 个像素,字符间的第 9 个像素总是为空。因此屏幕上的每行文本需 14×80 次存储器访问,也需访问相同次数的字符发生器。
对于存储映像显示器,键盘是与显示器分开的,它可能通过一个串行口或并行口和计算机相连。 对于每一个键动作,产生CPU中断,键盘中断程序通过读I/O口取得键入的字符。 在IBM-PC中,键盘包括一个内嵌的微处理器,通过特殊的串行口和主板上的一个控制芯片通信。任何时刻击键或释放键, 都产生一个中断,而且键盘仅仅提供键码,而不是ASCII码。 当击A键时,键码(30)被存放于I/O寄存器。输入字符是大写、 小写、CTRL-A、ALT-A、-ALT-A,还是其它的组合,则由驱动程序确定。因为驱动程序知道哪些键被按下还没有释放, 因此它有足够的信息完成这项工作。虽然键盘接口把全部工作交给了软件,但这提供了很大的灵活性。
(2) RS-232终端 图 6.5 RS-232终端与计算机通信
(3) X终端 图 6.6 X-Window系统中的客户和服务器
6.1.5 I/O系统的硬件组织 1. I/O控制方式 (1) 循环I/O测试方式 思想:用软件测试设备的状态,以决定是否进行下一I/O操作 。 特点:CPU效率低。 (2) 程序中断I/O方式 思想:I/O完成(正常结束或异常终止)时以中断向CPU汇报,新的I/O执行时,CPU改作它用。 特点:外设、CPU并行操作。
(3) DMA方式 特点: ① 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块; ② 所传送的数据是从设备直接送入内存的,或者相反; ③ 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。可见,DMA方式较之中断驱动方式,又是成百倍地减少了CPU对I/O的干预,进一步提高了CPU与I/O设备的并行操作程度。
为了实现在主机与控制器之间成块数据的直接交换, 必须在DMA控制器中设置如下四类寄存器: (1) 命令/状态寄存器CR。用于接收从CPU发来的I/O命令或有关控制信息, 或设备的状态。 (2) 内存地址寄存器MAR。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。 (3) 数据寄存器DR。用于暂存从设备到内存,或从内存到设备的数据。 (4) 数据计数器DC。 存放本次CPU要读或写的字(节)数。
采用DMA方式的数据传输处理过程如下: ① 当进程要求设备输入数据时,CPU把准备存放输入数据的内存始址及要传输的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器;另外,还要把控制/状态寄存器中的中断允许位和启动位置1,从而启动设备,开始数据输入。 ② 发出数据输入要求的进程进入阻塞状态, 进程调度程序调度其它进程占有CPU。 ③ 输入设备不断地挪用CPU工作周期, 将数据从内部缓冲区源源不断地送入内存,直至所要求的字节数全部传送完毕。 ④ DMA控制器在传输完成时通过中断请求线发出中断信号, CPU接到中断信号后转中断处理程序进行相应处理。 ⑤ 中断处理结束后, CPU返回被中断的进程或去运行重新被调度的进程。
(4) 通道方式 通道: 专门用于执行I/O的处理机。 I/O通道方式是DMA方式的发展,它可进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。同时,又可实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。例如,当CPU要完成一组相关的读(或写)操作及有关控制时,只需向I/O通道发送一条I/O指令,以给出其所要执行的通道程序的首址和要访问的I/O设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的I/O任务。 特点:通道与通道并行; 通道与CPU并行。
2. 设备控制器 现有大多数的设备控制器由以下三部分组成: (1) 设备控制器与CPU的接口。该接口用于实现设备控制器与CPU之间的通信。在该接口中有三类信号线:数据线、地址线、 控制线。 数据线通常与两类寄存器相连接: ① 数据寄存器。设备控制器中可以有一个或多个数据寄存器, 用于存放从设备送来的数据(输入)或从CPU送来的数据(输出)。 ② 控制/状态寄存器。在控制器中同样可以有一个或多个控制/状态寄存器,用于存放从CPU送来的控制信息或由设备产生的状态信息。
(2) 设备控制器与设备的接口。在一个设备控制器上, 可以连接一台或多台设备。相应地,在控制器中就有一个或多个设备接口, 一个接口连接一台设备, 在每个接口中都有数据、 控制和状态三种类型的信号。 • ① 数据信号。 • ② 控制信号。 • ③ 状态信号。
(3) I/O逻辑。 图 6.8 设备控制器的组成
作业 P200 1
6.2 采用通道模型的I/O系统 6.2.1 通道类型 1. 字节多路通道 (Byte Multiplexor Channel) 思想:完成一个字节数据的传送立即转去为另一设备传送一个字节。 特点:用于慢速设备。
2. 选择通道(Block Selector Channel) 思想:为一设备传送完一组数据,释放通道后,即刻转去为另一设备传送一组数据。 特点:用于快速设备。磁带、磁鼓、磁盘等。 主动释放通道后,其它设备方可使用。 通道利用率低。 3. 数组多路通道(Block Multiplexor Channel) 思想:先为一台设备执行一条通道命令,然后自动转换,为另一设备执行一条通道命令。 实质:对通道程序采用多道程序设计技术的硬件实现。
6.2.2 通道、控制器、设备的连接方式 1. 单通路方式 思想:从设备到控制器,从控制器到通道的路径是惟一的。 缺点:通道忙闲不均时难以协调,易产生“瓶颈”现象。 2.多通路方式 从设备到控制器、从控制器到通道的路径不惟一。 特点:通道忙闲可协调,可靠性高。
6.2.3 通道命令和通道程序 1. 通道命令及其格式 通常,计算机系统的I/O处理机具有如下三类基本通道操作: (1) 数据传送类, 如读、 写、 反读、 断定(检验设备状态); (2) 设备控制类, 如控制换页、 磁带反绕等; (3) 转移类, 即通道程序内部的控制转移。 例如, 某系统中通道命令的格式如下: 0 7 8 31 32 47 48 63
每条通道命令由四个字段组成: (1) 操作码(0~7): 表示通道要执行的命令; (2) 数据主存始址: 表示本命令要访问的主存数据区的起始地址; (3) 特征位(32~47, 只使用了 32~36 位, 其余未用): 37~39 位必须置 0,否则认为通道命令错。
特征位进一步规定了本通道命令的意义, 其各特征如下: 数据链特征(32 位):当该位为“1”时, 在执行本命令后, 使计数值为 0 并取下一条CCW,下一条CCW(它规定了新的数据主存始址、 特征和计数)继续执行原来的操作。 命令链特征(33 位):该位为“1”时, 当前命令正常结束后, 顺序执行下一条CCW。 在通道程序中,除最后一条CCW外, 每条CCW应指定 32 位为“1”, 或 33 位为“1”。最后一条CCW的所有特征位为“0”时, 表示通道在完成当前命令后自动停止。 禁发长度错特征(34 位):表示对不正确的数据长度不发出错信号。一般地说,如果通道命令给出的字节数与I/O设备所用的字节数不一致,就发出错信号。如果该位置为“1”,则禁止发出出错信号。
跳读特征(35 位): 表示禁止数据传送到内存。 当该位为“1”时,从I/O设备上读出的数据不写入内存,这样就可以跳过一些数据。 程序控制中断特征(36 位):如果该位为“1”, 只要取出CCW并开始操作,则通道就向CPU发中断信号。 (4) 字节计数(48~63 位):规定了数据区的字节数。数据主存始址和字节计数这两个字段主要用于数据传送类命令。
2. 通道地址字和通道状态字 在通道进行输入/输出操作期间,要访问两个固定内存单元:通道地址字(CAW)和通道状态字(CSW)。 通道地址字的格式如下: 0 3 4 7 8 31
通道状态字的格式如下: 0 3 4 7 8 31 32 39 40 47 48 63 其中: 钥——通道访问主存时所用的保护钥, 它由CAW的前4位送来; 下一条CCW地址——通道命令计数,每当一条CCW执行完毕,该地址自动加“8”,指向下一条CCW; 设备状态——记录设备状态的字节; 通道状态——记录通道状态的字节; 剩余计数——上一条CCW执行结束后, 剩余数据的字节数。
图 6.10 设备状态字节和通道状态字节 (a) 设备状态字节; (b) 通道状态字节
6.2.4 CPU和通道间的通讯 1. 输入/输出指令 例如, 某系统中输入输出类指令主要有: SIO, TIO, HIO, TCH。 所有I/O指令都具有如下格式: 由(B1)+D1形成的地址指出通道号和设备号的存放单元,该单元的内容为:
SIO(START I/O):用于启动指定通道和设备开始工作,SIO指令发出后,根据通道和设备状态建立结果特征,即条件码。 CPU根据执行结果建立的条件码得知此次启动是否成功,再确定下一步的动作。 TIO(TEST I/O):用以检查I/O操作是否完成,建立相应的条件码。 HIO(HALT I/O):强行停止通道和I/O设备正在执行的操作。 TCH(TEST CHANNEL):测试通道,根据对通道测试的结果建立相应的条件码。
2. CPU和通道间的通讯 (1)通讯方式 ①CPU向通道发出命令,通道工作。 ②通道以中断方式向CPU汇报,等候CPU处理。 (2)CPU启动通道完成I/O 过程 ①组织好程序并将其首址送入通道地址寄存器。 ②CPU执行“启动I/O指令”,启动成功,便逐条解释指令,完成I/O工作。 ③通道完成I/O 操作后,以中断方式通过通道状态字向CPU汇报,CPU分析后决定后续的操作。
6.3 I/O系统的软件组织 6.3.1 I/O软件设计的目标 I/O软件设计的第一个目标是设备无关性。其含义就是使程序员写出的软件无需任何修改便能读出软盘、硬盘以及CD-ROM等不同设备上的文件, 而与具体设备无关。 例如,用户可以简单地输入如下命令: sort<input>output 就能够从各种设备上获得输入,包括软盘、硬盘或键盘,同时将输出送到各种不同的设备上,例如,软盘、硬盘甚至是屏幕。 不同设备之间的差异由操作系统去处理,操作系统会调用不同的设备驱动程序来真正地将输入数据写到输出设备上。
I/O软件设计的第二个目标是错误处理。 • I/O软件设计的第三个目标是同步/异步传输。 • I/O软件设计的第四个目标是必须能处理独占设备和共享设备的I/O操作。 • 为实现以上四个目标, I/O系统应组织成以下四个层次: • (1) 中断处理程序; • (2) 设备驱动程序; • (3) 与设备无关的I/O软件; • (4) 用户空间的I/O软件。
6.3.2 中断处理程序 中断处理程序位于I/O系统的最低层。当进程需要进行I/O操作时,操作系统应将该进程挂起,即进入阻塞,直至I/O操作结束并发生中断。 当中断发生时,中断处理程序执行相应的操作,以解除相应进程的阻塞状态。
6.3.3 设备驱动程序 设备驱动程序包括了所有与设备有关的代码。每一个设备驱动程序只处理一种设备或者一类密切相关的设备。 设备驱动程序的功能是从与设备无关的软件中接收抽象的请求,并执行该请求。例如,读磁盘上的第n块。如果请求到来时,驱动程序空闲,则它立即执行该请求; 但如果它正在处理另一请求, 则它将该请求挂在一个等待队列中。
执行一条I/O请求的第一步,是将该请求转换成更具体的形式。例如,对磁盘驱动程序,它包括:计算所请求的块n的物理地址,检查驱动电机是否在转,检测存取臂是否定位在正确的柱面。 总之, 它必须确定需要哪些控制器命令以及命令的执行次序。一旦决定应向控制器发送什么命令,驱动程序就向控制器中的设备寄存器写入这些命令。 某些控制器一次只能处理一条命令, 另一些则可以接收一串命令并自动进行处理。
6.3.4 与设备无关的I/O软件 • 现以块设备为例, 与设备无关的I/O软件的主要功能包括: • 设备命名。 • (2) 设备保护。 • (3) 与设备无关的块大小。 • (4) 数据缓冲。 • (5) 数据块的分配。 • (6) 对独占设备的分配与释放。 • (7) 错误处理。
6.3.5 用户空间的I/O软件 尽管大部分I/O软件属于操作系统,但是也有一小部分是与用户程序链接在一起的库例程,甚至是在核心外运行的完整程序。系统调用,包括I/O系统调用,通常是库例程调用。在如下C语句: count=write(fd, buffer, nbyte); 中,所调用的库函数write( )将与用户程序链接在一起, 并包含在运行时的二进制代码中。这一类库例程显然也是I/O系统的一部分。标准I/O库包含相当多涉及I/O的库例程,它们作为用户程序的一部分运行。