linux内核工作队列使用总结
我总结出的内核工作队列中的4种用法
1. 使用系统的工作队列(不延迟)
1)定义一个工作:
struct work_struct my_work;
2)编写一个函数:
void my_work_func (struct work_struct *p_work)
{
printk("work func\n");
}
3)将工作和函数绑定(一般在open函数里面执行)
INIT_WORK(&my_work, my_work_func);
4)调度工作(实际上是加入到系统的工作队列中)
schedule_work(&my_work);
2. 使用系统的工作队列(延迟)
1)定义一个延迟工作
struct delayed_work my_delayed_work;
2)编写一个函数
void my_work_func (struct work_struct *p_work)
{
printk("work func\n");
}
3)将延迟工作和函数绑定(一般在open函数里进行)
INIT_DELAYED_WORK(&my_delayed_work, my_work_func);
4)调度工作(实际上是加入系统的工作队列中)
schedule_delayed_work(&my_delayed_work, );
schedule_delayed_work函数传入的第二个参数为系统的节拍数,一般系统默认为200Hz,因此2个节拍表示10ms,10ms之后再调用工作中的函数。
3. 使用自己的工作队列(不延迟)
1)定义一个自己的工作队列指针
struct workqueue_struct *p_my_workqueue;
2)创建一个工作队列,并接收返回值,可以用create_singlethread_workqueue或者create_workqueue,这一步一般在open函数中实现。
p_my_workqueue = create_singlethread_workqueue("my_workqueue");
//p_my_workqueue = create_workqueue("my_workqueue");
3)定义一个工作
struct work_struct my_work;
4)编写一个函数
void my_work_func (struct work_struct *p_work)
{
printk("work func\n");
}
5)将工作和函数绑定(一般在open函数里面执行)
INIT_WORK(&my_work, my_work_func);
6)将工作插入工作队列中便会调用工作中注册的函数
queue_work(p_my_workqueue, &my_work);
7)销毁工作队列
destroy_workqueue(p_my_workqueue);
4. 使用自己的工作队列(延迟)
1)定义一个自己的工作队列指针
struct workqueue_struct *p_my_workqueue;
2)创建一个工作队列,并接收返回值,可以用create_singlethread_workqueue或者create_workqueue,这一步一般在open函数中实现。
p_my_workqueue = create_singlethread_workqueue("my_workqueue");
//p_my_workqueue = create_workqueue("my_workqueue");
3)定义一个延迟工作
struct delayed_work my_delayed_work;
4)编写一个函数
void my_work_func (struct work_struct *p_work)
{
printk("work func\n");
}
5)将延迟工作和函数绑定(一般在open函数里进行)
INIT_DELAYED_WORK(&my_delayed_work, my_work_func);
6)将工作插入工作队列中,n个节拍之后便会调用工作中注册的函数(n为queue_delayed_work函数中最后一个参数)
queue_delayed_work(p_my_workqueue, &my_delayed_work, );
7)销毁工作队列
destroy_workqueue(p_my_workqueue);
推荐文章:https://www.ibm.com/developerworks/cn/linux/l-cn-cncrrc-mngd-wkq/
linux内核工作队列使用总结的更多相关文章
- Linux 内核工作队列之work_struct 学习总结
前言 编写Linux驱动的时候对于work_struct的使用还是很普遍的,很早之前就在阅读驱动源码的时候就看到了它的踪影,根据其命名大概知道了它的具体作用,但是仍然不知所以,同时,伴随出现的还有de ...
- Linux内核实现透视---工作队列
作为Linux中断低半部的另一种实现机制的基础,工作队列的出现更多的是为了解决软中断和Tasklet对于用户进程的时间片的不良影响问题的.工作队列本身是可以使用内核线程来替代的,但是使用线程来实现复杂 ...
- Linux内核中的软中断、tasklet和工作队列具体解释
[TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom ...
- [Linux内核]软中断、tasklet、工作队列
转自:http://www.cnblogs.com/li-hao/archive/2012/01/12/2321084.html 软中断.tasklet和工作队列并不是Linux内核中一直存在的机制, ...
- 《深入理解Linux内核》软中断/tasklet/工作队列
软中断.tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来.下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任 ...
- Linux内核学习之工作队列
Author : Toney Email : vip_13031075266@163.com Date : 2020.12.02 Copyright : ...
- linux 内核 tasklets 原理以及工作队列
如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的.因此诞生了弥补以上两个要求的tasklet.它具有以下特性: a)一种特定类型的tasklet只能运行在一个CPU上,不能并行, ...
- 20169212《Linux内核原理与分析》第六周作业
视频学习 一.用户态.内核态和中断 内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 用户态:处于低的执行级别下,代码只能在级别允许的特定范围内活动.在日 ...
- Linux内核中断学习
1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...
随机推荐
- ubuntu opencv
sudo apt-get updatesudo apt-get upgrade sudo apt-get install build-essential libgtk2.0-dev libjpeg-d ...
- adobe
使用adobe acrobat pro dc可以处理pdf,自动识别,编辑pdf,将pdf导出为word.(收费可破解)
- 反射API(一)
<?php function classData(ReflectionClass $class) { echo '<hr>'; $details = '当前文件:'; $detail ...
- Watto and Mechanism CodeForces - 514C (字典树,哈希)
大意: 给定字符串集$S$, 每次询问给出字符串$a$, 求$S$中是否存在一个字符串恰好与$a$相差一个字符. 直接建字典树暴力复杂度是$O(n\sqrt{n})$, 也可以用set维护所有哈希值, ...
- 路由器固定IP配置
前言 路由器插入好电源,插入好网线,笔记本连接路由器的wifi,连接成功后,网页自动打开. 1.在网页自动输入管理员密码 2.上网方式选择固定IP地址,输入IP地址,子网掩码,默认网关,DNS服务 3 ...
- 女性睾酮水平高(High Testosterone Levels in Women)
在外国网站了解睾酮高的一些资料,顺便记录生活点滴. 摘自网址:https://www.healthline.com/health/high-testosterone-in-women 高睾酮的妇女 睾 ...
- MVC实战之排球计分(三)—— 模型类的设计与实现
此软件使用的数据库连接方式code first 由EF框架产生数据库. code first需要对模型类设计和实现.模型类是现实实体在计算机中的表示.它贯穿于整个架构, 负担着在各层次及模块间传递数据 ...
- chrome手机模拟器显示尺寸不正确
存在问题: chrome网页调试器中小屏幕时显示尺寸不正确 原因: 自动调整了dpi,导致不是设计的结果 解决方法: 在<head>中添加如下语句: <meta name=" ...
- Linux stress CPU的测试方法
一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.tar.gz)3.解压并安装 [root@localhost /]#cd /tmp/ [root@localhost ...
- hive top n
hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法 hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派 ...