1、第九章 I/O 控制一、概述* I/O 控制器亦称 I/O 接口电路(Interface)1、各个发展阶段(1)人工控制* 最早的计算机系统中是此种形式* 打孔纸带输入输出数据,相应的控制开关控制操作(没有现在意义的输入输出设备)(2)程序查询方式* CPU 通过外设的状态标志对其进行监控和处理* 处理流程如下:* CPU 和 I/O 外设之间的关系图如下:* CPU 存在踏步查询现象(效率低) 、实现相对简单(3)程序中断方式* 中断方式属于软件方式,但需要相应的硬件(中断系统)支持* 处理流程如下:中断请求在时间上是随机的启动 I/O查询状态?Y(准备好)N(未就绪)传数查询 I/O启动
2、I/OI/O 准备就绪传数启动 I/OI/O 准备CPUI/O启动 I/O运行其它代码I/O 就绪中断请求继续其它代码处理程序(传数)* CPU 和 I/O 外设之间的关系图如下:特点:数据传递依旧由 CPU 完成CPU 和 I/O 外设在某段时间上是并行处理(效率更高)(4)存储器直接访问方式(Direct Memory Access ,DMA)假设计算机模型如下,描述一次 I/O 输入数据的过程* 注意区别传统的 I/O 输入模式需要 ab 两步,即先把数送至 CPU 内,再由 CPU 把数送至主存DMA 模式仅需 c 一步,即不需要 CPU 的干预,I/O 一次把数送至主存内* CPU
3、和 I/O(包括外设和接口两部分)之间的关系图如下:特点:传数是由 I/O 接口电路控制完成的, CPU 只移交总线在传数过程中 CPU 不干预,所以之前 CPU 不需要保护现场是一种硬件控制的传数过程,速度快,异常处理能力差(一旦启动,无法停)传数过程开始之前需 CPU 预处理一次,传数过程结束之后需 CPU 后处理一次(5)通道方式(Channel)* 通道即特殊功能的协处理器* 通道可以执行用通道指令编写的 I/O 程序(非纯的硬件方式)CPUI/O其它程序启动 I/OI/O 准备INT传数启动 I/OI/O 准备其它继续总线M.MCPU接口I/OcbaCPUI/O接口 传数I/O 准备
4、其它程序启动 I/OI/O 准备DMA 请求建立通路(很短时间完成)其它继续初始化* CPU 仅需干预一次(启动通道)2、其它概念(1)I/O 编址方式* 统一编址主存地址和 I/O 地址编在一个地址空间(所以主存空间相对要小)无相应的 I/O 指令(所以指令系统相对简单)* 独立编址用单独的 I/O 指令访问外部设备(指令系统复杂)主存地址和 I/O 地址是两个独立的地址空间(主存空间相对要大)(2)I/O 的互连方式* 直接互连两个部件之间用一组专用线路互连* 总线互连多个部件共用一组传输线(各部件只能分时使用)(3)联络方式* 立即响应使用时,不用查对方状态(默认对方时刻就绪) ,直接操
5、作* 异步方式(即应答模式)设置一组联络信号(一应一答) ,先发请求,只有对方回应后方可操作,否则等待* 同步方式双方以同步时钟为基准进行相应的操作二、I/O 接口电路* 主要作用:数据或信息的缓冲(还有其它作用,这里略)* 基本逻辑组成* 端口:可按地址访问的寄存器或相应部件三、中断系统1、中断的概念(1)中断的描述某程序处理过程中,遇到异常或相应事件,暂停现行程序,转去执行相应的处理程序,处理程序结束后返回原现行程序的过程,称为一次中断。* 中断(Interrupt)* 异常(Exception):控制流中的突然改变 /不同的称谓数据端口控制端口状态端口接口译码接口电路命令状态数据DBCB
6、ABCPUI/O设备(2)中断的分类* 强迫中断:有请求一般必须相应,请求具有随机性,特殊时可屏蔽自愿中断:由自陷(Trap)指令完成,请求不具有随机性(请求时间即自陷指令执行的时间)* 内中断:由内部事件引起的中断(例如溢出、奇偶校验错、地址失效)外中断:由外部事件引起的中断(例如外部 I/O 请求、键中断)2、中断系统需考虑的问题(1)如何请求用触发器进行状态标识,设置请求触发器(1 表示有请求、0 表示无请求)* 逻辑关系如下:* 由三个 D 触发器和一个与门组成,其中 MASK 为屏蔽位,外部向请求标识置位* 查询脉冲在指令周期末时刻发出,则逻辑器件只在末时刻触发发出请求(2)优先级排
7、队* 多个中断源发出请求,只能相应一个,靠排队来决定优先级* 软件查询(早期采用)靠查询次序来决定优先级,在流程前面的先查询,后面的后查询,一旦判断哪级中断有请求,直接跳转(后面的各级中断不再查询)特点:实现简单,易于实现,因为是纯软件方式,速度相对要慢MASKQDQD请求触发器查询脉冲屏蔽位请求标识判 1#?NY判 2#?NY判 N#?NY跳转至 1#处理程序跳转至 2#处理程序跳转至 N#处理程序* 硬件排队器四级排队器的逻辑图如下:通常左边优先级最高,依次向右递减,最右边最低。内部是屏蔽原理,即当左边的请求有效,自动把右边的全部屏蔽掉,所以输出只有左边的一个有效。例如,四级请求状态为“1
8、111” ,即四个中断源同时请求,则输出为“1000” ,最左边的 1 有效屏蔽掉其右边的所有 1 有效。此种方式现在普遍采用,即硬件原理不复杂,速度较快。(3)CPU 的响应条件* 时间条件:指令周期末时刻(方便断点保护)* CPU 状态:必须 CPU 允许响应(设置允许触发器标识 CPU 状态)允许触发器为 1,称为开中断,即此时 CPU 可以响应中断请求允许触发器为 0,称为关中断,即此时 CPU 不可以响应中断请求(4)现场保护* CPU 现场程序执行过程中,一些计算的中间结果均存在 CPU 的一些寄存器中,这些寄存器里的暂存值称为 CPU 现场。* 隐指令程序的断点(当前 PC 值,
9、返回时需要)由隐指令自动压栈保护(系统自动完成)* 现场保护中断服务程序把 CPU 所有涉及到的寄存器压栈保护,中断程序返回前再出栈恢复(5)形成服务程序入口地址* 中断向量为了方便查找,系统中所有的中断不是按名查找,而是按编号查找。即系统中为所有的中断统一编号(统一的系统中,号码是固定的) ,该编号称中断向量号。* 中断向量表所有中断的入口地址索引表,示意如下:排队器INT1 INT2 INT3 INT40#中断的入口地址1#中断的入口地址2#中断的入口地址N#中断的入口地址中断向量表0:1:2:N:注意:所谓的中断向量号实质上就是向量表的偏移地址,经过一次间址操作取出的就是中断的入口地址。
10、(6)现场恢复和中断返回* 中断返回中断服务处理完成后,返回原断点处,通常由 IRET 指令完成注意:相应时断点保护是由系统隐指令完成,程序中不涉及,但返回时必须由 IRET指令完成。IRET 指令的本质即为出栈操作指令。* 现场恢复现场保护的反向操作(7)多重中断* 多重中断即中断的嵌套(中断处理时再次被新的中断打断)* 实现条件新来中断的级别要比正在执行中断的级别高通常级别可分为相应级别和处理级别两种,相应级别有硬件排队器来决定,处理级别即处理的先后次序,这里指处理级别,通常由屏蔽技术实现* 屏蔽技术设置屏蔽触发器来标识状态,为 1 表示屏蔽该级中断,为 0 表示开放例如:1 #2#3#4
11、#四级中断的屏蔽触发器的值依次为“1011” ,则表示当前状态,2 #中断被屏蔽,1 #中断、3 #中断和 4#中断可以打断当前的处理程序。3、中断系统的逻辑组成为了描述简单,这里只设置了四级中断,依次为 1#中断、2 #中断、3 #中断和 4#中断,则请求触发器设置 4 个(和中断源个数对应) ,允许触发器 1 个(和 CPU 个数对应) ,屏蔽触发器 4 个(和中断源个数对应) ,一个四级排队器以及其它若干门电路,逻辑组成图如下:QQDQQDQQDQQD排队器向量地址形成部件1EINT 偏移地址(或编号)INTRINTMINT查询脉冲标识上图中 INTR 为请求触发器, INTM 为屏蔽触
12、发器,EINT 为允许触发器(仅 1 位) ,当外部事件有中断请求时只触发相应标识,时间上无任何限制,INT 为中断系统向 CPU 发出的请求信号。* INT 和允许位 EINT 的逻辑如下:上图中 EINT 为允许位(为 1 时表示开中断) ,只要排队器中有请求(或关系) ,并且开中断则 INT 有效,即向 CPU 发中断请求,同时 INT 触发允许位 EINT 复位(即清 0) ,表示响应中断后立即关中断。注:多个触发器构成的逻辑单元可以称为寄存器,上图中虚线部分的内容即可称为相应的寄存器,例如四个 INTR 构成的逻辑单元可称为中断请求寄存器,其余类似。在 PC机中用一片 8259 管理
13、中断,逻辑关系类似。* 中断指令级处理流程大致可分为:中断请求、中断响应、中断处理(或称为中断服务)和中断返回,流程描述见下图:在上图中看不到中断请求,即外部事件在请求中断时间上是任意的,不以指令周期为基准。(1)中断请求排队器QS RINTQS REINT1中断响应中断处理中断返回YN 条指令判有中断?下一条指令N* I/O 设备如有请求设置相应的标识位有效(任意时刻)* 系统在每条指令周期末时刻查询(查询脉冲只在指令周期末时刻发出)(2)中断响应* 相应是由指令集中的隐指令完成,不需用户干预* 相应的条件:CPU 开中断、指令周期末时刻* 具体操作包括:系统自动关中断、请求位清 0、断点入
14、栈、置相应的屏蔽字、形成向量地址(3)中断处理* 由中断服务程序来完成* 服务程序完成的功能包括:现场保护、重新开中断、相应的程序执行(4)中断返回* 服务程序最后的 IRET 指令来完成(有的程序根据需要 IRET 也可不放最后)* 程序返回前现场恢复和关中断,然后断点出栈,返回原断点处例:假设有四级中断,依次为 1#中断、2 #中断、3 #中断和 4#中断,它们的响应优先级为1#2 #3 #4 #,若想把处理次序改为 1#3#4#2#,则相应的屏蔽字为何值,当四级中断同时请求,且之前无任何中断,描述其处理过程。屏蔽字如下表:屏蔽字 1# 2# 3# 4#1# 1 1 1 12# 0 1 0
15、 03# 0 1 1 14# 0 1 0 1主程序 0 0 0 0处理过程描述如下:主程序 1# 2# 3# 4#同时请求注意:中断的特点,哪里断的回到哪里四、DMA 技术* 直接存储器访问(Direct Memory Access )1、DMA 控制器(Direct Memory Access Controller ,DMAC)的组成整个 DMA 传输过程是由 DMA 控制器来控制完成的,有时也把 DMA 控制器称为DMA 接口,其逻辑组成如下:(1)内部各寄存器的作用* AR(主存地址寄存器):操作时所对应的主存地址,采用加 1 计数* WC(字计数器):记录传输的个数,通常采用加 1 计
16、数* DAR(设备地址寄存器):操作时指明相应的外部设备* BR(数据缓冲寄存器):拆装字缓冲区(2)DMA 控制逻辑* 两组应答信号DREQ(DMA 传送请求)和 DACK(DMA 传送允许)HRQ(总线请求)和 HLDA(总线允许)* 两组应答信号的操作次序由外部设备先发 DREQ,表示有 DMA 操作请求,然后控制逻辑向 CPU 发 HRQ 请求总线,即要建立 DMA 传送通路,CPU 接到请求后会立即回应 HLDA(一般外部请求优先级较高) ,让出总线,控制逻辑接到回应后,即表示接收总线使用权(通路已经建好) ,然后发 DACK 给外部设备,外设接到信号后就可以进行 DMA 传送。(3
17、)中断机构当所有数据均传送完成后(计数为 0 时触发) ,移交总线使用权,然后 CPU 启动DMA 后处理中断程序,对系统进行检测操作。2、DMAC 的功能* 向 CPU 申请 DMA 请求(申请总线,建立 DMA 通路)* 总线控制权移交* 管理总线(发出相应的地址及控制命令)* 传数控制(整个传数过程 CPU 不干预,全部由 DMAC 控制完成)* 发 DMA 结束信号(此步骤由中断系统完成)ARWCDARBRDMA控制逻辑HRQHLDA中断机构INT设备DREQDACK DMAC+1+1M.MCPU3、DMA 传送方式(1)CPU 暂停方式响应 DMA 后,CPU 暂停操作。此种方式控制
18、简单,但效率低。(2)周期挪用(或周期窃取)一种面向字符的操作,即一次操作仅传送一个字符,间隔时间较长。操作的设备通常为中速或慢速设备。发 DMA 请求后,CPU 的三种可能:* CPU 未访存 此时 CPU 未使用总线,直接建立通路,开始 DMA 传送* CPU 要访存 此时 CPU 要使用总线,比较 CPU 和 I/O 设备的访存优先级,一般I/O 设备的优先级高,所以 CPU 等待,让出总线建立通路,开始 DMA 传送* CPU 正访存此时 CPU 正在使用总线,等待此次访存周期结束,然后 CPU 让出总线,建立通路,开始 DMA 传送 /最长等待一个存储周期注意:响应 DMA 请求的时
19、间节点是存储周期(3)成块 DMA 操作一种面向字块的操作,一旦建立通路,需要传完一组数据之后才释放总线,此时 CPU可完成除访存外的其它操作(即无法使用总线和主存) ,如 CPU 需访存,则只能等待。4、工作过程(1)预处理CPU 执行一个例行程序,设置 DMA 传输方向、DMAC 内的相关参数、启动外设并返回原程序(2)数据传送以周期挪用为例* 输入数据(I/O 设备主存)步骤如下:a、I/O 设备组装字BRb、I/O 设备发 DREQDMA 控制逻辑c、DMA 控制逻辑发 HRQCPUd、CPU 回应 HLDADMA 控制逻辑e、DMA 控制逻辑把 AR 值送至总线(即发出主存地址)DM
20、A 控制逻辑发 DACK I/O 设备(准备下一个字)f、DMA 控制逻辑把 BR 值送至总线(即要传输的数据) ,并发出写命令(数据写入主存)g、DMA 控制逻辑把 WC 计数值加 1h、判断 WC0?是否成立,如不成立返回 a 步骤,否则中断请求结束* 输出数据(主存 I/O 设备)步骤如下:a、BR 拆装字 I/O 设备b、I/O 设备发 DREQDMA 控制逻辑 /数已取走,申请下一个c、DMA 控制逻辑发 HRQCPUd、CPU 回应 HLDADMA 控制逻辑e、DMA 控制逻辑把 AR 值送至总线(即发出主存地址) ,并发出读命令(从主存读出数放置总线上)f、DMA 控制逻辑从总线
21、上把数送至 BR 内(即要传输的数据) ,DMA 控制逻辑发DACK I/O 设备(准备接收下一个数)g、DMA 控制逻辑把 WC 计数值加 1h、判断 WC0?是否成立,如不成立返回 a 步骤,否则中断请求结束(3)后处理中断触发一个服务程序,完成主存校验、数据校验(测试数据传输过程中是否有错,DMAC 只控制传数,不进行校验) 、判断是否继续(如继续,重启预处理开始下一个 DMA过程)注意:预处理和后处理均为 CPU 完成,即一次 DMA 过程需 CPU 干预两次,只是传数过程 CPU 不干预。5、DMA 与中断的比较(1)在传数控制上,中断模式是软件方式(由处理程序完成,速度较慢) ,DMA 模式是硬件方式(由 DMAC 控制完成,速度较快)(2)系统在响应请求的时间上,中断是在指令周期末时刻,DMA 是在存储周期末时刻(3)在处理过程中,中断具有处理异常的能力(即再次中断转至异常处理程序) ,DMA不具有处理异常能力(整个 DMA 传数过程没法打断,CPU 只能等待)(4)在处理之前,中断需要现场保护,DMA 仅需要移交总线使用权,不需现场保护(因为 CPU 不参与)(5)在优先级上,DMA 的优先级比中断要高(如 DMA 和一个中断同时请求,通常只能响应 DMA)