计算机中断系统小结(cpu响应中断)
Posted PacosonSWJTU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机中断系统小结(cpu响应中断)相关的知识,希望对你有一定的参考价值。
【README】
本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;
【1】中断介绍
1)作用:用中断系统实现了外设数据的输入输出; 还可以用于程序调试,计算机系统的异常事件,都可以用中断系统来处理;
2)中断因素
- 人为设置的中断;
- 程序性事故,如java异常;
- 硬件故障,如硬盘坏道;
- Io设备,如数据输入输出;
- 外部事件,如键盘中断按钮,调试程序;
【2】 cpu中断问题
【2.1】问题1:各中断源如何向cpu提出请求?
给每一个中断源设置一个触发器,用触发器来标记这个中断源是否提出了中断请求;
一个中断源对应一个中断请求触发器INTR,多个触发器组成了中断请求标记寄存器 INTR;
【2.2】 问题2:各中断源同时提出请求,怎么办?
对中断源进行分级;响应优先级最高的中断源(对中断源的级别进行排队);
中断优先级分为:响应优先级和处理优先级;
响应优先级,由硬件决定(中断源)决定,无法修改;
处理优先级可以修改,通过设置中断屏蔽字到中断屏蔽寄存器来屏蔽其他中断;
【2.3】问题3:Cpu在什么条件,什么时间,以什么方式响应中断?
【2.3.1】cpu在什么条件下响应中断请求 ?
- 为了表示cpu是否响应中断请求,有一个允许中断触发器EINT,值=1表示允许cpu 响应中断源发出的中断请求;
【2.3.2】 cpu在什么时间响应中断请求 ?
- 通常情况下,cpu只有在指令的执行阶段结束以后,才能够响应中断请求;但cpu的某些指令的执行阶段比较长,这种情况就允许cpu在指令执行过程中,响应中断请求;
【2.3.3】 cpu响应中断过程:
- 在指令执行以后,cpu发送查询信号到中断源的中断请求触发器;查询信号把中断请求触发器的输出端设置为1,把中断请求信号发送到排队电路;
补充:中断隐指令作为响应中断的一部分,有3个操作(保护程序断点,寻找入口地址,硬件关中断):如下:
中断响应步骤如下:
步骤 | 描述 |
1 | Cpu完成指令执行阶段后,通过硬件向量法查找中断源;各个中断源的信号送入排队器; |
2 | 排队器把中断源信号(只有一根线为1)送给中断标记触发器,从而把INT设置为1,而EINT设置为0; |
3 | 此外,排队器还要把中断信号送给向量地址形成部件,这个向量地址送给PC,为执行中断服务程序做准备;(向量地址保存了中断服务程序的入口地址) |
【小结】中断响应过程中要解决的3个问题:
问题1)保护程序断点: 断点就是中断服务程序执行完成后,返回执行的指令;
方法1 断点存到特定地址(0号地址)内;
方法2 断点进栈;
问题2)寻找中断服务程序入口地址;
方法1 采用硬件向量法:把中断向量地址发送到PC寄存器;PC中保存了向量地址,这个向量地址保存了中断服务程序的入口地址,或跳转指令,该指令会跳转到中断服务程序;
方法2 软件查询法:中断识别程序的入口地址发送到PC寄存器;计算机执行中断识别程序来查找中断服务程序的入口地址;
问题3)硬件关中断(把中断允许触发器的值设置为0);
关中断的目的: 避免在单重中断的机器中,在执行中断服务程序的过程中,有新的中断源会打断当前的中断服务程序的执行;
另外,即使在多重中断的cpu中,采用关中断的方式,也是为了保存程序断点,保存程序现场的一个过程;
【2.4】问题4:如何保护现场 ?
【2.5】问题5:如何恢复现场?
1 保护现场
1.1 保存断点:由中断隐指令(硬件)来做,包括3个步骤(保存断点,形成中断服务程序的入口地址,硬件关中断) ;
1.2 保存寄存器内容(由中断服务程序来做,软件):cpu当中的一些寄存器在执行中断服务程序的时候需要用到;这些寄存器的内容也要进行保存 ;因为这些内容将来中断返回的时候,主程序还要用到;2 恢复现场
2.1 由中断服务程序完成;
因为中断服务程序在保存现场的时候,可以吧寄存器内容压入到堆栈中;
在中断服务程序恢复现场时,可以出栈;3 中断服务程序的工作内容包括:
1) 保护现场;push指令;
2) 其他服务程序(中断服务程序剩余部分);
3) 恢复现场;pop指令;
4) 中断返回;IRET指令;
【2.6】问题6:如何寻找中断服务程序的入口地址?
通过硬件向量法,或程序查询法寻找;
【2.6.1】硬件向量法
排队器输出:只有1根线是高电平1,其他全部为低电平0;
向量地址形成部件:根据排队器输出,确定需要响应的中断源,从而确定执行哪一个中断服务程序(通过中断向量地址确定);
用硬件查找中断服务程序入口地址有两种方法:
方法1: 在中断向量地址的存储单元中存放一条跳转指令 如 jmp 200,则200就是中断服务程序的入口地址;
方法2: 在中断向量地址的存储单元中存放的就是中断服务程序的入口地址,如中断向量地址12H,其保存的入口地址200;
【2.6.2】程序查询法
中断识别程序查询步骤:
步骤 | 指令 | 说明 |
1 | SKP DZ 1# | SKP表示跳过下一条指令; 指令功能:查询第1号中断源的完成触发器D;看触发器是等于0还是等于1;
|
2 | JMP 1#SR | 执行中断服务程序 |
3 | SKP DZ 2 | …… |
4 | JMP 2SR | …… |
【2.7】问题7:处理中断的过程中又出现新的中断 怎么办?
处理过程如下:
- 处理中断1时,发生了中断2,且中断2优先级大于中断1,则停止中断1的服务程序,转而执行中断2的服务程序;
- 处理中断2时,发生了中断3,且中断3优先级大于中断2,则停止中断2的服务程序,转而执行中断3的服务程序;
上图中: 产生了3次中断,和3个断点,分别是 k+1, l+1, m+1 ;
【例】利用中断屏蔽字修改中断处理优先级(响应多个中断),参见
https://blog.csdn.net/PacosonSWJTU/article/details/123595867
【3】cpu中断全过程小结
cpu全过程有5个步骤:
- 中断请求;
- 中断判优;
- 中断响应;
- 中断处理;
- 中断返回;
以上是关于计算机中断系统小结(cpu响应中断)的主要内容,如果未能解决你的问题,请参考以下文章