1. 等待队列主要数据结构
等待队列表示一组睡眠的进程,即进程描述符task_struct中的state字段为TASK_INTERRUPTIBLE或者是TASK_UNINTERRUPTIBLE的进程,当某一条件变为真时,由内核唤醒它们。
等待队列由双向链表实现,其元素包括指向进行描述符的指针。每个队列都有一个等待队列头(wait queue head)
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
task_list字段是等待进程链表的头,当task_list.prev == task_list.next时,说明等待队列为空。这里有个自旋锁变量lock,因为等待队列可有中断处理程序和内核函数修改,属于竞争资源,所以需要等待队列需要进行同步。
等待列表中的成员数据类型为wait_queue_t:
struct __wait_queue {
unsigned int flags;<span style="white-space:pre"> </s