第4章 カーネル API 仕様
4.3 タスク終了機能
タスク終了機能には,自タスクを終了させる機能,タスクを安全に終了させるためのタスク終了要求機 能,タスクを強制終了させる機能が含まれる.
タスク終了時には,次の処理が行われる.まず,終了するタスク(対象タスク)に対してタスク終了時に 行うべきその他の処理が行われた後,対象タスクは休止状態になる【NGKI1178】.対象タスクの起動要 求キューイング数が0でない場合には,対象タスクに対してタスク起動時に行うべき処理が行われ,対象 タスクは実行できる状態になる【NGKI1179】.またこの時,起動要求キューイング数から1が減ぜられる
【NGKI1180】.
タスク終了要求機能に関連して,各タスクが持つ情報は次の通り【NGKI3684】.
• タスク終了要求フラグ
• タスク終了禁止フラグ
タスク終了要求フラグは,タスクに対する終了要求を記憶するためのフラグであり,タスクの起動時にク リアした状態に初期化される【NGKI3451】.
タスク終了禁止フラグは,タスクに対する終了要求を保留するためのフラグで,タスクの起動時にクリア した状態に初期化される【NGKI3454】.タスク終了禁止フラグがセットされた状態をタスク終了禁止状 態,クリアされた状態をタスク終了許可状態と呼ぶ.
実行状態のタスクに対して,「タスク終了要求フラグがセットされる」「タスク終了許可状態である」
「ディスパッチ許可状態である」「割込み優先度マスク全解除状態である」「CPUロック状態でない」の5 つの条件が揃った場合,そのタスクは終了する.すなわち,そのタスクに対して,タスク終了時に行うべ き処理が行われる【NGKI3683】.
タスク終了要求フラグがセットされたタスクは,広義の待ち状態になることがない.具体的には,広義の 待ち状態のタスクのタスク終了要求フラグがセットされた場合,タスクは実行できる状態に遷移する
【NGKI3452】.また,タスク終了要求フラグがセットされたタスクが,自タスクを待ち状態に遷移させ
る可能性のあるサービスコールを呼び出した場合には,E_RASTERエラーとなる【NGKI3453】.さら に,タスク終了要求フラグがセットされたタスクを強制待ち状態に遷移させるサービスコールを呼び出し た場合にも,E_RASTERエラーとなる【NGKI3607】.
【μITRON4.0仕様,TOPPERS新世代カーネル統合仕様との関係】
タスク終了要求機能を追加した.
タスク終了要求フラグがセットされた状態は,μITRON4.0/PX仕様で導入された待ち禁止状態を役割を兼 ねている.ただし,タスク終了要求フラグがセットされたタスクが自タスクを待ち状態に遷移させる可能 性のあるサービスコールを呼び出した場合,無条件にエラーになる[NGKI3453]のに対して,待ち禁止 状態のタスクが同様のサービスコールを呼び出した場合には,待ち状態に遷移しようとした場合にのみエ ラーとなる[NGKI0222].例えば,資源数が1のセマフォに対して,待ち禁止状態のタスクがwai_semを 発行した場合,セマフォの獲得に成功するのに対して,タスク終了要求フラグがセットされたタスクが発 行した場合には,E_RASTERエラーとなる.
ext_tsk 自 タスクの終了 〔T〕 【 NGKI1162 】
【C言語API】
ER ercd = ext_tsk()
【パラメータ】
なし
【リターンパラメータ】
ER ercd エラーコード
【エラーコード】
E_SYS システムエラー
・カーネルの誤動作【NGKI1163】
E_CTX コンテキストエラー
・非タスクコンテキストからの呼出し【NGKI1164】
【機能】
自タスクを終了させる.具体的には,自タスクに対してタスク終了時に行うべき処理が行われる
【NGKI3449】.
ext_tskは,CPUロック解除状態,割込み優先度マスク全解除状態,ディスパッチ許可状態で呼び出すのが 原則であるが,そうでない状態で呼び出された場合には,CPUロック解除状態,割込み優先度マスク全解 除状態,ディスパッチ許可状態に遷移させた後,自タスクを終了させる【NGKI1168】.
ext_tskが正常に処理された場合,ext_tskからはリターンしない【NGKI1169】.
【補足説明】
保護機能対応カーネルにおいては,ext_tskによりCPUロック解除状態,割込み優先度マスク全解除状態, ディスパッチ許可状態に遷移した場合,システム周期の切換えとタイムウィンドウの切換えの保留が解除 され,システム周期の切換えとタイムウィンドウの切換えが起こる可能性がある.
【TOPPERS/SSP3カーネルにおける規定】
SSP3カーネルでは,ext_tskをサポートしない【SSPS0118】.自タスクを終了させる場合には,タスクの メインルーチンからリターンする【SSPS0119】.
【μITRON4.0仕様との関係】
ext_tskを非タスクコンテキストから呼び出した場合に,E_CTXエラーが返ることとした.μITRON4.0仕様 においては,ext_tskからはリターンしないと規定されている.
ras_ter タスクの終了 要 求 〔T〕 【 NGKI3469 】
【C言語API】
ER ercd = ras_ter(ID tskid)
【パラメータ】
ID tskid 対象タスクのID番号
【リターンパラメータ】
ER ercd 正常終了(E_OK)またはエラーコード
【エラーコード】
E_CTX コンテキストエラー
・非タスクコンテキストからの呼出し【NGKI3470】
・CPUロック状態からの呼出し【NGKI3471】 E_ID 不正ID番号
・tskidが有効範囲外【NGKI3472】
E_NOEXS オブジェクト未登録
・対象タスクが未登録〔D〕【NGKI3473】
E_OACV オブジェクトアクセス違反
・対象タスクに対する通常操作2が許可されていない〔P〕【NGKI3474】
E_ILUSE サービスコール不正使用
・対象タスクが自タスク【NGKI3475】
E_OBJ オブジェクト状態エラー
・対象タスクが休止状態【NGKI3476】
・その他の条件については機能の項を参照
【機能】
tskidで指定したタスク(対象タスク)に終了要求を行う.具体的な振舞いは以下の通り.
対象タスクが休止状態でなく,タスク終了許可状態である場合には,対象タスクに対してタスク終了時に 行うべき処理が行われる【NGKI3477】.
対象タスクが休止状態でなく,タスク終了禁止状態である場合には,対象タスクのタスク終了要求フラグ がセットされる【NGKI3478】.また,対象タスクが待ち状態である場合には,対象タスクが待ち解除さ れる【NGKI3479】.待ち解除されたタスクには,待ち状態となったサービスコールからE_RASTERが返 る【NGKI3480】.さらに,対象タスクが強制待ち状態である場合には,対象タスクは強制待ちから再開 される【NGKI3606】.
マルチプロセッサ対応カーネルでは,対象タスクは,自タスクと同じプロセッサに割り付けられているタ スクに限られる.対象タスクが自タスクと異なるプロセッサに割り付けられている場合には,E_OBJエ ラーとなる【NGKI3481】.
【TOPPERS/SSP3カーネルにおける規定】
SSP3カーネルでは,ras_terをサポートしない【SSPS0151】.
【μITRON4.0仕様,TOPPERS新世代カーネル統合仕様との関係】
μITRON4.0仕様,TOPPERS新世代カーネル統合仕様に定義されていないサービスコールである.
dis_ter タスク終了の禁止 〔T〕 【 NGKI3482 】
【C言語API】
ER ercd = dis_ter()
【パラメータ】
なし
【リターンパラメータ】
ER ercd 正常終了(E_OK)またはエラーコード
【エラーコード】
E_CTX コンテキストエラー
・非タスクコンテキストからの呼出し【NGKI3483】
・CPUロック状態からの呼出し【NGKI3484】
E_OACV オブジェクトアクセス違反
・自タスクが属する保護ドメインに対する通常操作2が許可されていない〔P〕【
NGKI3764】
【機能】
自タスクのタスク終了禁止フラグをセットする【NGKI3486】.すなわち,自タスクをタスク終了禁止状 態に遷移させる.
【TOPPERS/SSP3カーネルにおける規定】
SSP3カーネルでは,dis_terをサポートしない【SSPS0152】.
【μITRON4.0仕様,TOPPERS新世代カーネル統合仕様との関係】
μITRON4.0仕様,TOPPERS新世代カーネル統合仕様に定義されていないサービスコールである.
ena_ter タスク終了の許 可〔T〕 【 NGKI3487 】
【C言語API】
ER ercd = ena_ter()
【パラメータ】
なし
【リターンパラメータ】
ER ercd 正常終了(E_OK)またはエラーコード
【エラーコード】
E_CTX コンテキストエラー
・非タスクコンテキストからの呼出し【NGKI3488】
・CPUロック状態からの呼出し【NGKI3489】
E_OACV オブジェクトアクセス違反
・自タスクが属する保護ドメインに対する通常操作2が許可されていない〔P〕【
NGKI3765】
【機能】
自タスクのタスク終了禁止フラグをクリアする【NGKI3491】.すなわち,自タスクをタスク終了許可状 態に遷移させる.
【補足説明】
自タスクのタスク終了処理要求フラグがセットされていた場合には,タスク終了許可状態へ遷移した結 果,自タスクが終了する可能性がある.この場合,ena_terからはリターンしない.
【TOPPERS/SSP3カーネルにおける規定】
SSP3カーネルでは,ena_terをサポートしない【SSPS0153】.
【μITRON4.0仕様,TOPPERS新世代カーネル統合仕様との関係】
μITRON4.0仕様,TOPPERS新世代カーネル統合仕様に定義されていないサービスコールである.
sns_ter タスク終了禁止 状態 の 参照〔TI〕 【 NGKI3494 】
【C言語API】
bool_t state = sns_ter()
【パラメータ】
なし
【リターンパラメータ】
bool_t state タスク終了禁止状態
【機能】
実行状態のタスク(タスクコンテキストから呼び出した場合には自タスク)のタスク終了禁止フラグを参 照する.具体的な振舞いは以下の通り.
実行状態のタスクが,タスク終了禁止状態の場合にtrue,タスク終了許可状態の場合にfalseが返る
【NGKI3495】.sns_terを非タスクコンテキストから呼び出した場合で,実行状態のタスクがない場合に は,trueが返る【NGKI3496】.
マルチプロセッサ対応カーネルにおいては,サービスコールを呼び出した処理単位を実行しているプロセ ッサにおいて実行状態のタスクのタスク終了禁止フラグを参照する【NGKI3497】.
【補足説明】
sns_terをタスクコンテキストから呼び出した場合,実行状態のタスクは自タスクに一致する.
【TOPPERS/SSP3カーネルにおける規定】
SSP3カーネルでは,sns_terをサポートしない【SSPS0154】.
【μITRON4.0仕様,TOPPERS新世代カーネル統合仕様との関係】
μITRON4.0仕様,TOPPERS新世代カーネル統合仕様に定義されていないサービスコールである.