8.4-中断系统小结(cpu中断七个问题)

【README】

本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】中断介绍

1)作用:用中断系统实现了外设数据的输入输出; 还可以用于程序调试,计算机系统的异常事件,都可以用中断系统来处理;

2)中断因素

  1. 人为设置的中断;
  2. 程序性事故,如java异常;
  3. 硬件故障,如硬盘坏道;
  4. Io设备,如数据输入输出;
  5. 外部事件,如键盘中断按钮,调试程序;

【2】 cpu中断问题

【2.1】问题1:各中断源如何向cpu提出请求?

给每一个中断源设置一个触发器,用触发器来标记这个中断源是否提出了中断请求;
一个中断源对应一个中断请求触发器INTR,多个触发器组成了中断请求标记寄存器 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;

    1. 若等于1,说明中断源已经准备好了,提出了中断请求,cpu就要去执行响应的中断服务程序(步骤2);
    2. 若等于0,说明1号中断源没有准备好,则跳过指令2,进入2号中断源的查询(步骤3)

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个步骤:

  1. 中断请求;
  2. 中断判优;
  3. 中断响应;
  4. 中断处理;
  5. 中断返回;

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

PacosonSWJTU

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值