什么是先发制人/什么是可预留的内核?到底有什么好处呢?

Mar*_*Lux 57 linux operating-system kernel preemption

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

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

sho*_*osh 65

抢占式多任务处理 - 在单个处理器上运行多个进程/线程,创建它们并发运行的错觉,实际上每个处理器都分配了小的多路复用时间片来运行.当一个进程被调度执行并等待进程时,它会被"抢占".下一次切片运行.

抢占式内核是在执行代码的过程中可以被中断的内核 - 例如在响应系统调用时 - 执行其他操作并运行其他线程,可能是那些不在内核中的线程.

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

  • 这就是为什么当文件系统变坏,特别是网络文件系统时,你可能会发现自己有一个无法杀死的进程.它坐在那里等待一个sys调用来读取文件系统返回,但它永远不会被它中断. (8认同)

Bob*_*toe 15

你应该真的使用"先发制人"这个词.有不同种类的先发制人.从本质上讲,它非常简单,你可能会用另一个名字来理解它.抢占式操作系统可以在用户模式线程之间切换上下文,而无需在抢占的应用程序中进行任何特殊编程.这允许多任务处理.操作系统可以切换回一个进程,这种切换基本上是透明的.还存在抢占式内核这样的事情,它允许内核模式线程被抢占(大多数操作系统不允许这样做,但是对于某些应用程序,例如在实时系统中,它是必需的).注意,这是一个非常简化的解释.


Mar*_*rkR 7

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

到底有什么好处呢?

主要是好处是:

  • 非SMP系统的延迟较低 - 通常用于实时系统或延迟很重要的其他事项(可能是音频,视频应用)
  • 教授没有SMP系统的内核开发人员如何为SMP编写正确的代码

使用不可抢占的内核,在单处理器系统上,内核开发人员可能会懒惰并且在大多数时间没有任何锁定的情况下逃脱 - 当然这对SMP来说是一个很大的失败.可抢占的内核允许他们在没有更多内核的情况下获得这种痛苦.


Nan*_*iao 7

我认为这篇文章解释了你的问题:

什么是先发制人?

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

什么是抢先内核?

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

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

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

优点和缺点?

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

缺点:它使抢占内核编写代码变得困难,尤其是在SMP中,你必须考虑很多因素.