设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
等待队列里面的进程都是sleeping的吧?
返回列表
查看:
747
|
回复:
4
等待队列里面的进程都是sleeping的吧?
[复制链接]
fishman
fishman
当前离线
积分
1
IP卡
狗仔卡
发表于 2005-8-8 14:41:24
|
显示全部楼层
|
阅读模式
在网上看到有人说不一定等待队列的进程都是睡眠的,不解其义
谁能给我讲讲2.6内核的等待队列结构
我看了代码和LKD2相关部分,不是很明朗
对于下面三个问题还是不够知道:
如何创建等待队列?
一个进程如何加入等待队列来将自己挂起(睡眠)?
所依赖的条件满足时,其他进程如何唤醒等待队列(进程)?
请高手指点,谢谢
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
xieweiyi
xieweiyi
当前离线
积分
108
IP卡
狗仔卡
发表于 2005-8-11 11:18:34
|
显示全部楼层
休眠:
首先创建一个结构wait_queue_t
就是
struct __wait_queue {
unsigned int flags;
#define WQ_FLAG_EXCLUSIVE 0x01
struct task_struct * task;
wait_queue_func_t func;
struct list_head task_list;
};
然后用里面的指针task_list把进程加入到睡眠的队列里面,也就是把上面这个
结构连入队列,结构里面有进程的结构指针。
但是这时候进程可能也同时在可运行队列中,所以可能也可以运行,你需要
把进程从可运行队列中移除
回复
支持
反对
使用道具
举报
显身卡
广州大学城
广州大学城
当前离线
积分
2
IP卡
狗仔卡
发表于 2005-8-27 12:30:08
|
显示全部楼层
如果某进程A被剥夺CPU而进入睡眠队列,此时schedule重新调度进度,在完成切换到另一进程之前,进程A还是TASK_RUNNING,只有在__switch_to结束之后,另一进程才真正执行。此时A进程状态为睡眠。
如果schedule重新调度时,调度的还是A进程,此时,A的状态保持不变,而不是先变成睡眠而后又改回来。
所以。。。
回复
支持
反对
使用道具
举报
显身卡
xieweiyi
xieweiyi
当前离线
积分
108
IP卡
狗仔卡
发表于 2005-8-27 14:32:25
|
显示全部楼层
你的概念有问题
1 睡眠并不是说进程当前在不在运行,而是说进程并不在可运行队列中
2 schedule重新选中A?这说明A就在可运行队列中
3 只要A在可运行队列中,不管他有没有被选中运行,他都是可运行进程,这和睡眠
不是一个概念
所以关键的问题是 有没有把A重可运行队列移出 ,而至于schedule选择谁来运行
这根本无所谓
回复
支持
反对
使用道具
举报
显身卡
lollipop
lollipop
当前离线
积分
210
IP卡
狗仔卡
发表于 2005-8-27 15:34:24
|
显示全部楼层
还有一个suspend状态
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表