当前位置: 技术问答>linux和unix
一个郁闷的问题(linux2.6.34)
来源: 互联网 发布时间:2016-09-08
本文导语: zx();是自己定义的一个检测函数 asmlinkage void __sched schedule(void) { .................................... preempt_enable_no_resched(); if (need_resched()) goto need_resched; zx();// 检测能运行到这里 } static noinline void __init_refok rest_init(vo...
zx();是自己定义的一个检测函数
asmlinkage void __sched schedule(void)
{
....................................
preempt_enable_no_resched();
if (need_resched())
goto need_resched;
zx();// 检测能运行到这里
}
static noinline void __init_refok rest_init(void)
__releases(kernel_lock)
{
......................
preempt_enable_no_resched();
schedule(); //跟踪进了这个函数
//zx(); 检测却发现到不了这个函数,但是如前面检测的,schedule()函数是能顺利运行完的, 这就让人郁闷了
preempt_disable();
..............................
}
asmlinkage void __sched schedule(void)
{
....................................
preempt_enable_no_resched();
if (need_resched())
goto need_resched;
zx();// 检测能运行到这里
}
static noinline void __init_refok rest_init(void)
__releases(kernel_lock)
{
......................
preempt_enable_no_resched();
schedule(); //跟踪进了这个函数
//zx(); 检测却发现到不了这个函数,但是如前面检测的,schedule()函数是能顺利运行完的, 这就让人郁闷了
preempt_disable();
..............................
}
|
是因為可能在schedule()之前進程睡眠了,進入等待隊列,通過調用schedule,當前進程放棄cpu控制權。你看是什麽讓進程sleep,以及誰會去喚醒他