写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。
计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili
《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第8章 CPU的结构和功能 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第9章 控制单元的功能 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第10章 控制单元的设计 - 学习笔记_友人帐_的博客-CSDN博客
计算机组成原理(第三版)唐朔飞-课后习题(完整版)_计算机组成原理唐朔飞第三版答案_蓝净云的博客-CSDN博客
计算机组成原理实验一 运算器 预习报告_基本运算器实验_旅僧的博客-CSDN博客
计算机组成原理实验二 存储系统 预习报告_旅僧的博客-CSDN博客
计算机组成原理实验三 系统总线和具有基本输入输出功能的总线接口 预习报告_旅僧的博客-CSDN博客
计算机组成原理实验四 微程序控制器 实验报告_旅僧的博客-CSDN博客
接口模块:接口中设有数据通路和控制通路。
总线连接:计算机系统采用总线结构。
并行工作:
通道是用来负责管理I/O设备以及实现主存与I/O设备之间交换信息的部件,是从属于CPU的一个专用处理器。有专用的通道指令,能独立执行用通道指令所编写的输入输出程序,可实现外设的统一管理和DMA操作,大大提高CPU效率,可以管理更多的硬件,用在大中型计算机系统中。
当通道执行完通道程序后,就发出中断请求表示I/O结束,CPU响应中断请求,执行相应的中断处理程序实现与通道之间的数据传输。依赖通道管理的I/O设备在与主机交换信息时,CPU不直接参与管理。
基本独立于主机工作,可以完成I/O控制、码制变换、格式处理、数据块检错纠错等操作。
由I/O软件和I/O硬件两部分组成。
主要任务为:将用户编制的程序或数据输入主机;将运算结果输出给用户;实现输入输出系统与主机工作的协调。
(1)I/O指令
是机器指令的一类,可以和其他机器指令的字长相等。
一般格式:
(2)通道指令
是通道自身的专用指令,位数一般较长。
作用:
通道指令和I/O指令的区别:
通道指令是通道自身的指令,用来执行I/O操作,例如读、写、磁盘找道。指令可以存放在主存的任何地方,由通道从主存中取出并执行;而I/O指令是CPU指令系统的一部分,是CPU用来控制输入输出操作的指令,由CPU译码后执行。
具有通道指令的计算机,一旦CPU执行了启动I/O设备的指令,就由通道来代替CPU对I/O设备的管理。
在带有接口的I/O系统中,一般包括接口模块及I/O设备两大部分。
层次性的I/O系统:
1.一个主机可以连接多个通道
2.一个通道可以管理多个设备控制器
3.一个设备控制器又可以控制多台设备
将I/O设备码看作地址码。
(1)统一编址方式
与主存空间统一编址,将主存空间分出一部分地址给I/O端口进行编号。该方法是将I/O端口映射到某主存区域,故也称为“存储器映射方式”。无需设置专门I/O指令,只要用一般访存指令就可存取I/O端口。
(2)独立编址方式
不和主存单元一起编号,而是单独编号,使成为一个独立的I/O地址空间。因需专门I/O指令,故也称为“特殊I/O指令方式”。
由I/O指令的设备码字段指出设备号,通过接口电路中的设备选择电路来选中设备。
(1)并行传送
n n n位信息同时在CPU与I/O设备间传输。
(2)串行传送
同一瞬间只传送一位信息,不同时刻连续逐位传送一串信息。
I/O设备与主机之间必须互相了解彼此所处状态,是否可以传送、传送是否已经结束等。
(1)立即响应
对一些速度很慢的I/O设备(指示灯的亮灭、开关的通断),与CPU发生联系时,通常都已使其处于某种等待状态。只要CPU指令一到,便立即响应。
(2)异步工作采用应答信号联络
I/O设备与主机工作速度不匹配时使用。是一应一答的联络方式。
在交换信息前,I/O设备与CPU各自完成自身任务,一旦出现联络信号,彼此才准备交换信息。
(串行传送中,I/O设备与CPU双方设定一组特殊标记,用9.09ms时的低电平表示"起始",用2x9.09ms的高电平表示"终止")
(3)同步工作采用同步时标联络
要求I/O设备与CPU的工作速度完全同步,互相之间需要配有专用电路,用以产生同步时标来控制同步工作。
(1)辐射式
每台设备都有一套控制线路和一组信号线,不便于增删设备。
(2)总线式
通过一组总线(包括地址线、数据线、控制线等),将所有的I/O设备与主机连接。
由CPU通过程序不断查询I/O设备是否已经做好准备,从而控制I/O设备与主机交换信息。(要求I/O接口内设置一个能反映是否准备就绪的状态标记,用于CPU的检测)
只要一启动I/O设备,CPU便不断查询I/O设备的准备情况,从而终止了原程序的执行。CPU在反复查询过程中,犹如就地“踏步”。另一方面,I/О设备准备就绪后,CPU要一个字一个字地从I/O设备取出,经CPU送至主存,此刻CPU也不能执行原程序。
这种方式使CPU和I/О设备处于串行工作状态,CPU的工作效率不高。
CPU在启动I/O设备后,不查询设备是否已准备就绪,继续执行自身程序,只是当I/O设备准备就绪并向CPU发出中断请求后才予以响应。
CPU启动I/O设备后仍继续执行原程序,在第K条指令执行结束后,CPU响应了I/O设备的请求,中断了现行程序,转至中断服务程序,待处理完后又返回到原程序断点处,继续从第K+1条指令往下执行。
实现了CPU和I/O并行工作。
在DMA方式中,主存与I/O设备之间有一条数据通路。
若出现DMA和CPU同时访问主存,CPU总是将总线占有权让给DMA,通常把DMA的这种占有称为窃取或挪用。窃取的时间一般为一个存取周期,故又把DMA占用的存取周期窃取周期或挪用周期。而且,在DMA窃取存取周期时,CPU尚能继续做内部操作(如乘法运算)。
优点:
三种方式的比较
外部设备大致分三类
人机交互设备
键盘、鼠标、打印机、显示器
计算机信息存储设备
磁盘、光盘、磁带
机-机通信设备
调制解调器等
接口可以看作两个系统或两个部件之间的交接部分,它既可以是两种硬设备之间的连接电路,也可以是两个软件之间的共同逻辑边界。I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。不同的I/О设备都有其相应的设备控制器,而它们往往都是通过I/O接口与主机取得联系的。
每一台I/O设备都是通过接口挂载到系统总线上的。I/O总线包括数据线、设备选择线、命令线、状态线。
功能 | 组成 | 描述 |
---|---|---|
选址功能 | 设备选择电路 | 该设备码将送至所有设备的接口,当设备选择线上的设备码与本设备码相符时,应发出设备选中信号SEL,这种功能可通过接口内的设备选择电路来实现。 |
传送命令的功能 | 命令寄存器、命令译码器 | 命令寄存器用来存放I/O指令中的命令码,它受设备选中信号控制。命令线和所有接口电路的命令寄存器相连,只有被选中设备的SEL信号有效,命令寄存器才可接受命令线上的命令码。 |
传送数据的功能 | 数据缓冲寄存器 | 接口中通常设有数据缓冲寄存器DBR,用来暂存I/O设备与主机准备交换的信息,与I/O总线中的数据线相连。 |
反映设备状态的功能 | 设备状态标记 | 所有的状态标志触发器都与I/O总线中的状态线相连。用完成触发器D和工作触发器B来标志设备所处的状态(暂停、准备就绪、正处于准备);中断请求触发器INTR,当其为“1”时,表示该I/O设备向CPU发出中断请求;屏蔽触发器MASK,它与中断请求触发器配合使用,完成设备的屏蔽功能。 |
程序查询方式的核心问题在于每时每刻需不断查询I/О设备是否准备就绪。
对于单个I/O设备查询:
对于多个I/O设备查询:
CPU需按各个I/O设备在系统中的优先级别进行逐级查询。
对于每个设备而言,程序查询方式的整体流程如下:
程序查询方式的程序流程:
①由将CPU寄存器原内容保护起来。
②先设置I/О设备与主机交换数据的计数值(交换多少数据)。
③设置欲传送数据在主存缓冲区的首地址。
④CPU启动I/O设备。
⑤将I/O接口中的设备状态标志取至CPU并测试I/O设备是否准备就绪。如果未准备就绪,则等待,直到准备就绪为止。当准备就绪时,接着可实现传送。对输入而言,准备就绪意味着接口电路中的数据缓冲寄存器已装满欲传送的数据,称为输入缓冲满,CPU即可取走数据;对输出而言,准备就绪意味着接口电路中的数据已被设备取走,故称为输出缓冲空,这样CPU可再次将数据送到接口,设备可再次从接口接收数据。
⑥CPU执行I/О指令,从I/O接口的数据缓冲寄存器中读出或写入一个数据,同时将接口中的状态标志复位。
⑦修改主存地址。
⑧修改计数值,若原设置计数值为原码,则依次减1;若原设置计数值为负数的补码,则依次加1(两种不同的计数方式)。
⑨判断计数值。若计数值不为0,表示一批数据尚未传送完,重新启动外设继续传送;若计数值为0,则表示一批数据已传送完毕。
⑩结束I/O传送,恢复寄存器,继续执行现行程序。
工作流程:
①当CPU通过I/О指令启动输入设备时,指令的设备码字段通过地址线送至设备选择电路。
②若该接口的设备码与地址线上的代码吻合,其输出SEL有效。
③I/O指令的启动命令经过与非门将工作触发器B置1,将完成触发器D置0。
④由B触发器启动设备工作。
⑤输入设备将数据送至数据缓冲寄存器。
⑥由设备发设备工作结束信号,将D置1,B置0,表示外设准备就绪。
⑦D触发器以“准备就绪”状态通知CPU,表示“数据缓冲满”。
⑧CPU执行输入指令,将数据缓冲寄存器中的数据送至CPU的通用寄存器,再存入主存相关单元。
计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到现行程序的间断处,继续执行原程序。
在I/O设备与主机交换信息时,其工作速度较低,与CPU无法匹配。因此,CPU启动设备后,往往需要等待一段时间才能实现主机与I/О设备之间的信息交换。
如果在设备准备的同时,CPU不做无谓的等待,而继续执行现行程序,只有当I/O设备准备就绪向CPU提出请求后,再暂时中断CPU现行程序转入I/O服务程序,这便产生了I/О中断。
CPU总是在每条指令执行阶段的最后时刻,查询所有的设备是否有中断请求。
把能向CPU提出中断请求的各种因素(包括I/O设备、突发性事件等)统称为中断源。
当多个中断源向CPU提出中断请求时, CPU必须坚持一个原则,即在任何瞬间只能接受一个中断源的请求。所以,当多个中断源同时提出请求时,CPU必须对各请求源的请求进行排队,只接受级别最高的中断源的请求,不允许级别低的中断源中断正在运行的中断服务程序。
每台外部设备都必须配置一个中断请求触发器INTR,
在I/О接口中需设置一个屏蔽触发器MASK,
可见,仅当设备准备就绪(D=1),且该设备未被屏蔽(MASK=0)时, CPU的中断查询信号可将中断请求触发器置“1”(INTR=1)。
就I/О中断而言,速度越高的I/O设备,优先级越高,因为若CPU不及时响应高速I/O的请求,其信息可能会立即丢失。
设备优先权的处理可以采用硬件方法,也可采用软件方法。硬件排队器的实现方法很多,既可在CPU内部设置一个统一的排队器,对所有中断源进行排队,也可在接口电路内分别设置各个设备的排队器。
链式排队器:
每个接口有一个反相器和一个与非门。该电路中级别最高的中断源是1号,最低是4号。
一旦某个中断源提出中断请求时,就迫使比其优先级低的中断源 I N T P i ′ INTP_i' INTPi′变为低电平,封锁其中断请求。不论是哪个中断源(一个或多个)提出中断请求,排队器输出端 I N T P i INTP_i INTPi,只有一个高电平。
CPU一旦响应了I/O中断,就要暂停现行程序,转去执行该设备的中断服务程序。不同的设备有不同的中断服务程序,每个服务程序都有一个入口地址,CPU必须找到这个入口地址。入口地址的寻找也可用硬件或软件的方法来完成。
硬件向量法:
由硬件电路产生向量地址是,通过向量地址来寻找设备的中断服务程序入口地址,
中断向量地址形成部件的输入是来自排队器的输出 I N T P i INTP_i INTPi,它的输出是中断向量(二进制代码表示),其位数与计算机可以处理中断源的个数有关,即一个中断源对应一个向量地址。可见,该部件实质上是一个编码器。在I/O接口中的编码器又称为设备编码器。
如下图所示:根据排队器输出的01串,中断向量地址形成部件会产生一个中断向量,表示内存中的某一个地址,该地址存放对应服务程序的jmp指令。到该地址找到jmp指令就可以跳转到服务程序。
8086/8088的中断向量表
条件:
CPU内部有一个允许中断触发器EINT,取值为1时可以响应中断请求。
可以用开中断
指令将EINT置1;关中断
指令将EINT置0,或硬件自动复位
。
时间:
CPU在每条指令执行阶段结束前向接口发中断查询信号,以获取I/O的中断请求。
以外部设备向主机输入为例:
①CPU在运行程序中执行到输入命令,就会将对应设备的设备号通过地址线送入设备选择电路,对应设备的SEL信号置为有效。由CPU发启动I/О设备命令,在接口(SEL有效的)中进行译码,将接口中的B置1,D置O(设备处于准备阶段)。
②接口启动输入设备开始工作。
③输入设备将数据送入接口中的数据缓冲寄存器DBR。
④输入设备向接口发出“设备工作结束”信号,将D置1,B置0,标志设备准备就绪。
⑤当设备准备就绪(D=1),且本设备未被屏蔽(MASK=0)时,在指令执行阶段的结束时刻,由CPU发出中断查询信号。
⑥设备中断请求触发器INTR被置1,标志设备向CPU提出中断请求。与此同时, INTR送至排队器,进行中断判优。
⑦若CPU允许中断(EINT=1),设备又被排队选中,即进入中断响应阶段,由中断响应信号INTA将排队器输出送至编码器形成向量地址。
⑧向量地址通过数据线送至PC,作为下一条指令的地址。
⑨由于向量地址中存放的是一条无条件转移指令,故这条指令执行结束后,即无条件转至该设备的服务程序入口地址,开始执行中断服务程序,进入中断服务阶段,通过输入指令将数据缓冲寄存器的输入数据送至CPU的通用寄存器,再存入主存相关单元。
⑩中断服务程序的最后一条指令是中断返回指令,当其执行结束时,即中断返回至原程序的断点处。至此,一个完整的程序中断处理过程即告结束。
分为四部分:保护现场、中断服务、恢复现场和中断返回。
是中断服务程序的主体部分,对于不同的中断请求源具有不同的中断服务操作内容。
结尾部分。在退出服务程序前将运行状态恢复到中断时。
中断服务程序的最后一条指令。使其返回到原程序的断点处继续执行。
计算机在处理中断的过程中,有可能出现新的中断请求,
**多重中断:**允许级别更高的中断源中断现行的中断服务程序,这种现象称为中断嵌套。
**单重中断:**不允许中断现行的中断服务程序。
CPU一旦响应了某中断源的中断请求后,便由硬件线路自动关中断,即中断允许触发器EINT被置“O”,以确保该中断服务程序的顺利执行。因此如果不用“开中断”指令将EINT置“1”,则意味着CPU不能再响应其他任何一个中断源的中断请求。
单重中断与多重中断最本质的区别在于“开中断”的设置时间不同。
主程序和服务程序抢占CPU的示意图
DMA方式与程序中断方式的数据通路示意图:
(ACC身为一个CPU中的一个寄存器,作为传输数据的媒介)
DMA方式中,主存和DMA接口之间有一条数据通路,主存和设备交换信息时,不通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场,提高了工作速度。
主存冲突
在DMA方式中,由于DMA接口与CPU共享主存,这就有可能出现两者争用主存的冲突。为了有效地分时使用主存,通常DMA与主存交换数据时采用如下三种方法。
(1)停止CPU访问主存
当外设要求传送一批数据时,由DMA接口向CPU发一个停止信号,要求CPU放弃地址线数据线和有关控制线的使用权。DMA接口获得总线控制权后,开始进行数据传送,在数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交回给CPU。
优点:控制简单,适用于数据传输率很高的I/О设备实现成组数据的传送。
缺点:DMA接口在访问主存时,CPU基本上处于不工作状态或保持原状态。CPU对主存的利用率没得到充分发挥。
弥补措施:在DMA接口中,一般设有一个小容量存储器,使I/О设备首先与小容量存储器交换数据,然后由小容量存储器与主存交换数据,这便可减少DMA传送数据时占用总线的时间,即可减少CPU的暂停工作时间。
(2)周期挪用/窃取
周期:访存周期
每当I/O设备发出DMA请求时,I/O设备便挪用或窃取总线占用权一个或几个主存周期;而DMA不请求时,CPU仍继续访问主存。
I/O设备请求DMA传送时的三种情况:
CPU此时不需要访问主存
例如正在执行乘法指令。此时I/O设备与CPU不发生冲突。
CPU正在访问主存
必须等待存取周期结束,CPU才能将总线占有权让出。
CPU与DMA同时请求访问主存
I/O访存优先于CPU访存,将总线控制权让给DMA(减少丢失数据的风险)
(3)DMA与CPU交替访问
这种方法适合于CPU的工作周期比主存存取周期长的情况。
例如,CPU的工作周期为1.2μs,主存的存取周期小于0.6μs,那么可将一个CPU周期分为 C 1 C_1 C1和 C 2 C_2 C2两个分周期,其中 C 1 C_1 C1专供DMA访存, C 2 C_2 C2专供CPU访存。
这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过 C 1 C_1 C1和 C 2 C_2 C2分别控制的。CPU与DMA接口各自有独立的访存地址寄存器,数据寄存器和读/写信号。
不需要申请建立和归还总线的使用权,硬件复杂。
使用DMA方式传送数据时,数据的传输过程完全由DMA接口电路控制。
(1)主存地址寄存器AR
存放主存中需要交换数据的地址。
数据传送前存放首地址;传送过程中每交换一次数据,将地址寄存器内容加1,直到一批数据传送完毕为止。
(2)字计数器WC
记录传送数据的总字数。
通常以交换字数的补码值预置。传送过程中每传送一个字,字计数器加1,直到计数器为0,表示该批数据传送完毕(若交换字数以原码值预置,则每传送一个字,字计数器减1,直到计数器为0时,表示该批数据传送结束)。
(3)数据缓冲寄存器BR
暂存每次传送的数据。
(4)设备地址寄存器DAR
存放I/O设备的设备码或者表示设备信息存储区的寻址信息。
(5)DMA控制逻辑
负责管理DMA的传送过程,由控制电路、时序电路及命令状态控制寄存器等组成。
每当设备准备好一个数据字(或一个字传送结束),就向DMA接口提出申请DREQ,DMA控制逻辑便向CPU请求DMA服务,发出总线使用权的请求信号HRQ。待收到CPU发出的响应信号HLDA后,DMA控制逻辑便开始负责管理DMA传送的全过程,包括对主存地址寄存器和字计数器的修改、识别总线地址、指定传送类型(输入或输出)以及通知设备已经被授予一个DMA周期(DACK)等。
(6)中断机构
当字计数器溢出(全0)时,表示一批数据交换完毕,由“溢出信号”通过中断机构向CPU提出中断请求,请求CPU作DMA操作的后处理。
注意:这里的中断与I/О中断的技术相同,但中断的目的不同,前面是为了数据的输入或输出,而这里是为了报告一批数据传送结束。它们是I/O系统中不同的中断事件。
(1)预处理
在DMA接口开始工作之前,CPU执行几条输入输出指令,给它预置如下信息:
当I/O设备准备好发送的数据(输入)或上次接收的数据已经处理完毕(输出)时,它便通过DMA接口向CPU提出占用总线的申请。若有多个DMA同时申请,则按轻重缓急由硬件排队判优逻辑决定优先等。待I/О设备得到主存总线的控制权后,数据的传送便由该DMA接口进行管理。
(2)数据传送
以数据输入为例:
①当设备准备好一个字时,发出选通信号,将该字读到DMA的数据缓冲寄存器(BR)中,表示数据缓冲寄存器"满”(如果I/О设备是面向字符的,则一次读入一个字节,组装成一个字)。
②与此同时设备向DMA接口发请求(DREQ)。
③DMA接口向CPU申请总线控制权(HRQ)。
④CPU发回HLDA信号,表示允许将总线控制权交给DMA接口。
⑤将DMA主存地址寄存器AR中的主存地址送地址总线,并命令存储器写。
⑥通知设备已被授予一个DMA周期(DACK),并为交换下一个字做准备。
⑦将DMA数据缓冲寄存器的内容送数据总线。
⑧主存将数据总线上的信息写至地址总线指定的存储单元中。
⑨修改主存地址和字计数值(+1)。
⑩判断数据块是否传送结束,若未结束,则继续传送;若已结束,(字计数器溢出),则向CPU申请程序中断,标志数据块传送结束。
以数据输出为例:
①当DMA数据缓冲寄存器已将输出数据送至I/O设备后,表示数据缓冲寄存器已“空”。
②设备向DMA接口发请求(DREQ)。
③DMA接口向CPU申请总线控制权(HRQ)。
④CPU发回HLDA信号,表示允许将总线控制权交给DMA接口使用。
⑤将DMA主存地址寄存器中的主存地址送地址总线,并命令存储器读。
⑥通知设备已被授予一个DMA周期(DACK),并为交换下一个字做准备。
⑦主存将相应地址单元的内容通过数据总线读入DMA的数据缓冲寄存器中。
⑧将DMA数据缓冲寄存器的内容送到输出设备,若为字符设备,则需将其拆成字符输出。
⑨修改主存地址和字计数值。
⑩判断数据块是否已传送完毕,若未完毕,继续传送;若已传送完毕,则向CPU申请程序中断。
(3)后处理
当DMA的中断请求得到响应后,CPU停止原程序的执行,转去执行中断服务程序,做一些DMA的结束工作。
包括校验送入主存的数据是否正确;决定是否继续用DMA传送其他数据块;若继续传送,则又要对DMA接口进行初始化,若不需要传送,则停止外设;测试在传送过程中是否发生错误,若出错,则转错误诊断及处理错误程序。
(1)具有公共请求线的DMA请求
若干个DMA接口通过一条公用的DMA请求线向CPU申请总线控制权。CPU发出响应信号,用链式查询方式通过DMA接口,首先选中的设备获得总线控制权。
(2)独立的DMA请求
每一个DMA接口各有一对独立的DMA请求线和DMA响应线,它由CPU的优先级判别机构裁决首先响应哪个请求,并在响应线上发出响应信号,被获得响应信号的DMA接口便可控制总线与主存传送数据。
中断方式 | DMA方式 | |
---|---|---|
数据传送 | 靠程序传送 | 靠硬件传送 |
CPU响应时间 | 指令结束时响应 | 任一存取周期结束时响应 |
处理异常事件 | 能 | 不能 |
保护现场 | 需要 | 不需要 |
中断请求的目的 | 传送数据 | 后处理 |
优先级 | 低 | 高 |
物理上可连接多个设备,逻辑上只允许连接一个设备。
即在某一段时间内,DMA接口只能为一个设备服务,关键是在预处理时将所选设备的设备号送人设备地址寄存器。
特别适用于数据传输率很高的设备。
不仅在物理上可以连接多个设备,而且在逻辑上也允许多个设备同时工作,各个设备采用字节交叉的方式通过DMA接口进行数据传送。
(传输时仍是只能一个设备进行传输数据,但是准备阶段可以多设备并行)