我正在阅读“了解 Linux 内核,第 3 版”,在第 5 章“内核抢占”一节中,它说:
所有进程切换均由
switch_to
宏执行。在抢占式和非抢占式内核中,当进程完成某个内核活动线程并调用调度程序时,就会发生进程切换。但是,在非抢占式内核中,当前进程不能被替换,除非它即将切换到用户模式。
我仍然看不出非抢占式内核和抢占式内核之间的区别,因为您需要等待当前进程切换到用户模式。
假设有一个进程p在内核模式下运行,并且其时间片到期,则scheduler_tick()
调用 p 并设置pNEED_RESCHED
的标志。但是只有当p切换到用户模式时才会调用(对吗?)。schedule()
那么如果p永远不会切换到用户模式呢?
如果它切换到用户模式,但在scheduler_tick()
设定的时刻NEED_RESCHED
和实际切换到用户模式的时刻p之间需要“很长”的时间——那么它使用的时间超过了它的量?