#include <sched.h> int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); int sched_getscheduler(pid_t pid);
スケジューリングパラメーターは param 引数で、以下の形式の構造体へのポインターを指定する。
struct sched_param {
...
int sched_priority;
... };
現在の実装では、この構造体のフィールドは sched_priority だけである。 param がどのように解釈されるかは選択されたポリシーによって変わる。
現在のところ、 Linux では、 以下の「通常」の (つまり、リアルタイムではない) スケジューリングポリシーが、 policy に指定できる値としてサポートされている。
上記のどのポリシーの場合でも、 param->sched_priority は 0 でなければならない。
どの実行可能スレッドを選択するかについて、より正確な制御を必要とする 時間の制約が厳しい特別なアプリケーション用として、 いろいろな「リアルタイム」ポリシーもサポートされている。 プロセスがこれらのポリシーをいつ使用できるかを決めるルールについては、sched(7) を参照。 policy には以下のリアルタイムポリシーを指定できる。
上記のどのポリシーの場合でも、 param->sched_priority はそのスレッドのスケジューリングポリシーを指定する。 指定された policy で sched_get_priority_min(2) と sched_get_priority_max(2) を呼び出した返り値の範囲の数字を指定する。 Linux では、これらのシステムコールはそれぞれ 1 と 99 を返す。
Linux 2.6.32 以降では、 sched_setscheduler() を呼び出す際に policy に SCHED_RESET_ON_FORK フラグを OR で指定できる。このフラグが指定されると、 fork(2) で作成された子プロセスは特権が必要なスケジューリングポリシーを継承しない。 詳細は sched(7) を参照。
sched_getscheduler() は pid で識別されるスレッドの現在のスケジューリングポリシーを返す。pid が 0 ならば、呼び出した スレッド自身のスケジューリングポリシーが返される。
POSIX システムでは <unistd.h> に _POSIX_PRIORITY_SCHEDULING が定義されている場合にのみ sched_setscheduler() と sched_getscheduler() が使用できる。
POSIX.1 は、非特権スレッドが sched_setscheduler() を呼び出すために必要な権限の詳細を規定しておらず、 詳細はシステムにより異なる。 例えば、Solaris 7 のマニュアルページでは、 呼び出し元の実ユーザー ID または実効ユーザー ID が 設定対象の実ユーザー ID か保存 (save) set-user-ID と 一致していなければならない、となっている。
Linux では、 スケジューリングポリシーとスケジューリングパラメーターは、 実際にはスレッド単位の属性である。 gettid(2) の呼び出しの返り値をこのシステムコールの pid 引数として渡すことができる。 pid に 0 を指定すると、 呼び出し元のスレッドの属性が設定される。 getpid(2) コールからの返り値を pid に指定すると、 スレッドグループのメインスレッドの属性が設定される (POSIX スレッド API を使用している場合は、 sched_*(2) システムコールの代わりに pthread_setschedparam(3), pthread_getschedparam(3), and pthread_setschedprio(3) を使用すること)。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]