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,一经查实,立即删除!

相关文章

Swift中的字符串

Swift中的字符串是一个有序的字符集合,用于存储和操作文本数据。字符串由一系列的Unicode字符组成,可以包含任意的字符,包括字母、数字、符号和空格等。 在Swift中,字符串的类型是String,可以使用双引号或者三引号来表…

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

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

【EM算法】算法及注解

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

Mybatis中@SelectKey注解

注解简介 SelectKey 注解主要用于在插入数据后获取数据库生成的主键。这在很多数据库中是常见的做法,比如使用自增字段或序列生成主键。 SelectKey 注解通常与插入数据的 SQL 语句一起使用,它告诉 MyBatis 在执行插入操作后执行另一个 SQL 语句来获取主…

打造大型ERP系统:Spring Cloud的优雅实践

在当今的信息化时代,企业资源规划(ERP)系统已经成为企业信息化管理的核心。随着企业规模的不断扩大,对ERP系统的可扩展性和可维护性要求也越来越高。近年来,微服务架构逐渐兴起,它以其高内聚、低耦合的特性…

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

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-…

autoware.universe perception中ground_segmetation的基础知识学习笔记

[[maybe_unused]] 是 C11 及之后版本中的一个属性,用于抑制编译器关于未使用实体(变量、函数等)的警告。它告诉编译器,如果实体未被使用,那也是可以接受的,因此不会为此生成警告。[[maybe_unused]] 只能用于…

代码随想录——动态规划

系列文章目录 代码随想录——回溯 代码随想录——贪心算法 代码随想录——动态规划 文章目录 系列文章目录概述简单斐波那契数***爬楼梯***使用最小花费爬楼梯不同路径不同路径 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的配置&…

PCA 主成分分析

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就…

LOF 简介

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

electron项目打包慢、打包报错

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

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

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

指针的深入理解(七)

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

DSBridge---跨端的原生与H5的通信框架

dsBridge介绍 dsBridge是一个三端易用的现代跨平台 Javascript bridge, 通过它,你可以在Javascript和原生之间同步或异步的调用彼此的函数。 最近在开发h5相关的需求,而且相关的h5页面会嵌入到app,h5页面有拍照、上传照片、上传…