SCHED_SETSCHEDULER
Section: Linux Programmer's Manual (2)
Updated: 2017-09-15
Index
JM Home Page
roff page
名前
sched_setscheduler, sched_getscheduler - スケジューリングポリシーとパラメーターを設定/取得する
書式
#include <sched.h>
int sched_setscheduler(pid_t pid, int policy,
const struct sched_param *param);
int sched_getscheduler(pid_t pid);
説明
sched_setscheduler() システムコールは、 pid で指定された ID
を持つスレッドのスケジューリングポリシーとスケジューリングパラメーターの両方を設定する。 pid が 0
の場合、呼び出したスレッド自身のスケジューリングポリシーとスケジューリングパラメーターが設定される。
スケジューリングパラメーターは param 引数で、以下の形式の構造体へのポインターを指定する。
struct sched_param {
...
int sched_priority;
...
};
現在の実装では、この構造体のフィールドは sched_priority だけである。 param
がどのように解釈されるかは選択されたポリシーによって変わる。
現在のところ、 Linux では、 以下の「通常」の (つまり、リアルタイムではない) スケジューリングポリシーが、 policy
に指定できる値としてサポートされている。
- SCHED_OTHER
-
標準の、ラウンドロビンによる時分割型のスケジューリングポリシー。
- SCHED_BATCH
-
「バッチ」形式でのプロセスの実行用。
- SCHED_IDLE
-
「非常に」低い優先度で動作するバックグラウンドジョブ用。
上記のどのポリシーの場合でも、 param->sched_priority は 0 でなければならない。
どの実行可能スレッドを選択するかについて、より正確な制御を必要とする 時間の制約が厳しい特別なアプリケーション用として、
いろいろな「リアルタイム」ポリシーもサポートされている。 プロセスがこれらのポリシーをいつ使用できるかを決めるルールについては、sched(7)
を参照。 policy には以下のリアルタイムポリシーを指定できる。
- SCHED_FIFO
-
ファーストイン、ファーストアウト型のポリシー。
- SCHED_RR
-
ラウンドロビン型のポリシー。
上記のどのポリシーの場合でも、 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
ならば、呼び出した スレッド自身のスケジューリングポリシーが返される。
返り値
成功した場合、 sched_setscheduler() は 0 を返す。 成功した場合、 sched_getscheduler()
は現在のそのスレッドのポリシー (非負の整数) を返す。 エラーの場合、 どちらのコールも -1 を返し、 errno が適切に設定される。
エラー
- EINVAL
-
無効な引数: pid が負である、または param が NULL である。
- EINVAL
-
(sched_setscheduler()) policy が認識できるポリシーではない。
- EINVAL
-
(sched_setscheduler()) 引数 param が指定された policy では意味を持たない。
- EPERM
-
呼び出したスレッドが適切な特権を持っていない。
- ESRCH
-
ID が pid のスレッドが見つからなかった。
準拠
POSIX.1-2001, POSIX.1-2008 (但し、下記のバグの節も参照)。 SCHED_BATCH と SCHED_IDLE
ポリシーは Linux 固有である。
注意
Further details of the semantics of all of the above "normal" and
"real-time" scheduling policies can be found in the sched(7) manual
page. That page also describes an additional policy, SCHED_DEADLINE,
which is settable only via sched_setattr(2).
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) を使用すること)。
バグ
POSIX.1 では、成功時に sched_setscheduler() は直前のスケジューリングポリシーを返すべきとされている。 Linux
の sched_setscheduler() はこの要求仕様に準拠しておらず、 成功時には常に 0 を返す。
関連項目
chrt(1), nice(2), sched_get_priority_max(2),
sched_get_priority_min(2), sched_getaffinity(2), sched_getattr(2),
sched_getparam(2), sched_rr_get_interval(2), sched_setaffinity(2),
sched_setattr(2), sched_setparam(2), sched_yield(2),
setpriority(2), capabilities(7), cpuset(7), sched(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- バグ
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:33 GMT, December 05, 2022