Windows版 iTRONサービスコールの作成 (ランデブポート)
(その1)
組み込みソフトウェアで利用されているOS「iTRON」のサービスコールをWindows上で動作させるためのライブラリです。
タスク間同期機能の『ランデブポート』の実装を説明します。
ランデブポートとは、あるタスクから別のタスクに処理依頼をし、その処理結果の返却までを一連の手続きとしてサポートするオブジェクトです。
ランデブポートの具体的な動作は以下のようになります。
- タスクAは、タスクBからの処理依頼が発生するのを待っています。(タスクAはスリープしています。)
- タスクBがタスクAに対して処理依頼を行い、タスクAからの処理結果を待ちます。(タスクBはスリープします。)
- タスクAは、タスクBからの処理依頼でタスクを起床し、依頼された処理を実行し、実行結果をタスクBに返します。
- タスクBは、タスクAに依頼した処理が完了するとタスクを起床し、処理結果をタスクAから受け取ります。
ランデブには「回送」と呼ばれる機能があり、処理依頼を受けたタスクは、その処理依頼を別にタスクに任せることが出来ます。
上記の例でいうと、タスクBからの処理依頼を受けたタスクAは、ランデブをタスクCに回送し、タスクCが依頼された処理を実行します。
タスクCは依頼された処理が終了すると、処理依頼をしたタスクBに直接、処理結果を返却します。
最初に処理依頼を受け付けたタスクAは、ランデブをタスクCに回送した時点で、ランデブの一連の処理とは切り離され、他の処理を実行できるようになります。
Ver3.0のランデブポート機能で提供されるサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
cre_por | ランデブポートを生成します。 |
del_por | ランデブポートを削除します。 |
cal_por / tcal_por | ランデブの呼び出し。 |
acp_por / pacp_por / tacp_por | ランデブの受け付け。 |
fwd_por | ランデブの回送。 |
rpl_rdv | ランデブを終了します。 |
ref_por | ランデブポートの状態を参照します。 |
Ver4.0のランデブポート機能で提供されるサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
cre_por / acre_por | ランデブポートを生成します。 |
del_por | ランデブポートを削除します。 |
cal_por / tcal_por | ランデブの呼び出し。 |
acp_por / pacp_por / tacp_por | ランデブの受け付け。 |
fwd_por | ランデブの回送。 |
rpl_rdv | ランデブを終了します。 |
ref_por / ref_rdv | ランデブポートの状態を参照します。 |