1、用户抢占:
从系统调用 或者 中断 返回用户空间时,检查当前进程的need_resched标志(位于thread_info结构体中),当该标志为0时,可以发生进程切换。
2、内核抢占:
在内核空间中,从中断返回内核空间 或者 preempt_count计数重新为0(当前进程持有的所有锁都被释放)时 并且need_resched==0,系统处于进程上下文,此时也可以安全的发生进程切换。
内核抢占时机:中断处理程序返回内核空间、内核代码重新具备可抢占性、内核代码阻塞或者显示的调用schedule()函数。
关键字:preempt_count
中断只能被更高优先级的中断打断,不能被其他任何事件中断。