-1

可重入内核和抢占内核之间有什么关系?

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

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

我已阅读https://stackoverflow.com/a/1163946,但不确定这两个概念之间是否存在关系。

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

4

1 回答 1

1

什么是可重入内核:

顾名思义,可重入内核是允许多个进程在任何给定时间点在内核模式下执行的内核,并且不会导致内核数据结构之间出现任何一致性问题。

什么是内核抢占:

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

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

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

linux内核是绝对可重入的,内核抢占可以通过CONFIG_PREEMPT进行配置。自愿抢占也是可能的,还有许多其他不同的选择。

于 2018-09-19T15:43:54.757 回答