Linux操作系统内核中工作队列的操作

2016-01-29 17:35 13 1 收藏

Linux操作系统内核中工作队列的操作,Linux操作系统内核中工作队列的操作

【 tulaoshi.com - Linux 】

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。

msn: yfydz_no1@hotmail.com

来源:http://yfydz.cublog.cn

1. 前言

工作队列(workqueue)的Linux内核中的定义的用来处理不是很紧急事件的回调方式处理方法.

以下代码的linux内核版本为2.6.19.2, 源代码文件主要为kernel/workqueue.c.

2. 数据结构

/* include/linux/workqueue.h */

// 工作节点结构

struct work_struct {

// 等待时间

unsigned long pending;

// 链表节点

struct list_head entry;

// workqueue回调函数

void (*func)(void *);

// 回调函数func的数据

void *data;

// 指向CPU相关数据, 一般指向struct cpu_workqueue_struct结构

void *wq_data;

// 定时器

struct timer_list timer;

};

struct execute_work {

struct work_struct work;

};

/* kernel/workqueue.c */

/*

* The per-CPU workqueue (if single thread, we always use the first

* possible cpu).

*

* The sequence counters are for flush_scheduled_work(). It wants to wait

* until all currently-scheduled works are completed, but it doesn't

* want to be livelocked by new, incoming ones. So it waits until

* remove_sequence is = the insert_sequence which pertained when

* flush_scheduled_work() was called.

*/

// 这个结构是针对每个CPU的

struct cpu_workqueue_struct {

// 结构锁

spinlock_t lock;

// 下一个要执行的节点序号

long remove_sequence; /* Least-recently added (next to run) */

// 下一个要插入节点的序号

long insert_sequence; /* Next to add */

// 工作机构链表节点

struct list_head worklist;

// 要进行处理的等待队列

wait_queue_head_t more_work;

// 处理完的等待队列

wait_queue_head_t work_done;

// 工作队列节点

struct workqueue_struct *wq;

// 进程指针

struct task_struct *thread;

int run_depth; /* Detect run_workqueue() recursion depth */

} ____cacheline_aligned;

/*

* The externally visible workqueue abstraction is an array of

* per-CPU workqueues:

*/

// 工作队列结构

struct workqueue_struct {

struct cpu_workqueue_struct *cpu_wq;

const char *name;

struct list_head list; /* Empty if single thread */

};

kernel/workqueue.c中定义了一个工作队列链表,

来源:https://www.tulaoshi.com/n/20160129/1502052.html

延伸阅读
问:术语GUI,window manager,desktop和interface间的区别(如果有的话),它们和X window有什么关系? 答:在X的世界里,事物是分成很多组件的,而不象其他的操作系统那样,任何东西都是OS的一个部分。 这里是一些定义: Interface是一个普通术语,意思是指在计算机系统的两个互不依赖的组件间的连结,一个桥。它通常用来指“user interf...
  我们以前介绍了通过优化配置桌面环境来提高系统速度的方法,其实在其他的一些方面,我们一样可以精心配置来提高系统速度。 一、提升硬盘和光驱的数据传输性能 我们可以使用命令“hdparm 参数 设备”(如果是普通用户,需要在“hdparm”前面加上路径“/sbin/”)来查看存储器当前工作在什么样的传输模式下。例如要查看硬...
作者: 阿瑟瑞德 一 Linux简介 1.1 Linux的缘起--UNIX&GNU 1969年诞生于AT&T贝尔实验室的UNIX,至今已派生了二十多个分支,成为世界上影响最大、应用最广泛的操作系统。早期UNIX系统是源代码公开,具有详细文档并被大多数学校广泛研究的。从版本7开始,AT&T将UNIX商业化,并更换了许可协议。 为...
传真是企业中的常规应用,许多商贸往来的信息交换都需要利用传真来完成,但是却不可能为每个人配备一台传真机。用Linux系统可以建立一个人人都可以使用的传真服务器系统。 条件: 1、Linux操作系统 2、efax服务器 3、支持1、2类传真的调制解调器 安装好的RedHat 6操作系统中已经完整地配置好了传真系统,关键是将...
标签: Delphi
  很多时候,我们可能需要执行关闭计算机或重新启动计算机的操作,但在 WinNT 内核的操作系统中,我们不能只调用简单的 API 函数来完成这样的操作。这并不是一个复杂的问题,却有时候会让人“为难”,如果是这样,现在解决这个问题的办法来了。 *************************************************************************** ...

经验教程

793

收藏

9
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部