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
相关文档:
linux启动流程:
系统预处理程序->GRUB (此阶段可以理解为bootloader阶段)
->kernel (此阶段为kernel)
->initrd->init启动->inittab->rc.sysinit->functions(PATH)->modules->rcX.d(读配置文件)
1.->字符模式->tty->bash
2.->图形模式->进入X Window-> ......
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.执行中断 ......
http://dbus.freedesktop.org/doc/dbus-tutorial.html
D-Bus Tutorial
Havoc
Pennington
Red Hat, Inc.
<hp@pobox.com
>
David
Wheeler
John
Palmieri
Red Hat, Inc.
<johnp@redhat.com
>
Colin
Walters
Red Hat, Inc.
<walters@redhat.com
>
Version 0.5.0
Table of Contents
......
第一步,我们在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 ......
查看系统中开放的端口,关闭不需要的端口和程序,如下例中操作流程:
1. 查看对外开启的端口:
[root@mail ~]# nmap 127.0.0.1 #注:此处应该换作公网ip
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2010-04-20 11:06 CST
Interesting ports on 127.0.0.1
Not shown: 1668 closed ports
PORT &nb ......