MDCOMはドメイン間の通信を実現するソフトウェアモジュールです。
近年,HEMS(Home Energy Management System)やADAS(Advanced Driving
Assistant System)といった,高い機能と信頼性・リアルタイム性の両方を求
められる組込みシステムが増えてきています。
このようなシステムを実現するには、Linuxのような高機能な汎用OSと、
高い信頼性とリアルタイム性持つRTOSを
組み合わせる方法が現実的な実現方法です。二種類のOSを実行する方法として
は、ヘテロジニアスマルチプロセッサやSafeGのような仮想化機能を
用いる方法があります。
このような環境において、各OSをドメインと呼びます。
ドメイン
複数のドメインにより1つのシステムを実現するため,ドメイン間は同期や通信を行う必要があります。
MDCOMはこのようなドメイン間の同期・通信を実現するソフトウェアモジュールです。
MDCOMは、次の二種類のチャネルを提供し、このチャネルにより、Linuxの複数のユーザプ
ロセスと、ASPカーネルまたはFMPカーネルのタスク間で同期・通信が可能です。
チャネルは複数作成可能で、ID番号により識別します。
MDCOMの特徴としては、次が挙げられます。
MDCOMの概要
SMEM Channelは,共有メモリ機構を提供するチャネルで、多対多の通信を実現します。 SMEM Channelは次の要素で構成されています。
SMEM Channelの構成
SMEM Channel では次のAPIをサポートしています。
SMEM Channelによる通信の例を以下に示します。 ポインタを取得して、取得したポインタを用いてShared Bufferに直接アクセス可能です。 ポインタの値に関してはRTOS側とGPOS側で異なるので直接やりとりはできません。
SMEM Channelの利用例
FIFO Channelは,1対1の通信を実現します。FIFO Channelは次の要素で構成されています。
FIFO Channelの構成
FIFO Channel では次のAPIをサポートしています。
FIFO Channelの通信の例を以下に示します。
基本的な通信の流れとしては,送信側は、BlockのID取得、Blockのポインタの取
得、Blockへのデータの書き込み、BlockのIDをFIFOに入れます。最後に受信側にEventを送ります。
受信側は、まずEvent待ちとしEventが送られると、FIFOからBlockのIDを取得後、Blockのポインタの取
得、Blockのデータの読み込み、最後にBlockのリリースを行います。
ブロックするAPIはイベント待ちAPIのみです。
タイムアウトを指定可能ですので、一定時間Eventが送られて来なかった場合は、
エラーでリターンします。
フィルターはEventを無効化可能な関数で,主にGPOSからRTOSに送られるEvent
の頻度を下げる目的で使う事を想定しています。
FIFO Channelの利用例
その他の特徴的な機能として,GPOS切断通知機能があります。
具体的には、FIFO Channelで通信しているGPOS側のプロセスが終了した場合,
RTOS側の事前登録したタスクにタスク例外で通知を行う機能です。
その際、終了したプロセスが使用していた FIFO ChannelでEvent待ちとなって
いるタスクは待ちが解除されてエラーが返されます。
RTOS側からGPOS側の状況確認機能として、RTOSから現状GPOS側のアクティブなプロセスが使用しているFIFO Channelを知ることが可能です。
GPOS側のMDCOMを使用しているプロセス数を取得可能です。
コンフィギュレーションは、静的APIと同様のAPIで静的に行います。
MDCOMと同様の機構として、OpenAMPがあります。
OpenAMPとの比較を以下に示します。性能比較についてはこちらの論文を参照して下さい。
OpenAMP | MDCOM | |
---|---|---|
リアルタイム性 | 通信のタイムアウトが15秒固定でリアルタイム性が確保できない | ミリ秒単位でタイムアウトを指定可能 |
共有メモリ機構・排他制御機構 | 提供していない | 提供している |
同時通信 | チャネルは1本のみ作成可能であり,複数チャネルでの通信ができない | 複数チャネルで同時に通信可能 |
通信遮断通知・再接続機能 | 提供していない | 提供している |
下位レイヤーの実装 | Linuxは仮想マシン用の通信フレームワークであるvirtioを使用するため,通信オーバヘッドが発生する | 専用ドライバを用いているためオーバヘッドは最低限 |
実行環境 | LinuxがMasterとなるため,通信の開始や終了をLinuxしか担えない | RTOS側がMasterとなる |
APIの提供先(Linux) | カーネルモジュールであり,ユーザープログラムでの通信ができない | ユーザープログラムが通信可能 |
一度に送信できるデータ量 | 512byteが上限 | 制限なし |
MDCOMを使用するにはハードウェアで次の機能を用意する必要があります。
最新のリリースでは次のボードで次のOS構成に対応しています。
MDCOMの開発はTOPPERSメンバーによって、TOPPERS内のプロジェクト管理ツールで行われています。ユーザ向けのパッケージはここからダウンロードできます。
最新のリリース | |||
パッケージ | リリース | サイズ | リリース日 |
---|---|---|---|
mdcom-1.2.0.zip | 1.2.0 | 1387KB | 2020-07-15 |
mdcom-1.1.0.zip | 1.1.0 | 1021KB | 2019-06-20 |
mdcom-1.0.1.zip | 1.0.1 | 940KB | 2019-01-25 |
mdcom-1.0.0.zip | 1.0.0 | 708KB | 2017-06-22 |
MDCOMの開発に参加している開発スタッフは次の通りです(所属は参加した時点のもの)。
名前 | 所属 | 時期 |
---|---|---|
本田晋也 | 名古屋大学 情報科学研究科 | 2016年〜 |
加藤吉之介 | エーアイコーポレーション | 2016年〜 |
※ 開発スタッフの名前は、掲載を了承された方のみ記載しています。