如何进行linux0.11进程睡眠唤醒的原理分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何进行linux0.11进程睡眠唤醒的原理分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。进程的睡眠是通过调用sleep_on函
千家信息网最后更新 2026年11月02日如何进行linux0.11进程睡眠唤醒的原理分析
如何进行linux0.11进程睡眠唤醒的原理分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
进程的睡眠是通过调用sleep_on函数,该函数修改了进程的状态并且通过schedule函数切换到其他进程执行,从而实现进程的挂起,TASK_UNINTERRUPTIBLE状态的进程只能被wake_up函数唤醒。TASK_INTERRUPTIBLE状态的进程可以被wake_up和信号唤醒。唤醒的时候也是通过修改进程的状态为可运行,然后等待下一次进程调度,被唤醒的进程不一定马上得到执行。
}
// 当前进程挂载到睡眠队列p中,p指向队列头指针的地址
void sleep_on(struct task_struct **p)
{
struct task_struct *tmp;
if (!p)
return;
if (current == &(init_task.task))
panic("task[0] trying to sleep");
/*
*p为第一个睡眠节点的地址,即tmp指向第一个睡眠节点
头指针指向当前进程,这个版本的实现没有采用真正链表的形式,
他通过每个进程在栈中的临时变量形成一个链表,每个睡眠的进程,
在栈里有一个变量指向后面一个睡眠节点,然后把链表的头指针指向当前进程,
然后切换到其他进程执行,当被wake_up唤醒的时候,wake_up会唤醒链表的第一个
睡眠节点,因为第一个节点里保存了后面一个节点的地址,所以他唤醒后面一个节点,
后面一个节点以此类推,从而把整个链表的节点唤醒,这里的实现类似nginx的filter,
即每个模块保存后面一个节点的地址,然后把全局指针指向自己。
*/
tmp = *p;
*p = current;
// 不可中断睡眠只能通过wake_up唤醒,即使有信号也无法唤醒
current->state = TASK_UNINTERRUPTIBLE;
schedule();
// 唤醒后面一个节点
if (tmp)
tmp->state=0;
}
void interruptible_sleep_on(struct task_struct **p)
{
struct task_struct *tmp;
if (!p)
return;
if (current == &(init_task.task))
panic("task[0] trying to sleep");
tmp=*p;
*p=current;
/*
可中断地睡眠,可以通过wake_up和接收信号唤醒,不可中断的时候,
能保证唤醒的时候,是从前往后逐个唤醒,但是可中断睡眠无法保证这一点,
因为进程可能被信号唤醒了,所以需要判断全局指针是否指向了自己,即自己插入
链表后,还有没有进程也插入了该链表
*/
repeat: current->state = TASK_INTERRUPTIBLE;
schedule();
/*
这里为true,说明是信号唤醒,因为wake_up能保证唤醒的是第一个节点,
这里先唤醒链表中比当前进程后插入链表的节点,有点奇怪,自己被信号唤醒了,
去唤醒别的进程,自己却还睡眠
*/
if (*p && *p != current) {
(**p).state=0;
goto repeat;
}
// 类似sleep_on的原理
*p=NULL;
if (tmp)
tmp->state=0;
}
// 唤醒队列中的第一个节点,并清空链表,因为第一个节点会向后唤醒其他节点
void wake_up(struct task_struct **p)
{
if (p && *p) {
(**p).state=0;
*p=NULL;
}
}
关于如何进行linux0.11进程睡眠唤醒的原理分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
进程
节点
睡眠
指向
信号
指针
函数
地址
时候
状态
原理
分析
问题
队列
保证
全局
变量
更多
切换
帮助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网黑科技
上海睿民互联网科技有限公司
华服互联网科技怎么样
美国互联网科技巨头监管
北京互联网科技公司
为想互联网科技
亿策互联网科技
易通互联网络科技有限公司
农村开互联网科技讲堂
中国科技互联网公司收入
互联网科技寓意
浙江互联网科技研学营
宜昌元轩互联网科技有限公司
互联网媒体平台算高科技产业
民营互联网公司国防科技
特约风豹互联网科技为什么扣费
深圳互联网科技的发展
互联网营销推广黑科技
半导体行业属于互联网高科技类吗
互联网科技的前景
耶加雪菲
互联网科技公司简介
互联网为科技
港股互联网科技股
互联网科技的未来发展
昭通互联网科技选哪家
迪庆互联网科技招生
神州科技互联网有限公司
全球科技与互联网公司市值变化
重庆科技产业互联网有哪些