マルチスレッドのプログラミング

タイムシェアスケジューリング

タイムシェアスケジューリングは、プロセッサリソースをタイムシェアリング (TS) および対話型 (IA) スケジューリングクラス内の LWP の間で公平に配分しようとします。

priocntl(2) の呼び出しは、1 つ以上のプロセスまたは LWP のクラス優先順位を設定します。タイムシェアクラスの優先順位の標準の範囲は -60 - +60 です。この値が大きいほど、カーネルのディスパッチ優先順位は高くなります。タイムシェアクラスのデフォルトの優先順位は 0 です。

プロセスに対する nice 値の古い概念 (nice 値が小さいほど高い優先順位を示す) は、TS、IA、および FSS のすべてのスケジューリングクラスのために維持されています。古い nice ベースの setpriority(3C)nice(2) のインタフェースは、nice 値を優先順位の値に対応させることによって引き続き動作します。nice 値を設定すると優先順位が変更され、その逆も同様です。nice 値の範囲は -20 - +20 です。0 の nice 値が 0 の優先順位に対応し、-20 の nice 値が +60 の優先順位に対応します。

タイムシェアクラスの LWP のディスパッチ優先順位は、LWP のその時点での CPU 使用率と、その LWP のクラス優先順位から計算されます。タイムシェアスケジューラにとって、クラス優先順位は、LWP 間の相対的な優先順位を表します。

LWP のクラス優先順位が低いほど、その LWP に配分される CPU 時間は少なくなりますが 0 になることはありません。多くの CPU 時間をすでに消費している LWP は、CPU 時間をほとんど (あるいは、まったく) 消費していない LWP よりもディスパッチ優先順位が下げられます。