簡潔な答え
PRは優先レベルです。PRが低いほど、プロセスの優先度は高くなります。
PRは次のように計算されます。
- 通常のプロセスの場合:PR = 20 + NI(NIは素晴らしく、範囲は-20から19)
- リアルタイムプロセスの場合:PR =-1-real_time_priority
(real_time_priorityの範囲は1〜99)
ロングアンサー
プロセスには、通常のプロセスとリアルタイムの 2つのタイプがあります。通常のプロセス
(およびそれらのプロセスのみ)には、niceが次のように適用されます。
いいね
「ナイスネス」スケールは-20から19になりますが、-20が最高の優先順位で、19が最低の優先順位です。優先度レベルは次のように計算されます。
PR = 20 + NI
NIはナイスレベルで、PRは優先レベルです。ご覧のとおり、-20は実際に0にマッピングされ、19は39にマッピングされます。
デフォルトでは、プログラムのnice値は0ですが、rootユーザーは次のコマンドを使用して、指定されたnice値でプログラムを起動することができます。
nice -n <nice_value> ./myProgram
リアルタイム
さらに先へ進むことができました。niceプログラムは実際にユーザープログラムに使用されます。UNIX / LINUX全体の優先度には140の値の範囲がありますが、nice値を使用すると、プロセスは範囲の最後の部分(100から139)にマップできます。この式では、0〜99の値に到達できず、負のPRレベル(-100〜-1)に対応します。これらの値にアクセスできるようにするには、プロセスを「リアルタイム」として記述する必要があります。
LINUX環境には5つのスケジューリングポリシーがあり、次のコマンドで表示できます。
chrt -m
次のリストが表示されます。
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
スケジューリングプロセスは、通常のスケジューリングポリシー(1〜3)とリアルタイムスケジューリングポリシー(4と5)の2つのグループに分けることができます。リアルタイムプロセスは、通常のプロセスよりも常に優先されます。リアルタイムプロセスは、次のコマンドを使用して呼び出すことができます(例は、SCHED_RRポリシーを宣言する方法です)。
chrt --rr <priority between 1-99> ./myProgram
リアルタイムプロセスのPR値を取得するには、次の式が適用されます。
PR = -1-rt_prior
ここで、rt_priorは1〜99の優先度に対応します。そのため、他のプロセスよりも高い優先度を持つプロセスは、番号99で呼び出されます。
リアルタイムプロセスでは、ナイス値は使用されないことに注意することが重要です。
プロセスの現在の「適切さ」とPR値を確認するには、次のコマンドを実行できます。
top
次の出力が表示されます。
図では、PRとNIの値が表示されます。リアルタイム値に対応するPR値-51のプロセスに注意してください。PR値が「rt」と記載されているプロセスもあります。この値は、実際には-100のPR値に対応します。
niceness
が、タスクniceness
が高優先順位タスクの邪魔にならないように負の優先順位を与えるために使用できますか?(すなわち、それがされるnice
と、他のアクセスリソースをさせるか、これはちょうど私を混同したのか?