进程(等待队列)

本文介绍了Linux内核中等待队列的概念,包括主要的数据结构——使用双向链表实现的等待队列头wait_queue_head,以及等待队列的基本操作,如如何使进程进入睡眠状态。这些内容对于理解内核调度和进程通信至关重要。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值