进程(等待队列)

  • Post author:
  • Post category:其他


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



版权声明:本文为lulu901130原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。