Linuxでスケジューリングの優先順位がどのように機能するかを理解しようとしています。ここに私が持っているものがあります:
Nice
インターフェースを提供します。これは、ユーザーに公開され、ユーザーが変更できる優先順位です。 Nice
値の範囲は-20〜19で、優先度100〜139にマップされます。優先度値と同様に、Nice
値が低いほど、プロセスの優先度が高くなります。私の質問は今です:PRI ps
の列は何を示していますか?
ps
のマニュアルページには次のように書かれています。
pri PRI priority of the process. Higher number means lower priority.
ただし、値の範囲は0〜39であり、19 - Nice
と等しいことが経験的にわかっています。
関係を考えると、Nice
とPRI
列に示されている優先度の両方が「数値が大きいほど優先度が低い」ということは不可能です。
何が欠けていますか?
この動作を示す例:
root@kali:~# ps -ao pid,comm,pri,Nice
PID COMMAND PRI NI
6153 cat 19 0
(···)
root@kali:~# renice -n -10 -p 6153
6153 (process ID) old priority 0, new priority -10
root@kali:~# ps -ao pid,comm,pri,Nice
PID COMMAND PRI NI
6153 cat 29 -10
(···)
_ps -o pri
_のPRI
は_39 - priority
_であり、priority
は_/proc/PID/stat
_の18番目のフィールドです。
_proc/PID/stat
_のマングルされていないフィールドが必要な場合は、_ps -o priority
_を使用して取得できます。
実際の優先度が必要な場合は、_ps -o pri_baz
_で取得できます。
その値の他の興味深いマングリングは、_ps -o pri_foo
_、_ps -o pri_bar
_および_ps -o opri
_で取得できます。
私はあなたを子供にしません。ソース はこちら で確認できます。
_/proc/PID/stat
_に関する注意:
_/proc/PID/stat
_の優先度フィールド(18番目)は、カーネルによって _fs/proc/array.c
_ から_task_struct->prio - 100
_( を介して) task_prio()
; _MAX_RT_PRIO
_ は_100
_)として定義されます。