我正在阅读《深入理解Linux内核(第三版)》的第5章“内核可抢占”,其中有这样一句话:
所有进程切换都是通过switch_to宏完成的。在不可抢占和可抢占内核中,当一个进程完成了内核活动的某个线程并调用了调度程序时,进程就会发生切换。然而,在不可抢占内核中,除非当前进程即将切换到用户模式,否则不能替换当前进程。
我仍然没有看出非抢占和可抢占内核之间的区别,因为无论如何,您都需要等待当前进程切换到用户模式。
假设有一个进程p在内核模式下运行,并且其时间片到期,然后调用scheduler_tick()函数,该函数设置p的NEED_RESCHED标志。但只有当p切换到用户模式时才会调用schedule()(对吗?)。
那么如果p永远不切换到用户模式怎么办?
如果它切换到用户模式,但在scheduler_tick()设置NEED_RESCHED标志和p实际切换到用户模式之间花费了很长时间,则超过了它的时间片吗?
所有进程切换都是通过switch_to宏完成的。在不可抢占和可抢占内核中,当一个进程完成了内核活动的某个线程并调用了调度程序时,进程就会发生切换。然而,在不可抢占内核中,除非当前进程即将切换到用户模式,否则不能替换当前进程。
我仍然没有看出非抢占和可抢占内核之间的区别,因为无论如何,您都需要等待当前进程切换到用户模式。
假设有一个进程p在内核模式下运行,并且其时间片到期,然后调用scheduler_tick()函数,该函数设置p的NEED_RESCHED标志。但只有当p切换到用户模式时才会调用schedule()(对吗?)。
那么如果p永远不切换到用户模式怎么办?
如果它切换到用户模式,但在scheduler_tick()设置NEED_RESCHED标志和p实际切换到用户模式之间花费了很长时间,则超过了它的时间片吗?