Tasklet机制

概述:

**********tasklet是关于中断管理的,说白了,也就是当中断发生时,执行中断处理函数

**********tasklet是一个数据结构----------------->在<linux/interrupt.h>头文件中

struct tasklet_struct
{
	struct tasklet_struct *next;
	unsigned long state;
	atomic_t count;
	void (*func)(unsigned long);		//中断处理函数
	unsigned long data;			//传递给中断处理函数的参数
};

**********tasklet类似于定时器timer,但是,tasklet中断处理函数一直在中断时间运行,并且在调用tasklet的进程上下文上运行,也就是它们的运行都在同一CPU上(同一时刻只能一方能运行).

**********tasklet执行函数的执行,是不能够通过指定的时间来让它运行的,它的运行是由内核自己选择的时间来执行

Tasklet的使用步骤:

**********第一步:初始化tasklet

初始化的(宏)函数:

*****动态初始化

void tasklet_init(struct tasklet_struct *t,void (*func)(unsigned long), unsigned long data);

*****静态初始化

DECLARE_TASKLET(name, func, data)

DECLARE_TASKLET_DISABLED(name, func, data);

**********第二步:调度tasklet执行,

/**
  *如果一个tasklet在它有机会运行前被再次调度,那么它只会运行一次
  *如果tasklet在运行中被调度,它在完成本次调度之后,会再次运行
  **/
void tasklet_schedule(struct tasklet_struct *t);

/**
  *调度高优先级的tasklet
  *当软件中断处理运行时,在其他软中断之前,它处理高优先级的tasklet
  **/
void tasklet_hi_schedule(struct tasklet_struct *t);
其他tasklet相关函数:
/**
  *禁止给定的tasklet
  *如果tasklet还在被tasklet_schedule调度,则此函数的执行将会在tasklet_schedule返回后执行
  **/
void tasklet_disable(struct tasklet_struct *t);


/**
  *禁止这个tasklet
  *不等待任何函数返回,就立即禁止这个tasklet
  **/
void tasklet_disable_nosync(struct tasklet_struct *t);



/**
  *使能一个之前被禁止的tasklet
  *如果tasklet已经被调度了,它会很快的运行
  *tasklet_enable和tasklet_disable必须成对匹配,因为内核跟踪tasklet的"禁止次数"
  **/
void tasklet_enable(struct tasklet_struct *t);


/**
  *杀死tasklet
  *当一个设备正在关闭或者模块被卸载时调用这个函数
  **/
void tasklet_kill(struct tasklet_struct *t);






















































































































































Tasklet机制

上一篇:同一字段多ID存储名称映射


下一篇:3Ds Max制作逼真的黑猩猩的雕刻模型教程