Linux中断(栈、上下部)

进程线程中断的核心:栈

进程切换时,需要将当前进程的寄存器参数保存在当前进程的栈中。要再次执行此进程时需要先从栈中恢复此进程的寄存器参数。

对于同个进程的不同线程,代码和数据是所有线程共享的,所以线程间可以通过全局变量来传递数据。

Linuxs系统对中断处理的演进

Linux中的中断处理两个原则:1、原则上中断不能嵌套  2、中断处理越快越好

但当一个中断要耗费很多时间来处理时,它的坏处是:在这段时间内,其他中断无法被处理。换句话说,在这段时间内,系统是关中断的。 如果某个中断就是要做那么多事,我们能不能把它拆分成两部分:紧急的、 不紧急的?
       所以可以将耗时分为上下半部,上半部处理紧急事件,系统关中断,不可被打断。下半部系统开中断可被打断。

 

下半部的实现方法很多,重要两种:1、tasklet(小任务)2、work  queue(工作队列)

1、下半部要做的事情耗时不是太长:tasklet

当下半部比较耗时但是能忍受,并且它的处理比较简单时,可以用 tasklet 来处理下半部。tasklet 是使用软件中断来实现。
总结
  • 中断的处理可以分为上半部,下半部
  • 中断上半部,用来处理紧急的事,它是在关中断的状态下执行的
  • 中断下半部,用来处理耗时的、不那么紧急的事,它是在开中断的状态下执行的
  • 中断下半部执行时,有可能会被多次打断,有可能会再次发生同一个中断
  • 中断上半部执行完后,触发中断下半部的处理
  • 中断上半部、下半部的执行过程中,不能休眠:中断休眠的话,以后谁来调度进程啊?

2、下半部要做的事情太多并且很复杂:工作队列

在中断下半部的执行过程中,虽然是开中断的,期间可以处理各类中断。但是毕竟整个中断的处理还没走完,这期间 APP 是无法执行的。 假设下半部要执行 1 2 分钟,在这 1 2 分钟里 APP 都是无法响应的。
        这谁受得了?所以,如果中断要做的事情实在太耗时,那就不能用软件中断来做,而应该用内核线程来做:在中断上半部唤醒内核线程。内核线程和 APP 都 一样竞争执行,APP 有机会执行,系统不会卡顿。
        这个内核线程是系统帮我们创建的,一般是 kworker 线程,内核中有很多这样的线程:
kworker 线程要去“工作队列” (work queue) 上取出一个一个“工作” (work) ,来执行它里面的函数。
总结
很耗时的中断处理,应该放到线程里去
可以使用 work work queue
在中断上半部调用 schedule_work 函数,触发 work 的处理
既然是在线程中运行,那对应的函数可以休眠。

3、新技术:threaded irq

只提供 thread_fn ,系统会为这个函数创建一个内核线程。发生中断 时,内核线程就会执行这个函数。
新技术 threaded irq ,为每一个中断都创建一个内核线程;多个中断的内核线程可以分配到多个 CPU 上执行,这提高了效率。

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

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

相关文章

企业级网络安全:入侵防御实时阻止,守护您的业务安全

随着互联网技术的快速发展,企业级网络安全问题日益凸显。在这个数字化时代,企业的业务安全不仅关系到企业的形象和声誉,还直接影响到企业的生存和发展。因此,加强企业级网络安全,预防和抵御各种网络攻击已成为企业的重…

【EM算法】算法及注解

EM算法又称期望极大算法,是一种迭代算法,每次迭代由两步组成:E步,求期望(expectation);M步,求极大(maximization)。 算法背景 如果概率模型的变量都是观测变…

利用计算机视觉算法提取裂纹相关特征参数信息

ABCnutter/CrackFeature: 🚀使用计算机视觉相关算法提取裂缝的骨架(矢量化)、轮廓【支持提前修复断裂裂缝】,以及几何特征参数(长度、宽度、面积和主要方向)【欢迎Star】。主要流程以及相关算法如下&#x…

zato,一个神奇的 Python 库!

大家好,今天为大家分享一个神奇的 Python 库 - zato。 Zato是一个高性能的Python企业服务总线(ESB)和应用集成框架,专为简化复杂系统间的通信和数据交换而设计。它提供了一个灵活、可扩展的平台,以支持各种集成需求,从简单的数据传…

Android Studio 之 Intent及其参数传递

一、Intent 显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-…

代码随想录——动态规划

系列文章目录 代码随想录——回溯 代码随想录——贪心算法 代码随想录——动态规划 文章目录 系列文章目录概述简单斐波那契数***爬楼梯***使用最小花费爬楼梯不同路径不同路径 II***整数拆分***不同的二叉搜索树***普通0-1背包***分割等和子集***最后一块石头的重量 II***目标…

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

ros-param添加参数控制rviz显示掉帧问题

在ros中有一套参数系统可以直接写到launch文件中,这样非常方便,不需要编译就能直接用,这对于c来说非常的有好,这里记录一下如何使用。 主要步骤如下: 首先初始化节点 使用nodehandle进行管理,然后通过param…

企业常用Linux文件命令相关知识+小案例

远程连接工具无法连接VMWARE: 如果发现连接工具有时连不上,ip存在,这时候我们查看网络编辑器,更多配置,看vnet8是不是10段,nat设置是否是正确的? 软件重启一下虚机还原一下网络编辑器 查看文件…

Windows版PHP7.4.9解压直用(免安装-绿色-项目打包直接使用)

安装版和解压版 区别 安装版: 安装方便,下一步------下一步就OK了,但重装系统更换环境又要重新来一遍,会特别麻烦解压版(推荐): 这种方式(项目打包特别方便)能更深了解mysql的配置&…

LOF 简介

1. 背景 在LOF之前的异常检测算法大多是基于统计方法的,或是借用了一些聚类算法用于异常点的识别(如DBSCAN, OPTICS)。但这些方法都有一些不完美的地方: 1. 基于统计的方法:通常需要假设数据服从特定的概率分布,这个假设往往是不成…

electron项目打包慢、打包报错

项目使用了electron框架,在第一次打包或者网络条件不好的环境下进行打包时熟速度慢的出奇,甚至经常出现打包失败的情况(如上面图片的报错)。 这是因为,在electron打包的过程中,需要去官方源https://github.…

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了,分数一百分可能,感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204,纯手写 第二题是 物理题 纯蒙,随便猜了个轨迹,答案具体忘了,最后是 .45 第三题暴力 第四题 我是傻逼…

指针的深入理解(七)

指针的深入理解(七) 个人主页:大白的编程日记 个人专栏:C语言学习之路 感谢遇见,我们一起学习进步! 文章目录 指针的深入理解(七)前言一.常量字符串指针1.1常量字符串的理解1.2常量…

OneFlow深度学习简介

介绍 OneFlow是一个基于深度学习的开源框架,主要面向机器学习工程师和研究人员。它提供了类似于其他深度学习框架(如TensorFlow和PyTorch)的API,同时具有高性能和高效的特点。OneFlow专注于在大规模数据集和分布式环境下的训练和推理,以及在生产环境中的部署和优化。其设计…

HBuilderX 中开发vue,引入百度地图获取当前ip地址定位

实现功能&#xff1a;使用百度地图获取IP地址&#xff0c;定位到当前位置 参考文档地址&#xff1a;MapVGL | 快速入门 一、在有外网的情况下&#xff0c;常规引入百度地图的方法如下&#xff1a; 1、在index.html中引入 <script src"//api.map.baidu.com/api?v1.…

Python100个库分享第14个—plyfile(将ply文件展示3d模型)

目录 专栏导读库的介绍库的安装ply文件格式介绍ply下载网址&#xff08;是斯坦福大学的3d模型下载网址&#xff09;报错解决完整代码参考&#xff1a;总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️…

C语言单链表详解

链表和顺序表的区别 顺序表的底层存储空间是连续的&#xff0c;链表的底层存储空间是不连续的&#xff0c;链表的每个节点需要额外的指针来指向下一个节点&#xff0c;占用更多的存储空间。 顺序表的随机访问性能好&#xff0c;时间复杂度为O(1)&#xff0c;链表的随机访问性能…

接口优化技巧

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案 二、接口优化方案总结 1.批处理 批量思想&#xff1a;批量操作数据库&a…

python怎么输出小数

先将整型转换成float型&#xff0c;再进行计算&#xff0c;结果就有小数了。 >>> a 10 >>> b 4 >>> c a/b >>> a,b,c (10, 4, 2) >>> a float(a) >>> d a/b >>> a,b,d (10.0, 4, 2.5) >>> 注意&…