查缺补漏----关于CPU响应DMA请求(总线周期,存取周期,指令周期,机器周期)

结论:

总线周期:存储器和I/O端口是挂接在总线上的,CPU对存储器和I/O接口的访问通过总线实现。把CPU通过总线对微处理器外部(存储器或I/O接口)进行一次访问所需时间称为一个总线周期。也就是完成一次数据传输的时间。
总线周期一般包含4个总线时钟周期:
(1)T1状态 ——输出存储器地址或I/O地址。
(2)T2状态 ——输出控制信号。
(3)T3和Tw状态 ——总线操作持续,并检测READY以决定是否 延长时序。
(4)T4状态 ——完成数据传送。

存取周期(存储周期):存取周期包含存取时间和恢复时间。指两次独立访问存储器操作之间的最小间隔。
存取时间指从启动一次存储器操作到完成该操作所经历的时间。
恢复时间指读写操作之后,用来恢复内部状态的时间。

总线周期与存取周期:

底位交叉编址采用轮流启动方式时,这里的一个T就是一个存取周期。到了后期,每隔1/4T的时间,CPU与主存之间就完成一次数据传输。这时,一个总线周期等价于1/4个存取周期(存储周期)

底位交叉编址采用同时启动方式时:

 会同时启动4个模块进行并行的读/写,也就是需要一个存取周期,才能完成一次数据传输,这时,存取周期等于总线周期

所以一般没有特别说明,总线周期=存取周期

除了存取周期外,机器周期,指令周期与总线周期没有联系

指令周期:取出并完成一条指令所需要的时间。

机器周期(CPU周期):一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成 。

讲完这个概念,看王道书上给的7.3.4的第5题与第26题,答案是有点矛盾的。

第5题:

CPU会在每个存储周期(总线周期)结束后检査是否有 DMA 请求。

第26题:

每个机器周期结束后,CPU 就可以响应 DMA 请求。注意区别:DMA 在与主存交互数据时
通过周期窃取方式,窃取的是存取周期。

其实还有第27题:

DMA 请求的是总线的使用权,因此 CPU 对 DMA 请求的响应时机是一个总线周期结束时。在流水线 CPU 中,流水段的长度以最复杂的操作所花的时间为准,总线周期(访存时间)通常是耗时最长的,因此通常可认为总线周期、存取周期、机器周期和流水段长度是等价的。

在网上看到的解答:

1.理解两个周期

机器周期:完成一个基本操作的周期,比如说取址,间址

总线周期:使用总线的周期,有的机器周期包含总线周期,比如说"取址周期",要利用总线来传送地址,但是有的机器周期与总线周期无关,比如加法指令的执行周期,只要在运算器中运算,不占用总线,此时这个机器周期执行的时候,总线是空闲的,DMA当然可以使用总线。

2.理解"总线周期后响应"

从传送方式的角度来理解,DMA的传送方式是“周期窃取”,书中有提到,采用周期窃取方式,CPU不使用总线的时候,DMA控制器可以直接使用,并不需要等到CPU机器周期结束。所以说周期窃取,窃取的是总线周期,也就是存取周期。

3.理解“机器周期后响应”:

从中断的角度来理解,在预处理时刻CPU响应DMA请求中断,这种中断的优先级比外中断高,要求CPU尽快响应,但是CPU总得把手里面最基本的事情做完才能响应这个很着急的特殊中断,也就是机器周期后响应DMA

4.总结:

考研范围内:

周期窃取:存取周期

DMA中断响应时刻:机器周期结束时刻

外中断响应时刻:一条指令执行结束时刻

DMA中断优先级>外中断优先级

没有机器周期就选总线周期。

我的理解,结合:
链接:https://www.zhihu.com/question/624019708/answer/3483878438

首先分清DMA请求与中断请求:

DMA请求

当I/O设备准备好一个字数据之后,I/O设备向DMA控制器发送DMA请求(就是向DMA请求触发器发送高电平信号,使他变为“1”。当控制逻辑检测到一个字的传输已经完成后,会向CPU申请总线控制权),再由DMA控制器向CPU发送总线请求,这两个过程统称为DMA请求

补充:DMA接口与主存之间传送单元是,而DMA与设备之间的传送单位可能是字节或位

DMA中断请求

传输完多个字后,传送长度计数器会发生溢出,溢出信号会发送给中断机构,中断机构检测到溢出后,向CPU发出中断请求,接着CPU会进行后处理。

发生DMA请求,表示要与主存传送一个字的数据,发生DMA中断请求,表示一整块的数据传输完成。

回到问题:

DMA请求响应:

从CPU角度分析:设备向数据缓冲寄存器传送完一个字的同时,会向DMA请求触发器发送高电平信号,使他变为“1”。当控制逻辑检测到一个字的传输已经完成后,会向CPU申请总线控制权。

CPU收到来自DMA发出的总线控制请求,并将总线控制权移交给DMA控制器,DMA请求属于外部中断,以五段流水线技术为例,外部中断的检测一般放在第一个流水段(IF),故不需要指令冲刷,即不需要将流水段中的控制信号清零,故可以让已经在流水段中的指令继续执行完。不过下一个时钟周期的IF流水段取的指令就是有关DMA请求的指令了。从上面可以看出,CPU响应DMA请求总是在接收到DMA请求的机器周期的下一个机器周期开始执行DMA请求的相关指令(因为在下一个机器周期才把DMA请求的指令取进来,这里一个流水段周期就是一个机器周期),综上,CPU响应DMA请求总是在当前机器周期的下一个机器周期开始。

从I/O系统的角度分析,DMA控制器向CPU申请总线的控制权,CPU对DMA控制器的响应肯定是在完成当前这个总线事务之后,也就是本次总线周期结束

DMA中断请求响应:此时一整块的数据传输已经完成了。DMA控制器传输完数据后,释放总线控制权并向CPU发出中断请求,这个动作是DMA控制器发出的,发生在DMA完成最后一个字的传输这一总线事务之后。所以DMA中断请求的响应,肯定是在完成总线事务,即一个总线周期之后。

按这样的理解:从CPU的角度看,那么应该是机器周期执行完响应DMA请求。

对于2013年的这道真题:

B项是正确的,从I/O角度看,DMA 响应发生在一个总线事务完成后。况且A正确,那么B顺着A理解也是正确的。

总结

对于DMA的响应优先选择总线周期(因为申请总线控制权,肯定要在当前总线周期结束才能申请),没有总线周期就选存取周期,因为不特别说明,总线周期等价于存取周期。没有以上两个就选机器周期。

对于周期挪用,即周期窃取,针对的就是存取周期,周期挪用就是CPU与DMA控制器同时竞争主存,当CPU正在使用主存时,只有到当前存取周期后,CPU再将总线占有权让出,针对的就是存取周期。

21年这道题有涉及DMA中断请求:

A,B都属于内中断(异常),异常发生在指令执行过程中。A.系统调用是通过"陷入"完成的,系统调用执行完后,执行下一条指令,如果是转移指令就跳到转移目标指令执行。B.页缺失属于异常,执行完后返回当前指令重新执行。

D.属于外部中断,一条指令执行完毕后,才检测是否有外部中断。

C.DMA 请求只请求总线的使用权,不影响当前指令的执行,不会导致被中断指令的重新执行


既然讲到了DMA请求与DMA中断方式,那么还有一点:DMA方式的优先级大于程序中断方式

DMA请求优先级非常高,因为DMA一般连接高速设备,如果不及时响应这个请求,不及时把总线优先权交给DMA控制器,那么DMA控制器的数据还没有被传输到主存,可能就被覆盖了。

读一读:

DMA传送方式的优先级高于程序中断,两者的区别主要表现在对CPU的干扰程度不同。程序中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,并且是由DMA控制外设与主存之间的数据传送,无需CPU的干预,DMA只是借用了一点CPU的时间而已。

所以DMA方式的优先级,甚至大于不可屏蔽中断

所以:

DMA请求>不可屏蔽中断>内部异常>可屏蔽中断。

内部异常:

硬件故障(终止)>软件中断(故障,自陷)。

而对于DMA中断请求:

DMA 中断请求 > I/O 设备的中断请求

在 I/O 传送类中断请求中:

高速设备 > 低速设备

输入设备>输出设备

实时设备>普通设备

A:优先响应DMA请求        B:DMA请求与非屏蔽请求都是必须立即响应的,不能等到当前指令结束         C:DMA请求优先级最高        D:关中断时,异常和不可屏蔽中断是能响应的,关中断能挡住的是可屏蔽的 外部中断

### 8086 总线周期的组成 在计算机架构中,8086 微处理器的总线周期由多个状态构成,每个完整的读写操作至少需要四个 T 状态 (T1, T2, T3 和 TW 或者 T4)[^1]。这些状态定义如下: - **T1**: 地址信号被放置到地址线上,并且控制信号变为有效。 - **T2**: 数据传输准备阶段,在此期间数据可以准备好用于传输。 - **T3**: 实际的数据传送发生在这一时刻;对于写入操作,数据在此时放到数据总线上;对于读取操作,则是从数据总线上接收数据。 - **TW/T4**: 如果内存或 I/O 设备较慢无法及时响应,则会插入等待状态 TW 来延长访问时间直到设备准备好为止;如果不需要额外延迟则直接进入 T4 完成整个事务。 ```assembly ; Example assembly code showing a simple memory read operation on an 8086 processor. MOV AL, [BX] ; This instruction will initiate a bus cycle to fetch data from the address stored in BX register into AL register. ``` ### 工作原理 当执行指令涉及到外部存储器或外设交互时,CPU 将启动一次新的总线周期来完成必要的通信过程。具体来说就是通过改变特定引脚上的电压电平发出请求并提供目标位置的信息(即地址),随后根据所要进行的操作类型(读还是写)以及对方是否已经准备好来进行相应的动作。 为了确保稳定性和兼容性,即使是最简单的单字节存取也需要经历上述提到的所有基本阶段[T1-T4/W],而更复杂的情况可能会涉及更多轮次或者附加条件下的处理逻辑。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值