抢占就是进程调度,用户进程抢占发生在以下情况:
1、从系统调用返回用户空间的时候
2、从中断处理程序返回用户空间时。(在时钟中断中会调用scheduler_tick()函数,该函数在进程时间片用完的时候会设置need_resched标志,当从时钟中断或者其他中断返回后检查need_resched,内核会调用schedule函数执行新的进程)
内核抢占会发生在
1、中断处理程序正在执行,且返回内核空间之前
2、内核代码再一次具有可抢占性的时候
3,、内核任务中显式的调用schedule函数
4、如果内核中的任务阻塞,这样也会导致调用schedule