Linux内核模块编程可以使用的内核组件
2.2.2 在阅读《深入Linux内核架构与底层原理》 作者:刘京洋 韩方,发现一些错误,有些自己的理解,特以此记录
1、工作队列(workqueue)
队列是一种可以先进先出的数据结构,常常用来将一些工作任务缓冲的情况中。在linux下的workqueue可以用来处理内核中的任务链。
linux内核有workqueue,用户可以实现自己的workqueue,如果需要workqueue时,都临时创建,会导致系统开销大,为了减少开销,内核使用了workqueue的线程池的技术,将创建好的workqueue,应用完毕后,返回到线程池中,需要新workqueue时,先看池里,如果有则直接使用,否则再新建,避免了频繁的workqueue的创建和销毁。通过这种动态绑定workqueue的机制就是cwmq(Concurrency Managed Workqueue)
见原书上p37页,感觉排版造成的问题不少阿
#include <linux/module.h>
#include <linux/init.h>
#include <linux/workqueue.h> static struct workqueue_struct *queue = NULL;
static struct workqueue_struct work; static void work_handler(struct work_struct *data){
printk(KERN_ALERT "work hadler\n");
} static init __initqueue_init(void){
queue = create_singlethread_workqueue("Hello world");
INIT_WORK(&work, work_handler);
schedule_work(&work); return ;
} static void __exit queue_exit(void){
destroy_workqueue(queue);
} MODULE_LICENSE("GPL");
module_init(queue_init);
module_exit(queue_exit);
2、中断系统和tasklet
Linux下中断分为3个层次,
1、最低层次是在linux kernel源码的arch目录下与硬件有关的代码下,我的是在/linux-4.20.6/arch/x86/include/asm/irq_vectors.h,这个文件定义了一些硬件中断号,直接完成硬件的映射
2、中层是do_IRQ函数,根据下层传来的中断号查找中断函数、处理CPU访问和中断重入等
3、上层是直接调用真实的中断处理函数
tasklet主要用于专用中断,不能阻塞,耗时长的操作都有tasklet在上下文之外调度执行,常用软中断实现。
Linux内核模块编程可以使用的内核组件的更多相关文章
- linux内核模块编程实例
linux内核模块编程实例 学号:201400814125 班级:计科141 姓名:刘建伟 1.确定本机虚拟机中的Ubuntu下Linux的版本 通过使用命令uname -a/uname -r/una ...
- Linux内核模块编程——Hello World模块
Linux内核模块编程 编程环境 Ubuntu 16.04 LTS 什么是模块 内核模块的全称是动态可加载内核模块(Loadable Kernel Modul,KLM),可以动态载入内核,让它成为内核 ...
- Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读
Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成 ...
- 【原创】Linux 内核模块编程
sudo gedit hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linu ...
- 1.Linux内核模块编程
1.模块加载程序结构 - 模块加载函数: static int _init init_function(void); module_init(init_function); - 模块卸载函数: sta ...
- inux内核模块编程入门
linux内核模块编程入门 2013-07-06 23:59:54 分类: LINUX 原文地址:linux内核模块编程入门 作者:s270768095 模块编程属于内核编程,因此,除了对内核相关知识 ...
- 《linux内核设计与分析》内核模块编程
内核模块编程 一.准备工作 虚拟机:VMware Workstation 12操作系统:ubuntu当前内核版本:linux-headers-4.4.0-22-generic 二.有关于内核模块的知识 ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- Linux网络编程&内核学习
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
随机推荐
- cmd批处理中set /a和set /p的区别介绍
在 SET 命令中添加了两个新命令行开关: SET /A expression SET /P variable=[promptString]/p 是让你输入/a 是指定一个变量等于一串运算字符 什么参 ...
- 为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树
B-树由来 定义:B-树是一类树,包括B-树.B+树.B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.B-树是专门为外部存储器设计的,如磁盘,它对 ...
- 原生JS表单序列化
// 表单序列化,IE9+ HTMLFormElement.prototype.serialize = function() { var form = this; // 表单数据 var arrFor ...
- 【题解】51nod 1806 wangyurzee的树
看这道题目懵逼了好久, \(m <= 17\) 一眼容斥,然而并没有想到怎么求出生成树的个数.然后灵光一闪——我不是学过一个叫Prüfer编码的东西嘛?!那就完美解决啦~ Prüfer编码就是将 ...
- [TJOI2013]最长上升子序列 平衡树
其实是一道性质题. 首先观察到插入的数是递增的, 那么根据上升子序列的性质, 我们的非法情况就是统计到了在一个数前面的后插入的数, 但是由于插入的数是递增的,显然插入这个数后,这个数就是最大的,所以除 ...
- BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
题目链接 BZOJ2795 BZOJ2890 BZOJ3647 题解 三倍经验! 我们要快速求区间最小循环节 我们知道循环节有如下性质: ①当\(L\)为循环节长度,那么\(s[l...r - L] ...
- 洛谷 P1969 积木大赛 解题报告
P1969 积木大赛 题目描述 春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为\(n\)的大厦,大厦可以看成由\(n\)块宽度为1的积木组成,第\(i\)块 ...
- mac, xcode 6.1 安装command line tools 支持,autoconf,automake等
以下软件包 都去我的环境库找到 1 先安装 tcl库 2 安装macports /opt/local/bin/port 一般装到这里 安装autoconf时提示: Warning: The Xcode ...
- YBT 1.2 二分与三分
二分与三分: 二分(单调性),三分(单峰性),这章主要考数学,模拟,与读题!!! 链接: https://pan.baidu.com/s/1AJTl_0p5Lh4T1MmNwyJWzg 密码: j3j ...
- syslog大小限制
位置 /etc/logrotate.d/rsyslog 相关配置信息察看man logrotate size k/M/G /var/log/syslog { rotate daily missingo ...