2012-06-16 55 views
1

我知道“need_resched标志是内核的消息,应该尽快调用调度程序,因为另一个进程值得运行”,但我错过了一些要点:need_resched infos(linux kernel 2.6.30)

谁负责检查此标志?有一个特殊的内核进程?最后,我想提出的唯一问题是:内核在标志设置后尽快调用schedule()是什么?

我希望我已经清楚,

斯特凡诺

回答

1

通常在中断和syscall返回路径中检查该标志 - 如果从中断或系统调用返回时设置,并且(在中断情况下)内核是可抢占的,则内核将调用其中一个重新调度函数返回之前。

例如,在arch/x86/kernel/entry_32.S

358 ENTRY(resume_userspace) 
359  LOCKDEP_SYS_EXIT 
360  DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt 
361          # setting need_resched or sigpending 
362          # between sampling and the iret 
363  TRACE_IRQS_OFF 
364  movl TI_flags(%ebp), %ecx 
365  andl $_TIF_WORK_MASK, %ecx  # is there any work to be done on 
366          # int/exception return? 
367  jne work_pending 
368  jmp restore_all 
369 END(ret_from_exception) 

注意need_resched是在TI_flags的位标记,并_TIF_WORK_MASK包括最TI_flags比特,包括一个用于need_resched。还有其他一些类似的检查,返回内核路径也有明确的检查。

0

内核代码明确检查此标志时,它是安全的时候,如果设置了标志调用schedule。它不能被任何外部进程或异步机制检查,因为它的全部目的是处理不可抢占的代码,并且只能自动产生CPU。

相关问题