2011年1月14日

浅析Linux等待队列

摘要: (转载) bojan 收录于2010-10-09 阅读数: 公众公开 我也要收藏 在Linux驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。等待很早就作为一个基本的功能单位出现在Linux内核中,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。我们从它的使用范例着手,看看等待队列是如何实现异步信号功能的。以下代码节选自kernel/printk.c。DECLARE_WAIT_QUEUE_HEAD(log_wait); // 初始化等待队列头log_waitstatic DEFINE_SPINLOCK(logbuf_lock); 阅读全文

posted @ 2011-01-14 13:50 呵呵,呵呵 阅读(6794) 评论(1) 推荐(0) 编辑

linux进程的休眠(等待队列)

摘要: (转载) bojan 收录于2010-10-09 阅读数: 公众公开 我也要收藏 当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:一、永远不要在原子上下文中进入休眠。二、进程休眠后,对环境一无所知。唤醒后,必须再次检查以确保我们等待的条件真正为真简单休眠完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。需要维护一个称为等待队列的数据结构。等待队列就是一个进程链表,其中包含了等待某个特定事件的所有进程。linux维护一个“等待队列头”来管理,wait_queue_head_t,定义在linux/wait.hstr 阅读全文

posted @ 2011-01-14 13:49 呵呵,呵呵 阅读(22168) 评论(1) 推荐(0) 编辑

Linux内核中等待队列的几种用法

摘要: (转载) bojan 收录于2010-10-09 阅读数: 公众公开 我也要收藏 Linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助。1. 睡眠等待某个条件发生(条件为假时睡眠): 睡眠方式:wait_event, wait_event_interruptible 唤醒方式:wake_up (唤醒时要检测条件是否为真,如果还为假则继续睡眠,唤醒前一定要把条件变为真)2. 手工休眠方式一: 1)建立并初始化一个等待队列项 DEFINE_WAIT(my_wait) == wait_queue_t my_wait; 阅读全文

posted @ 2011-01-14 13:46 呵呵,呵呵 阅读(1571) 评论(0) 推荐(0) 编辑

linux等待队列使用步骤

摘要: (转载) bojan 收录于2010-10-09 阅读数: 公众公开 我也要收藏 在Linux驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。wait queue很早就作为一种基本的功能单位出现在Linux内核里了,它以队列位基础数据结构,与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。(信号量在内核中也依赖等待队列来实现). Linux-2.6提供如下关于等待队列的操作: (1) 定义"等待队列头" wait_queue_head_t my_queue; (2) 初始化"等待队列头" init_waitqueue_ 阅读全文

posted @ 2011-01-14 13:44 呵呵,呵呵 阅读(11424) 评论(0) 推荐(0) 编辑

内核的等待队列

摘要: 内核的等待队列内核的等待队列creator sz111@126.com1. 等待队列在内核中有着极其重要的作用,作为异步操作,他的实现简单而又强大。 它通过一个双链表和把等待tast的头,和等待的进程列表链接起来。从上图可以清晰看到。所以我们知道,如果要实现一个等待队列,首先要有两个部分。队列头和队列项。下面看他们的数据结构。struct list_head { struct list_head *next, *prev;};struct __wait_queue_head { spinlock_t lock; struct list_head task_list;};typedef stru 阅读全文

posted @ 2011-01-14 12:00 呵呵,呵呵 阅读(842) 评论(0) 推荐(0) 编辑

导航