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

[IMX6ULL驱动开发]-Linux对中断的处理(一)

目录

中断概念的引入

ARM架构中断的流程

异常向量表

Linux系统对中断的处理

ARM对程序和中断的处理

Linux进程中断处理


中断概念的引入

如何理解中断,我们可以进行如下抽象。把CPU看做一个母亲,当它正在执行任务的时候,可以看为是一个母亲在看书。此时可能发生许多不同的情况,比如说:远处传来猫叫声、快递敲门、房间中小孩子传来哭声,如上三种,其实都可以看做CPU的中断,可以根据重要性来进行判断是否要放下手头中正在看的书(CPU暂时暂停处理任务去执行中断)进行处理

此时,还有可能发生如下情况,比如说地震了、突然掉下来一只蜘蛛、水突然烧开了,此时肯定是要停止看书去处理这些突发事件的(发生异常的时候,CPU必须马上处理)

如果这个母亲决定去处理听到的事,那么首先她需要先使用书签夹在书上,记录下当前看到的位置(保存现场),然后再去处理问题(处理异常),回来后,通过书签找到之前阅读的位置(恢复现场)。


ARM架构中断的流程

ARM架构中断的流程如下:

1、初始化

        首先设置中断源让它们可以产生中断(只有外界可以产生声音,比如猫叫、小孩子哭等,才可以产生中断),比如让一个GPIO引脚可以产生中断。然后设置中断控制器,设置中断的优先级、或者屏蔽某些中断,比如耳朵听见了,但是不想去处理,可以假装没有听见,这样就是屏蔽了某个中断。最后需要开启CPU的中断总开关(如果母亲是聋子的话,对于外界所有声音都是无效的)

2、CPU执行任务

3、产生中断

        按下按键,中断信号发给中断控制器,中断控制器再发给CPU。

4、CPU每执行一条指令都会检查是否有异常/中断产生(硬件决定)

5、发生异常/中断,开始处理

        对于不同异常,跳到不同地址执行处理(异常向量表),这些地址上是函数指针或者函数地址,用来处理不同的异常

6、保存现场、执行处理函数、恢复现场


异常向量表

当发生异常的时候,CPU会根据不同的异常来执行不同的处理。

从异常向量表跳转过去处理异常的时候,首先会保护现场、处理异常最后恢复现场


Linux系统对中断的处理

ARM对程序和中断的处理

如何理解栈在进程、线程、中断中的作用,我们需要先了解ARM是怎么处理程序的,ARM芯片属于精简指令集计算机,它对于内存是只有读、写操作的。

比如说我们要进行a=a+b的运算,那么我们需要先读取a到CPU中,然后在读取b到CPU中,在CPU中执行a+b,然后在写入到a当中。

如果在看的更加细节,那么我们可以通过下图来进行解释。CPU首先会先取代码,才能知道我们一步步要进行什么操作(这里代码需要转化为机器码),我们首先把a的值取到R0寄存器中,然后把b的值取到R1寄存器中,让R1、R0寄存器相加存放到R0寄存器,然后再把R0寄存器的值读取到a中。

假如,此时发生了中断,那么CPU是怎么进行处理的呢?

Linux进程中断处理

当进程A执行到一半的时候发生了中断,此时需要保存现场,然后执行中断,再恢复现场。当进程A继续执行,此时再次发生了中断,继续保存现场,执行中断,恢复现场。定时器发现进程A的时间用完之后,会保存A的现场,然后恢复B的现场。(对于这个定时器个人理解为,单核CPU并发执行进程,每个进程执行一段时间切换,宏观上看成并行)

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

相关文章:

  • PHP基础学习笔记(面向对象OOP)
  • Mysql超详细安装配置教程(保姆级图文)
  • HR招聘测评,如何判断候选人的团队协作能力?
  • [STM32-HAL库]Flash库-HAL库-复杂数据读写-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C6T6
  • windows 下访问 csdn 异常问题
  • vue3结合element-plus之如何优雅的使用表格
  • 网络协议——Modbus-RTU
  • 【Qt】如何优雅的进行界面布局
  • 【八股系列】分别说一下nodeJS和浏览器的事件循环机制?
  • 关于基础的流量分析(1)
  • 数据结构---树,二叉树的简单概念介绍、堆和堆排序
  • MySQL聚合函数(多行函数)
  • 智慧教室课堂-专注度及考试作弊系统、课堂动态点名,情绪识别、表情识别和人脸识别结合
  • 单例模式简要介绍
  • 深度学习面试问题总结(21)| 模型优化
  • 4月手机行业线上市场销售数据分析
  • 首都师范大学聘请旅美经济学家向凌云为客座教授
  • 多电脑共享鼠标键盘
  • 展厅设计对企业有哪些作用
  • LeetCode-102. 二叉树的层序遍历【树 广度优先搜索 二叉树】
  • 基于时频模糊算子的数据增强方法
  • 浅谈后端整合Springboot框架后操作基础配置
  • 英码科技算能系列边缘计算盒子再添新成员!搭载TPU处理器BM1688CV186AH,功耗更低、接口更丰富
  • selenium 爬取今日头条
  • docker 安装 yapi
  • 【AI如何帮你编写测试用例并输出表格格式】
  • 九宫格转圈圈抽奖活动,有加速,减速效果
  • 利用阿里OSS服务给文件设置过期删除--简单版
  • LabVIEW控制Trio控制器
  • 02--大数据Hadoop集群实战