一、程序查询方式
单个设备:
cpu首先执行一个输入输出指令,由这个指令发出启动设备的命令,响应的设备接收到信号就开始准备数据,数据准备好再发给cpu,cpu发出启动设备命令,然后检查状态标记,如果准备就绪就开始信息交换,没有就一直等待并循环反复访问检查状态
这个过程一共用到三个命令
多个设备:
按照设备优先级来检查,先检查级别高的
?
整个程序的流程图:?
计数器的值初始设为N,每完成一个字的传输,-1,直到为0,或者也可以设为-N,并且这个负数用补码来表示,每完成一个字的传输,+1,直到计数器溢出
内存和I/O设备间信息传输时我们需要知道内存的地址,那么就要设置一个主存缓冲区首址,这样我们保存数据时就从这个首地址开始,每传输一个字/字节,修改地址(+1/-1),为输入/输出下一个数据做准备,计数器也要+1/-1
程序查询方式接口电路
SEL设备选择信号实际上是整个I/O接口的选择信号,只有这个信号有效时这个I/O接口电路才会工作,当SEL有效且启动命令有效,就可激活,接口开始工作,
例如有数据输入,cpu通过地址线给出外部设备地址,设备选择电路就将自己的设备地址或端口号与其匹配,如果相同说明启动的就是这个接口上的设备,那么SEL就有效,同时启动命令也有效,那么接口激活,B变为1说明设备可以开始工作了,然后启动设备开始准备数据,数据输入到DBR上,设备工作结束
设备通过状态线向接口表明设备结束工作了,此时D就变为了1,D变为1的同时B就变为了0, 然后发出准备就绪的信号
在D变为1之前,cpu始终在原地等待,不停的反复查询检查状态实际上就是在检查D变为1没有,只要D=1了,就说明数据已经送入DBR了,那么就可以开始数据传输了,然后cpu就会通过数据线读入数据
二、程序中断方式?
1、中断的概念
中断就是CPU在执行程序时,发生意外事件,cpu需要中断当前程序去处理这个意外事件,处理结束后还要回到被中断的程序断点继续去执行刚才的程序
2、I/O中断的产生
以打印机为例:
cpu执行程序时,打印机空闲中,此时cpu主程序来一条打印命令,那么cpu就开始启动打印机,打印机收到信号就开始准备数据,此时cpu继续做它之前的工作,打印机准备好数据后,就向cpu发送一条中断请求,cpu接收后就响应中断,向打印机发送数据,cpu接收数据后就开始打印,cpu又回去做自己的事情....
3、程序中断方式的接口电路
除了之前提到的还需要:
1.配置中断请求触发器和中断屏蔽触发器
要进行数据传输时,才会产生中断,即数据已经准备好放入DBR中,完成触发器D=1,屏蔽触发器MASK=0时
当MASK的Q非端和D的Q端都是1时,中断请求触发器INTR变为1表示有中断请求,指令周期结束之前,cpu还会发出中断查询信号,这个查询信号会使INTR的D端输入被送到输出中产生中断请求信号
2.排队器
一些高速设备往往需要及时响应否则就会数据丢失,所以排队器的作用就是在这些提出中断请求的设备中选出优先级最高的设备
硬件排队---->链式排队器:
对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。
表示相应的中断请求的非门,如图,每一个接口电路都有一个非门和与非门
如果此时所有的中断源都没有中断请求,那么INTRi非的值就是1,那么INTPi'也都是1
假设某一个中断源INTR1有中断请求,那么INTR1=1,INTR1非=0,INTP1'=1,而在它之后的INTP2'INTP3'....INTPi'都会变为0,
假如INTR1没有中断请求了,现在是INTR2有中断请求,那么INTR2=1,INTR2非=0,通过与非门&变成了1,传到INTP3‘通过1非门又变为0,一直传下去INTP4'....都为0,只有INTP1‘INTP2’为1
那么这样的一排链式排队器最后会有若干11110000000,优先级最高的为最后一个出现1的设备,但这只是我们判断的方法,机器如何判断呢?
将INTRi拿出来与INTRi ' 做与操作,如果均为高电平1,连一个与非门&,输出后就变为低电平,再连一个非门1,这样,INTP2还是1,但INTP1从之前的1变成了0,因为INTR1现在没有中断请求,INTR1=0,最终,所有的这些INTPi,只有一个值是1,其余都是0,它就被筛选了出来
软件排队参考cpu中断系统篇
3.中断向量地址形成部件
在执行中断服务程序时必须要知道这个中断程序的入口地址,也就是中断服务程序在内存中的起始地址,入口地址的寻找有两种,软件和硬件法(软件法参考cpu中断系统篇)
硬件向量法:
由硬件产生向量地址,再由向量地址找到入口地址
名词解释:
中断号:比如8086支持256个中断,就可以编号成0-255
中断向量:中断服务程序的入口地址,比如X86中就是中断服务程序的断地址和偏移量组成的向量,有时也指程序中断字
向量地址:中断向量保存的内存单元的地址,如果需要跳转指令完成,那就保存的是这条跳转指令在内存中的地址?
中断向量地址形成部件的输入就是刚才排队器的输出结果,有多少个中断源就有多少个输入,输出的结果中一定是只有一个是1,其余都是0
最后,向量地址由数据线送入cpu【中断向量地址形成部件相当于一个设备编码器】
??
4.程序中断方式接口电路的基本组成
?
5、I/O中断处理过程
如果此时有中断请求且屏蔽触发器没有屏蔽的话,MASK非端是1,且D现在也是1,两个1经过&和1门后,INTR的输出就是0,此时cpu发出中断查询信号将INTR置为1同时启动排队器开始筛选最高优先设备,然后cpu再发出中断响应信号INTA,去形成向量地址,向量地址经过数据线传给cpu,cpu传给pc,pc利用这个地址找出中断服务程序的入口地址进而去完成这个中断操作
5、中断服务程序流程
中断隐指令并不是一条指令,而是硬件要自动完成一系列的操作
?
单重中断:即使有优先级更高的中断请求出现,也不允许响应
二者比较:
相同点:中断周期做的事都是一样的,即?
? ? ? ? ? ? ?1.保护断点 2.形成中断服务程序入口地址 3.关中断
不同点:开中断时间不一样
因为单重不允许其他中断破坏,所以最后才会开中断,而多重是允许的,所以一旦有更高优先级的中断发出,它就会去开中断去响应,所以时间上靠前一些
主程序和服务程序抢占cpu的示意图
?三、DMA方式
?DMA:直接存储器访问
一、DMA方式的特点
1.DMA和程序中断两种方式的数据通路
实际上程序中断的数据通路和程序查询的数据通路是一样的
主存和I//O设备之间要想传输信息,必须通过cpu(即下图中的ACC寄存器,也可以是其他寄存器)
而DMA就不需要(黄色线)
2.DMA与主存交换数据的三种方式?
(1)停止 CPU 访问主存
只要外设要与主存进行消息交换,那么从第一块数据交换开始,cpu就放弃了对内存的访问和总线使用权,全都交给DMA接口,适合数据量大时使用
缺点:如果cpu内部的指令缓冲器中有指令或者指令已被取入到cache,cpu仍可以继续工作只要不访问存储器,没有指令就保持当前的状态,但是,这样就不能充分发挥cpu对主存的利用率,因为即使是一块数据,数据也是一个字一个字的传输,这样传输间隔就会很大超过了一个周期,那么在传输间隔期间,虽然DMA没有直接使用主存,但它依然占用主存,使得cpu不能使用
(2)周期挪用(或周期窃取)
这个周期是说访存周期,也就是说,如果DMA接口准备好了数据传输,那么它就会申请占用总线一个或几个周期的时间完成数据传输,在数据传输的间隔或准备数据阶段,DMA接口放弃对总线的使用权和内存的访问
DMA访问主存的三种可能:
1、cpu没有使用主存,那么总线使用权内存访问权直接给DMA
2、cpu正在使用主存,正处在某一个访存周期阶段,DMA只能等
3、cpuDMA同时请求访问主存,此时DMA优先
(3)DMA与CPU 交替访问
实用性不强
二、DMA接口的功能和组成
DMA接口组成
数据传输前要先申请,然后告诉DMA接口要传输的数据的地址,从哪个内存地址开始传输,所以需要地址寄存器AR,还要知道传输的数据量需要计数器WC,每传输一个字就+1,数据缓冲器BR将外部设备中的数据或存储单元中要输出的数据暂存在BR中,还需要一个设备地址寄存器DAR,一个作用是供设备选择电路使用,看这个设备是否与当前接口连接的设备匹配,另一个作用是,在访问硬盘时,DAR中还可以保存柱面号,磁面号,扇区号等,供我们确认传输数据的地址,AR通过地址线将地址送给主存,通过数据线给AR置值,传输的内存单元地址、计数器、设备地址初值都由数据线设置,外部设备与BR直接相连,数据的输入输出过程需要DMA控制逻辑控制,它控制接口内部需要协调的工作,还控制在给定的时区发出给定的信号(比如向cpu发出DMA请求),如果外部设备要利用DMA控制逻辑就向它发送DREQ信号,数据传输完后还会用到中断机构,WC=0时代表传输结束了,由它向中断机构发信号,将中断机构中的中断触发器置为 1,然后中断机构向cpu发出中断请求
三、DMA的工作过程
1、DMA传送过程
cpu启动设备后就去继续执行自己剩下要完成的程序了,数据的传送由DMA接口来完成,可以看出,cpu与I/O设备是并行的,数据传送时,AR将主存地址送给总线,然后由DMA控制逻辑来实现一个字一个字的传输,传输后修改地址和字计数器
以输入为例:
将外部设备中的内容输入到cpu中,首先将地址送入BR,然后向DMA控制逻辑发送DREQ信号表示自己数据已经准备好了,DMA控制逻辑向cpu发出请求占用总线使用权的申请信号HRQ,cpu允许的情况下会响应一个HLDA信号,所以说总线和主存的使用由DMA来控制,开始传输之前,AR要给出主存的地址,之后,DMA给出DACK信号表示通知设备可以开始传输了
以输出为例:
先把BR中的东西传入设备,BR就空出来了,然后设备就通知DMA控制器BR空了可以接收下一个数据(DREQ信号),DMA向cpu发出申请(HRQ信号),cpu允许的话给出HLDA信号,然后AR给出下一个要传输的数据地址,然后DMA响应设备DACK信号表明已经开始下一次数据传输了,然后AR将下一次的地址传给BR
?
后处理在cpu给出HLDA信号后,由中断服务程序完成
2、DMA接口与系统的连接方式
一台机器可以有多个DMA接口,它们都要连在总线上
(1)具有公共请求线的DMA请求
DMA接口通过地址线和数据线与主存相连,众多接口共用一根请求线,响应请求时也是有优先级的,一般来说,离cpu越近的优先级越高
(2)独立的DMA接口
每一个DMA接口都有一根请求线和响应线
DMA方式与程序中断方式比较:
中断方式通过中断请求执行中断服务程序来完成数据传输
DMA仅用于检查数据是否有错(后处理)
四、DMA接口的类型
为什么说在逻辑上还是相当于只允许连接一个呢?
因为事实上,当某一个设备要来连接时,DMA接口中的这些寄存器的初值就会根据这个设备设置好,如果再连其他设备时,这些数字是不能用的,所以还是相当于只能连一个
?
在设备与内存进行信息交换时还是相当于只能连接一个设备,但是在前期数据准备阶段可以连接多个设备,如图它有许多的子通道,每个子通道相当于一个小型的DMA控制器,每一个子通道里都有数据缓冲寄存器、字计数器、设备地址寄存器等等上面提到的, 要控制某一个设备,他就会对相应的子通道里的寄存器进行设置,下一条传输命令过来要控制另一个设备,再去设置另一个子通道里的寄存器,不同设备间是并行的,等到数据准备好了,通过子通道向通道提出请求时,此时不同设备间是串行
多路型DMA接口的工作原理
假设某个多路型DMA连接了三个设备,其中:
磁盘每隔30us提出一次数据传输请求,这30us包括数据传送和数据准备时间,磁带每隔45us提出一次数据传输请求,打印机每隔150us提出一次数据传输请求,并且假设真正用于数据传送的时间是5us
在这个图中,打印机最早提出打印请求,所以先响应打印机,给打印机安排了5us之后,磁盘和磁带同时提出请求,我们响应磁盘,因为磁盘优先级更高(速度越高的设备级别越高),之后响应磁带....
?
|