Linux内核提供了三种不同形式的中断底半部实现机制:软中断、tasklet和工作队列。...
http://blog.csdn.net/jin13277480598/article/details/51019762
感谢博主讲的关于为什么需要中断底半部,什么是中断底半部
下半部运行时是允许中断请求的,而上半部运行时是关中断的
头文件:<linux/Workqueue.h>
/**
*工作的数据类型是结构体类型
*/
struct work_struct {
atomic_long_t data;
struct list_head entry;
work_func_t func;
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
/**
*功能:将_func指向的工作处理函数,赋值给_work结构体中的fun函数指针,即创建工作结构,给工作结构填充一个处理函数。
*_work的类型是 struct work_struct
*_func的类型是函数指针,typedef void (*work_func_t)(struct work_struct *work);
*/
INIT_WORK(_work, _func) 这是个宏定义
在大多数情况下, 并不需要自己建立工作队列,而是只定义工作, 将工作结构挂接到内核预定义的事件工作队列中调度, 在kernel/workqueue.c中定义了一个静态全局量的工作队列static struct workqueue_struct *keventd_wq,keventd_wq由内核自己维护,创建,销毁。这样work马上就会被调度,一旦其所在的处理器上的工作者线程被唤醒,它就会被执行。
/**
*功能:调度工作结构, 将工作结构添加到全局的事件工作队列keventd_wq
*/
bool schedule_work(struct work_struct *work);
static void work_handler(struct work_struct *work)
{printk("--%s--%s--&d--\n",__FILE__,__func__,__line__);
}struct work_struct wq;
INIT_WORK(&wq,work_handler); //这个放到内核模块加载函数中
schedule_work(&wq); //这个放到中断处理函数中去
Tasklet 头文件:<linux/interrupt.h>
struct tasklet_struct
{
struct tasklet_struct *next;
unsigned long state;
atomic_t count;
void (*func)(unsigned long); //处理函数
unsigned long data; //给处理函数的参数
};
/**
*功能:定义并初始化一个struct tasklet_struct结构体类型的变量,并绑定中断处理函数(也可以说是底半部函数)
*name:数据类型是struct tasklet_struct
*func函数指针指向一个void (*func)(unsigned long); 的处理函数
*data给处理函数的参数
*/
#define DECLARE_TASKLET(name, func, data) struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } //这是个宏,完成了定义及初始化
/**
*功能:调用自己的中断处理程序
*/
void tasklet_schedule(struct tasklet_struct *t);
转载于:https://blog.51cto.com/5468775/2087959
Linux内核提供了三种不同形式的中断底半部实现机制:软中断、tasklet和工作队列。...相关推荐
- Linux内核学习(三):Bootloader的特种兵-Uboot(一)
Linux内核学习(三):Bootloader的特种兵-Uboot(一) 内容全部来自–><嵌入式应用开发完全手册> 1.什么是U-Boot U-Boot,全称为Universal ...
- linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...
- VMWare虚拟机三种网络形式
网关的概念 网关: 网关实质上是一个网络通向其他网络的IP地址.比如有网络A和网络B,网络A的IP地址范围为"192.168.1.1~192. 168.1.254",子网掩码为25 ...
- 查看linux 文件创建时间,在Linux下查看文件三种时间
原标题:在Linux下查看文件三种时间 在Linux下,文件包含三种时间属性,分别为: atime(access time):最近访问文件内容时间(Last Access Time). mtime(m ...
- Linux下文件的三种时间戳
Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...
- 虚拟机linux和主机网络连接,linux虚拟机中和主机三种网络连接方式的区别
linux虚拟机中和主机三种网络连接方式的区别 在介绍网络模式之前,关于网络的几个简单命令的使用 ifup eth0 //启动网卡eth0 ifdown eth0 //关闭网卡eth0 /etc/ne ...
- linux系统查看FTP用户名密码,Linux的FTP的三种登录方式:
Linux的FTP的三种登录方式: 我们登录FTP有三种方式,匿名登录.本地用户登录和虚拟用户登录. 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous. 本地用户登录:使用系 ...
- linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- Linux内核分析(三)----初识linux内存管理子系统
原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...
- linux监控命令执行,你可能不知道的 即时监控 Linux 使用者执行指令的三种方法...
原标题:你可能不知道的 即时监控 Linux 使用者执行指令的三种方法 这里介绍如何在 Linux 系统上以管理者权限即时监控一般使用者所执行的任何指令. Linux 的 root 管理者可对系统进行 ...
最新文章
- 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别
- 网页Request Headers请求头和Response Headers响应头
- vc++ 提取网页上的文字_用奢悦vc一般多久能反黑
- 画手cv什么意思_lt;3招gt;助你搞定工科出国留学申请简历(CV)!
- HDU2191——悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- Linux node使用npm成功安装命令后,执行时却报找不到命令的问题
- 基于深度学习的自动化行人检测和监控系统
- 【水果识别】基于matlab GUI RGB+HSV水果成熟度分级系统【含Matlab源码 825期】
- SparkSQL Analyzed实例源码解析
- 干货分享:如何把APP软文推广做到好
- 高盛:79页区块链报告-《从理论到实践》(附下载)
- Window11一键安装APK应用详细教程,及错误解决
- x3650服务器引导盘制作,IBM X System ServerGuide 8.41 服务器 系统安装 引导盘图文教程...
- 如何在 Mac 中隐藏文件或文件夹?
- 全球时区查询 API数据接口
- 设计模式--享元模式(Flyweight)
- java clob http传送_JAVA CLOB作为参数传给ORACLE后台
- 华为路由器hilink怎么用_路由器是华为HiLink协议的连接中心
- pbootcms后台编辑器上传mp4视频 默认黑屏不显示如何解决
- 在Idea中修改项目名称