1.01k likes | 1.24k Views
第 9 章 输入输出组织. ● 输入输出组织是用来控制外设与内存或 CPU 之间进行数据交换的机构;是计算机系统中重要的软、硬件结合的子系统。. ● 通常把 I/O 设备及其接口线路、控制部件、通道或 I/O 处理器以及 I/O 软件统称为输入输出系统,其要解决的问题是对各种形式的信息进行输入和输出的控制。. ● 重点介绍 I/O 接口的功能和结构、 I/O 设备的编址和寻址、以及在主机和外设间进行数据传送的各种输入输出控制方式等内容。. 9.1 I/O 接口.
E N D
第9章 输入输出组织 ● 输入输出组织是用来控制外设与内存或CPU之间进行数据交换的机构;是计算机系统中重要的软、硬件结合的子系统。 ● 通常把I/O设备及其接口线路、控制部件、通道或I/O处理器以及I/O软件统称为输入输出系统,其要解决的问题是对各种形式的信息进行输入和输出的控制。 ● 重点介绍I/O接口的功能和结构、I/O设备的编址和寻址、以及在主机和外设间进行数据传送的各种输入输出控制方式等内容。
9.1 I/O接口 ■ 完成各个外设和主机之间的同步与协调、工作速度的匹配和数据格式转换的逻辑部件称为I/O接口(I/O Interface)。 ■ 从功能上来说,PC中的各种I/O控制器或设备控制器(包括适配器或适配卡)都是I/O接口;在大型机中的I/O模块就是担负大量复杂的外设控制任务的通道或I/O处理器。
9.1.1 I/O接口的功能 ◆ I/O接口是连接外设和主机的一个“桥梁” I/O接口的外设侧、主机侧各有一个接口。主机侧的接口称为内部接口,外设侧的接口称为外部接口, 内部接口通过系统总线和内存、CPU相连,而外部接口则通过各种接口电缆(如,串行电缆、并行电缆、网线或SCSI电缆等)将其连到外设上。 ◆ I/O接口的功能 ① 数据缓冲:主存和CPU寄存器的存取速度非常快,而外设速度则较低,所以在I/O接口中引入数据缓冲寄存器,以达到主机和外设工作速度的匹配。
② 错误或状态检测:提供状态寄存器,以保存各种状态信息供CPU查用。 接口和外设发生的出错情况有两类:一类是设备电路故障或异常情况;另一类是数据传输错,这种错误是通过在每个字符上采用一个奇偶校验位来检测的。 ③ 控制和定时:提供控制和定时逻辑,以接受从系统总线来的控制和定时信号。以协调内部资源与外设间动作的先后关系,控制数据通信过程。 ④ 数据格式转换:提供数据格式转换部件(如:进行串-并转换的移位寄存器),使通过外部接口得到的数据转换为内部接口需要的格式,或在相反的方向进行数据格式转换。 ⑤与主机和设备通信:上述功能都必须通过I/O接口与主机或与设备之间的通信来完成。
◆ I/O接口与主机侧进行通信 对主机通过系统总线送来的地址信息进行译码,以确定是否选中本设备; 接受系统总线送来的控制信息,以确定数据传送的方向等; 将接口中数据缓冲寄存器或状态寄存器的信息送到系统总线,或接收系统总线送来的数据或命令信息,将其送到接口中的数据缓冲寄存器或控制寄存器。 ◆ I/O接口与设备进行通信: 将控制寄存器中的命令译码,输出到外部接口的控制线上; 发送数据缓冲寄存器的数据到外部接口的数据线上; 接受外设的状态或数据信息,送到接口中的状态寄存器或数据缓冲寄存器中。
◆ 数据在外设和主机之间进行传送的过程(图9.1) 图9.1 数据在外设和主机间的传送过程
9.1.2 I/O接口的结构 ◆ 图9.2 I/O接口的通用结构 图9.2
9.1.3 I/O接口的分类 (1) 按数据传送方式分,有并行接口和串行接口两类。 主机侧的内部接口,数据在接口和主机之间总是通过系统总线按字节或字或多字进行并行传输; 外设侧的外部接口,数据在接口和外设之间有串行和并行两种传送方式。 并行接口在设备和接口之间同时传送一个字节或字的所有位(如Intel 8255),用于连接快速设备; 串行接口则一位一位地传送(如Intel 8251),主要用于连接显示终端等慢速设备。对于串行接口,接口内部必须有串-并转换部件。
(2) 按功能选择的灵活性来分,有可编程接口和不可编程接口两类。 可编程接口能用程序来改变或选择接口的功能和操作方式(如:Intel 8255、Intel 8251)。 不可编程接口不能用程序来改变其功能,但可通过硬连线路逻辑来实现不同的功能(如:Intel 8212)。 (3) 按通用性来分,有通用接口和专用接口。 通用接口可供多种外设使用,如Intel 8255、Intel 8212; 专用接口是为某类外设或某种用途专门设计的,如Intel 8279可编程键盘/显示器接口、Intel 8275可编程CRT控制器接口。
(4) 按数据传送的控制方式来分,有程控式接口、中断式接口和DMA式接口。 程控式接口用于连接速度较慢的I/O设备,如:显示终端、键盘、打印机等。 计算机一般都采用程序中断方式实现主机和外设之间的数据交换,计算机中都配有中断式接口,中断控制器Intel 8259A。 DMA式接口用于连接如磁盘、磁带等高速设备。(8237A) (5) 按设备的连接方式来分,有点对点接口和多点接口。 点对点接口只和一个外设相连,如打印机、键盘、调制解调器等设备。 愈来愈重要的是多点方式,主要用于支持大量的外部存储设备和多媒体设备(如:CD-ROM、视频和音频)。 这种多点接口的典型例子有:SCSI接口和P1394接口。SCSI接口是一种并行I/O总线,P1394接口是一种串行/O总线。
9.2 I/O设备的寻址 ■ I/O设备寻址是解决外设与主机通信的一个必要环节;让CPU能方便地找到要进行信息交换的设备。 9.2.1 操作系统在I/O中的作用 ◆ 操作系统使最终用户或用户程序只需通过一些简单的命令或系统调用就能使用各种I/O设备,而无需了解各种I/O设备的具体工作细节。 ◆ 操作系统把I/O软件组织成从高到低的四个层次,层次越低越接近设备,而越远离用户程序。 用户层I/O软件 与设备无关的操作系统I/O软件 设备驱动程序 I/O中断处理程序
◆ 四个层次的相应说明 通常把提出I/O请求的用户程序看成是用户层I/O软件。 操作系统中与设备无关的I/O软件的基本功能是执行适用于所有设备的常用I/O功能,向用户层软件提供一个统一的调用接口。 设备驱动程序是与设备相关的I/O软件部分。每个设备驱动程序只处理一种设备或一类紧密相关的设备。 中断处理程序用来对“外设完成任务”的事件进行处理。以提高效率。
◆ 操作系统必须保证一个用户程序只能访问到该用户有权限的I/O设备部分;必须提供以下几种信息通信: (1) 操作系统必须能向I/O设备给出命令,这些命令不仅包含象读、写等操作,而且包括对设备本身的一些操作,如:磁盘查找、定位等。 (2) 当I/O设备已经完成了一个操作或遇到了一个错误,设备必须能够通知操作系统,以便作适当处理。 (3) 数据必须在存储器或CPU寄存器和I/O设备之间传输。 在进行指令系统的设计中,必须考虑提供某种能对I/O进行访问的指令。
9.2.2 I/O端口的编址 ◆ 系统如何在I/O的指令中标识要访问的I/O接口中的某个寄存器的呢?这就是I/O端口的编址问题。I/O端口实际上就是I/O接口中的各种寄存器; ◆ 给各个可访问的寄存器进行编址的两种方式 (1) 独立编址方式:对所有的I/O端口单独进行编号,使它们成为一个独立的I/O地址空间。 需要用专门的输入输出指令来访问I/O端口。输入输出指令中地址码部分给出I/O端口号。 (2) 统一编址方式:与主存地址空间统一编址,即:将主存地址空间分出一部分地址给I/O端口进行编号。 无需设置专门的输入输出指令,只要用一般的访存指令就可以存取I/O端口。
◆ 两种编址方式比较 寻址速度快;专用I/O指令,使得程序清晰,便于理解和检查。 程序设计灵活性差些;控制逻辑较复杂和处理器引脚数增加。此外,使用独立的地址空间还需要专门的硬件保护机制。 图9.3 独立编址方案
无需另外专门的保护机制;有关主存的寻址方式都可用于I/O端口的寻址。外设或I/O寄存器数目几乎不受限制。无需另外专门的保护机制;有关主存的寻址方式都可用于I/O端口的寻址。外设或I/O寄存器数目几乎不受限制。 主存空间减少;址线都需参与地址译码,使译码电路变复杂,并需花很长时间。 图9.4 统一编址方式
◆ 数据传送的方式 输入输出设备可分为字设备和块设备两种。 一般块设备的数据直接和主存进行交换, CPU中的寄存器通常只和字设备进行数据交换。 ◆ 从传送的数据来源或目的地来看,I/O指令分为两类: ① 寄存器I/O指令 在寄存器和I/O端口之间传送一个单数据项(如:字节、字或双字)。 ② 成组I/O指令 在存储器和I/O端口之间传送一串数据项(如:字节串、字串或双字串)。 ◆ Intel 80x86处理器的部分外设端口地址分配(表9. 1)
表9.1 部分外设控制器的I/O地址分配表 输入/出设备 I/O地址 占用地址数 DMA控制器1 000-01FH 32 中断控制器1 020-03FH 32 定时器/计数器 040-05FH 32 键盘控制器 060-06FH 32 实时时钟, NMI屏蔽寄存器 070-07FH 16 DMA页面寄存器 080-09FH 32 中断控制器2 0A0-0BFH 32 DMA控制器2 0C0-0DFH 32 硬盘控制器2 170-177H 8 硬盘控制器1 1F0-1F8H 9
表9.1续 输入/出设备 I/O地址 占用地址数 游戏I/O口 200-207H 8 并行打印机口2 278-27FH 8 串行口4 2E8-2EFH 8 串行口2 2F8-2FFH 8 软盘控制器2 370-377H 8 并行打印机口1 378-37FH 8 单色显示器/打印适配器 3B0-3BFH 16 彩色/图形监视器适配器 3D0-3DFH 16 串行口3 3E8-3EFH 8 软盘控制器1 3F0-3F7H 8 串行口1 3F8-3FFH 8
9.3 I/O数据传送控制方式9.3.1 I/O控制方式类型 ◆ 通常把I/O数据传送控制方式分为以下四种 1. 程序直接控制方式 ▲ 通过程序来控制主机和外设的数据交换。在程序中安排相应的I/O指令,直接向I/O接口传送控制命令,从I/O接口取得外设和接口的状态,根据状态来控制外设和主机的信息交换。 2. 程序中断控制方式 ▲ 程序中断控制方式的基本思想是,当CPU需要进行输入输出时,先执行相应的I/O指令,将启动命令发送给相应的I/O接口和外设,然后CPU继续执行其他程序。
3. 直接存储器存取方式 ▲ 直接存储器存取(Direct Memory Access)方式简称为DMA方式,主要用于高速设备(如:磁盘、磁带等)和主机的数据传送,这类高速设备采用成批数据交换方式,且单位数据之间的时间间隔较短。 ▲ 用专门的硬件(DMA控制器)来控制总线进行数据交换。 4. 通道和I/O处理器方式 ▲ 对于大型计算机系统,为了获得CPU和外设之间更高的并行性,也为了让种类繁多、物理特性各异的外设能以标准的接口连接到系统中,通常采用自成独立体系的通道结构或I/O处理器。 ▲ 在进行主存和外设之间的信息传送时,CPU执行自己的程序,两者完全并行。
9.3.2 程序直接控制方式 ◆ 直接通过程序来控制主机和外设的数据交换;通常有两种类型的程序直接控制数据传送方式。 (1) 无条件传送方式,也称同步传送方式。 用于对一些简单外设(如开关、继电器、7段显示器或机械式传感器等)进行的数据传送。 在规定的时间用相应的I/O指令对接口中的寄存器进行信息的输入或输出。
(2)条件传送方式,也称异步传送方式。 对于一些较复杂的I/O接口,往往有多个控制、状态和数据寄存器,对设备的控制必须在一定的状态条件下才能进行。 通过在专门的查询程序中安排相应的I/O指令,由这些指令直接从I/O接口中取得外设和接口的状态,如:“就绪(Ready)”、“忙(Busy)”、“完成(Done)”等,根据这些状态来控制外设和主机的信息交换。 这是一种通过程序查询接口中的状态来控制数据传送的方式,也被称为程序查询方式。 ▲ 程序查询方式的特点 程序查询方式简单、易控制、外围接口控制逻辑少; CPU与外设完全串行工作,所以效率低、速度慢; 由于外设的速度比处理器慢得多,当外设进行操作的时候,CPU在等待外设完成,此时CPU会浪费许多处理器时间。
9.4 程序中断方式9.4.1 中断的概念 ◆ 中断控制I/O方式的基本思想 当CPU需要进行一个I/O操作时,就启动外设工作,并挂起正在执行的程序,从等待执行的队列中选择一个其他的进程执行。 当外设完成操作,便向CPU发中断请求。CPU响应请求后,就中止现行程序的执行,转入“中断服务程序”,在“中断服务程序”中完成数据传送任务,并启动外设进行下一个操作。 “中断服务程序”执行完后,返回原被中止的程序断点处继续执行。此时,外设和CPU又开始并行工作。
◆ 中断I/O方式,处理器时间被有效利用,充分发挥CPU的高速处理能力,从而提高了系统的吞吐能力。 ◆ 这种工作方式实现了外设与CPU 的并行(图9.8) 图9.8 CPU与外设并行工作
◆ 在程序运行过程中,外设完成任务或出现某种异常事件时(除数为0、运算结果溢出、非法操作码、奇偶校验错等),必须中止现行程序的执行,转去处理发生的异常事件或外设完成事件。待处理完毕后,再回到原来被中止的程序继续执行。这个过程称为中断。 ◆ 现代计算机系统都配有完善的中断系统 中断系统是计算机实现中断功能的软、硬件的总称。 CPU中有相应的中断响应和处理的机构,在外设接口中有相应的中断请求和控制逻辑,操作系统中有相应的中断服务程序。 这些中断硬连线路和中断服务程序有机结合,共同完成和控制中断过程。
9.4.2 中断的分类 1. 内中断 ▲ 由处理器内部的异常事件引起的中断。根据其发生的原因又分为硬件性故障中断和程序性例外。 硬故障中断:由硬联线路出现异常引起。如电源掉电、存储器线路错等。 程序性中断:也称软中断。由CPU执行某个指令而引起的发生在处理器内部的异常事件,也称为例外(Exception)事件。 程序性中断又可分为失效(Fault)、自陷(Trap)和终止(Abort)三类。
2. 外中断 由外设完成任务或出现特殊情况引起。如:任务完成、打印机缺纸、磁盘检验错、采样计时到、键盘输入等。 3. 80X86处理器的中断系统分类 ▲ 外部中断(硬中断):通过处理器的中断请求线INTR(可屏蔽中断)和NMI(不可屏蔽中断)来实现请求的中断。 ▲ 内部中断(软中断):也称为异常或例外。由处理器内部产生而不通过中断请求线请求,为不可屏蔽中断。 ▲ 内部中断又可细分为以下两类: ① 指令引起的异常:CPU执行预先设置的指令或指令执行结果使某个标志位置“1”而引起的。 CPU执行INT n指令时,停止正常的执行过程,自动调出一个断点处理中断服务程序,进行一些特殊的处理。
②处理器检测到的异常:CPU执行指令时产生的异常;如:当CPU执行除法指令DIV或IDIV时,若发现除数为0或商产生溢出,则立即产生一个除法错中断(类型号为0)。 ②处理器检测到的异常:CPU执行指令时产生的异常;如:当CPU执行除法指令DIV或IDIV时,若发现除数为0或商产生溢出,则立即产生一个除法错中断(类型号为0)。 系统中有一个陷阱测试线路,不断对程序状态字PSW(Program Status Word)的TEF(Trap Enable Flag)字段进行测试,当测试到对应的条件满足时,就自动调出一个特定的中断处理程序来执行。 图9.9 程序状态字寄存器
◆ 由外设引起的I/O中断和异常中断在本质上是一样的;但是两者相比,有两个重要的不同点: (1) I/O中断相对于指令的执行是异步的,I/O中断不和任何指令相关联,也不阻止指令的完成,中断控制逻辑仅需要在开始一个新指令之前检测是否有I/O中断请求。 (2) 异常是由处理器自身发现的,不必通过外部的某个信号通知CPU,也不用识别哪种异常。 对于I/O中断,处理器除了被通知一个“I/O中断已经发生”外,还必须进一步调查哪些设备发生了中断,它们的设备标识号是什么,还要进一步根据其不同的紧急程度选择一个先响应。
9.4.3 中断系统的基本职能和结构 ◆ 中断系统的基本功能 (1) 及时记录各种中断请求信号;一般是用一个中断请求寄存器来保存。 (2) 自动响应中断请求。CPU必须能够在发生中断事件后,自动响应并处理。在一条指令执行完、下条指令执行前去检查有无中断请求发生。 (3) 自动判优。在计算机系统中,中断源有很多,在有多个中断请求同时产生时,能够判断出哪个中断的优先级高,选择优先级高的中断先被响应。
(4) 保护被中断程序的断点和现场。原程序被中止处的指令地址和当时的程序状态和各寄存器的内容必须保存,以便能正确回到原处继续执行。 (5) 中断屏蔽。现代计算机大多采用中断嵌套技术。中断系统中要有中断屏蔽机制,使得每个中断可以设置它允许被哪些中断打断,不允许被哪些中断打断,通过在中断系统中设置中断屏蔽字来实现。
◆ 中断系统的基本结构(图9.10) 图9.10 中断系统的基本结构
◆ 中断嵌套 当有新的优先级更高的中断请求发生,那么CPU应立即中止正在执行的中断服务程序,转去处理新的中断。这种情况为多重中断,也称中断嵌套。 图9.11 中断嵌套过程
9.4.4 中断过程 ◆ 中断过程包括两个阶段:中断响应阶段和中断处理阶段。 中断响应阶段由硬件实现; 而中断处理阶段则由CPU执行中断服务程序来完成,所以中断处理是由软件实现的。 1. 中断响应 ▲ 中断响应是指主机发现中断请求,中止现行程序的执行,到调出中断服务程序这一过程。 (1) 保存好程序的关键性信息 程序使用的资源有两类,一类是工作寄存器,存放着程序执行的现行值,把这类信息称为现场信息; 另一类是表示程序进程状态的程序状态字PSW和标志进程运行过程的程序计数器PC,通常把这类信息称作断点信息。
在程序被中止时,必须正确地保存这些关键性信息,以便在返回程序后,处理器能正确地沿着断点继续执行。在程序被中止时,必须正确地保存这些关键性信息,以便在返回程序后,处理器能正确地沿着断点继续执行。 对于现场信息,可以在中断服务程序中把它保存到一个特定的存储区(如堆栈)中。 对于断点信息,应在中断响应时自动保存起来。 (2) 正确识别中断源 在中断响应过程中必须能够识别出哪些中断有请求,并且在有多个中断请求出现的情况下,选择优先级最高的中断被响应。来执行中断服务程序。 (3) 提高中断响应的速度 中断响应时间应是中断系统设计时需要考虑的一个重要指标;它反映了整个计算机系统的灵敏度。
▲ 中断响应的条件: ① CPU处于开中断状态(IF=1); ② 至少要有一个未被屏蔽的中断请求; ③ 在一条指令执行完。 ▲中断响应过程(图9.12) ① 关中断:将中断允许标志置为禁止状态,这时将屏蔽掉所有新中断请求; ② 保护断点:PC和PSW送入堆栈; ③ 识别中断源:通过某种方式获得响应优先级最高的中断请求所对应的中断服务程序的首地址和初始的PSW。对于外部中断,要进行一次总线操作,得到相应的中断向量。
▲ 中断源的识别方法 ① 软件轮询方法 当CPU检测到中断请求时,通过中断响应,自动地转移到一个特定的中断服务程序。 在这个中断服务程序中,所有的中断请求被依次一一查询(图9.13)。 图9.13 中断查询程序的结构
软件轮询中断识别方式的硬件结构简单,只要一根中断请求线,中断优先级由中断查询程序的查询顺序决定,所以灵活。软件轮询中断识别方式的硬件结构简单,只要一根中断请求线,中断优先级由中断查询程序的查询顺序决定,所以灵活。 它需花费很多时间查询,中断响应慢,无法实时响应,降低了CPU的利用率(图9.14 )。 图9.14 程序查询中断的结构
②硬件判优方法(向量中断) 硬件判优方式,也称为向量中断方式。是另一种中断处理技术,它根据菊花链查询线路或并行判优线路等取得最高优先权中断的向量地址; 根据中断向量地址找到对应的中断服务程序的首地址PC和初始PSW,从而调出中断服务程序执行。 通常把中断服务程序的首址PC和初始PSW称为中断向量IV(Interrupt Vector),所有中断向量存放在一个中断向量表中(图9.15); 指向中断向量的指针(地址)称为向量地址VA(Vector Address)。 把中断向量表中与相应中断对应的表项号称为中断类型号。
▲8086/8088的中断向量表。位于0000H~03FFH,共256组,每组占四个字节,记录对应中断服务程序的首地址 CS:IP。向量地址由中断类型号乘4得到。 图9.16 8086/8088的中断向量表
▲ 硬件判优法有两种。一种为菊花链查询法,还有一种为独立请求法。 ① 链式中断查询的结构(图9.17 ) 图9.17
当CPU检测到中断请求后,启动中断回答信号IACK进行中断响应,通过分布在每个设备中的菊花链线路,查询到优先级最高的中断请求(同时封锁对下一级的中断响应);当CPU检测到中断请求后,启动中断回答信号IACK进行中断响应,通过分布在每个设备中的菊花链线路,查询到优先级最高的中断请求(同时封锁对下一级的中断响应); 由该请求信号启动相应的中断向量发生器,产生对应的中断向量,通过数据总线传送给CPU。 链式中断查询的优点是简单,只需一根中断请求线。而且比软件查询方式快。 中断源优先级固定、所以不灵活,并且无法为每个中断设置屏蔽字,所以不支持多重中断。 对电路故障敏感。此外,通过链式查询,中断响应有一定的延迟。
② 多线独立请求中断的结构(图9.18) 图9.18 多线独立请求中断的结构
这种方式的中断系统中有一个集中控制的中断控制器,在中断控制器中有相应的中断向量优先权编码器;这种方式的中断系统中有一个集中控制的中断控制器,在中断控制器中有相应的中断向量优先权编码器; 各个中断请求信号送到该电路,和对应的中断屏蔽位进行“与”操作后,送到一个判优电路中; 判优电路的输出被送到一个编码器,该编码器的输出就是中断向量。 采用多线请求的集中判优方式,中断响应速度快。如果是可编程的中断控制器,则优先级可灵活设置。 ▲ 一个典型的可编程的中断控制器Intel 8259A (图9.19)