当前位置: 首页 > 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

相关文章:

什么是中断?

1.什么是中断 2.中断的重要性 3.中断的上下半部 4.中断处理流程 中断的原则 5.ARM处理器程序运行过程 6.程序被被中断时,怎么保护现场 1.什么是中断 中断是指在 CPU 正常运行期间, 由外部或内部事件引起的一种机制。 当中断发生时,…...

后端(实例)08

设计一个前端在数据库调取数据的表格&#xff0c;并完成基础点击增删改查的功能&#xff1a; 1.首先写一个前端样式&#xff08;空壳&#xff09; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here&l…...

【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机

TIM定时器输出比较 一、输出比较简介1、OC&#xff08;Output Compare&#xff09;输出比较2、PWM简介3、输出比较通道(高级)4、输出比较通道(通用)5、输出比较模式6、PWM基本结构配置步骤&#xff1a;程序代码&#xff1a;PWM驱动LED呼吸灯 7、参数计算8、舵机简介程序代码&am…...

如何使用ssm实现线上旅游体验系统+vue

TOC ssm691线上旅游体验系统vue 绪论 课题背景 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化。目前&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0…...

探索JMeterTools:一个Python驱动的JMeter脚本生成器

JMeterTools 简介 JMeterTools 是一个由 Python 编写的开源项目&#xff0c;旨在帮助测试人员快速生成 JMeter 测试脚本。通过简单的 Python API&#xff0c;用户可以方便地定义测试计划、线程组、HTTP 请求等&#xff0c;可以结合接口自动化测试项目&#xff0c;将接口自动化…...

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…...

C++核心编程和桌面应用开发 第七天(运算符重载 智能指针)

目录 1.数组类 2.运算符重载 2.1加号运算符 2.1.1成员函数实现 2.1.2全局函数实现 2.1.3加号重载 2.2左移运算符 2.3递增运算符 2.4指针运算符 2.5赋值运算符 1.数组类 //默认构造函数 MyArray::MyArray() {m_Size 0;m_Capacity 100;pAddress new int[m_Capacity]…...

echarts地图的简单使用

echarts地图的简单使用 文章说明核心源码效果展示源码下载 文章说明 主要介绍echarts地图组件的简单使用&#xff0c;记录为文章&#xff0c;供后续查阅使用 目前只是简单的示例&#xff0c;然后还存在着一些小bug&#xff0c;主要是首个Legend的点击会导致颜色全部不展示的问题…...

Qt 项目优化实践方向

目录 1. 使用智能指针2. 避免在全局或静态作用域中使用裸指针3. 利用Qt的对象树进行资源管理4. 延迟加载和按需加载资源5. 合理使用Qt的资源文件&#xff08;qrc&#xff09;6. 监控和调试内存使用7. 优化数据结构8. 减少不必要的资源复制9. 使用缓存机制10. 遵循RAII原则 以下…...

常见的15个:自然语言处理(NLP)实战项目

自然语言处理&#xff08;NLP&#xff09;实战项目涵盖了从基础到高级的多个领域&#xff0c;以下是一些常见的NLP实战项目&#xff0c;每个项目都附带了简要的描述和可能用到的技术栈&#xff1a; 1. 文本分类&#xff08;Text Classification&#xff09; 描述: 将文本数据…...

CKKS同态加密通用函数近似方法和openFHE实现

摘要 同态加密可以直接在密文上进行运算&#xff0c;尤其是CKKS&#xff0c;可以直接在实数的密文上进行运算。服务器可以利用强大的计算能力&#xff0c;在不泄露用户隐私的情况下&#xff0c;为用户提供便捷的外包运算服务。然而&#xff0c;CKKS只能进行算术运算&#xff0…...

Webpack 5的新特性:Asset Modules与Dynamic Import

文章目录 Asset ModulesAsset Modules 类型配置示例分析 Dynamic Import动态导入语法配置示例分析 实际案例分析Asset Modules 实际案例Dynamic Import 实际案例 性能优化Asset Modules 性能优化Dynamic Import 性能优化 详细代码分析Asset Modules 代码分析Dynamic Import 代码…...

解释python requests包的timeout

解释python requests包的timeout 哈哈哈。。。。垃圾python又来了 1 问题 你能看懂下面两个timeout的含义就不用看下面的内容了。 requests.get(http://example.com, timeout(2, 5)) requests.get(http://127.0.0.1:5000/api,timeout1)官网解释&#xff01;&#xff01;&am…...

蒙语学习快速方法,速记蒙语单词怎么学习更高效!

要高效学习蒙古语和速记单词&#xff0c;首先要掌握基础知识&#xff0c;如字母表和发音规则。接着&#xff0c;专注于学习日常用语和基础词汇&#xff0c;并运用记忆技巧如联想、发音和构词法来帮助记忆。利用专门的学习软件&#xff0c;如“蒙语学习通”&#xff0c;可以提供…...

Vue3组件通信13种方法

在 Vue3 中,组件之间的通信是构建应用程序的关键 1. 父组件向子组件传递数据 (Props)「父组件:」「子组件:」 2. 子组件向父组件传递数据 (Emit)「父组件:」「子组件:」 3. 兄弟组件通信 (Mitt)「发送事件的组件:」「接收事件的组件:」 4. 透传 Attributes ($attrs)「父组件:」…...

Servlet入门:服务端小程序的初试(自己学习整理的资料)

目录 一.前言 二.建立基础结构​编辑 三.具体步骤 找到Tomcat文件并打开Tomcat。 在webapps中创建一个自己的文件夹。 在classes中新建一个Java文件。 在lib中导入需要的jar文件包。 配置环境变量 在Java文件的目录下打开cmd并输入 javac -d . HelloServlet.java进行…...

代码随想录算法训练营第三七天| 动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ 322. 零钱兑换

今日任务 动态规划&#xff1a;完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ 322. 零钱兑换 518.零钱兑换II 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; class Solution {public int change(int amount, int[] coins) {int[] dp new int[amount …...

[报错解决] 运行MATCHA时需要在线下载Arial.TTF字体,但是无法连接huggingface

一、报错详情 requests.exceptions.ConnectTimeout:(MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /ybelkada/fonts/resolve/main/Arial.TTF (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnec…...

B-树(不是B减树)原理剖析(1)

目录 B树的主要特性&#xff1a; B树的操作&#xff1a; B树的优点&#xff1a; 为什么要发明出B-树&#xff1f; B树的概念和原理剖析 原理图讲解(部分讲解在图中) 初始化结点&#xff1a; 处理数据数量计算(了解) 底层代码实现(加深理解) 前些日子我们学了AVl树&…...

【shell脚本8】Shell脚本学习--其他

目录 ​编辑 Shell输入输出重定向 重定向深入讲解 Here Document Shell输入输出重定向 Unix 命令默认从标准输入设备(stdin)获取输入&#xff0c;将结果输出到标准输出设备(stdout)显示。一般情况下&#xff0c;标准输入设备就是键盘&#xff0c;标准输出设备就是终端&…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...