LINUX内核tasklet小任务机制

    在内核中的中断机制中,为了防止解决中断嵌套(防止一个中断打断另一个中断)的问题,引进小任务机制:

      使用小任务机制需要三步:

        第一:定义一个struct tasklet_struct的类;

        第二步:初始化taskelet将处理任务的函数和takslet任务捆绑;

        第三步:调度tasklet :tasklet_schedule(&tasklet);

    

 12 #include <linux/delay.h>
 13 #include <linux/clk.h>
 14 #include <linux/miscdevice.h>
 15 #include <linux/io.h>
 16 #include <linux/ioport.h>
 17 #include <asm/uaccess.h>
 18
 19 #include <linux/gpio.h>
 20 #include <mach/gpio.h>
 21 #include <plat/gpio-cfg.h>
 22
 23 MODULE_LICENSE("GPL");
 24 MODULE_AUTHOR("bunfly");
 25
 26 void my_tasklet_func(unsigned long data);
 27 struct tasklet_struct  my_tasklet;
 28
 29 int test_init()
 30 {
 31     printk("hello kernel\n");
 32     tasklet_init(&my_tasklet,my_tasklet_func, 0);
 33     tasklet_schedule(&my_tasklet);
 34     return 0;
 35 }
 36
 37 void test_exit()
 38 {
 39     tasklet_kill(&my_tasklet);
 40     printk("exit\n");
 41 }
 42
 43 module_init(test_init);
 44 module_exit(test_exit);
 45
 46 void my_tasklet_func(unsigned long data)
 47 {
 48     printk("wang wang wang\n");
 49 }
 50 
时间: 2024-11-05 13:36:56

LINUX内核tasklet小任务机制的相关文章

LINUX内核CPU负载均衡机制【转】

转自:http://oenhan.com/cpu-load-balance 还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是load_balance触发的,怀疑当时的核间调度出现了问题,在某个负责场景下产生了多核互锁,后面看了一下CPU负载平衡下的代码实现,写一下总结. 内核代码版本:kernel-3.0.13-0.27. 内核代码函数起自load_

Linux内核中的信号机制--一个简单的例子【转】

本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/8562958 Linux内核中的信号机制--一个简单的例子 Author:ce123(http://blog.csdn.NET/ce123) 信号机制是类UNIX系统中的一种重要的进程间通信手段之一.我们经常使用信号来向一个进程发送一个简短的消息.例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置

Linux内核通信之netlink机制

前言: 开发和维护内核是一件很繁杂的工作,因此,只有那些最重要或者与系统性能息息相关的代码才将其安排在内核中.其它程序,比如GUI,管理以及控制部分的代码,一般都会作为用户态程序.用户态和内核态的通讯机制IPC(interprocess   communication  )机制:比如系统调用,ioctl接口,proc文件系统以及netlink socket. 介绍: netlink socekt是一种用于在内核态和用户态进程之间进行数据传输的特殊的IPC.它通过为内核模块提供一组特殊的API,并

再谈Linux内核中的RCU机制

转自:http://blog.chinaunix.net/uid-23769728-id-3080134.html RCU的设计思想比较明确,通过新老指针替换的方式来实现免锁方式的共享保护.但是具体到代码的层面,理解起来多少还是会有些困难.在<深入Linux设备驱动程序内核机制>第4章中,已经非常明确地叙述了RCU背后所遵循的规则,这些规则是从一个比较高的视角来看,因为我觉得过多的代码分析反而容易让读者在细节上迷失方向.最近拿到书后,我又重头仔细看了RCU部分的文字,觉得还应该补充一点点内容,

Linux内核自旋锁spinlock_t机制

摘自:https://www.jianshu.com/p/f0d6e7103d9b spinlock用在什么场景? 自旋锁用在临界区代码非常少的情况. spinlock在使用时有什么注意事项? 临界区代码应该尽可能精简 不允许睡眠(会出现死锁) Need to have interrupts disabled when locked by ordinary threads, if shared by an interrupt handler.(会出现死锁) spinlock是怎么实现的? 看一下

嵌入式Linux内核tasklet机制(附实测代码)

Linux 中断编程分为中断顶半部,中断底半部 中断顶半部: 做紧急,耗时短的事情,同时还启动中断底半部.中断底半部: 做耗时的事件,这个事件在执行过程可以被中断.中断底半部实现方法: tasklet,工作队列,软中断等机制实现.实际上是把耗时事件推后执行,不在中断程序执行. 什么是tasklet? Tasklet 一词的原意是"小片任务"的意思,这里是指一小段可执行的代码,且通常以函数的形式出现.这个 tasklet 绑定的函数在一个时刻只能在一个 CPU 上运行 ,tasklet(

Linux内核同步机制

http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率.首先,看看我们最熟悉的两种机制——信号量.锁. 一.信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中): [cpp] view plaincopyprint? struct semaph

大话Linux内核中锁机制之RCU、大内核锁

大话Linux内核中锁机制之RCU.大内核锁 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL).文章的最后对<大话Linux内核中锁机制>系列博文进行了总结,并提出关于目前Linux内核中提供的锁机制的一些基本使用观点. 十.RCU机制 本节将讨论另一种重要锁机制:RCU锁机制.首先我们从概念上理解下什么叫RCU,其中读(Read):读者不需要获得任何锁就可访问RCU保护的临界

Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】

原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938390.html 在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核C语言代码:init/main.c中的start_kernel函数,在这个函数中Linux内核开始真正进入初始化阶段, 下面我就顺这代码逐个函数的解释,但是这里并不会过于深入