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



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

节选自Beginning Linux Programming 4th Edition, Pg 169:

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

是否有什么特殊的原因使负值对应于更高的进程优先级(相对于更高的nice值的进程增加优先级)?

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

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

Nice至少从V6 Unix开始就有这个含义,但是V6手册从来没有明确地解释过。允许的值范围是-220到+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

so sys_nice()服务程序处理nice()系统调用。虽然nice_value可以有任何值,但是大于40的绝对值被缩减为40。传统上,负值对应于优先级增加的请求,并且需要超级用户权限,而正值对应于优先级降低的请求。在nice_value为负的情况下,函数调用capable()函数来验证流程是否具有CAP_SYS_NICE功能。此外,该函数调用security_task_setnice()安全钩子。所以最后nice_value被用来计算静态优先级&然后将此静态优先级用于计算基本时间量子。

所以很明显-ve值是用来增加优先级的,所以需要超级用户访问&

+ve值用于降低优先级,因此不需要超级用户访问。

是的-随着数字的增加,它变得更好,随着数字的减少,它变得更糟糕。所以这个过程被认为是"友好的"。当它没有占用所有的资源和"肮脏"的时候;因为它对资源越来越贪婪。

把它想象成"很好";分数——你对别人越好,你的分数就越多。

最新更新