当前位置: 首页 > news >正文

什么是中断?

1.什么是中断  

2.中断的重要性

3.中断的上下半部

4.中断处理流程  中断的原则  

5.ARM处理器程序运行过程

6.程序被被中断时,怎么保护现场


1.什么是中断

        中断是指在 CPU 正常运行期间, 由外部或内部事件引起的一种机制。 当中断发生时, CPU会停止当前正在执行的程序, 并转而执行触发该中断的中断处理程序。 处理完中断处理程序后, CPU 会返回到中断发生的地方, 继续执行被中断的程序。 中断机制允许 CPU 在实时响应外部或内部事件的同时, 保持对其他任务的处理能力。 ​

        可以想象这样一幅画面, 你正在烹饪一顿美味的晚餐, 准备了各种食材, 点燃了炉灶, 开始了幸福的烹饪过程, 突然, 你的手机响起, 有人打来了一个紧急电话, 打破了你正常的烹饪流程, 这时候你需要立刻停止手中的工作, 迅速接起电话, 与对方进行交流, 在接完电话之后,再回到厨房继续之前的烹饪流程。 这就是一个在实际生活中的中断案例, 中断的概念流程图如下所示:

2.中断的重要性

        在上面的场景中, 作为唯一具有处理能力的主体, 我们一次只能专注于一个任务, 可以等待水烧开、 看电视等等。 然而, 当我们专心致志地完成一项任务时, 常常会有紧迫或不紧迫的其他事情突然出现, 需要我们关注和处理。 有些情况甚至要求我们立即停下手头的工作来应对。只有在处理完这些中断事件之后, 我们才能回到先前的任务。 ​

        中断机制赋予了我们处理意外情况的能力, 而且如果我们能充分利用这个机制, 就能够同时完成多个任务。 回到烧水的例子, 无论我们是否在厨房, 煤气灶都会将水烧开。 我们只需要在水烧开后及时关掉煤气。 为了避免在厨房等待的时间, 而水烧开时产生的声音就是中断信号,提醒我们炉子上的水已经烧开。 这样, 我们就可以在等待的时间里做其他事情, 比如看电视。当水壶烧开发出声音之后, 它会打断当前的任务, 提醒水已经烧开, 这时只需要前往厨房关掉煤气即可。 ​

        中断机制使我们能够有条不紊地同时处理多个任务, 从而提高了并发处理能力。 类似地,计算机系统中也使用中断机制来应对各种外部事件。 例如, 在键盘输入时, 会发送一个中断信号给 CPU, 以便及时响应用户的操作。 这样, CPU 就不必一直轮询键盘的状态, 而可以专注于其他任务。 中断机制还可以用于处理硬盘读写完成、 网络数据包接收等事件, 提高了系统的资源利用率和并发处理能力。

3.中断的上下半部

        中断的执行需要快速响应, 但并不是所有中断都能迅速完成。 此外, Linux 中的中断不支持嵌套, 意味着在正式处理中断之前会屏蔽其他中断, 直到中断处理完成后再重新允许接收中断, 如果中断处理时间过长, 将会引发问题。 ​

        这里仍旧以烹饪的过程中接电话进行举例: 当你正在烹饪一顿美味的晚餐时, 所有的食材都准备好了, 炉灶上的火焰跳跃着, 你正享受着烹饪的乐趣。 突然, 你的手机响起, 发出紧急电话的铃声, 打破了你正常的烹饪流程, 接电话的时间很短并不会对烹饪产生很大的影响, 而接电话的时候可能就有问题了, 水烧开之后可能会煮干、 错过了最好的添加调味料的时间等等。​

        而为了让系统可以更好地处理中断事件, 提高实时性和响应能力, 将中断服务程序划分为上下文两部分: ​

        中断上文是中断服务程序的第一部分, 它主要处理一些紧急且需要快速响应的任务。 中断上文的特点是执行时间较短, 旨在尽快完成对中断的处理。 这些任务可能包括保存寄存器状态、更新计数器等, 以便在中断处理完成后能够正确地返回到中断前的执行位置。 ​

        中断上文是中断服务程序的第一部分, 它主要处理一些紧急且需要快速响应的任务。 中断上文的特点是执行时间较短, 旨在尽快完成对中断的处理。 这些任务可能包括保存寄存器状态、更新计数器等, 以便在中断处理完成后能够正确地返回到中断前的执行位置。

4.中断处理流程  中断的原则

arm 对异常(中断)处理过程: ​

① 初始化:​

        a) 设置中断源,让它可以产生中断​

        b) 设置中断控制器(可以屏蔽某个中断,优先级)​

        c) 设置 CPU 总开关(使能中断) ​

② 执行其他程序: 正常程序 ​

③ 产生中断:比如按下按键--->中断控制器--->CPU​

④ CPU 每执行完一条指令都会检查有无中断/异常产生​

⑤ CPU 发现有中断/异常产生,开始处理 ​

        对于不同的异常,跳去不同的地址执行程序 ​

        这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。 ③④⑤都            是硬件做的。 ​

⑥ 这些函数做什么事情 ​

        软件做的:​

        a) 保存现场(各种寄存器)​

        b) 处理异常(中断):分辨中断源, 再调用不同的处理函数​

        c) 恢复现场 ​

5.ARM处理器程序运行过程

ARM 芯片属于精简指令集计算机(RISC: Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ​

① 对内存只有读、写指令​

② 对于数据的运算是在 CPU 内部实现​

③ 使用 RISC 指令的 CPU 复杂度小一点,易于设计​比如对于 a=a+b 这样的算式,需要经过下面      4 个步骤才可以实现: ​

细看这几个步骤,有些疑问: ​

① 读 a,那么 a 的值读出来后保存在 CPU 里面哪里? ​

② 读 b,那么 b 的值读出来后保存在 CPU 里面哪里?​

③ a+b 的结果又保存在哪里? ​

CPU 运行时,先去取得指令,再执行指令:​

① 把内存 a 的值读入 CPU 寄存器 R0​

② 把内存 b 的值读入 CPU 寄存器 R1​

③ 把 R0、 R1 累加,存入 R0​

④ 把 R0 的值写入内存 a

http://www.lryc.cn/news/446367.html

相关文章:

  • 后端(实例)08
  • 【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机
  • 如何使用ssm实现线上旅游体验系统+vue
  • 探索JMeterTools:一个Python驱动的JMeter脚本生成器
  • 【React】组件通信
  • C++核心编程和桌面应用开发 第七天(运算符重载 智能指针)
  • echarts地图的简单使用
  • Qt 项目优化实践方向
  • 常见的15个:自然语言处理(NLP)实战项目
  • CKKS同态加密通用函数近似方法和openFHE实现
  • Webpack 5的新特性:Asset Modules与Dynamic Import
  • 解释python requests包的timeout
  • 蒙语学习快速方法,速记蒙语单词怎么学习更高效!
  • Vue3组件通信13种方法
  • Servlet入门:服务端小程序的初试(自己学习整理的资料)
  • 代码随想录算法训练营第三七天| 动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ 322. 零钱兑换
  • [报错解决] 运行MATCHA时需要在线下载Arial.TTF字体,但是无法连接huggingface
  • B-树(不是B减树)原理剖析(1)
  • 【shell脚本8】Shell脚本学习--其他
  • 《深度学习》ResNet残差网络、BN批处理层 结构、原理详解
  • javadoc:jdk 9通过javadoc API读取java源码中的注释信息(comment)
  • nordic使用FDS保存数据需要注意的地方
  • docker-compose集群(单机多节点)环境搭建与使用
  • 从静态多态、动态多态到虚函数表、虚函数指针
  • 用 Pygame 实现一个乒乓球游戏
  • 基于大数据可视化的化妆品推荐及数据分析系统
  • Java项目实战II基于Java+Spring Boot+MySQL的汽车销售网站(文档+源码+数据库)
  • 数学基础 -- 微积分最优化之一个最简单的例子
  • kubernetes K8S 结合 Istio 实现流量治理
  • Selenium with Python学习笔记整理(网课+网站持续更新)