【软件开发底层知识修炼】二 深刻浅出处理器之二 中断的概念与意义

学习交流加微信

  • 我的qq: 1126137994
  • 我的微信: liu1126137994
  • 学习交流资源分享qq群: 962535112

本篇文章咱们学习中断的概念与意义。本片文章只学习中断概念与意义,并不深刻研究中断向量表与ISR中断服务程序的实现。同时本片文章讲解一个与中断有关的应用:断点调试。固然具体的断点调试方法会在后面讲解,本次只是说明中断在断点调试中的应用。函数

一、中断的概念与意义

1.二、 中断的概念

  • 中断是一种处理器与外设进行通讯的机制(在咱们学习了信号机制,会发现不必定是与外设之间)
  • 外设经过产生中断,向处理器告知,外部有重要事件发生
  • 处理器收到中断后,须要响应中断(具体如何响应见后面内容)

上面只是中断的简单概念。举个例子,咱们点击鼠标的时候,鼠标这个外设会产生一个中断,当CPU收到这个中断的时候,CPU会响应这个中断,进而执行ISR(中断服务程序),在中断服务程序中确定会调用鼠标的驱动模块,从而在电脑上咱们才能看到鼠标的点击效果。工具

那么什么是中断服务程序呢(ISR)?学习

  1. 首先中断服务程序会从外设中读取外设的中断寄存器,从而得到中断的类型
  2. 而后根据中断类型,设计具体的处理逻辑(后面的学习中咱们会发现其实是经过中断向量表来选取具体的处理逻辑)
  3. 中断处理完毕后,还须要清除外设中的中断寄存器内容
  4. 而后清除CPU中的中断标识位
  5. 最后还须要恢复CPU中本该执行的指令

下面看一个图示来表示一个中断产生的过程: 设计

在这里插入图片描述

  • 步骤一外设产生中断
  • 步骤二要先把当前正在执行的程序的上下文保存(好比通用寄存器的值)
  • 步骤三四读取外设中断寄存器的值,得到中断类型
  • 步骤五执行相应的中断处理程序
  • 步骤六清除外设的中断寄存器的值
  • 步骤七清除CPU的中断标识位
  • 步骤八恢复当前须要执行程序的上下文环境

那么,从程序的角度来考虑,中断服务程序(ISR)有哪些特征呢?调试

咱们知道,中断服务程序执行完以后,须要再次回到以前的程序继续执行,因此ISR不能有返回值(想想你有返回值获得话,谁来接收这个返回值呢?),而且,没有参数传递!由于前期已经通断中断向量表来选取了特定类型的处理逻辑,此处无需再让中断的类型当作参数传递来决定如何设计处理逻辑,因此无需参数。同时,对于这种打断程序运行的,好比后面的信号,程序最好不要太长,容易产生错误。因此ISR最好短小精悍,为了可以快速结束,最好少作浮点运算。cdn

  • 不能有返回值,不能有参数传递
  • 尽可能短小高效,避免浮点运算

1.二、中断的意义

  • 应用程序没必要关心中断的处理与发生
  • 中断服务程序也不用关心应用程序的状态
  • 中断是上层应用与底层代码的分界线
    在这里插入图片描述

1.三、中断的类型

  • 硬中断blog

    • 经过处理器的中断信号线产生的中断(鼠标按一下产生的中断,经过中断信号线发送给处理器)
  • 软中断事件

    • 经过非法指令或者特殊指令陷入的中断(好比系统调用也是一种软中断,它就是经过特殊指令Int 0x80陷入内核,也能够看作一种中断。再好比后面会学习的信号,也是一种中断)

1.四、中断的优先级

好比此时有好几个中断信号产生,好比你的电脑正在运行微博程序,你点击鼠标,立马有反应,这说明什么?说明鼠标的优先级比微博程序的优先级高。其实,任何ISR的优先级,都比应用程序的优先级高。而中断中,也分为不一样的优先级,高优先级的中断会优先获得CPU的处理,且一个中断ISR在运行时,若是再来一个比它优先级高的中断,这个高优先级的中断会打断那个正在执行的中断程序。图片

  • 中断优先级

    1. 多个中断同时出现时,处理器优先响应高优先级的中断
    2. 低优先级中断的ISR执行时,能够被高优先级的中断再次打断
    3. ISR比上层应用程序的优先级都高

二、中断的应用-断点调试

2.二、什么是程序的断点?

你们都知道断点调试。程序的断点,其实就是一个指令的地址。这个指令的地址,是调试工具(例如GDB)让代码中止执行时候的位置。当你设置断点后,程序会在你设置的断点处中止执行。而后去执行你的调试工具里面的相应程序,那么接下来你就可使用调试工具来获取程序的相应信息,好比上下文环境,栈信息等

2.二、 程序断点的实现原理

程序断点的实现原理,依赖于CPU的中断机制。包括CPU的硬中断机制与软中断机制。

说的通俗一点,就是将断点处的指令替换为中断触发指令,再也不继续执行当前程序,而是去执行中断服务程序ISR,而后ISR再将CPU控制权交给你的调试工具的处理程序。

  • 程序断点的实现原理

    1. 获取源程序指定行对应的代码地址(指令地址)
    2. 保存当前程序的上下文环境信息
    3. 把该指令地址处的指令,替换为中断触发指令
    4. 在中断服务程序ISR中将CPU控制权交给调试工具的处理程序
    5. 调试程序开始作相应处理(好比能够读取源程序的上下文信息或者栈信息)
    6. 调试程序处理完后,将以前指令地址处的指令还原
    7. 恢复以前程序的上下文信息
    8. 源程序继续从断点处执行程序

下面来看一张图理解断点的实现原理

在这里插入图片描述

其中中断触发指令,被CPU执行后,OS会向调试程序发送signal,signal后面会讲。调试程序收到signal,会执行响应的处理函数handle。

以上只是大体讲原理,没有深刻研究源码。

三、总结

本篇文章要学会:

  • 中断的概念与意义
  • 中断的类型(硬中断与软中断)
  • 中断的应用-断点与断点的实现原理
相关文章
相关标签/搜索