Linux 什么是抢占/什么是可抢占内核?它有什么好处?

Linux 什么是抢占/什么是可抢占内核?它有什么好处?,linux,operating-system,kernel,preemption,Linux,Operating System,Kernel,Preemption,用你自己的话解释,什么是抢占,它对(linux)内核意味着什么 拥有可抢占的内核有哪些优点和缺点?你真的应该使用“抢占”这个术语。抢占有不同的种类。本质上,它非常简单,你可能用另一个名字来理解它。抢占式操作系统可以在用户模式线程之间切换上下文,而无需在抢占式应用程序中进行任何特殊编程。这允许多任务处理。一个操作系统可以切换到一个进程,这种切换本质上是一种转移。还有抢占式内核(preemptivekernel),它允许抢占内核模式的线程(大多数操作系统不允许这样做,但某些应用程序(如实时系统)需要

用你自己的话解释,什么是抢占,它对(linux)内核意味着什么


拥有可抢占的内核有哪些优点和缺点?

你真的应该使用“抢占”这个术语。抢占有不同的种类。本质上,它非常简单,你可能用另一个名字来理解它。抢占式操作系统可以在用户模式线程之间切换上下文,而无需在抢占式应用程序中进行任何特殊编程。这允许多任务处理。一个操作系统可以切换到一个进程,这种切换本质上是一种转移。还有抢占式内核(preemptivekernel),它允许抢占内核模式的线程(大多数操作系统不允许这样做,但某些应用程序(如实时系统)需要这样做)。请注意,这是一个非常简单的解释。

抢占式多任务处理-在单个处理器上运行多个进程/线程,产生一种假象,即当实际分配给每个进程/线程的多路复用时间片很小时,它们会并发运行。当一个进程被安排停止执行并等待下一个时间片运行时,它被“抢占”

一个抢占式内核,它可以在执行代码的过程中被中断——例如响应系统调用——做其他事情并运行其他线程,可能是那些不在内核中的线程。

抢占式内核的主要优点是sys调用不会阻塞整个系统。如果sys调用需要很长时间才能完成,那么这并不意味着内核在这段时间内不能做任何其他事情。
主要缺点是,这给内核代码带来了更大的复杂性,必须处理更多的最终情况,执行更细粒度的锁定或使用无锁结构和算法。

抢占意味着操作系统支持多个任务(一段独立的代码),并将按计划在任务之间切换。当任务被中断时,它被称为“抢占”。现代操作系统支持这一点,但简单的嵌入式系统就不需要它。支持任务切换的开销并不总是值得的。

其他人已经充分解释了什么是可抢占内核

它有什么好处

主要的好处是:

  • 在非SMP系统上降低延迟-通常用于实时系统或其他延迟很重要的事情(音频、视频应用程序可能)
  • 教没有SMP系统的内核开发人员如何为SMP编写正确的代码
对于不可抢占的内核,在单处理器系统上,内核开发人员可能会很懒惰,并且在大多数情况下都不会锁定—当然,这在SMP上是一个巨大的失败。可抢占内核允许他们在没有更多内核的情况下承受这种痛苦。

我想这就解释了你的问题:

什么是先占权

操作系统抢占或停止当前计划任务以支持更高优先级任务的能力。调度可以是但不限于进程或I/O调度等之一

什么是抢占内核

在Linux下,用户空间程序始终是可抢占的:内核使用常规时钟周期中断用户空间程序以切换到其他线程。因此,内核不会等待用户空间程序显式释放处理器(这是协作多任务处理的情况)。这意味着用户空间程序中的无限循环无法阻止系统

然而,在2.6内核之前,内核本身是不可抢占的:一旦一个线程进入内核,就不能抢占它来执行另一个线程。当系统调用终止时,或者当当前线程明确要求调度程序使用schedule()函数运行另一个线程时,处理器可用于执行另一个线程。这意味着内核代码中的无限循环阻塞了整个系统,但这并不是一个真正的问题:内核代码的设计使得没有无限循环

在2.6内核中引入了内核抢占,可以使用CONFIG_PREEMPT选项启用或禁用它。如果启用了CONFIG_PREEMPT,那么内核代码可以在任何地方被抢占,除非代码禁用了本地中断。代码中的无限循环不能再阻塞整个系统。如果禁用配置抢占,则恢复2.4行为

利与弊

优点:抢占内核可以提高延迟和可伸缩性,可以使高优先级任务运行并及时响应


缺点:在抢占内核中,特别是在SMP中,编写代码很困难,必须考虑很多因素。这不是家庭作业。事实上,像我这样的人对这样的问题很感兴趣,并且不理解常见的维基百科文章。这就是为什么当一个文件系统坏了,特别是一个网络文件系统,你可能会发现自己有一个无法终止的进程。它坐在那里等待sys调用读取文件系统返回,但它永远不会返回,也不能被中断。我知道,您的贡献是很久以前做出的,但无论如何,让我问您一个问题。为什么你更喜欢“先发制人”这个词而不是“先发制人”?特别是对于使用后者的内核配置,使用它可能更直观一些。关于何时发生内核抢占:这个()问题显示了何时可以抢占内核线程。