为什么niceness值与进程优先级成反比?

时间:2012-12-28 09:10:23

标签: linux unix terminology nice

流程的niceness会随着流程优先级的提高而降低。

从Beginning Linux Programming 4 th Edition,Pg 169:

中提取
  

默认优先级为0.正优先级用于后台   当没有其他更高优先级的任务准备好运行时运行的任务。   负优先级会导致程序更频繁地运行,需要一个   可用CPU时间的较大份额。有效优先事项的范围   是-20到+20。这往往令人困惑,因为它越高   数值,执行优先级越低。

是否有任何特殊原因导致负值与更高的流程优先级相对应(而不是为更高优先级的流程提高优先级)?

4 个答案:

答案 0 :(得分:2)

歇斯底里的原因 - 我的意思是历史...我很确定它的数字从0 ... 20开始上升,而最低的数字是先获得的。然后有人得出结论:“嗯,如果我们需要做一些更重要的事情呢?” - 我们必须消极。

您希望优先级是可排序的值,因此如果您以“默认为零”开头,则必须将更高的优先级设为更高的数字(但每日说话中的“优先级1”高于“优先级2” - 当你的老板说“让这个成为你的第一优先”时,它确实意味着它很重要,对吗?)。作为计算机,显然优先级0高于优先级1,优先级-1高于优先级0.

最后,这是一个随意的选择。也许Ken Thomson,Dennis Ritchie或其中一个人能够肯定地说他们为什么选择那个序列,而不是0..255。

答案 1 :(得分:2)

首先,答案有点长,但这只是为了澄清。

在linux内核中,每个传统进程可能具有被称为静态优先级的优先级从100(最高)到139(最低)。因此,基本上有40个优先事项可以分配给该流程。

因此,当创建任何进程时,它获得它的父级的优先级,但如果用户想要更改它的优先级,那么可以在nice(nice_value)系统调用的帮助下完成。

&安培;你的问题的原因是每个进程都需要基本时间量,这个量用作进程在几毫秒内获得CPU执行的时间,并计算为

time={
     if static_priority<120

       (140-static_priority)*20 

     if static_priority>=120

       (140-static_priority)*5

所以sys_nice()服务例程处理nice()系统调用。尽管nice_value可以具有任何值,但是大于40的绝对值被减少到40.传统上,负值对应于优先级增量的请求并且需要超级用户权限,而正值对应于优先级降低的请求。在负nice_value的情况下,函数 调用able()函数来验证进程是否具有CAP_SYS_NICE功能。此外,该函数调用security_task_setnice()安全钩。所以最后,nice_value用于计算静态优先级&amp;然后,这个静态优先级用于计算基准时间量。

所以很明显-ve值用于增加优先级,因此需要超级用户访问&amp; + ve值用于降低优先级,因此无需超级用户访问。

答案 2 :(得分:2)

@ Ewald的回答是正确的,正如 Unix Power Tools 中的Jerry Peek 所证实的那样(O'Reilly,2007,p.507):

  

这就是 nice 号通常被称为 niceness 的原因:具有高度好的作业对系统用户非常友好(即,它运行在低位)优先级),而一个不太好的工作会占用CPU。 “优秀”这个词很尴尬,就像优先系统本身一样。不幸的是,它是唯一一个既准确(漂亮数字用于计算优先级但又不是优先级本身)的术语,并避免可怕的迂回(“提高优先级意味着降低优先级......” )。

尼斯至少有V6 Unix这个含义,但V6手册从未明确解释过这一点。允许值的范围是-220到+20,为超级用户保留负数。范围在V7更改为-20到+20。

答案 3 :(得分:1)

是的 - 当数字上升时,它会变为NICER,而当数字下降时,它会变为MEANER。所以这个过程被认为是更好的&#34;当它没有占用所有的资源和&#34;讨厌&#34;因为资源越来越贪婪。

将其视为&#34; nice&#34;积分 - 你对别人越好,得分就越多。