旧版 Linux 内核不可抢占的原因是什么?

旧版 Linux 内核不可抢占的原因是什么?

为什么第一批 Linux 开发人员选择实现非抢占式内核?是为了保存同步吗?

据我所知,Linux 是在 90 年代初开发的,当时 PC 还只有一个处理器。非抢占式内核在此类 PC 中具有哪些优势?然而,为什么多核处理器会降低优势呢?

答案1

在 Linux 内核的上下文中,当人们谈论抢占时,他们通常指的是内核中断自身的能力——本质上是在运行内核代码时切换任务。允许这种情况发生是相当复杂的,这可能是内核花了很长时间才被抢占的主要原因。

起初,大多数内核代码无论如何都不能被中断,因为它受到大内核锁的保护。该锁逐渐从越来越多的内核代码中消除,允许并行地同时调用多个内核(随着 SMP 系统变得越来越普遍,这一点变得更加重要)。但这仍然没有使内核本身成为可抢占的;仍然需要更多的发展,最终在PREEMPT_RT补丁集最终被合并到主线内核中(并且无论如何都能够抢占 BKL)。现在,内核可以配置为或多或少是可抢占的,具体取决于您所追求的吞吐量和延迟特性;看到相关内核配置了解详情。

从内核配置中的解释可以看出,抢占影响的是吞吐量和延迟,而不是并发。在单CPU系统上,抢占仍然有用,因为它允许以更短的反应时间处理事件;然而,它也会导致吞吐量降低(因为内核花费时间切换任务)。抢占允许单 CPU 或多 CPU 系统中的任何给定 CPU 更快地切换到另一个任务。多 CPU 系统的限制因素不是抢占,而是锁,无论是大锁还是其他锁:任何时候代码获取锁,都意味着另一个 CPU 无法开始执行相同的操作。

答案2

抢占式内核仅意味着没有大内核锁

Linux从一开始就具有抢占式多任务(即用户代码是可抢占的)(据我所知,Linus上传到funet ftp服务器的第一个Linux 0.0.1已经是抢占式多任务)。例如,如果您执行了多个压缩或编译过程,它们从一开始就是并行执行的。

与当时广泛使用的 Win31 相反。在 Win31 上,如果任务从“内核”获得 CPU,则默认情况下,它有责任确定何时将控制权交还给操作系统(或其他任务)。如果一个进程没有对此功能的特殊支持(这需要额外的编程工作),那么在执行它时,所有其他任务都会被挂起。即使是集成到 Win31 中的大多数基本应用程序也是如此。

抢占式多任务意味着任务无法根据需要分配 CPU。相反,如果他们的时隙过期后,内核会从它们手中夺走 CPU。因此,在抢占式操作系统中,编写错误或运行不良的进程无法冻结操作系统,或避免其他进程运行。 Linux 总是抢占用户空间进程。

大内核锁意味着在某些情况下,内核空间内部,仍然可能存在一些锁,阻止其他进程运行受保护的代码。例如,你不能并发多个文件系统 - 如果您给出多个挂载命令,它们仍然会连续执行,因为挂载需要分配大内核锁。

使内核抢占需要消除这个大内核锁,即使挂载和任何其他任务能够同时运行。这是一项艰巨的工作。

从历史上看,随着 SMP(多 CPU 支持)支持的不断增加,这一点变得非常紧迫。第一次出现了真正的多CPU主板。后来多个CPU(“核心”)被集成到单个芯片中,如今真正的多CPU主板已经很少见(它们通常出现在昂贵的服务器系统中)。而且真正的单核系统(只有一个 cpu,只有一个核心)很少见。

因此,你的问题的答案不是“非先发制人的原因是什么”,因为它总是先发制人的。真正的问题是,是什么使得抢占式内核执行真正必要。答案是:多CPU、多核系统的比例不断增加。

答案3

这不是技术答案,而是历史答案具体问题OP 提出:“旧版 Linux 内核的非抢占性的原因是什么?”

(我假设,正如 @peterh 在他的回答和评论中所解释的那样,通过“非抢占性”,OP 指的是以下事实中的一个或两个:只有一个用户进程可以在内核内部(在 API 中)时间和/或大内核锁。)

Linus Torvalds 对学习操作系统的工作原理很感兴趣,他学习的方式就是编写一个操作系统。他的模型、基础和初始开发环境是 Minix,这是一个用于教育目的的现有操作系统(即不是生产操作系统),它不是免费的(就像当时的开源那样 - 它不像啤酒那样免费,任何一个)。

因此,他编写了一个没有抢占的内核(其他答案中提到的大内核锁),因为如果您想让新操作系统出于教育目的快速启动并运行,那么您就可以这样做:这样要简单得多。支持用户程序和设备并发多道编程的内核已经够难的了——它极其很难使内核本身并发。

如果他知道 Linux 会变得多么流行/有用/重要……他可能也会这样做。 (仅在我看来,我不知道他到底在想什么。)因为你必须先走,然后才能跑。

这种状态持续了很长一段时间,因为 a) 要使 Linux 成为今天的样子(甚至当时的样子),还有很多其他工作要做,b) 改变它将是一项艰巨的任务(如其他答案中所解释)。

相关内容