基于里昂学长的计算机组成原理课程。
笔记目录
第一章-计算机系统概述
第二章-数据的表示和运算
第三章-存储系统
第四章-指令系统
第五章-中央处理器
第六章-总线
第七章-输入输出系统
第七章 输入/输出系统
7.1 I/O接口
I/O接口
(也称I/O控制器)是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换。
7.1.1 I/O系统
I/O系统
一般由I/O设备
、I/O接口
和I/O控制管理软件
等部分组成。
I/O设备
是指可以与计算机进行数据传输的硬件。
I/O接口
是连接主机和I/O设备的桥梁。
I/O控制管理软件
包括驱动程序、管理程序等。
I/O设备按信息交换的单位可以分为字符设备
和块设备
。
- 字符设备以字符为单位进行数据传输,字符不可寻址,支持中断方式,单次中断传输字符导致效率低下,常见的字符设备有鼠标、打印机等。
- 块设备以数据块为单位进行数据传输,块通常是连续的数据,所以可寻址,并支持随机读写,传输效率高,支持DMA方式,常见的块设备有硬盘、光盘等。
7.1.2 I/O接口的基本结构
I/O接口在主机侧和外设侧各提供了一个接口。
主机侧的接口称为内部接口
,通过系统(I/O)总线和CPU、内存相连,数据传输方式只能是并行传输。
外设侧的接口称为外部接口
,通过USB、串/并行电缆等各种接口电缆与外设相连,数据传输的方式可以是串行或并行方式。
一个I/O接口可以通过多个外部接口连接多个设备。
数据缓冲寄存器:暂存外设与CPU或内存之间传送的数据信息,CPU可以对其中的数据进行读写。
状态寄存器:记录接口和设备的状态信息,CPU只能对各外设的状态进行读取。
控制寄存器:保存CPU对外设的控制信息,CPU只能对各种控制命令进行写入。
地址译码器:用于识别地址总线上的地址是否属于I/O接口。
I/O控制逻辑:
- 将控制寄存器中的命令字译码成控制信号送到外设。
- 在数据缓冲寄存器和外设之间发送或接收数据。
- 将外设状态收集到状态寄存器中。
- 这里的数据信息、状态信息和控制信息都是通过数据线进行传输的。
- 状态寄存器和控制寄存器在传送方向上是相反的;由于它们的使用在时间上是错开的,所以很多时候会将两者放在一起,变成状态/控制寄存器。
- I/O接口中的寄存器地址和控制信号分别通过系统总线的地址线和控制线进行传送。
上述的数据缓存寄存器、状态寄存器、控制寄存器也被称为I/O端口
,I/O端口是指I/O接口中CPU可以直接访问的寄存器,其中数据缓存寄存器被称为数据端口
,控制寄存器被称为控制端口
,状态寄存器被称为状态端口
。
端口和接口是两个不同的概念,端口是指接口电路中可以进行读/写的寄存器。
7.1.3 I/O接口的基本功能
- 数据缓冲
由于CPU寄存器、主存等主机部件的存取速度比外部设备快很多,可以提前将数据存到I/O接口中的数据缓冲区,用以缓和高速系统组件和低速外部设备之间的速度差异。
- 数据格式转换由于主机和外部设备的数据格式不同,I/O接口提供数据格式的相互转换,如串-并转换、并-串转换、数-模转换和模-数转换等。
- 控制和定时
为来自系统总线的控制信号和定时信号提供控制和定时逻辑,对内部资源及外设间动作的先后关系进行协调,并对数据通信过程进行控制。
- 错误或状态检测
提供可以保存各种状态信息的状态寄存器,CPU通过读取这些寄存器来了解接口和外设的出错情况和状态。
- 与主机和设备通信
以上四个功能都必须通过主机与I/O接口之间和I/O接口与外设之间的通信来完成。
7.1.4 I/O端口及其编址
统一编址
统一编址
也称为内存映射编址
(Memory-mapped)、存储器映射方式
,这种方式中外部设备和内存地址统一编址,二者在逻辑上处于同一个地址空间,通过不同的地址区域区分是访问内存还是外部设备。
统一编址不需要设置专用的I/O指令,采用Load/Store访存指令就可以访问外部设备。
优点:
- 访问不需要专门的I/O指令,使CPU对I/O端口访问更加灵活方便,I/O寄存器的数目只受寻址空间的制约,有利于提高系统吞吐率。
- 任何访存指令都可以用于I/O,访存指令的寻址方式和保护机制等特性都可以被共享,不需要再设置专门的保护机制,提高了编程的灵活性。
缺点:
I/O端口占用了部分主存空间的地址,减少了主存可用容量;此外,访问I/O端口时全部地址线都参与地址译码,使译码过程复杂,降低了寻址速度。
独立编址方式
独立编址
又称I/O映射方式
,对主存地址空间和I/O端口地址空间分别进行编址,地址取值范围可以重叠,需要用专门的I/O指令。
若CPU识别出当前指令是I/O指令,就会向I/O总线发送相应的控制信号和地址信息。
若CPU要访问的是内存单元,则不会寻址I/O端口,直接通过主存读写控制线控制数据传输。
Intel x86处理器普遍采用这种编址方式。用MOV指令访问内存,用IN/OUT指令访问外部设备。
优点:
- 由于I/O端口数明显少于主存单元,从而I/O接口只需要少量的地址线,译码更加简单,寻址速度更快。
- 使用专用的I/O指令,和主存指令区分开,使得程序更加清晰,有助于理解和检查。
缺点:
- I/O指令通常只支持简单的传输操作,降低了程序设计的灵活性,CPU必须为存储器和I/O设备提供单独的读写命令,使总线的控制逻辑变得更加复杂。
- 使用独立的地址空间要有专门的硬件保护机制。
7.1.5 I/O接口类型
7.2 I/O方式
7.2.1 程序查询方式
信息交换的控制由CPU执行程序实现。
程序查询方式中,接口先设置一个数据缓冲寄存器和设备状态寄存器。
主机进行I/O操作时,先读取设备的状态,再根据设备状态,决定下一步操作时数据传输还是等待。
工作流程如下:
- CPU执行初始化程序,并预置传送参数,包括地址和计数器参数。
- 向I/O接口发出命令字,启动I/O设备。
- 从外设接口读取其状态信息。
- CPU周期或持续地查询设备信息,直到外设准备就绪。
- 传送一次数据。
- 修改地址和计数器参数。
- 判断传送是否结束,若未结束跳转至第3步,直至计数器为0.
流程4中的查询方式可分为两类:
独占查询
。一旦设备被启动,CPU就一直持续查询接口状态,CPU花费100%时间用于I/O操作,此时外设和CPU完全串行工作。
定时查询
。CPU启动设备会产生一个定时中断,然后切换到程序P2执行。定时时间到后发生中断,CPU执行定时中断服务程序,该程序的主要作用是查询设备状态,如果设备准备好就唤醒P1,中断返回P2后,随后切换至P1传输数据,否则继续定时查询。定时查询可以有效避免轮询等待CPU时间的浪费,但其中断服务还是要占用一定的CPU时间。
优点:设计简单,硬件量少。
缺点:CPU要花费很多时间来查询和等待,且在一段时间内只能和一台外设交换信息,CPU与设备串行工作,效率很低。
7.2.2 程序中断方式
基本思想
- CPU启动某台外设后,继续执行程序,不需要像查询方式那样主动查询外设状态。
- 一旦外设完成数据传输的准备工作,就向CPU发出中断请求。
- 在可以响应中断的条件下,CPU暂停正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机和外设之间的数据传送。
- 传送完成后,CPU返回原来的程序。此时,外设和CPU又开始并行工作。
中断控制器
由于每个外部设备中断源发出中断请求的时间是随机的,而且中断请求需要满足一定条件才能被响应,请求发出到一定时间需要经过一段时间才能被响应,因此需要将不同外设的中断请求暂存在中断请求寄存器
(IRR)中。
IRR的每位对应一个外部设备中断请求,为1时表明对应的外设向CPU发出了中断请求,IRR的内容又称为中断字。中断处理时根据中断字确定中断源。
中断控制器中,除了IRR外,还有中断屏蔽寄存器以及优先排队电路(优先编码器),其中与中断优先级有关。
- 中断优先级
中断优先级包含两层含义:响应优先级
和处理优先级
。
- 响应优先级
当同时有多个中断产生时,就存在响应优先级问题,优先级高的先响应,其在硬件线路上是固定的,不便于变动。
响应优先级指CPU对各设备中断请求进行响应的先后次序。
通常可以根据中断时间的紧要性和迫切性来划分中断响应优先级。一般情况下:
- 不可屏蔽中断>内部异常>可屏蔽中断。
- 内部异常中硬件终止属于最高级,其次是指令异常或自陷等程序故障。
- DMA中断请求优先于IO设备传送的中断请求。
- 在IO传送类中断请求中,高速设备优先于低速设备,输入设备优先于输出设备,实时控制设备优先于普通设备。
因此,如果不考虑到中断屏蔽,多个中断请求可通过优先级排队电路进行排队,输入为多个中断请求信号,输出为有效请求中最高优先级的中断编号和中断请求信号。
- 处理优先级
多重中断:CPU执行中断服务程序中可以去响应更高优先级的中断请求的中断。
如果不考虑中断屏蔽,一般优先级高的中断请求可以中断CPU正在执行的低优先级中断服务程序。
处理优先级
指中断嵌套的实际优先级处理次序,如果不使用中断屏蔽技术,处理优先级一般和响应优先级相同。
如果不想让低优先级的中断被高优先级的中断大端,可以利用中断屏蔽的技术。中断控制器中设置了中断屏蔽寄存器
(IMR)。IMR的每一位对应一个设备,用于对应中断源的屏蔽。
IMR的每一位取反后和IRR中的对应位进行逻辑与操作,为1的对应设备的中断请求就被屏蔽了。经过中断屏蔽处理的中断请求最终送入中断优先级排队电路。IMR的值又被称为中断屏蔽字
。
CPU可以为每个设备分配不同的中断屏蔽字,CPU执行某设备的中断服务程序时,会将该设备的中断屏蔽字载入IMR中,所有中断信号都会与IMR中对应位的非值进行逻辑与,然后送入中断优先级排队电路进行优先级仲裁。被屏蔽的中断请求将无法传送到中断优先级排队电路。
通过配置各设备的中断屏蔽字,可以动态改变处理优先级次序。
但要注意,由于IMR的值只有在执行中断服务程序的时候才会被更新,因此中断屏蔽只对CPU运行中断服务程序时的中断嵌套有用,并不能改变CPU运行主程序的中断响应优先级。
中断允许触发器
(IEF)也称为中断使能位
、中断标志位
,用于开关中断的控制,为1时表示开中断,为0表示关中断,此时不响应外部,可屏蔽中断请求。通常设置在CPU内部,可以通过开、关中断指令或其他指令进行置位和复位操作。
中断响应过程
- 响应条件
CPU响应某个外部设备需要满足:
- 中断源有中断请求。
- CPU允许中断以及开中断(异常和不可屏蔽中断不受此限制)。
- 一条指令执行完毕,且没有更紧迫的任务。
- 响应过程
CPU一旦响应中断就进入中断响应阶段。
- 关中断:临时禁止中断请求,为了保证保存断点和后续保护现场的完整性。
- 保存断点:将PC和PSW的内容压栈保存。(x86保存CS、IP、PSW到内存堆栈,MIPS没有状态寄存器,保存PC到EPC寄存器)
- 中断识别:通过硬件或软件方法查找中断源,清除当前中断请求,将对应中断服务程序入口地址送入程序计数器PC。
完成中断识别后即可正式执行中断服务程序。上述任务可能需要0到3个时钟周期来完成,中断响应过程中CPU不能执行其他任务,因此中断响应的过程可以看做CPU执行中断隐
指令完成的,需要占用CPU时间。这里的中断隐只是一种虚拟的说法,实际上不存在,本质上就是硬件的一系列自动操作。
中断识别
中断识别用于确定中断是哪个中断源发出的,识别后还要获取中断服务程序入口地址。中断识别分为非向量中断
和向量中断
两种。
非向量中断
主要用于共享中断信号的软件查询法,CPU响应中断请求时,直接跳转到固定地址执行中断查询程序,该程序轮询各设备接口是否有中断请求,有则跳转至对应的中断服务程序。从某种角度说,非向量中断只有一个公共的中断服务程序,不同设备的中断服务子程序只是公共中断服务程序的一个分支路径,所以也可以说非向量中断不需要进行中断识别。
向量中断
允许计算机系统通过一个预先定义的向量表(也称中断向量表
)来快速定位和执行中断服务程序。
在向量中断中,每一个设备的中断源都有唯一的中断编号,称为中断号
。CPU可以通过中断号快速查找中断服务程序的入口地址,实现程序的转移。中断号由计算机系统统一分配,通常是固定不变的。
对于不同的中断源,获取他们中断号的方法是不同的。
可屏蔽的外部中断的中断号是中断响应周期内从中断控制器处获取的。
系统调用等自陷指令的中断号是由中断指令直接给出的。
不可屏蔽中断NMI以及异常的中断号是由系统预先设置好的。
获得中断号后,就可以将中断号作为索引到一个中断向量表
中去查找中断程序入口地址。
- 中断向量
通常将中断服务程序的入口地址和程序状态字称为中断向量
。如果不包含程序状态字,那么中断向量就是入口地址。
- 中断向量表
中断向量的集合就是中断向量表,就是中断向量的一维数组,可以利用索引号对其进行索引访问,通常存在主存中,在操作系统引导过程中初始化。
- 向量地址
用于访问中断向量表中一个表项的地址码,也称为中断指针
。
多重中断处理流程
7.2.3 DMA方式
DMA方式中,对数据传送过程进行控制的硬件称为DMA控制器
(DMA接口)。DMA方式在外设和内存之间开辟了一条直接数据通路,信息传送不再经过CPU,降低了CPU在传送数据的开销,称为直接存储器存取方式
。
基本思想
当I/O设备需要进行传输时,流程如下:
- 预处理阶段
由CPU完成一些必要的准备工作,比如初始化DMA控制器中的有关寄存器等,然后CPU继续执行原程序。
- I/O设备准备好一个字后,向DMA控制器发送DMA请求。
- DMAC接受外设发出的DMA请求,并向CPU发送总线请求。(和上一步统称DMA请求)
- CPU响应并发出总线响应信号,DMAC接管总线控制权。
- DMAC确定传送数据的主存起始地址及长度,并自动修改主存地址计数和传送长度计数。
- DMAC规定数据在主存和外设间的传送方向,发出读/写等控制信号,执行数据传送操作,传送一个字。
- 完成一个字的传送后会重复2~6过程,通过多轮传输直到一个数据块传送完毕。
- 传输完毕后,DMAC向CPU发出中断请求,报告DMA操作结束。
- 后处理阶段:CPU收到中断请求后,执行中断服务程序做DMA结束处理,包括检验数据等后处理工作。
DMAC基本构造
- 主存地址计数器
存放要交换数据的主存地址。在传送前,其保存的是传送数据的主存起始地址,每传送一个字,地址寄存器的内容就+1。
- 传送长度计数器
记录传送数据的总长度。在传送前,其记录的事该批数据的总字数,每传送一个字,计数器就-1,计数器为0表示该批数据传输完毕。
- 数据缓冲寄存器
暂存每次传送的数据,通常DMA接口和主存之间的传输单位为字,DMA和设备之间的传送单位为字节或位。
- DMA请求触发器
每当I/O设备准备好数据后,发出一个控制信号,使DMA请求触发器置位。
- “控制/状态”逻辑
用于指定传送方向,修改传送参数,并对DMA请求信号、CPU响应信号进行协调和同步。
- 中断机构
当一批数据传送完毕后触发中断机构,向CPU提出中断请求。
- I/O设备地址计数器
输入/输出设备的数据端口地址。DAR是设备地址寄存器,用于存储I/O设备的通信地址,这样DMA控制器就可以将数据直接传输到这个地址。
DMA方式下,整个数据块的传送过程都不需要CPU参与,CPU只在最初的DMA控制器初始化和最后的DMA结束处理时才介入,因此CPU的I/O开销非常小。
这种方式适合磁盘、显卡、声卡、网卡等高速设备大批量数据的传送,它的硬件开销也比较大。在DMA方式中,中断的作用仅限于故障和正常传送结束时的处理。
DMA的传送方式
在DMA传送过程中,DMA控制器接管系统总线,当DMA结束后,将恢复CPU的一切权利并开始执行其操作。
DMA控制器必须具有控制系统总线的能力。
I/O设备和CPU同时访存时可能发生冲突。DMA和CPU通常采用3种方式使用主存。
- 停止CPU访存
当I/O设备有DMA请求时,由DMA接口向CPU发送一个停止信号,使CPU放弃总线控制权,停止访问主存,直到DMA传送一块数据结束。数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交回给CPU。
优点:控制简单,适用于数据传输速率很高的I/O设备实现成组数据的传送。
缺点:DMA在访问主存时,CPU基本上处于不工作状态。
- 周期挪用(主要考查)
由于I/O访存的优先级高于CPU访存,因此由I/O设备挪用一个存取周期,传送完一个数据字后立即释放总线。它是一种单字传送方式,当设备有DMA请求时,可能会遇到3种情况。
- CPU不在访存,访存不冲突。
- CPU正在访存,必须等待存取周期结束后,CPU再将总线占有权让出。
- 两者同时访存,出现访存冲突,此时CPU要暂时放弃总线占有权。
优点:既实现了I/O传送,又较好地发挥了主存与CPU的效率。
缺点:每挪用一个主存周期,DMA接口都要申请、建立和归还总线控制权。
- DMA和CPU交替访存
将CPU的工作周期分成两个时间片,一个给CPU访存,一个给DMA访存,这样每个CPU周期内,CPU和DMA都可以轮流访存。适用于CPU工作周期比主存存取周期长的情况。
这种方式不需要申请、建立和归还总线使用权。
优点:不需要总线控制权的申请、建立和归还过程,具有很高的传送效率。
缺点:相应的硬件逻辑变得更复杂。
DMA方式和中断方式的区别
- 中断方式是程序的切换,需要保护和恢复现场;DMA方式不中断现行程序,无需保护现场,除了预处理和后处理,其他时候不占用CPU资源。
- 对中断请求的响应只能发生在每条指令结束时(执行周期后);DMA请求的响应可以发生在任意一个机器周期结束时(取指、间址、执行周期后均可)。
- 中断传送过程需要CPU的干预;DMA传送过程不需要CPU的干预,因此传输速率非常高,适合于告诉外设的成组数据传送。
- DMA请求的优先级高于中断请求。
- 中断方式具有处理异常事件的能力。DMA方式局限于大批数据的传送。
- 中断方式靠程序传送,DMA方式靠硬件传送。