为什么精美度从-20到19?


22

nice命令允许您调整程序的调度优先级(“ niceness”)。在我使用过的所有类Unix系统上,niceness由一系列整数指定,其中-20是最有利的调度优先级,默认值为0,最不利的调度优先级是19。

将默认值设为0足够直观,但是为什么选择-20和19作为范围的端点?为什么不使用-128和127,它们恰好适合带符号的8位字节?还是为什么不使用-100到100(对于十进制思维的人来说更直观),或者类似地但在人机工程学上更容易使用-99到99?-20至19的范围是任意选择的还是nice与最初与之交互的调度程序的内部有某种关系?(我知道,至少对于Linux来说,今天没有这种关系,Linux的调度程序使用的优先级在0到139之间。但是,我对-20到19范围的历史原因很感兴趣。)


4
我找不到解释为什么选择该特定范围的参考,但是请注意,在V7中,优先级适合带符号的字节-请参见proc.h-并且setpri函数将优先级设置为min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20),而优先级<25被保留用于流程在做不间断的事情。因此,好感必须在有限的范围内。
Mark Plotnick

Answers:


7

内部悦耳度为0-39,但增量为正或负。 来源。因此,答案是nice命令所接受的数字(正数和负数)使您从默认级别20到0-39范围内的任何值。

那么为什么是0-39?特定范围是设计师最初实施时的工作范围。正值越多越好的原因是,在确定优先级时,将尼斯级别添加到了进程最近的CPU使用率中。为了提供近似的循环调度,内核跟踪每个进程最近消耗了多少CPU,并切换到没有那么多的进程。良好级别越高,看起来该进程拥有的CPU时间就越多,并且调度程序将使该进程进入睡眠状态或使其进入睡眠状态的频率就越高。参见Maurice J. Bach 设计的UNIX操作系统,Prentice-Hall,1986年,第二部分。8.1(特别是8.1.4)。ISBN 0-13-201799-7。


1
如果假设调度程序的值不好,就会使该程序进入睡眠状态,这会给您带来错误。相反,如果还有其他进程可以运行,并且这些进程具有更好的级别,则调度程序将不会唤醒睡眠进程。请注意,当进程调用强制对资源进行睡眠的syscall或进程耗尽其进程的CPU数量以及其他更多特权进程在等待CPU时,该进程将进入睡眠状态。
schily

-4

您会误会:如果您使用的是UNIX(仍然可以使用nice()接口),NZERO则它是默认的nice值和NZERO is 20

为了使事情更明显:您询问了该命令nice,同时提到了绝对级别,但是nice命令并不管理绝对值,而是相对于当前级别进行增量。在默认状态下,nice级别NZERO是20。

好的值是0..2 * NZERO-1或0..39

请注意,尽管默认的UNIX调度程序可能仍可以用一个不错的值来做一些有用的事情,但是如果您使用的是专门的调度程序,例如实时调度程序,则没有任何意义。


2
您似乎在混淆shell接口和C接口。这个问题是关于niceshell命令的。
吉尔斯(Gillles)“所以-别再邪恶了”

好吧,是你使事情变得混乱了。nice命令只知道增量,但问题中提到了不错的值。问题是关于好的价值观,我回答了这个问题。
schily
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.