中断慢慢积累

VersionSDescriptionDateBy
V1CFirst Version2020-12-19AYZP

C―― Create,
A—— Add,
M—— Modify,
D—— Delete。

前言

中断这个知识点很常见,在单片机、操作系统里都有。应该都比较熟悉了。

除了是在这方面,生活中我们也有很多中断事件,比如正在写CSDN的你,突然想到一个很棒的点子,这个点子真的很棒你决定去记录它,这个时候保存下你现在写的CSDN博客,转去用纸笔记录你那个很棒的点子,然后等记录完之后打开之前保存的CSDN博客位置,继续写,其实这就完成了一个中断过程。

从这个例子,我们可以知道中断过程为:

请求中断→中断响应→保护现场→中断服务→恢复现场→中断返回。

  • 请求中断:突然脑子里蹦出个很棒的点子
  • 中断响应:你决定去记录这个点子
  • 保护现场:保存你写的CSDN博客
  • 中断服务:拿出纸笔记录这个点子
  • 恢复现场:打开之前保存的CSDN博客位置
  • 中断返回:继续写博客

一 正文

2.1 定义

所谓中断,就是指CPU在正常执行程序的时候,由于内部/外部事件的触发、或由程序预先设定,而引起CPU暂时中止当前正在执行的程序,保存被执行程序相关信息到栈中,转而去执行为内部/外部事件、或由程序预先设定的事件的中断服务子程序,待执行完中断服务子程序后,CPU再获取被保存在栈中被中断的程序的信息,继续执行被中断的程序,这一过程叫做中断。

2.2 几个概念

  • 中断向量:中断服务程序的入口地址;
  • 中断向量表:把系统中所有的中断类型码及其对应的中断向量按一定的规律存放在一个区域内,这个存储区域就叫做中断向量表;
  • 中断源:软中断/内中断、外中断/硬件中断、异常等。

  • CS:IP两个寄存器:指示了 CPU 当前将要读取的指令的地址,其中CS为代码段寄存器,而IP为指令指针寄存器 。可以简单地认为,CS段地址,IP是偏移地址。
  • RET:也可以叫做近返回,即段内返回。处理器从堆栈中弹出IP或者EIP,然后根据当前的CS:IP跳转到新的执行地址。如果之前压栈的还有其余的参数,则这些参数也会被弹出;
  • RETF:也叫远返回,从一个段返回到另一个段。先弹出堆栈中的IP/EIP,然后弹出CS,有之前压栈的参数也会弹出。(近跳转与远跳转的区别就在于CS是否压栈);
  • IRET:用于从中断返回,会弹出IP/EIP,然后CS,以及一些标志。然后从CS:IP执行。

2.3 详解

请求中断→中断响应→保护现场→中断服务→恢复现场→中断返回。

  1. 请求中断:当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止;
  2. 中断响应:CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断服务子程序。**对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期;
  3. 保护现场:主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容(主要是当前IP(将要执行的下一条地址)和CS值(代码段地址))压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的;
  4. 中断服务:中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行;
  5. 恢复现场:当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容弹出,即恢复主程序断点处寄存器的原值。
  6. 中断返回:在中断服务子程序的最后要安排一条中断返回指令IRET(interrupt return),执行该指令,系统自动将堆栈内保存的 IP(将要执行的下一条地址)和CS值(代码段地址)弹出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。**

而中断嵌套是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。

二 中断与异常

  • 中断
    • 中断请求
    • 中断响应
      • 自动取得中断服务子程序入口地址(中断向量)
    • 保护现场
      • 将断点处各寄存器内容压入栈
        • 主要是IP(instruction pointer将要执行的下一条地址;偏移地址)和CS(code segment代码段地址;段地址)
        • 小知识:PC是非intel厂家对IP的称呼,也就是说PC起始跟CS:IP是一回事儿。
    • 中断服务
    • 恢复现场
    • 中断返回

CPU在正常执行时,由于内部/外部事件触发,而引起CPU暂时中止当前正在执行的程序,保存被执行程序相关信息到栈,转而去执行内部/外部事件,执行完后恢复现场,继续执行被中断的程序

  • 异常

异常与中断不同,它在产生时必须考虑与处理器时钟同步。

实际上,异常也叫同步中断。由处理器本身产生。

在处理器执行到由于编程失误而导致的错误执行(如被0除)的时候,或者是在执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值