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

一个进程的好处随着进程优先级的增加而降低。

摘自“Linux编程入门”第4版,第169页:

默认优先级为0.正向优先级用于在没有其他更高优先级任务准备运行时运行的后台任务。 负面的优先级会导致程序运行得更频繁,占用更多的CPU时间。 有效的优先级范围是-20到+20。 这经常令人困惑,因为数值越高,执行优先级越低。

对于更高的stream程优先级,负值是否有任何特殊的原因(相对于更高级别的stream程优先级)?

歇斯底里的原因 – 我的意思是历史…我敢肯定,它的数字从0 .. 20开始,最低的可用数量是第一。 然后有人得出这样的结论:“呃,如果我们需要做一些更重要的事情呢” – 那么我们必须消极。

你希望优先级是一个可排序的值,所以如果你以“默认值为零”开始,你必须优先选择一个更高的优先级(但是每天的优先级1高于优先级2) – 当你的老板说:“让这是你的第一优先”,这确实意味着这是重要的,对吗?)。 作为计算机,显然优先级0高于优先级1,优先级-1高于优先级0。

最后,这是一个任意的选择。 也许Ken Thomson,Dennis Ritchie或者其中一个人肯定会说出他们为什么选择这个顺序,而不是0..255。

首先答案有点长,但这只是澄清而已。

正如在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的情况下,函数调用capable()函数来验证进程是否具有CAP_SYS_NICE能力。 而且,函数调用security_task_setnice()安全钩子。 所以最后使用nice_value来计算静态优先级,然后使用这个静态优先级来计算基本时间量。

所以很明显,-ve值用于增加优先级,所以需要超级用户访问权限+ +值用于降低优先级,所以不需要超级用户访问。

@埃瓦尔德的答案是正确的,正如Jerry Peek 等人所证实的那样Unix Power Tools中 (O'Reilly,2007,p。507):

这就是为什么nice数字通常被称为niceness :一个高度漂亮的作业对你的系统的用户非常友善(即,它运行在低优先级),而一个干净利落的作业使CPU不能运行。 “好”这个词很尴尬,就像优先系统本身一样。 不幸的是,这是唯一准确的词汇( 好的数字用于计算优先级,但不是优先级本身),并避免可怕的迂回(“增加优先级意味着降低优先级…”)。

至少从V6 Unix开始 ,尼斯已经有了这个意义,但是V6手册没有明确地解释这一点。 允许值的范围是-220到+20,为超级用户保留负数。 在V7中 ,范围变为-20到+20。

是的 – 随着数字的增加,它会变得越来越少,当数字减少的时候,它会变得越来越少。 所以这个过程在没有占用所有的资源时被认为是“友好的”,而在资源变得更加贪婪的时候被认为是“讨厌的”。

把它想成“好的”点 – 你对别人越好,你拥有的点越多。