8

プロセスの優先順位が高くなるにつれて、プロセスのナイスネスは低下します。

Beginning Linux Programming第4版、Pg 169からの抜粋:

デフォルトの優先度は 0 です。正の優先度は、他に優先度の高いタスクを実行する準備ができていないときに実行されるバックグラウンド タスクに使用されます。負の優先度を設定すると、プログラムがより頻繁に実行され、使用可能な CPU 時間のより大きな割合が使用されます。有効な優先度の範囲は -20 ~ +20 です。数値が高いほど実行の優先順位が低くなるため、これはしばしば混乱を招きます。

より高いプロセス優先度に対応する負の値に特別な理由はありますか (ナイスネス値の高いプロセスの優先度を上げるのとは対照的に)

4

4 に答える 4

3

Jerry Peekらによって確認されているように、@Ewaldの答えは正しいです。in Unix Power Tools (O'Reilly、2007 年、p. 507):

これが、nice数が通常nicenessと呼ばれる理由です。niceness が高いジョブはシステムのユーザーに非常に優しく (つまり、低い優先度で実行されます)、niceness がほとんどないジョブは CPU を占有します。「ナイスネス」という言葉は、プライオリティ システム自体と同様にぎこちないものです。残念ながら、これは正確であり (ナイスナンバーは優先度の計算に使用されますが、優先度そのものではありません)、恐ろしい回避策を回避する唯一の用語です (「優先度を上げると優先度を下げることを意味します...」)。

Nice は、少なくともV6 Unixからこの意味を持っていましたが、V6 のマニュアルではこれを明示的に説明していません。許容値の範囲は -220 ~ +20 で、負の数はスーパーユーザー用に予約されています。V7では範囲が -20 から +20 に変更されました。

于 2012-12-28T13:56:51.570 に答える
2

ヒステリックな理由 - 私は歴史的なことを意味します... 数字が 0 から 20 に上昇することから始まり、利用可能な最低値が最初に採用されたと確信しています。その後、誰かが「うーん、もっと重要なものを作る必要があるとしたらどうだろう」という結論に達しました。

優先度をソート可能な値にしたいので、「デフォルトはゼロ」から始める場合は、優先度を高くする必要があります(ただし、日常的に話す「優先度1」は「優先度2」よりも高くなります-上司がが「これを最優先事項にしてください」と言っていますが、それは重要なことですよね?)。コンピュータであるため、明らかに優先度 0 は優先度 1 よりも高く、優先度 -1 は優先度 0 よりも高くなります。

結局は恣意的な選択です。たぶん、ケン・トムソン、デニス・リッチー、またはそれらのいずれかが、たとえば、0..255 ではなく、そのシーケンスだけを選択した理由を確実に言うことができるでしょう。

于 2012-12-28T09:18:34.820 に答える
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

so sys_nice( ) サービス ルーチンは、nice( ) システム コールを処理します。nice_value には任意の値を指定できますが、40 より大きい絶対値は 40 に切り捨てられます。伝統的に、負の値は優先度の増加の要求に対応し、スーパーユーザー権限が必要ですが、正の値は優先度の減少の要求に対応します。負の nice_value の場合、関数は Capable( ) 関数を呼び出して、プロセスに CAP_SYS_NICE 機能があるかどうかを確認します。さらに、この関数は security_task_setnice( ) セキュリティ フックを呼び出します。最終的に、nice_value を使用して静的優先度を計算し、この静的優先度を使用して基本時間クォンタムを計算します。

したがって、-ve値は優先度を上げるために使用されるため、スーパーユーザーアクセスが必要であり、+ve値は優先度を下げるために使用されるため、スーパーユーザーアクセスは必要ないことは明らかです。

于 2012-12-28T09:44:03.717 に答える
1

はい - 数値が上がるとより良くなり、数値が下がると平均的になります。したがって、このプロセスは、すべてのリソースを占有していない場合は「友好的」であると見なされ、リソースに貪欲になると「不快」と見なされます。

それを「いい」ポイントと考えてください。他の人に親切にすればするほど、より多くのポイントを獲得できます。

于 2012-12-28T09:12:57.413 に答える