kthread schedule

本文深入探讨了Linux内核3.10.102版本中线程的状态转换机制,特别是如何通过设置线程状态和调用schedule函数使线程让出CPU。文中详细解释了schedule函数的工作原理及其实现细节,并介绍了带超时功能的schedule_timeout函数。

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

线程状态,摘自kernel-3.10.102 include/linux/sched.h
这里写图片描述
除了RUNNING外,都不占有CPU。
线(进)程描述符task_struct。

当线程执行的条件得不到满足,可以用以下两行使线程让出CPU:

set_current_state(TASK_INTERRUPTIBLE);
schedule();

为什么schedule前要set_current_state
schedule实现如下

asmlinkage void __sched schedule(void)
{
    struct task_struct *tsk = current;
    sched_submit_work(tsk);
    __schedule();
}

__schedule()注释
如果当前task state还是running状态,
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) 无法进入,
不会执行到deactivate_task,线程仍有可能占有CPU,没有sleep。

schedule也有带超时的函数

signed long __sched schedule_timeout(signed long timeout)

实现也在sched.h中,简单来说就是在schedule()前设置了一个timer,timeout的时间后就wake_up_process(current)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值