IM6ULL学习第18章Linux 系统对中断的处理

news2024/11/25 22:58:42

什么是栈

栈是一段内存空间。

ARM处理器程序的运行过程

ARM芯片属于精简指令集(RISC:Reduced Instruction Set Computing)
特点:
1、对内存只有读和写两种指令,
2、所有的数据运算都是在CPU内部完成的。

举例实现a=a+b;
在这里插入图片描述

CPU 先在内存中读取a,b的值放入到CPU的寄存器(这里的寄存器不是指的内存中分配的)中,再进行运算,然后把计算值返回到内存中。
1把内存 a 的值读入 CPU 寄存器 R0,
2 把内存 b 的值读入 CPU 寄存器 R1,
3 把 R0、R1 累加,存入 R0,
4 把 R0 的值写入内存 a。
这个过程中R0 R1寄存器的值会被刷新,那这时如果有B函数打断这个函数,或者响应中断打断这个函数,他们也会使用到CPU中R0,R1寄存器,那么原有的寄存器中的值会被刷新,该如何解决?这时便引入了现场保存和恢复问题。

程序被中断时,怎么保存现场

当正在运行的程序被打断时,这时会将CPU寄存器的值保存到相应的栈中。等恢复现场时,再将这些值取出给CPU寄存器。

举例1函数A中调用函数B流程如下图所示。
在这里插入图片描述
1、函数调用
在函数 A 里调用函数 B,实际就是中断函数 A 的执行,那么需要把函数 A 调用 B 之前瞬间的 CPU 寄存器的值,保存到栈里;再去执行函数 B;B函数可能之前被调用过,会现将B函数的栈中的值回传给CPU中的寄存器中,运行B函数的代码;B函数调用完成以后,恢复现场,现将B函数中的值存进B对应的栈中将A函数的栈中的值取出给CPU,再继续运行A函数的代码
2、中断处理
a) 进程 A 正在执行,这时候发生了中断。
b) CPU 强制跳到中断异常向量地址去执行,
c) 这时就需要保存进程 A 被中断瞬间的 CPU 寄存器值
d) 可以保存在进程 A 的内核态栈,也可以保存在进程 A 的内核结构体中。(这个是不是和后面的两种方法有关我这还不清楚
e) 中断处理完毕,要继续运行进程 A 之前,恢复这些值。
3、进程切换
a) 在所谓的多任务操作系统中,我们以为多个程序是同时运行的。
b) 如果我们能感知微秒、纳秒级的事件,可以发现操作系统时让这些程序
依次执行一小段时间,进程 A 的时间用完了,就切换到进程 B。
c) 怎么切换?
d) 切换过程是发生在内核态里的,跟中断的处理类似。
e) 进程 A 的被切换瞬间的 CPU 寄存器值保存在某个地方;
f) 恢复进程 B 之前保存的 CPU 寄存器值,这样就可以运行进程 B 了。
可通过下图理解下。
在这里插入图片描述

进程和线程的概念

在 Linux 中:资源分配的单位是进程,调度的单位是线程。

用线程来处理下半部中断原理

内核会提供一个worker线程,这个线程里有个work queue 队列;在这个work queue中放一个work struct 结构体,这个结构体提供一个.fun成员就是要执行的函数。
也就是说,在一个进程里,可能有多个线程,这些线程共用打开的文件句柄、全局变量等等。

这里我理解线程就是任务,他们可以访问这个进程(相当于单片机中的工程)的定义的一些全局变量
而这些线程,之间是互相独立的,“同时运行”,也就是说:每一个线程,都有自己的栈。
在这里插入图片描述

Linux中系统对中断处理方法

Linux系统对中断处理的两个原则

1不能进行中断嵌套,也就是说当前中断响应时,即使优先级更高的中断发生也不能打断当前中断去响应
2中断的处理越快越好。

Linux中的中断的扩展

硬件中断
硬件中断:每个硬件产生的中断比如按键产生的中断,这类中断称为硬件中断。先可以认为硬件中断是由数组实现的。
数组中存放的是函数指针。

在这里插入图片描述
当A中断发生时,相应的A函数将会被调用。

软件中断:

在这里插入图片描述

软件中断和硬件中断相比,软件中断是认为制造的中断,也有相应的中断号和对应的中断函数,此外还有一个flage用于标记是否产生了中断。那么存在以下两个问题。
1软件中断何时生产?
由软件决定,对于 X 号软件中断,只需要把它的 flag 设置为 1 就表示发生了该中断。
2软件中断何时处理?
在处理完硬件中断后,再去处理软件中断。软件中断相当于有硬件中断响应后会遍历一下这个数组,检查是否有flage为1,为1响应响应的软件中断

用上下两部分(硬件中断、软件中断分开)的方式处理中断

这里注意硬件中断不能够被打断,软件中断可以被实时发生的硬件中断打断

在这里插入图片描述

 硬件中断发生时,开始处理,preempt_count(这里简称pct)++为,然后执行中断上半部(硬件中断),硬件中断执行完毕pct--为0,这时判断pct?(pct为0故4为假)执行N,pct++为1然后开启中断(开启中断的意思是可以响应其他硬件中断),处理下半部中断(软件中断),这里分两种情况1、处理软件中断过程中如果没有其他硬件中断打断,则继续处理软件中断,执行完毕后关中断(这时不能响应硬件中断了),然后关中断(硬件中断不能响应),pct-- 为0。2、处理软件中断过程中如果有其他硬件中断(中断B)打断,这时跳到B中断的开始处理处pct++为2 硬件中断B处理,然后pct--为1判断pct,pct为真完成处理,回到硬件中断A的软件中断处,继续处理A和B的软件中断。

实现用线程来处理下半部中断的方法

1先构造一个worker结构体里面提供.func(要执行的函数)
2中断上半部执行时将worker放入work queue中。

线程化的中断进行处理 threaded irq

	对每一个中断都提供一个中断线程。应对于多核cpu。因为一个中断线程只能在一个核上运行,多创建几个可以在多个核的cpu上运行。
	内核提供了一个函数 request_threaded_irq,这个函数中的参数irq为中断号查询哪个中断,handler 为上半部中断,上半部中断可以为空这样上半部中断都可以在线程中运行。你可以thread_fn,系统会为这个函数创建一个内核线程,发生中断时,内核线程就会执行这个函数。

新技术 threaded irq,为每一个中断都创建一个内核线程;多个中断的内核线程可以分配到多个 CPU 上执行,这提高了效率。

这里只是学习时的个人理解仅供个人学习和参考,感谢韦东山老师资料提供的文档,如有侵权即刻删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛选题 基于深度学习的人脸识别系统

前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…

相比SiteGPT,用HelpLook创建Chatbot有哪些优势?

在当今快节奏的数字时代,很多企业都在不断寻找新的方法来改善客户支持和简化运营。一种广受欢迎的解决方案是使用AI问答机器人(Chatbot)。聊天机器人凭借其理解自然语言查询和实时响应的能力,已成为各行业企业不可或缺的工具。 S…

1. PCIE基础入门知识

GT/s 是"每秒十亿次传输" 时间版本速率2003Pcie 1.02.5GT/s2006PCIE 2.05GT/s2010PCIE 3.08GT/s2017PCIE 4.016GT/s 高速接口:雷电接口(PCIEx4接口 ) PCIE接口 工作模式:Endpoint 和 Root Port。 Endpoint&#xff0…

[pai-diffusion]pai的easynlp的clip模型训练

EasyNLP带你玩转CLIP图文检索 - 知乎作者:熊兮、章捷、岑鸣、临在导读随着自媒体的不断发展,多种模态数据例如图像、文本、语音、视频等不断增长,创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容,跨模态检索是跨模态…

人脸识别技术应用安全管理规定(试行)|企业采用人脸打卡方式,这4条规定值得关注

近日,为规范人脸识别技术应用,国家互联网信息办公室起草了,并向全社会公开征求意见。该规定一共列举了25条,企业如借助人脸识别技术采集考勤打卡数据,以下4条规定值得关注。 第四条 只有在具有特定的目的和充分的必要…

【前端知识】Three 学习日志(四)—— 相机控件

Three 学习日志&#xff08;四&#xff09;—— 相机控件 一、引入相机控件 <!-- 引入相机控件 --> <script type"importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "../…

idea中提示:error has occurred, please check your installation and try again

目录 报错原因解决总结 报错 idea中提示&#xff1a;error has occurred, please check your installation and try again 原因 1.起初我是把一个运行正常的java程序&#xff0c;放到了src下&#xff0c;新建的一个包&#xff08;包名为java.first&#xff09;中&#xff0c…

torch其他层和联合使用

recurrent layers一般是特定的结构&#xff0c;在语音识别和创作用的比较多&#xff0c;又RNN,LSTM,GRU一些东西。 transform 层nlp常用&#xff0c;在cv领域表现得很不错 线性层&#xff0c;infeature和outfeature还有一个偏置 dropout层&#xff0c;是为了防止过拟合&…

基于ssm扶贫产品和扶贫物资捐赠系统033

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

软考考试多少分算通过?

软考证书取得需要达到总分45分&#xff0c;每门科目满分为75分。因此&#xff0c;不要小看45分&#xff0c;在考试中获得这个分数并不容易。此外&#xff0c;软考要求一次性通过&#xff0c;如果没有通过&#xff0c;成绩将不被保留。因此&#xff0c;必须在一次考试中成功通过…

改写paddledetection为cmake版(c++)

下载源代码 官方地址&#xff1a; https://gitee.com/paddlepaddle/PaddleDetection 网盘&#xff1a; paddledetection 链接&#xff1a;https://pan.baidu.com/s/1g0z5SYQNDR1pwe9iAtvR3A?pwdktl6 提取码&#xff1a;ktl6 paddleocr 链接&#xff1a;https://pan.baidu.c…

不理解路径问题的大坑记录

./表示当前目录 当前所在的目录 一直写的是…/老是访问不到 就像着人家组件有什么问题 ./了一下成功了 果然 有句话说的真的很棒 不报错才是最可怕的 谁知道你的错误是什么

No servers available for service: renren…。 Gateway 网关报503错误 ,已解决

目录 环境配置问题描述loadbalancer的作用 环境配置 问题描述 配置spring cloud gateway使用端口访问就可以&#xff0c;使用lb:// 就报503 gateway:routes:- id: admin_routeuri: lb://gulimall-admin # uri: http://localhost:8080predicates:- Path/api/**filter…

Start 方法源码深究——模板方法设计模式

目录 一. &#x1f981; 前言1.1 New状态1.2 Runnable1.3 Runing1.4 Block状态1.5 Terminated状态 二. &#x1f981; 线程 start 方法源码剖析2.1 虚拟机调用run方法执行线程2.2 最少有两个线程在执行2. 3 不可以重复执行2.4 start方法体 三. &#x1f981; 模板方法设计模式3…

李沐深度学习记录1:零碎知识记录、08线性回归

简要记录&#xff0c;以便查阅~ 一、零碎知识 x.numel()&#xff1a;看向量或矩阵里元素个数 A.sum()&#xff1a;向量或矩阵求和&#xff0c;axis参数可对某维度求和&#xff0c;keepdims参数设置是否保持维度不变 A.cumsum&#xff1a;axis参数设置沿某一维度计算矩阵累计和…

05_Bootstrap插件02

7 小标签 通过 .label 实现小标签&#xff0c;用于提示类。 <h1>h1标题 <span class"label label-default">标签</span></h1> <h2>h2标题<span class"label label-default">标签</span></h2> <h3&g…

精品Python思政素材数据库在线学习资源网

《[含文档PPT源码等]精品基于Python实现的思政素材数据库设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScri…

Linux:GlusterFS 集群

GlusterFS介绍 1&#xff09;Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储. 2&#xff09;Glusterfs通过TCP/IP或InfiniBand RDMA网络链…

2023年9月21日

完善登录界面的注册登录功能 头文件1 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPushButton> #include <QLineEdit> #include <QLabel> #include <QMovie> #include <QDebug> #include <QMessage…

【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

TCP协议 1.连接管理机制2.再谈WAIT_TIME状态2.1理解WAIT_TIME状态2.2解决TIME_WAIT状态引起的bind失败的方法2.3监听套接字listen第二个参数介绍 3.滑动窗口3.1介绍3.2丢包情况分析 4.流量控制5.拥塞控制5.1介绍5.2慢启动 6.捎带应答、延时应答 1.连接管理机制 正常情况下&…