1.中断系统
1.1 中断系统需要解决的问题
小提示:当我们需要分析某一个系统的结构时?就需要明确该系统应该解决哪些问题?
从每个问题的解决中,逐步剖析系统结构
1.1.1 各中断源如何向CPU提出请求 ?
中断源通过一个INTR(Interrupt Request)中断请求标记触发器,向CPU发出中断请求信号即可,CPU中通过一个中断请求标记寄存器将所有的中断源的中断请求INTR集中在一个寄存器中,如下图描述:
但实际上仅仅通过上图,我们可能还是无法得知INTR是如何发出的,下面我们以IO接口中的程序中断方式为例,给出一个例子INTR分散在各个中断源的接口电路中
- 在IO接口电路中,当IO接口已经从外设中读取完数据到缓冲区,需要发出中断请求,告知CPU执行某个中断服务程序将IO接口缓冲区中的数据读取到CPU[这里是以读取为例哦]
- 此刻D完成触发器将标记为1,表示数据准备好可以发出中断请求
- 后面会提到一个中断屏蔽触发器即MASK,当MASK=1表示屏蔽当前中断源,对应Q非端将输出0,将使得与非门的输出一定是1,那么送入到INTR触发器的D端就一定是0,导致无法发出INTR信号
- 另一方面,后续会提到一个CPU如何响应中断,其中CPU会在指令周期的执行周期后发出一个中断查询信号,一旦CPU查询到中断信号,指令周期会进入中断周期。从上图中可以知道CPU的中断查询信号作为INTR触发器的使能信号
1.1.2 各中断源同时提出请求怎么办 ?
- 硬件方式: 分散在接口电路中 - 链式排队器
电路简述:- 利用与非门的特性,输入只要有0,其结果必定为1,然后再经过非门,结果就是0。因此只需要通过一种方式在高优先中断请求有效时,发出一个0到低优先的与非门即可。
- 特点:排队器中只有一位是1,其余位都是0
- 硬件方式: 集中在CPU中
电路简述:- 将高优先级的INTR的非端作为低优先级与非门的一个输入信号,因此当高优先的INTR有效时即INTR=1,对应的INTR非端就是0,送入到低优先级的与非门后,结果必定为1,再次反转就是0,导致低优先级的INTP都是0
- 特点:排队器中只有一位是1,其余位都是0
- 软件方式: 软件查询方式
不做过多描述
1.1.3 如何寻找入口地址 ?
- 硬件向量法
- 区分:向量地址和入口地址
- 向量地址是排队器输出信号通过向量地址形成部件输出的
- 入口地址是中断服务程序的执行入口
- 优点:硬件设计足够快
- 区分:向量地址和入口地址
- 软件查询法
- 中断识别程序:用来查找中断服务程序的入口地址,重点是以上述为例,立即到SKP DZ #1,JMP 1# SR的含义
1.1.4 如何保护现场 ?
不讲述,见恢复现场
1.1.5 CPU什么条件、什么时间、以什么方式响应中断 ?
- 条件:发出中断查询信号,将EINT设为1,允许发出中断请求
- 时间:指令执行周期结束后,原因是:此刻PC存储的就是下一条执行的指令,可以方便存入程序断点
- 方式:中断隐指令 = 保存程序断点 + 寻找入口地址 + 硬件关中断;其中理解硬件关中断的电路逻辑图
1.1.6 如何恢复现场,如何返回?
1.1.7 处理中断的过程中又出现新的中断怎么办?
要点:
- 多重中断的概念:执行中断服务程序时允许高优先级的中断响应
- 多重中断的条件
- 由于进入中断服务程序前,已经由中断隐指令,完成硬件关中断的操作,要想在中断服务程序中,能够响应其他高优先级的中断,必须提前设置开中断指令
- 优先级高的中断源有权中断低优先级的中断服务程序
- 屏蔽技术和屏蔽字
- 屏蔽技术就是通过MASK触发器完成对中断源的屏蔽,每一个中断源都配有一个MASK屏蔽器
- 图中分别是分散在接口电路中的中断源和 集中在CPU的中断源中,MASK屏蔽器的组合逻辑。
- 屏蔽字 + 多重中断 = 改变处理优先级 - 看图可知
- 屏蔽字的设置时机
- 中断隐指令的执行:保存程序断点和现场、形成中断服务程序入口地址(可以认为是送入到PC中)、硬件关中断
- 设置屏蔽字
- 开中断
- 执行中断服务程序
2. 中断周期
指令周期可以划分为:取值周期 + 间址周期 + 执行周期 + 中断周期
在执行周期后,如果指令允许,CPU将发出一条中断查询信号,如果有中断请求INTR,指令将进入中断周期
6. 疑问:为啥需要在指令执行周期之后发出中断查询信号
答案:取值周期已经完成(PC)+1->PC的动作,已经保证PC是当前程序下一条指令的地址,因此可以确保中断隐指令中的保存程序断点是正确的,当然不能插入到间址周期或执行周期中,否则可能会导致当前指令执行的结果错误,因此放入最后。[个人理解]
7. 中断周期:
8. 前四步微操作:保存程序断点
9. 第5步:寻找服务的入口地址
10. 第6步:关中断
推荐: