Linux 为什么准确度值与流程优先级成反比?

Linux 为什么准确度值与流程优先级成反比?,linux,unix,terminology,nice,Linux,Unix,Terminology,Nice,进程的优先级随着进程优先级的增加而降低 摘自《Linux编程入门》第4版第169页: 默认优先级为0。正优先级用于背景 当没有其他更高优先级的任务准备运行时运行的任务。 负优先级会导致程序更频繁地运行,从而导致 可用CPU时间的较大份额。有效优先权的范围 是-20到+20。这通常令人困惑,因为越高 数值,执行优先级越低 是否有任何特殊原因导致与更高的进程优先级相对应的负值(与提高高精度值进程的优先级相反)?是-随着数字的增加,负值变得更好,随着数字的减少,负值变得更平均。因此,当这个过程没有占用

进程的优先级随着进程优先级的增加而降低

摘自《Linux编程入门》第4版第169页:

默认优先级为0。正优先级用于背景 当没有其他更高优先级的任务准备运行时运行的任务。 负优先级会导致程序更频繁地运行,从而导致 可用CPU时间的较大份额。有效优先权的范围 是-20到+20。这通常令人困惑,因为越高 数值,执行优先级越低


是否有任何特殊原因导致与更高的进程优先级相对应的负值(与提高高精度值进程的优先级相反)?

是-随着数字的增加,负值变得更好,随着数字的减少,负值变得更平均。因此,当这个过程没有占用所有资源时,它被视为“更友好”,而当它对资源越来越贪婪时,它被视为“令人讨厌”


把它看作是“好”的观点——你对别人越好,你的观点就越多。

歇斯底里的原因——我是说历史。。。我敢肯定它是从0开始的。。20,可获得的最低值先取。然后有人得出结论,“嗯,如果我们需要做一些更重要的事情怎么办”-我们必须否定

您希望优先级是一个可排序的值,因此如果您以“默认值为零”开始,您必须要么将更高的优先级设置为更高的数字(但日常用语中的“优先级1”高于“优先级2”-当您的上司说“将此设置为您的第一优先级”时,这确实意味着它很重要,对吗?)。作为一台计算机,显然优先级0高于优先级1,优先级-1高于优先级0


最后,这是一个任意的选择。也许肯·汤姆森、丹尼斯·里奇或其中的一位能够肯定地说,为什么他们只选择那个序列,而不是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
时间={
如果静态_优先级=120
(140-静态_优先级)*5
因此sys\u nice()服务例程处理nice()系统调用。尽管nice_值可以有任何值,但大于40的绝对值将被缩减为40。传统上,负值对应于优先级递增的请求,需要超级用户权限,而正值对应于优先级递减的请求。如果nice_值为负值,函数 调用capable()函数来验证进程是否具有CAP\u SYS\u NICE功能。此外,该函数调用security\u task\u setnice()安全钩子。因此,最后使用NICE\u值来计算静态优先级,然后使用该静态优先级来计算基本时间量


很明显,-ve值用于增加优先级,因此需要超级用户访问&+ve值用于降低优先级,因此不需要超级用户访问。@Ewald的答案是正确的,正如Jerry Peek等人在Unix Power Tools(O'Reilly,2007,第507页)中所确认的:

这就是为什么尼斯数字通常被称为尼斯:高尼斯的作业对系统用户非常友好(即,它以低优先级运行),而低尼斯的作业占用CPU。术语“尼斯”很尴尬,就像优先级系统本身一样。不幸的是,它是唯一既准确又准确的术语(好的数字用于计算优先级,但不是优先级本身)并避免可怕的迂回(“增加优先级意味着降低优先级…”)


Nice至少从那时起就有了这个含义,但V6手册从未明确解释过这一点。允许值的范围是-220到+20,为超级用户保留了负数。范围更改为-20到+20英寸。

相关:我想向serverfault提出这个问题,因为这与编程无关,抱歉。尽管它与编程无关谈到程序员可能的想法——只是为了说明,我们所做的并不是都很清楚:)这可能是一个bug:“POSIX没有为这些函数获取和设置的值定义任何语义。正如您将看到的,Linux实现与POSIX语法的作者所想的完全相反。”@AshRJ是的,肯定是+19…从-20到+19有40个优先级,包括0。要了解更多信息,请阅读我的答案。我觉得很难相信,这是唯一的原因:)@AshRJ:不过,这就是它。cites Kernighan and Pike(1984)至于词源,它可以被视为一个权威来源。@larsmans我刚刚检查了维基百科页面、
Unix编程环境
、第35页以及其他实例上引用的词源,作者没有任何地方说明这种推理,也没有任何关于准确度值降低原因的推理或解释我只在书中的两个实例中引用了
nice实用程序
。@AshRj是的-这是真的-就像关于为什么光标被称为光标的故事一样…因为它会提示你诅咒:)@AshRj:有趣-即使维基百科引用了源代码,你也不能完全信任它。我只是用灰色的V6 Unix文档集,它没有解释任何地方名字叫“尼斯”。里奇一年前去世了,但是