linux查看内核调度,一个小实验看清Linux内核调度机制

0号进程(idle进程)完成一系列初始化之后,就进入一个while循环

While(1)

{

….

static void do_idle(void)

{

….

schedule_idle();~~~~

….

}

}

void __sched schedule_idle(void)

{

do {

__schedule(false);

} while (need_resched());

}

接着会调用schedule_idle(),然后自愿调用__schedule(false),让调度器挑出

下一个任务去执行。

现在要做的一个实验很简单,就是注释掉do_idle()中的schedule_idle().

这样系统应该怎么都调用不到schedule() ,此时系统会stall了。实验结果果真如此,此时终端也不会有任何响应。如果打开内核选项:

RCU_STALL_COMMON = y

CONFIG_RCU_CPU_STALL_TIMEOUT = 10(手动设置10s)

系统会打印出如下信息:

INFO: rcu_sched detected stalls onCPUs/tasks:

RCU_GP_WAIT_FQS(3) ->state=0x0->cpu=0

因为就算不能调用schedule(),此时一直有时钟中断过来,系统利用中断来检测。

此时时钟中断在进行,就代表说scheduler_tick函数在正常工作。这个函数完成的功能就是调用本进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值