なぜnicenessが-20から19の範囲にあるのですか?


22

このniceコマンドを使用すると、プログラムのスケジューリングの優先順位(「ナイスネス」)を調整できます。私が使用したすべてのUnixライクシステムでは、ナイスネスは整数の範囲で指定されます。-20が最も好ましいスケジューリング優先順位、0がデフォルト、19が最も好ましくありません。

デフォルトのナイスネスとして0を使用するのは十分直感的ですが、なぜ範囲のエンドポイントとして-20と19が選択されたのですか?なぜ-128と127は、符号付き8ビットバイトにぴったり収まるのでしょうか?あるいは、小数の人間にとってより直感的な-100から100、または同様に、しかし人間工学的には-99から99である-100から100でないのはなぜですか?-20から19の範囲は任意に選択されましたか、それともnice最初にインターフェースをとったスケジューラーの内部と何らかの関係がありますか?(少なくともLinuxでは、スケジューラーが0から139の範囲の優先順位を使用するため、そのような関係は今日ないことを理解しています。しかし、-20から19の範囲の歴史的な理由に興味があります。)


4
私は、その特定の範囲を選択した理由を説明するの参照を見つけることが、注目すべき符号付きバイトにV7での優先順位に適合することをすることはできません-参照proc.hを -とSETPRI機能がに優先度を設定min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20)、および優先順位は<25は、のために予約されました割り込み不可能なことを行うプロセス。そのため、素晴らしさはある種の限られた範囲でなければなりませんでした。
マークPlotnick

回答:


7

内部のnicenessレベルは0〜39ですが、増分は正または負です。 ソース。したがって、答えは、niceコマンドによって受け入れられる数値(正と負)が、20(デフォルトレベル)から0〜39の範囲の任意の値に到達することです。

では、なぜ0-39ですか?特定の範囲は、デザイナーの元の実装で機能したものでした。より正の値が優れている理由は、優先度を決定する際にプロセスの最近のCPU使用率にniceレベルが追加されるためです。おおよそのラウンドロビンスケジューリングを提供するために、カーネルは各プロセスが最近燃えたCPUの量を追跡し、それほど多くないCPUに切り替えます。ナイスレベルが高いほど、プロセスが持っているように見えるCPU時間は長くなり、スケジューラはそのプロセスをスリープ状態にするかスリープ状態のままにすることが多くなります。Maurice J. BachによるUNIXオペレーティングシステムの設計、Prentice-Hall 1986、secを参照してください。8.1(特に快適さのための8.1.4)。ISBN 0-13-201799-7。


1
スケジューラーが悪いnice値を持っている場合、スケジューラーがプロセスをスリープ状態にすると仮定するとき、あなたは間違っています。代わりに、実行する準備ができている他のプロセスがあり、これらのプロセスのナイスレベルがより良い場合、スケジューラはスリープ状態のプロセスをウェイクアップしません。リソースでスリープを強制するsyscallを呼び出すか、プロセスがそのCPUクォンタムを使い果たし、CPUを待機している他の特権プロセスがある場合、プロセスはスリープ状態になることに注意してください。
schily

-4

間違えています:nice()インターフェースがまだ理にかなっているUNIXを使用している場合NZEROは、デフォルトのnice値とNZERO is 20です。

わかりやすくするために、コマンドについて質問niceし、同時に絶対レベルについて言及しましたが、niceコマンドは絶対値を管理するのではなく、現在のレベルに相対的に増加します。デフォルト状態の場合、ナイスレベルNZEROは20です。

nice値は0..2 * NZERO-1または0..39です

デフォルトのUNIXスケジューラーはナイス値を使用して何か便利な機能を実行できる場合がありますが、リアルタイムスケジューラーなどの特殊なスケジューラーを使用している場合は意味がありません。


2
シェルインターフェイスとCインターフェイスを混同しているようです。この質問は、niceシェルコマンドに関するものです。
ジル「SO-悪であるのをやめる」

物事を混乱させるのはあなたです。niceコマンドはデルタについてのみ知っていますが、質問ではいい値について言及しています。質問はいい値についてであり、私はこれに答えました。
気味悪い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.