Linux kernel 可重入内核和抢占内核之间的关系是什么?

Linux kernel 可重入内核和抢占内核之间的关系是什么?,linux-kernel,operating-system,reentrancy,preemption,Linux Kernel,Operating System,Reentrancy,Preemption,可重入内核和抢占内核之间的关系是什么 如果内核是抢占式的,那么它必须是可重入的吗?(我想是的) 如果内核是可重入的,它必须是抢占的吗?(我不确定) 我读过,但不确定这两个概念之间是否有联系 我想我的问题一般都是关于操作系统的概念。但如果有关系的话,我主要对Linux内核感兴趣,在阅读理解Linux内核时会遇到这两个概念。什么是可重入内核: 顾名思义,可重入内核就是允许 在任何给定时间以内核模式执行的多个进程 时间点,而且不会造成任何一致性问题 在内核数据结构中 什么是内核抢占: 内核抢占是一种主

可重入内核和抢占内核之间的关系是什么

如果内核是抢占式的,那么它必须是可重入的吗?(我想是的)

如果内核是可重入的,它必须是抢占的吗?(我不确定)

我读过,但不确定这两个概念之间是否有联系


我想我的问题一般都是关于操作系统的概念。但如果有关系的话,我主要对Linux内核感兴趣,在阅读理解Linux内核时会遇到这两个概念。

什么是可重入内核:

顾名思义,可重入内核就是允许 在任何给定时间以内核模式执行的多个进程 时间点,而且不会造成任何一致性问题 在内核数据结构中

什么是内核抢占:

内核抢占是一种主要用于单片和混合系统的方法 所有或大部分设备驱动程序都在内核空间中运行的内核, 允许调度程序强制执行上下文 切换(即抢占式调度;代表可运行和更高级别 优先级进程)在其运行期间对驱动程序或内核的其他部分执行 执行,而不是协同等待驱动程序或内核 函数(如系统调用)以完成其执行和返回 对调度程序的处理器控制

我能想象一个不可重入的抢占式内核吗?很难,但我能。让我们考虑一个例子:一些线程执行系统调用。当进入内核时,它需要一个大的内核锁,并禁止除调度程序计时器irq之外的所有中断。之后,该线程在内核中被调度程序抢占。现在我们可以切换到另一个用户空间线程。这个过程在用户空间中做一些工作,然后进入内核,进行大的内核锁定和休眠等等。实际上,这个解决方案似乎无法实现,因为在大的时间间隔内禁止中断会导致巨大的延迟

我能想象不可抢占的可重入内核吗?为什么不呢?只需在内核中使用协作抢占。线程1进入内核并在一段时间后调用
Thread\u yield()
。线程2进入内核做它自己的工作,也许调用另一个线程,也许不是。这里没有什么特别的


对于linux内核,它是绝对可重入的,内核抢占可以通过configu PREEMPT配置。此外,自愿优先购买也是可能的,还有许多其他不同的选择。

有人必须定义这些术语才能得到真正的答案。出于实际目的,所有rational内核都将重新进入,正如您的链接中所描述的那样。我见过一些带有自定义操作系统的系统,在这个定义下可能不可重入,但这些系统都很奇怪。