kernel:进程02

运行队列链表把处于TASK_RUNNING状态的所有进程组织到一起

等待队列表示一组睡眠的进程,当某一条件变为真时,由内核唤醒他们,等待队列由双向链表实现

睡眠进程分为两种,互斥进程(等待队列元素的flags字段为1)由内核有选择地唤醒,非互斥进程(flags值为0)总是由内核在事件发生时唤醒

等待访问临界资源的进程就是互斥进程;等待相关事件的进程是非互斥的

每个等待队列链表中的一个元素其实就是指向睡眠进程描述符的指针

内核开发者可以通过init_waitqueue_func_entry()函数来自定义唤醒函数,该函数负责初始化等待队列的元素

为了把一个互斥进程插入等待队列,内核必须使用prepare_to_wait_exclusives()函数,或者直接调用add_wait_queue_exclusive();所有其他的相关函数把进程当做非互斥进程来插入

list_for_each宏扫描双向链表q->task_list中的所有项,即等待队列中的所有进程

所有的非互斥进程总是在双向链表的开始位置,而所有的互斥进程在双向链表的尾部;一个等待队列中同时包含互斥与非互斥进程的情况是十分罕见的

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值