进程02
2015-07-30 15:38
483 查看
运行队列链表把处于TASK_RUNNING状态的所有进程组织到一起
等待队列表示一组睡眠的进程,当某一条件变为真时,由内核唤醒他们,等待队列由双向链表实现
睡眠进程分为两种,互斥进程(等待队列元素的flags字段为1)由内核有选择地唤醒,非互斥进程(flags值为0)总是由内核在事件发生时唤醒
等待访问临界资源的进程就是互斥进程;等待相关事件的进程是非互斥的
每个等待队列链表中的一个元素其实就是指向睡眠进程描述符的指针
内核开发者可以通过init_waitqueue_func_entry()函数来自定义唤醒函数,该函数负责初始化等待队列的元素
为了把一个互斥进程插入等待队列,内核必须使用prepare_to_wait_exclusives()函数,或者直接调用add_wait_queue_exclusive();所有其他的相关函数把进程当做非互斥进程来插入
list_for_each宏扫描双向链表q->task_list中的所有项,即等待队列中的所有进程
所有的非互斥进程总是在双向链表的开始位置,而所有的互斥进程在双向链表的尾部;一个等待队列中同时包含互斥与非互斥进程的情况是十分罕见的
等待队列表示一组睡眠的进程,当某一条件变为真时,由内核唤醒他们,等待队列由双向链表实现
睡眠进程分为两种,互斥进程(等待队列元素的flags字段为1)由内核有选择地唤醒,非互斥进程(flags值为0)总是由内核在事件发生时唤醒
等待访问临界资源的进程就是互斥进程;等待相关事件的进程是非互斥的
每个等待队列链表中的一个元素其实就是指向睡眠进程描述符的指针
内核开发者可以通过init_waitqueue_func_entry()函数来自定义唤醒函数,该函数负责初始化等待队列的元素
为了把一个互斥进程插入等待队列,内核必须使用prepare_to_wait_exclusives()函数,或者直接调用add_wait_queue_exclusive();所有其他的相关函数把进程当做非互斥进程来插入
list_for_each宏扫描双向链表q->task_list中的所有项,即等待队列中的所有进程
所有的非互斥进程总是在双向链表的开始位置,而所有的互斥进程在双向链表的尾部;一个等待队列中同时包含互斥与非互斥进程的情况是十分罕见的
相关文章推荐
- Linux socket 初步
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区
- Linux VS Unix:Linux欲一统天下 Unix不死
- linux下设定环境变量