进程的友好度随着进程优先级的增加而降低。
摘自《Linux 编程入门》第 4版,第 169 页:
默认优先级为 0。正优先级用于在没有其他更高优先级任务准备好运行时运行的后台任务。负优先级导致程序运行更频繁,占用更多可用 CPU 时间。有效优先级的范围是 -20 到 +20。这通常令人困惑,因为数值越高,执行优先级越低。
与更高的进程优先级相对应的负值是否有任何特殊原因(而不是为更高的 niceness 值的进程增加优先级)?
进程的友好度随着进程优先级的增加而降低。
摘自《Linux 编程入门》第 4版,第 169 页:
默认优先级为 0。正优先级用于在没有其他更高优先级任务准备好运行时运行的后台任务。负优先级导致程序运行更频繁,占用更多可用 CPU 时间。有效优先级的范围是 -20 到 +20。这通常令人困惑,因为数值越高,执行优先级越低。
与更高的进程优先级相对应的负值是否有任何特殊原因(而不是为更高的 niceness 值的进程增加优先级)?
@Ewald 的回答是正确的,正如 Jerry Peek等人所证实的那样。在Unix Power Tools (O'Reilly, 2007, p. 507) 中:
这就是为什么nice数字通常被称为niceness的原因:niceness 高的作业对系统用户非常友好(即,它以低优先级运行),而 niceness 低的作业会占用 CPU。“niceness”这个词很尴尬,就像优先系统本身一样。不幸的是,它是唯一既准确的术语(漂亮的数字用于计算优先级,但不是优先级本身)并且避免了可怕的迂回说法(“提高优先级意味着降低优先级......”)。
Nice 至少从V6 Unix开始就有这个含义,但 V6 手册从未明确解释过这一点。允许值的范围是 -220 到 +20,负数保留给超级用户。在V7中,范围更改为 -20 到 +20 。
歇斯底里的原因 - 我的意思是历史......我很确定它始于数字从 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 值用于增加优先级,因此需要超级用户访问和 +ve 值用于降低优先级,因此不需要超级用户访问。
是的 - 随着数字的增加,它会变得更好,随着数字的下降,它会变得更好。因此,当它不占用所有资源时,该过程被视为“更友好”,而当它对资源变得更加贪婪时,它被视为“讨厌”。
把它想象成“好”的分数——你对别人越好,你的分数就越多。