EN JA
RTPRIO(2)
RTPRIO(2) FreeBSD System Calls Manual RTPRIO(2)

名称

rtprio, rtprio_threadリアルタイムまたはアイドルの優先順位を調査するか、または修正する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < sys/rtprio.h>

int
rtprio( int function, pid_t pid, struct rtprio *rtp);

int
rtprio_thread( int function, lwpid_t lwpid, struct rtprio *rtp);

解説

rtprio() システムコールは、プロセスまたは呼び出しているスレッドのリアルタイムまたはアイドル (idle) の優先順位を検索するか、または変更するために使用されます。 rtprio_thread() システムコールは、スレッドのリアルタイムまたはアイドルの優先順位を検索するか、または変更するために使用されます。

function 引数は、実行される操作を指定します。優先順位を検索するためには、RTP_LOOKUP、優先順位を設定するためには、RTP_SET です。

rtprio() システムコールについて、 pid 引数は、動作しているプロセスを指定し、呼び出しているスレッドに対しては、0 を指定します。 pid が 0 でないとき、システムコールは、プロセスの最高の優先順位を報告するか、または、 function 引数の値によって、プロセス内のすべてのスレッドの優先順位を設定します。

rtprio_thread() システムコールについて、 lwpid は、動作しているスレッドを指定し、呼び出しているスレッドに対しては、0 を指定します。

*rtp 引数は、優先順位と優先順位のタイプを指定する指定するために使用される struct rtprio へのポインタです。この構造体には、次の形式があります:

struct rtprio { 
 u_short type; 
 u_short prio; 
};

type フィールドの値は、リアルタイム優先順位のための RTP_PRIO_REALTIME、通常の優先順位のための RTP_PRIO_NORMAL とアイドルの優先順位のための RTP_PRIO_IDLE を指定できます。 prio フィールドによって指定される優先順位は、0 と RTP_PRIO_MAX (通常 31) の間の範囲です。 0 は、指定できる最高の優先順位です。

リアルタイムとアイドルの優先順位は、fork() と exec() を通して継承されます。

リアルタイムのスレッドは、等しいかより高い優先順のスレッド、または割り込みによってのみ先取り (preempt) することができます。アイドルの優先順位のスレッドは、他のリアルタイム/通常の優先順位のスレッドが実行可能でないときのみ、実行します。高いリアルタイム/アイドルの優先順位のスレッドは、低いリアルタイム/アイドルの優先順位のスレッドを先取り (preempt) します。等しいリアルタイム/アイドルの優先順位のスレッドは、ラウンドロビンで実行されます。

戻り値

The rtprio() and rtprio_thread() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

rtprio() と rtprio_thread() システムコールは、次の場合に失敗します:
[ EFAULT]
rtprio() または rtprio_thread() に渡される rtp ポインタが、不正でした。
[ EINVAL]
指定された prio が範囲外でした。
[ EPERM]
呼び出しているスレッドが、リアルタイムの優先順位を設定することができません。 root だけが、任意のスレッドのリアルタイムの優先順位を変更することができ、 root でないユーザは、 sysctl(8) 変数 security.bsd.unprivileged_idprio が 0 以外に設定されているときのみ、ユーザが所有するスレッドのアイドルの優先順位を変更できます。
[ ESRCH]
指定されたプロセスまたはスレッドが見つからないか、目に見えませんでした。

作者

オリジナルの作者は、 Henrik Vestergaard Draboel <hvd@terry.ping.dk>でした。 FreeBSD のこの実装は、 David Greenman によって本質的に書き直されました。 rtprio_thread() システムコールは、 David Xu によって実装されました。
December 27, 2011 FreeBSD