23 内核开发- Linux 内核下半段的实现方式

23 内核开发- Linux 内核下半段的实现方式

1.定义


下半部,就是执行中断处理密切相关但是中断处理程序本身不执行的工作。

2.为什么要用下半部执行?
  1. 中断处理程序不在进程上下文中运行,所以他们不能阻塞;
  2. 为什么要推后执行,已经在什么什么时候执行非常关键,因为需要尽量减少中断处理程序需要完成的工作量,因为他在运行过程中,当前中断线所在的处理器上都会被屏蔽。缩短中断屏蔽的时间对系统的响应能力和性能至关重要。此外必须尽力缩短中断处理程序的执行,解决办法就是把一些工作放到以后去做。
3.起源 

最早linux 只提供 bottom half 这种机制实现下半部,简称 BH,后面由于性能不高废弃。

4. 任务队列 (task Queue)

任务队列是一种用于管理和执行任务的通用机制。它允许内核将任务排队并异步执行它们。任务队列通常用于执行不需要在特定上下文或时间限制内完成的任务。

在 Linux 内核中,任务队列由以下数据结构表示:

struct task_queue_struct {spinlock_t lock;struct list_head list;const char *name;struct wake_q_head wake_q;struct hrtimer timer;int (*func)(void *data);void *data;
};

其中:

lock:用于保护任务队列的锁。
list:存储已排队的任务的链表。
name:任务队列的名称。
wake_q:用于唤醒等待任务队列中任务完成的进程的等待队列。
timer:用于定期检查任务队列的计时器。
func:要执行的任务的函数指针。
data:要传递给任务函数的数据。

5. 软中断 (SoftIRQ)


软中断(SoftIRQ)是一种中断处理机制,用于处理与硬件设备交互的任务。它允许内核在处理硬件中断后异步执行这些任务,从而提高系统的响应能力和并行性。

在 Linux 内核中,软中断由以下数据结构表示:

struct softirq_action {const char *name;void (*action)(struct softirq_action *);
};struct softirq_list {struct softirq_action *action;unsigned long vec;
};

其中:

name:软中断的名称。
action:要执行的软中断处理程序函数。
vec:软中断的向量号。


6. 任务调度器 (Tasklet)

任务调度器(Tasklet)是一种用于执行与特定硬件设备或软件事件相关的短时间任务的机制。它允许内核在硬件中断处理程序或软中断处理程序上下文中快速且高效地执行这些任务。

在 Linux 内核中,任务调度器由以下数据结构表示:

struct tasklet_struct {struct tasklet_head head;void (*func)(unsigned long);unsigned long data;
};struct tasklet_head {struct tasklet_struct *next;
};

其中:

head:任务调度器的头结构。
func:要执行的任务调度器函数。
data:要传递给任务调度器函数的数据。
next:指向下一个任务调度器的指针。

7.总结


linux 2.6后,内核提供了三种方式实现下半部:软中断,tasklets和工作队列。 以前曾经用过的
BH和任务队列接口已经废除

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

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

相关文章

【静态分析】软件分析课程实验A4-类层次结构分析与过程间常量传播

官网:作业 4:类层次结构分析与过程间常量传播 | Tai-e 参考:https://www.cnblogs.com/gonghr/p/17984124 ----------------------------------------------------------------------- 1 作业导览 为 Java 实现一个类层次结构分析&#xf…

shiro-quickstart启动报错

说明:最近在学登录框架,记录一下学习刚shiro框架,启动快速入门样例的错误; 场景 把shiro代码download下来,打开samples(样例)包,打开快速入门,启动,报错&am…

Apache代理服务器使用注意事项

文章目录 一、配置二、服务器配置三、代理配置四、常用命令1、重启服务器 运行环境:ubuntu 一、配置 服务器配置文件路径:/etc/apache2/apache2.conf不加密代理配置文件路径:/etc/apache2/sites-enabled/000-default.conf加密代理配置文件路…

WiFi网络的重要性

 WiFi网络的重要性 便利性:WiFi网络提供了无线连接,使得用户可以在没有线缆束缚的情况下访问互联网。这种便利性使得用户可以随时随地使用笔记本电脑、平板电脑、智能手机等设备上网,无论是在家中、办公室、咖啡馆还是公共场所。移动性&am…

聊天室项目思路

发起群聊: 从好友表选取人发送到服务器,服务器随机生成不重复的群号,存储在数据库,同时建立中间表,处理用户与群聊的关系 申请入群: 输入群号,发消息给服务器,服务器查询是否存在…

06-xss攻防于绕过

xss的攻击于防御 攻击的利用方式 1)获取cookie,实现越权,如果是获取到网站管理员的cookie,也可以叫提权。注意尽量尽快退出账号,删除session,让session失效 2)钓鱼网站,模拟真实的…

Android 按钮Button点击音效

一、新建工程 编译运行&#xff0c;确保工程无误&#xff0c;这里不过多赘述。 二、UI布局 添加两个播放音效Button <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"…

leetcode-括号生成-101

题目要求 思路 1.左括号的数量等于右括号的数量等于n作为判出条件&#xff0c;将结果存到res中 2.递归有两种&#xff0c;一种是增加左括号&#xff0c;一种是增加右括号&#xff0c;只要左括号的数量不超过n&#xff0c;就走增加左括号的递归&#xff0c;右括号的数量只要小于…

element ui的table多选

使用el-table的selection-change事件来获取选中的值&#xff1b; 例&#xff1a; html代码&#xff1a; <el-button type"primary" click"openTableSet">列表设置</el-button><!-- 列表设置弹框 --> <el-dialog :close-on-click-mo…

【文化课学习笔记】【物理】功与能

【物理】功与能 功 基础概念 定义 一个物体在力的作用下&#xff0c;沿力的方向&#xff0c;通过一段距离(位移)&#xff0c;则称这个力做了功。 公式 功的定义式&#xff1a; \[W Fx \] 这里的 \(x\) 指的是物体沿力的方向上发生的位移。由于力 \(F\) 和位移 \(x\) 都是矢量&…

[笔试训练](十八)

目录 052:字符串压缩 053:chika和蜜柑 054:01背包 052:字符串压缩 压缩字符串(一)_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 双指针模拟 class Solution { public:string compressString(string param) {int nparam.size();string ret;int num…

Linux-基础命令第三天

1、命令&#xff1a;wc 作用&#xff1a;统计行数、单词数、字符数 格式&#xff1a;wc 选项 文件名 例&#xff1a; 统计文件中的行数、单词数、字符数 说明&#xff1a;59代表行数&#xff0c;111代表单词数&#xff0c;2713代表字符数&#xff0c;a.txt代表文件名 选项…

nginx中try_files $uri $uri/ /index.html的作用 和 $uri的含义

try_files $uri $uri/ /index.html; 这句话是Nginx服务器配置中的一条指令&#xff0c;用于设置处理请求的策略。 $uri&#xff1a;这是Nginx内置的一个变量&#xff0c;代表当前请求的URI&#xff0c;不包括参数部分。例如&#xff0c;如果请求的URL是http://example.com/user…

【Java代码审计】代码审计的方法及常用工具

【Java代码审计】代码审计的方法及常用工具 代码审计的常用思路代码审计辅助工具代码编辑器测试工具反编译工具Java 代码静态扫描工具 代码审计的常用思路 1、接口排查&#xff08;“正向追踪”&#xff09;&#xff1a;先找出从外部接口接收的参数&#xff0c;并跟踪其传递过…

【MySQL基本查询(下)】

文章目录 一、update案例 二、Delete案例注意&#xff1a;delete 全表数据的行为慎用&#xff01;truncate 三、插入查询结果案例 四、了解一些函数1.count函数2.sum函数3. avg函数4.max函数5. min函数 五、group by子句的使用案例having和where 一、update 该关键字的功能就是…

蓝桥杯备战5.图书管理员

[NOIP2017]图书管理员 (nowcoder.com) #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e510,M1e310; int a[N]; int n,q; int check(int l,int x) {int tmppow(10,l);for(int i1;i<n;i){if(a[i]%tmpx){cout<&…

如何在40分钟之内,又快又准完成四六级阅读柯桥考级英语培训

答题步骤和技巧 1 选词填空 选词填空部分字数在200~300之间&#xff0c;设有10个空&#xff0c;提供15个备选项&#xff0c;从中选出最合适答案。选词填空题相对于普通的完型题简单&#xff0c;但是考察内容基本一致。集中考察的点有语法现象&#xff0c;逻辑衔接和搭配。每空…

纯血鸿蒙APP实战开发——数字滚动动效实现

介绍 本示例主要介绍了数字滚动动效的实现方案。 该方案多用于数字刷新&#xff0c;例如页面刷新抢票数量等场景。 效果图预览 使用说明&#xff1a; 下拉页面刷新&#xff0c;数字进行刷新。 实现思路 通过双重ForEach循环分别横向、纵向渲染数字。 Row() {ForEach(this…

MySQL数据库——23.元数据

MySQL 元数据 是关于数据库和表结构的数据&#xff0c;它包含了数据库中的各种信息&#xff0c;例如表的结构、索引、触发器、存储过程等。元数据存储在系统数据库中&#xff0c;主要包括以下几个系统表&#xff1a; information_schema: 这个数据库包含了 MySQL 数据库服务器…

Rancher简介

Rancher是一个容器管理平台&#xff0c;它提供了一套工具和功能来帮助用户轻松部署和管理容器化应用。 以下是Rancher的主要特点和功能&#xff1a; 多集群管理&#xff1a;Rancher能够集中管理多个Kubernetes集群&#xff0c;无论这些集群位于云上还是本地数据中心。认证与权…