进程执行后,内核如何为其分配nice值?

进程执行后,内核如何为其分配nice值?

Linux 内核实现了两个独立的优先级范围。第一个是好值,一个从 –20 到 +19 的​​数字,默认值为 0。

Nice 值是所有 Unix 系统中使用的标准优先级范围,尽管不同的 Unix 系统以不同的方式应用它们。

我想知道的是使用哪些参数来计算处理后要分配的好值。

谢谢你的时间。

答案1

没有一个白银公式可以准确地告诉您背后的数字。这一切都取决于内核调度程序端的特定实现。

如果您对细节感兴趣,您可以检查默认Linux内核调度程序(Completely Fair Scheduler)的优先级逻辑,例如这里

为未来的访问者复制粘贴(以防链接几年后过期):

优先事项

每个流程都有两个与之相关的优先级。一是过程的美好价值。范围从-20到19,默认为0。nice值越低,优先级越高。如果有两个进程的nice值分别为5(进程1)和10(进程2),则进程1具有高优先级。

我们可以在 shell 上使用 ps -el 命令检查进程的好值。在内核空间中,它被翻译为 MAX_RT_PRIORITY + 20 + 好的值。它存储在task_struct的static_prio字段中。

第二优先级是实时优先级。它们具有相反的概念,意味着价值越高,进程的优先级越高。其范围从 0 到 100。

task_struct 中还有一个名为 prio 的字段,它又存储调度程序正在考虑提高或阻止优先级的进程的有效优先级,以避免诸如优先级反转之类的情况。

在早期的调度程序中,优先级值用于决定下一个进程及其在处理器上获得的时间片。这种方法有很多缺点,Robet Love 的《Linux 内核开发》一书中对此进行了很好的描述。

在 CFS 中,不是使用优先级来决定进程在处理器上获得的绝对时间,而是根据系统的总体负载来计算进程应该在处理器上获得的部分处理器时间。如果一个进程得到的数据少于它应该得到的数据,它最终会向RB树的左侧移动并获得处理器时间。

相关内容