名 前
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 (但 し 、 下 記 の バ グ の 節 も 参 照 )。 SCHED_BATCH と SCHED_IDLE ポ リ シ ー は Linux 固 有 で あ る 。
注 意
上 記 の 「 通 常 」 お よ び 「 リ ア ル タ イ ム 」 ス ケ ジ ュ ー リ ン グ ポ リ シ ー の 動 作 の 詳 細 な 説 明 は sched(7) に あ る 。
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 で は 、 成 功 時 に 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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。