Linux のプロセスには優先順位があります。 Linux はマルチユーザー、マルチタスクのオペレーティング システムです。通常、システム内では多くのプロセスが実行されますが、CPU は 1 クロック サイクルで 1 つの命令しか実行できません。どのプロセスが最初に動作し、誰が最後に動作する必要がありますか?これはプロセスの優先度によって決定する必要があります。 Linux システムには、プロセスの優先度を表す 2 つのパラメータ、Pri と Nice があります。プロセスの優先度は、Nice 値ではなく PRI 値ですが、Nice 値は優先度に影響します。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
Linux プロセスの優先順位
Linux はマルチユーザー、マルチタスクのオペレーティング システムであり、通常、システム内では多くのプロセスが実行されています。 。 プロセス。ただし、CPU は 1 クロック サイクルで 1 つの命令しか実行できません (現在の CPU はマルチスレッドおよびマルチコア技術を採用しているため、1 クロック サイクルで複数の命令を実行できます。ただし、同時に実行できる命令の数はシステム内の計算よりもはるかに小さい (プロセスの総数))、次に問題が生じます: 誰が最初に計算し、誰が最後に計算するのか?これはプロセスの優先度によって決定する必要があります。
CPU がリソースを割り当てる順序が優先度です。
最も優先度の高いプロセスが最初に実行する権利を持ちます
システム全体のパフォーマンスを向上させるために、指定した CPU でプロセスを実行できます。
さらに、CPU がデータを計算しているときに、プロセスの動作は、プロセスタスクが終了するまで、最初にプロセス 1、次にプロセス 2、次にプロセス 3、次にプロセス 1 を実行します。プロセスの優先度が存在するため、プロセスは順番に計算されるのではなく、優先度の高いプロセスが 1 回の計算サイクルでより多く計算されることになります。
このままではわかりにくいので、別の言い方をしましょう。供給 (計算) する必要がある子 (プロセス) が 4 つあるとします。私は子 1 を優先し (プロセス 1 の優先順位が高くなります)、子 2、子 3、および子 4 は同等に扱われます (プロセス 2、プロセス 3)。 、プロセス4が優先されます)。次に、餌を与え始めます。最初に子供 1 に餌を与えてから、他の子供に餌を与えることはできません。代わりに、ループ (CPU 動作中にすべてのプロセスがループ) で餌を与える必要があります。そして、授乳(計算)するときは、まずその子にご飯を一口食べさせてから、他の子に食べさせます。そして、サイクルでは、最初に子供 1 に 2 口分の食べ物を与えます。私は子供 1 を好むため (優先順位が高い)、他の子供たちには 1 口分の食べ物を与えます。このようにすると、私は子 1 の方が好きなので、子 1 が最初に供給されます (プロセス 1 の計算が高速になります)。
プロセスの優先度の表示
1. ps-al を使用してプロセスの優先度を確認します
2.PRI と NI
Linux システムには、プロセスの優先順位を示す 2 つのパラメーター、Priority と Nice があります。
[root@localhost ~]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 718 - ? 00:00:01 init 1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd ...省略部分输出...
このうち、PRIはPriority、NIはNiceの略です。どちらの値も優先度を示しており、値が小さいほどプロセスが CPU から受け取る優先度が高くなります。ただし、PRI 値はカーネルによって動的に調整されるため、ユーザーが直接変更することはできません。したがって、PRI 値に影響を与えることができるのは、NI 値を変更し、間接的にプロセスの優先順位を調整することだけです。
PRI と NI の関係は次のとおりです。
PRI (最終値) = PRI (元の値) NI
実際には、誰もが覚えておく必要があるのは、NI の値を変更することでプロセスの優先順位を変更できることです。 NI 値が小さいほど、プロセスの PRI 値は減少し、プロセスは CPU によって最初に処理されます。逆に、NI 値が大きいほど、プロセスの PRI 値は増加し、プロセスは後から処理されます。 CPUによる。
NI 値を変更する際には、いくつか注意すべき点があります:
NI の範囲は -20 ~ 19 です。
一般ユーザーは NI 値を 0 ~ 19 の範囲で調整でき、自分のプロセスのみを調整できます。
一般ユーザーは NI 値を増やすことのみができ、下げることはできません。元の NI 値が 0 の場合、0 より大きくなるようにのみ調整できます。
root ユーザーのみがプロセス NI 値を負の値に設定でき、任意のユーザーのプロセスを調整できます。
#nice 値を表示および変更するには、コマンドを表示します。
1. 表示および変更するには、先頭のコマンドを使用します。 nice 値トップキーを押しながら r を入力し、プロセス PID を入力して、nice 値を入力します。 (昇格が拒否されたことが示された場合は、sudo を使用して、top コマンドの権限を昇格します)。 2. その他の概念同時実行性: 複数のプロセスは、CPU 上のプロセス切り替えを使用して、一定期間内に複数のプロセスを進めます。これを同時実行性と呼びます。
#プロセスの優先度は、Nice 値ではなく PRI 値ですが、Nice 値は優先度に影響します
PRI はまだ 分かりやすいのはプロセスの優先度、平たく言えばCPUがプログラムを実行する順番で、この値が小さいほどプロセスの優先度が高くなります。 NIはどうですか?これは、私たちが話している素晴らしい値であり、プロセスを実行できる優先度の変更された値を表します。前述したように、PRI 値が小さいほど実行は速くなりますが、nice 値を追加すると、PRI は PRI(new)=PRI(old) nice になります。 これまでのところ、強調する必要があるのは、プロセスの nice 値はプロセスの優先度ではないということです。これらは概念ではありませんが、プロセスの nice 値は、プロセスの優先度の変更に影響します。プロセス。 nice の値を調整してプロセスの優先度を変更します。nice の調整範囲は -20 ~ 19 です。プロセスの優先順位と変更に影響を与える要因と原則
スケジューリング戦略: RR スケジューリング プロセスと FIFO スケジューリング プロセスはリアルタイム プロセスですタイムシェアリング (OTHER) でスケジュールされたプロセスは、非リアルタイム プロセスです。
FIFO (先入れ先出し) と RR (タイム スライス ローテーション) はリアルタイム プロセスに使用され、OTHER (タイムシェアリング スケジューリング) は非リアルタイム プロセスに使用されます。リアルタイム プロセスは通常のプロセスをプリエンプトします。FIFO により同時実行されます。優先順位のあるリアルタイム プロセスは常に CPU を占有し、RR は同じ優先順位を持つリアルタイム プロセスがタイム スライスに従って順番に実行されるようにします。リアルタイム プロセスの優先度は、通常のプロセスよりも高くなります。リアルタイム プロセスでは静的な優先度スケジューリングが使用され、非リアルタイム プロセスでは動的優先度スケジューリングが使用されます。 -リアルタイムプロセスはniceによって調整されており、ボーナスの影響を受ける可能性があります。
Linux プロセスには 2 つの優先順位があります。通常のプロセスの優先順位 (SCHED_NORMAL スケジューリング ポリシーを使用) とリアルタイム プロセスの優先順位 (SCHED_FIFO または SCHED_RR スケジューリング ポリシーを使用) です。 さまざまなスケジューリング戦略時間プロセスは、同じ優先度を持つ場合にのみ比較できます。いつでも、リアルタイム プロセスの優先度は通常のプロセスよりも高くなります。Linux は、リアルタイム プロセスに静的な優先度スケジューリングを使用します。通常のプロセス (非リアルタイム プロセス) の場合は、動的な優先度に従ってスケジュールされます。 リアルタイム プロセスには静的な優先度 (0 ~ MAX_RT_PRIO-1 の間、デフォルトの MAX_RT_PRIO は 100) のみがあり、カーネルはスリープなどの要因に基づいて静的な優先度を調整しなくなりました。 リアルタイムプロセスの優先度 0 ~ 99 は、優先度キュー (リンクリスト) に対応しており、値の高いリンクリストから順に実行されます (番号 0 が最も低くなります)。後で説明する chrt および対応する関数によって変更できます; 非リアルタイム プロセスの静的優先度は、nice 値 (-20~19) によって調整できます: static_prio=MAX_RT_PRIO nice 20。 nice は非リアルタイム プロセスにのみ影響します (静的優先度は 100 ~ 139 です) nice 値が大きいほど、静的優先度の値も大きくなり、優先度は低くなります。 非リアルタイム プロセスの動的優先度は、静的優先度とボーナスに基づいて計算されます。dynamic_prio = max (100, min (static_prio -ボーナス 5, 139))ボーナスは平均睡眠時間を反映します。プロセスの時間 (範囲 0 ~ 10)、スリープ時間が長いほど、対話型プロセスである可能性が高く、実行の順番が来るたびに CPU を解放する前にタイム スライスを使い果たさない可能性が高くなります。 関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinux ではプロセスに優先順位がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。