Top > 研究内容 > スマートアシスト技術研究チーム > ART-Linux > ART-Linux固有のシステムコール

研究内容

ART-Linux固有のシステムコール

2008年6月11日
石綿 陽一

目次

  1. art_enter
  2. art_exit
  3. art_wait
  4. art_wait_phase
  5. art_yield
  6. art_adjust
  7. art_shift

1. art_enter

書式

#include "linux/art_task.h"

int art_enter(art_prio_t prio, art_falst_t flags, unsigned long usec);

説明

非実時間プロセスを実時間タスクに変換します.
引数prioには実時間タスクの優先度を指定します. 最低優先度はART_PRIO_MINで, 最高優先度はART_PRIO_MAXです.
引数flagsには以下のフラグが指定できます.

ART_TASK_PERIODIC 周期実行を行います.
ART_TASK_RR ラウンドロビンスケジューリングを行います.

引数usecには, マイクロ秒単位で実行周期を指定します. 値はタイマ割込周期以上でなければなりません.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 実時間タスクが呼び出しました.
EINVAL 引数prio, または, 引数usecの値が範囲外です.

Top ∆

2. art_exit

書式

#include "linux/art_task.h"

int art_exit(void);

説明

実時間タスクを非実時間プロセスに変換します.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 非実時間プロセスが呼び出しました.

Top ∆

3. art_wait

書式

#include "linux/art_task.h"

int art_wait(void);

説明

次の周期まで実行を停止します.
ただし, 一度目の呼び出しでは停止せず, この時刻が周期実行の基準となります.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 呼び出したのが周期実行実時間タスクではありません.
EINVAL art_enterで指定された実行周期が不正値です.
EAGAIN シグナルを受信し, 次の周期に到達する前に実行を再開しました.

Top ∆

4. art_wait_phase

書式

#include "linux/art_task.h"

int art_wait_phase(unsigned long usec, art_prio_t prio);

説明

引数usecが0の場合, 次の周期まで実行を停止します.
引数usecが0以外の値であった場合, 直前のart_waitからの再開時刻, または, 直前の引数usecを0とするart_wait_phaseからの再開時刻を基準として, usecマイクロ秒が経過するまで実行を停止します. 既に指定再開時刻に到達していた場合, 停止せずに戻ります.
引数prioには実行再開後の実時間タスクの優先度を指定します. 最低優先度はART_PRIO_MINで, 最高優先度はART_PRIO_MAXです. ART_PRIO_SAMEを指定すると, 実行停止前と同じ優先度で実行を再開します.
引数usecが0, かつ, 引数prioART_PRIO_SAMEart_wait_phaseは, art_waitと等価です.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 呼び出したのが周期実行実時間タスクではありません.
EINVAL 引数prio, または, art_enterで指定された実行周期が不正値です.
EAGAIN シグナルを受信し, 指定時刻に到達する前に実行を再開しました.

Top ∆

5. art_yield

書式

#include "linux/art_task.h"

int art_yield(void);

説明

呼出実時間タスクと同じ優先度の実行可能実時間タスクが他にあった場合, 実行を中断します.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 非実時間プロセスが呼び出しました.

Top ∆

6. art_adjust

書式

#include "linux/art_task.h"

int art_adjust(long usec);

説明

次のタイマ割込の時刻を, 引数usecマイクロ秒遅れさせます. 引数usecに負の値を指定した場合, 早めることができます.
引数usecの絶対値は, タイマ割込周期の二分の一未満でなければなりません.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

ENOSYS Linux kernelがこの機能を提供していません.
EINVAL 引数usecの値が範囲外です.

Top ∆

7. art_shift

書式

#include "linux/art_task.h"

int art_shift(long usec);

説明

呼出した実時間タスクの周期実行の基準時刻を, 引数usecマイクロ秒遅れさせます. 引数usecに負の値を指定した場合, 早めることができます. 以降, art_waitは修正された基準時刻に従って起床します.
usecの絶対値は, 呼出タスクの実行周期以下でなければなりません.

返値

成功した場合, 0を返します. 失敗した場合, -1を返し, errnoが該当するエラー番号を示します.

エラー

EPERM 呼出したプロセスが周期実行実時間タスクではないか, または, 呼出タスクでart_waitを一度も呼び出していません.
EINVAL 引数usecの値が範囲外です.

Top ∆