Linux中的工作队列 (2.6.0~2.6.19 and 2.6.20 ~ now)
http://blog.chinaunix.net/u2/69889/showart_971040.html
Linux中的工作队列
[前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。
*******************************************************************************************************************
工作队列
(work
queue)
是
Linux
kernel
中将工作推后执行的一种机制。这种机制和
BH
或
Tasklets
不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。
工作队列是
2.6
内核开始引入的机制,在
2.6.20
之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对
2.6.20
之前和之后的版本分别做介绍。
1
、
2.6.0~2.6.19
数据结构:
struct
work_struct {
unsigned
long pending;
struct
list_head entry;
void
(*func)(void *);
void
*data;
void
*wq_data;
struct
timer_list timer;
};
pending
是用来记录工作是否已经挂在队列上;
entry
是循环链表结构;
func
作为函数指针,由用户实现;
data
用来存储用户的私人数据,此数据即是
func
的参数;
wq_data
一般用来指向工作者线程(工作者线程参考下文);
timer
是推后执行的定时器。
work_struct
的这些变量里,
func
和
data
是用户使用的,其他是内部变量,我们可以不用太过关心。
API
:
1)
INIT_WORK(_work, _func, _data)
初始化指定工作,目的是把用户指定的函数
_func
及
_func
需要的参数
_data
赋给
work_struct
的
func
及
data
变量。
2)
int schedule_work(struct work_struct *work)
对工作进行调度,即把给定工作的处理函数提交给缺省的工作队列和工作者线程。工作者线程本质上是一个普通的内核线程,在默认情况下,每个
CPU
均有一个类型为“
events”
的工作者线程,当调用
schedule_work
时,这个工作者线程会被唤醒去执行工作链表上的所有工作。
3)
int schedule_delayed_work(struct work_struct *work, unsigned long
delay)
延迟执行工作,与
schedu
相关文档:
在VFS的支持下,用户态进程读写任何类型的文件系统都可以使用read和write着两个系统调用,但是在linux内核中没有这样的系统调用我们如何操作文件呢?我们知道read和write在进入内核态之后,实际执行的是sys_read和sys_write,但是查看内核源代码,发现这些操作文件的函数都没有导出(使用EXPORT_SYMBOL导出),也就是说在内核 ......
http://hi.baidu.com/j_fo/blog/item/7412bb018deab109728da572.html
Linux内核 irq/soft irq/tasklet/同步
2009-10-08 21:22
1.中断处理程序结束之前,不允许产生相同的中断事件;(禁用PIC上该中断,但可以产生其他中断)
2.中断处理程序、软中断、tasklet既不可被抢占也不能被阻塞,最多发生中断嵌套;
3.执行中断 ......
[高性能技术] Linux2.6内核epoll介绍(0.1版本)
转自: http://mechgouki.blogdriver.com/mechgouki/601157.html
[作者]:滕昱,2005/3/30,0.1版本
[版权声明]:此文档遵循GNU自由文档许可证(GNU Free Documentation License).任何人可以自由复制,分发,修改,不过如果方便,请注明出处和作者:)
(1)导言:
首先,我强烈建议 ......
级别: 初级
樊奇 (fanqi@cn.ibm.com), Xseries eServer 工程师, IBM TSS China Beijing
2004 年 11 月 01 日
Linux I/O 重定向虽然很简单,但在脚本编写、系统管理时却要常常打交道,搞清其中使用技巧非常有用。
首先说一下什么是I/O重定向,所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序 ......
第一步,我们在Linux系统下,修改/etc/X11/xdm/Xaccess文件,找到下面的语句:
# * #any host can get a login window
去掉最前面的#号,成为
* #any host can get a login window
第二步,我们修改/etc/X11/gdm/gdm.conf文件,找到下面的语句:
[xdmcp]
Enable=false
将其中的En ......