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 作者: ...
随机推荐
- shit antd & Merry Christmas bug
shit antd & Merry Christmas bug https://github.com/ant-design/ant-design/issues/13098 antd 玩大了? ...
- Spring AOP 源码解析
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- matlab中prod的使用方法
B = prod(A) 将A矩阵不同维的元素的乘积返回到矩阵B. 如果A是向量,prod(A)返回A向量的乘积.如果A是矩阵,prod(A)返回A每一列元素的乘积并组成一个行向量B. B = prod ...
- [bzoj4398] 福慧双修 最短路 二进制分组
---题面--- 题解: 考场上看的这道题,,,当时70分算法打挂了,今天才知道这个也是原题.... 首先,对于不跟1相邻的边,肯定不会经过两次,因为经过两次就回来了,除了增加路径长度之外没有任何意义 ...
- BZOJ1059:[ZJOI2007]矩阵游戏——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1059 https://www.luogu.org/problemnew/show/P1129 小Q是 ...
- train val test区别
train是训练集,val是训练过程中的测试集,是为了让你在边训练边看到训练的结果,及时判断学习状态.test就是训练模型结束后,用于评价模型结果的测试集.只有train就可以训练,val不是必须的, ...
- 搭建JavaWeb应用开发环境
下载和安装Tomcat服务器 下载Tomcat安装程序包:http://tomcat.apache.org/,下载一个zip版本,解压到本地即完成了Tomcat的安装. 测试是否安装成功:进入Tomc ...
- lightoj 1282 && uva 11029
Leading and Trailing lightoj 链接:http://lightoj.com/volume_showproblem.php?problem=1282 uva 链接:http:/ ...
- JQuery源码实现
技术提高篇--- 推荐--- 动脑学院--- http://www.toutiao.com/a6368703139592569089/
- 详解ListView加载网络图片的优化
我们来了解一些ListView在加载大量网络图片的时候存在的常见问题: 1.性能问题,ListView的滑动有卡顿,不流畅,造成非常糟糕的用户体验. 2.图片的错位问题. 3.图片太大,加载Bitma ...