计算机组成原理8——输入输出系统2

本系列文章是学习了网课《哈尔滨工业大学–计算机组成原理》之后,用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点,如有不同意见,欢迎在评论区讨论。

IO设备和主机交换信息的控制方式

IO设备与主机交换信息时,有五种控制方式:程序查询方式,程序中断方式,直接存储器存取方式,IO通道方式,IO处理机方式。

程序查询方式

CPU不断查询IO设备是否做好准备,从而控制IO设备与主机交换信息。

比如CPU想从某一个IO设备中读取数据到内存:
1、CPU启动IO设备。
2、查询IO设备是否准备好。
3、没有准备好,再次查询;准备好进行下一步。
4、IO设备准备好了,CPU从IO中读取数据写到内存。

这种方式CPU的效率并不高,只要启动了IO设备,就需要CPU一直查询直到IO设备准备好。
在这里插入图片描述

接口基本组成

计算机组成原理7——输入输出系统1中,介绍了接口的一般基础组成:
1、设备选择电路,选中特定IO设备
2、命令译码和命令寄存器,翻译命令、保存命令
3、设备状态标记,反映IO设备工作状态的功能
4、数据缓冲寄存器,暂存数据用于后续数据传输
在这里插入图片描述

根据一般性的IO接口组成,可以推导出程序查询方式的接口电路的基本组成:
1、设备选择电路
2、命令译码和存储
3、设备状态寄存器(D 、B)
4、数据缓冲寄存器
在这里插入图片描述

程序查询方式的程序流程

1、这种方式传送数据时要占用CPU中的寄存器,先将寄存器中的原内容保存起来
2、常常传送的是一批数据,先设置IO设备与主机交换数据的计数值
3、设置欲传送数据在主存缓冲区的首地址
4、启动IO设备
5、获取IO接口中的状态标志以判断是否准备就绪。未就绪就等待,就绪则进行数据传送(此时如果是IO输入至主存,则IO数据缓冲寄存器已经被填满;如果是主存输出至IO,IO数据缓冲已空)
6、CPU执行IO指令、读出数据、写入数据,同时将IO接口中的状态标志恢复
7、修改主存地址
8、修改计数值、
9、判断计数值
10、结束IO传送,继续执行现行程序

在这里插入图片描述

程序查询方式的接口执行流程

下面以输入设备为例,接口的工作过程如下:

1、CPU通过IO指令启动输入设备,指令的设备码字段通过地址线送至设备选择电路。
2、如果接口的设备码和地址线上的代码吻合,输出SEL有效。
3、IO指令的启动命令将工作触发器B置为1,将完成触发器置为0。
4、由触发器B启动设备工作。
5、输入设备将数据送至数据缓冲寄存器。
6、由设备发设备工作结束信号,将D置为1,B置为0,表示外设准备就绪。
7、触发器D以“准备就绪”状态通知CPU,表示数据缓冲满。
8、CPU执行输入指令,将数据缓冲寄存器中的数据送至CPU的通用寄存器,再存入主存相关单元。

在这里插入图片描述

程序中断方式

计算机在执行程序的过程中,出现异常情况或者特殊请求,计算机停止现有程序的运行,转向对这些异常情况进行处理,处理完成后再返回到现行程序的间断处,继续执行原程序。

一般IO设备的工作速度比较低,与CPU的速度无法匹配。CPU启动了设备以后,设备准备数据,在这段时间内,CPU做无谓的等待只会浪费资源。

因此,CPU先去做其它的事情,当IO设备准备就绪了,IO设备向CPU提出请求,CPU暂停现行程序去执行IO服务程序处理IO数据。
在这里插入图片描述

接口基本组成

1、中断请求触发器和中断屏蔽触发器

如果采用程序中断方式,每个外部设备都需要一个中断请求触发器INTR,当其为1时(同时接口的完成触发器D的状态需要为1),该设备向CPU提出中断请求。

同时,外部IO设备不止一台,可能会有很多台IO设备请求中断,但是CPU不能同时接收多个中断源的请求,只能一个一个接收,所以需要对这些中断源进行排队。所以IO设备需要一个屏蔽触发器MASK,当为1时,对其进行中断屏蔽。

下图可见,当设备准备就绪(D = 1),且该设备没有被屏蔽(MASK = 0),CPU查询时,INTR才能输出1,表明设备有中断请求。
在这里插入图片描述
2、排队器
排队器对同时请求的多个中断源进行排序。

举例, I N T P i INTP_i INTPi是排队器排队后,每个设备的排队结果,为1表示该中断源发出中断请求并被CPU选中。

当各中断源没有中断请求时, I N T R i INTR_i INTRi是0,所以 I N T R i ‾ \overline{INTR_i} INTRi都是高电平。
如果1号设备请求中断, I N T R 1 ‾ \overline{INTR_1} INTR1是0;经过下图中的黄色框部分以后,1号设备以后的所有 I N T P i ′ INTP_i^{'} INTPi都是0,相当于屏蔽了1号设备后的所有设备;
1号设备后的 I N T P 1 ′ INTP_1^{'} INTP1 I N T R 1 INTR_1 INTR1经过与运算后, I N T P 1 INTP_1 INTP1输出1,其它所有设备的 I N T P i INTP_i INTPi输出0。这表明1号设备发出中断请求且被选中。

如果2、3设备同时有请求,即 I N T R 2 ‾ \overline{INTR_2} INTR2 I N T R 3 ‾ \overline{INTR_3} INTR3都是0, I N T R 2 ‾ \overline{INTR_2} INTR2为0会导致2号设备之后的 I N T P i ′ INTP_i^{'} INTPi全部为0,也就是被屏蔽。
因为1号设备没有发出中断请求,所以2号设备的 I N T P 2 ′ INTP_2^{'} INTP2为1,所以2号设备的 I N T P 2 INTP_2 INTP2输出1,表明被CPU选中。

下图的链式排队器,当发生中断时,按照设备的优先级进行排序。

在这里插入图片描述

3、中断向量地址形成部件(设备编码器)
CPU响应IO中断,需要去执行设备的中断服务程序。每个中断服务程序有入口地址,CPU需要找到这个入口地址。

下面是硬件向量法通过向量地址寻找入口地址,向量地址由硬件电路产生。

排队器的输出形成中断向量,根据中断向量寻找响应的中断服务程序入口地址。

在这里插入图片描述
4、程序中断方式接口电路的基本组成
在这里插入图片描述

中断服务程序的流程

1、保护现场

1、保存程序的断点,由中断隐指令完成,比如PC值,还有一些无法读取的状态。
2、保存通用寄存器和状态寄存器的内容,在中断服务程序的起始部分安排指令,将程序中断时的“现场”保存起来。

2、中断服务

对于不同的IO设备,中断服务的操作内容不同。

3、恢复现场

这是中断服务程序的最后一部分,在退出程序之前,将原程序中断的“现场”恢复到原来的寄存器中。

4、中断返回

使其返回到原程序的断点处,以便继续执行原程序。

计算机在处理中断的过程中,可能出现新的中断,如果CPU暂停当前中断,去执行新的中断,称为中断嵌套,或多重中断。

倘若CPU在执行中断服务程序时,对新的中断请求不予理睬,这种中断称为单重中断。

下图是两种中断方式的对比图,区别在于“开中断”的设置时间不同。
在这里插入图片描述

CPU响应某中断源的请求之后,在中断周期内自动关闭中断,如果不开启中断,CPU不会响应其它任何一个中断源的请求,确保该中断服务程序能够顺利执行。
对于“单重中断”来说,开中断设置在最后的中断返回之前,也就是在整个中断服务程序处理中,不再响应其它中断源的请求。
而对“多重中断”来说,开中断的指令提前到保护现场之后,也就是当产生中断,保护现场以后, 即可以立即响应其它中断,跳转到新的中断服务程序中。

中断方式实际上还是会打断CPU的运行,如果IO设备或者辅助存储器频繁的和主存交换信息,需要不断的打断CPU执行主程序而执行中断服务程序,依旧会抢占CPU资源。但是一般程序查询方式要好。

接口执行流程

下面以输入设备为例进行说明,CPU已经通过IO指令的地址码选中某设备,
1、CPU发送启动IO的设备命令,将D置“0”,B置“1”;
2、接口启动输入设备开始工作;
3、输入设备将数据送入数据缓冲寄存器;
4、输入设备向接口发出“设备工作结束”信号,将D置“1”,B置“0”,标志设备准备就绪;
5、设备准备就绪(D = 1),且本设备未被屏蔽时,在指令执行阶段的结束时刻,由CPU发出中断查询信号。
6、设备中断请求触发器INTR置“1”,标志设备向CPU提出中断请求,INTR送至排队器,进行中断判优
7、若CPU允许中断,设备又被排队选中,进入中断响应阶段,由中断响应信号INTA将排队器输出送至编码器形成向量地址。
8、向量地址送至PC,作为下一次指令的地址
9、由于向量地址中存放的是无条件转移指令,这条指令结束后,跳转至中断服务程序入口地址,开始执行中断服务程序。
10、执行中断服务程序的最后一条指令,即执行中断返回指令,返回至原程序的断点处,至此,一个完整的程序中断处理过程结束。

在这里插入图片描述

DMA方式

中断方式并不能很好的减少对CPU资源的占用。

现在在主存和IO设备之间,加入一条数据通路,主存与IO设备交换信息时,不通过CPU,不要CPU暂停现行程序为设备服务,不需要保护现场和恢复现场。

但是DMA和CPU会有同时需要使用内存的冲突,为了避免冲突,通常DMA和主存交换数据时采用以下三种方法:

1、停止CPU访问内存
DMA要使用内存,直接向CPU发送停止信号,要求CPU放弃地址线、数据线和控制线的使用权。DMA传送数据结束后,告知CPU可以使用主存,将总线控制权交给CPU。
在这里插入图片描述

2、周期挪用
当IO设备发出DMA请求时,IO设备请求占用几个内存周期以进行DMA数据传输。
会有以下三种情况:
1、此时CPU不需要访问内存,IO设备和CPU不发生冲突。
2、IO设备请求DMA数据传送时,CPU正在访问主存,等待存储周期结束后,CPU将总线让出,DMA使用。
3、IO设备和CPU同时请求访问主存,IO设备先进行数据的传输,CPU之后一两个周期再访问主存。
在这里插入图片描述

3、DMA与CPU交替访问
需要CPU工作周期比主存存取周期长,比如CPU周期为1.2us,主存的存取周期小于0.6us,将CPU周期分为C1和C2两个周期,C1供DMA访存,C2供CPU访存。
因为总线控制权的转移几乎不需要什么时间,CPU访存拿到数据继续执行也不会进入等待状态,DMA也能够完成数据的传送,但是硬件逻辑复杂。
在这里插入图片描述

接口基本组成

DMA接口需要完成几个功能

1、向CPU申请DMA传送。
2、在CPU允许DMA工作时,处理总线控制权的转交,避免因进入DMA工作而影响CPU正常活动或引起总线竞争。
3、在DMA期间管理系统总线,控制数据传送。
4、确定数据传送的起始地址和数据长度,修正数据传送过程中的数据地址和数据长度。
5、在数据块传送结束时,给出DMA操作完成的信号。

DMA所需要的逻辑部件

1、主存地址存储器(AR),AR存放需要交换数据的主存地址,DMA传送过程中,每交换一次数据,将地址寄存器内容加1。
2、字计数器(WC),记录传送数据的总字数,当产生溢出时,表明数据传输完毕,于是DMA向CPU发送中断请求信号。
3、数据缓冲寄存器(BR),暂存每次传送的数据。
4、DMA逻辑控制,由控制电路,时序电路即命令状态控制寄存器等组成。当设备准备好一个字就向DMA接口提出申请(DREQ),DMA控制逻辑向CPU请求DMA服务,发出总线使用权的请求信号(HRQ)。待收到CPU发出的响应信号HLDA后,DMA控制逻辑便开始负责管理DMA传送的全过程。
5、中断架构,当字计数器溢出时,溢出信号通过中断机构向CPU提出中断请求,请求CPU作DMA操作的后处理,报告数据传送结束。
6、设备地址寄存器(DAR),存放IO设备的设备码或表示设备信息存储区的寻址信息。
在这里插入图片描述

程序执行流程

DMA数据传送分为预处理、数据传送和后处理3个阶段。
预处理

在DMA接口工作前,CPU传输以下信息:
1)、给DMA控制逻辑指明数据传送方向是输入还是输出。
2)、向DMA设备地址寄存器送入设备号,并启动设备。
3)、向DMA主存地址寄存器送入交换数据的主存起始地址。
4)、对字计数器赋予交换数据的个数。

数据传送
以数据输入为例,

1、当准备好一个字时,发出选通信号,将该字读到DMA的数据缓冲寄存器(BR)中,表示数据缓冲寄存器“满”。
2、与此同时设备向DMA接口发请求(DREQ)。
3、DMA接口向CPU申请总线控制权(HRQ)。
4、CPU发回HLDA信号,表示允许将总线控制权交给DMA信号。
5、将DMA主存地址寄存器中的主存地址送地址总线,命令存储器写。
6、通知设备已被授予一个DMA周期,并为交换下一个字做准备。
7、将DMA数据缓冲寄存器的内容送数据总线。
8、主存将数据总线上的信息写至地址总线指定的存储单元中。
9、修改主存地址和字计数值。
10、判断数据块是否传送结束,没有结束就继续传送;结束就向CPU申请中断,数据传送结束。
在这里插入图片描述

后处理

DMA的中断请求得到响应后,CPU停止原程序的执行,转去执行中断服务程序,做DMA的结束工作。
比如,校验数据、决定是否再次使用DMA传送其它数据块、传输数据错误处理等。
在这里插入图片描述

优点缺点
轮询方式的IO操作简单,定时查询即可能处理的输入输出设备数量有限;需要一直查询,占用CPU资源
中断方式的IO操作支持多个IO设备的并行操作(对其进行排队)中断数量太多会消耗CPU去执行(保护现场等);只能由于外设不太多的小型机
DMA方式的IO操作直接向内存传输数据,只需要在开始和结束时告知CPU即可DMA通过窃取系统总线的方式传递数据,会降低CPU的执行效率;需要CPU去初始化DMA,进行配置,也需要CPU去收尾校验等
通道方式的IO独立于CPU,控制设备和内存直接进行数据交换;CPU在指定内存位置存放通道程序,通道程序自己去执行,不占用CPU,不需要CPU初始化和收尾工作等,解放CPU;可以连接多台设备
IO处理机
  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值