linux驱动模块
工作队列(work queue)是另外一种将工作推后执行的形式 ,它和我们前面讨论的所有其他形式都有不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。
那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需要睡眠,那么就选择工作队列。如果推后执行的任务不需要睡眠,那么就选择tasklet。另外,如果需要用一个可以重新调度的实体来执行你的下半部处理,也应该使用工作队列。它是唯一能在进程上下文运行的下半部实现的机制,也只有它才可以睡眠。这意味着在需要获得大量的内存时、在需要获取信号量时,在需要执行阻塞式的I/O操作时,它都会非常有用。如果不需要用一个内核线程来推后执行工作,那么就考虑使用tasklet。
1. 工作、工作队列和工作者线程
如前所述,我们把推后执行的任务叫做工作(work),描述它的数据结构为work_struct,这些工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct,而工作线程就是负责执行工作队列中的工作。系统默认的工作者线程为events,自己也可以创建自己的工作者线程。
2. 表示工作的数据结构
工作用<linux/workqueue.h>中定义的work_struct结构表示:
struct work_struct{
unsigned long pending; /* 这个工作正在等待处理吗?*/
struct list_head entry; /* 连接所有工作的链表 */
void (*func) (void *); /* 要执行的函数 */
void *data; /* 传递给函数的参数 */
void *wq_data; /* 内部使用 */
struct timer_list timer; &n
相关文档:
完善Linux系统
1.开机自动挂载window分区
fedora10虽然能自动挂载,但是挂载的分区有时会不认汉字文件夹
从终端用vi或gedit打开/etc/fstab,在其中添加:
/dev/sda1 /mnt/1 ntfs default 0 0
注:第一项是分区驱动地址
......
注: oracle对linux版本有要求,还有所需的package包不是很好找,如有需要可以发email给我:tianlesoftware@vip.qq.com,我可以传给你.....
Steep1: 下载软件包
10201_database_linux32
openmotif21-2.1.30-14.i386.rpm
Steep3: 设置内核参数(在/etc/sysctl.conf文件中加入下列行)
kernel.s ......
工作中经常需要Kill多个进程,如果这些进程有共同的特点,就可以用一条命令Kill掉它们。
比如清除Oracle数据库的所有远程连接进程:
ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用 ......
linux 下集成 svn 至 eclipse 全过程
因为 java 跨平台,而 eclipse 是个纯 java 开发项目,所以此集成安装过程同样适用于 windows 系统.
第一步:下载集成 svn 至 eclipse 所需的包 site-1.6.5.zip(可以去官网 http://subclipse.tigris.org/ 下载,也可以去作者的 csdn 资源里下载 site-1.6.5.zip 插件)
第二步:将 si ......
其实文章算不上原创,是碰到问题的时候上网东搜搜西搜搜的内容,算是借花献佛了吧,感谢原创者。
1. 安装虚拟机,我用的是一个绿化版。新建虚拟机的过程如下:
摘自:http://blog.163.com/zongbin521/blog/static/10217990200981094622635/
我们以创建LINUX系统为例。
第一步:启动VMware,在其主界面“主页” ......