Linux-0.11内核源码分析系列:进程调度sleep_on()函数分析

本文详细分析Linux-0.11内核中的sleep_on函数,涉及用户栈与内核栈的区别、内核栈的存储位置、多进程睡眠与唤醒流程、资源竞争的处理等关键知识点,帮助理解内核调度机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre><pre name="code" class="cpp">/*     
 *Author  : DavidLin     
 *Date    : 2014-12-10pm     
 *Email   : linpeng1577@163.com or linpeng1577@gmail.com     
 *world   : the city of SZ, in China     
 *Ver     : 000.000.001     
 *history :     editor      time            do     
 *          1)LinPeng       2014-12-10      created this file!     
 *          2)     
 */  

/* author : linus */
void sleep_on(struct task_struct **p)
{
    struct task_struct *tmp;
    
    if(!p)
        return;
    if(current == &(init_task.task))    //init进程不可睡眠
        panic("task[0] trying to sleep");
    tmp = *p;   //tmp指向上一个当前进程
    *p  = current;    //链表头执行当前进程
    current->state = TASK_UNINTERRUPTIBLE;    //睡眠进程不可中断
    schedule();    //进程调度,以下代码进程被唤醒之后才会继续执行
    if(tmp)  //如果链表next不为空
        tmp->state =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值