非抢占式、抢占式和选择性抢占式内核之间有什么区别?

Sen*_*Sen 21 linux kernel

“非抢占式”、“抢占式”和“选择性抢占式”内核之间有什么区别?

希望有人能对此有所了解。

wag*_*wag 16

在抢占式内核上,在内核模式下运行的进程可以在内核函数中间被另一个进程替换。

这仅适用于在内核模式下运行的进程,在用户模式下执行进程的 CPU 被认为是“空闲”的。如果用户态进程想要从内核请求服务,他必须发出内核可以处理的异常。

举个例子:

进程A执行异常处理程序,进程B被 IRQ 请求唤醒,内核AB(强制进程切换)替换进程。过程A未完成。调度程序随后决定进程是否A获得 CPU 时间。

在非抢占式内核上,进程A将使用所有处理器时间,直到他完成或自愿决定允许其他进程中断他(计划的进程切换)。

今天的基于 Linux 的操作系统通常不包含完全抢占式内核,仍有一些关键功能必须不间断地运行。所以我认为你可以称之为“选择性抢占内核”。

除此之外,还有一些方法可以使 Linux 内核(几乎)完全抢占。