MULCOS-2のサービスコールは、μITRONライクのAPIでOS間を意識することなくプログラミングが可能です。
早く起動させたい処理はRTOS側で行ってください。RTOSのタスクはLinuxよりも早く立ち上がり起動します。
RTOSで用意するミドルウェアやドライバを必要最小限にして、USBやSDカード、ネットワーク等の周辺デバイスを制御するエージェントプロセスをLinuxに作り、RTOSとの間でデータを送受信されてはいかがでしょうか?
各OS(またはOSレス)の実行モジュールは完全に分離しています。バージョンアップの追従や使用するライセンスの制約を避けたいソフトウェアをRTOS側で実現してください。
Linuxのスケジューリング、多重割込みや長い割り込み禁止時間に、苦心していませんか?
Linuxの割込みよりも高優先度なRTOSならば・・・・
同一のコアにRTOSとLinuxを実装した状態で、例えLinuxが割込みを禁止にしても、RTOSのリアルタイム性は変わらずアプリケーションに影響を与えません。
ARM® TrustZone® テクノロジを実装したプロセッサでは、セキュア空間の領域にデータを配置すれば、Linuxなどノンセキュア空間のゲストOSのいかなるアクセスからもデータを保護することができます。
Virtualization Extensionsを実装したプロセッサでは、ノンセキュア空間のゲストOSが使用する空間を仮想化することにより、仮想空間の外へのアクセスを抑止することができます。
MULCOS-2は、ARM TrustZone テクノロジ、またはVirtualization Extensions、或いはその両方を使用したベアメタル型ハイパーバイザとしてマルチOSの動作環境と、実装した全てのOS間の同期通信機能を併せ持っています。
例えばクアッドコア(コアが4つ)の場合では、セキュア空間に最大4つのRTOSとノンセキュア空間にも最大4つのゲストOSを実装でき、ゲストOSにはLinuxを実装することができます。また、1つのコアにRTOSとLinuxの両方を実装できるため、マルチコアだけではなくシングルコアにも対応しています。RTOSの代わりに、OSレスを実装することができます。
同期通信機能として、メッセージキュー、セマフォ、イベントフラグ、共有メモリの4つの機能があります。
コアを独占したRTOSはより多くの仕事をこなすことができます。Linuxで用意された機能やデバイスの制御を利用することで、より高機能なシステムを実現できます。
1つのコアのCPUパワーを少しRTOSに割り当てるだけでLinuxでは困難だった高精度なリアルタイムが容易に実現できます。ただし、 このRTOSの実行中はLinuxの処理が中断する可能性があるため、RTOSでの処理は極軽い処理に限られます。
要求仕様によりRTOSだけを実装することもできます。
例えば、デュアルコア(コアが2つ)にそれぞれRTOSを実装する場合、3つの実装方法が考えられます。
Type-A:仕事量が多いため1つのコアでは賄いきれない、或いは異なる仕事をするためコアを分けた方がメンテナンス性で良い場合などは、セキュア空間に実装します。
Type-B:取り扱うデータにセキュリティが必要な場合などは、セキュリティレベルを分けて、セキュア空間とノンセキュア空間とに実装します。
Type-C:メモリ管理機能などを持ちMMUを操作するRTOSの場合、専用のMMUを操作することができるノンセキュア空間に実装します。
注意)セキュア空間に実装できるRTOS
セキュア空間のRTOSは、MULCOS-2とMMUを共有する(同じメモリ空間を持つ)ため、MMUを操作するメモリ管理機能を持たないRTOSに限られます。
MULCOS-2では、それぞれのコアにLinuxとRTOSをどのようにも割り当てることができます。
つまり、Linuxだけ、RTOSだけ、あるいはLinuxとRTOSの両方とも、この3つから選ぶことができます。
MULCOS-2は、導入後の変更も柔軟に対応できます。
例えば、シングルコアにLinuxとRTOSを実装している状態で、能力不足を補うためデュアルコアへのアップグレードを考えます。
新たにLinuxだけのコアを追加します。この際、LinuxとRTOSの両方を割り当てるコアを、プライマリコアとセカンダリコアのどちらにするのか選択することができます。
プライマリコアにLinuxだけを、セカンダリコアにRTOSだけを割り当てます
MULCOS-2は、このようなアップグレードもコンフィグレーションとスタートアップルーチンの簡単な変更だけで、RTOS本体やアプリケーションの変更は必要ありません。
mulcos_cre_msg | メッセージキューの生成/ID取得 |
---|---|
mulcos_del_msg | メッセージキューの削除 |
mulcos_snd_msg | メッセージキューの送信 |
mulcos_rcv_msg | メッセージキューの受信(時間監視付き) |
mulcos_ref_msg | メッセージキューの状態参照 |
mulcos_cre_sem | セマフォの生成/ID取得 |
---|---|
mulcos_del_sem | セマフォの削除 |
mulcos_sig_sem | セマフォ資源の返却 |
mulcos_wai_sem | セマフォ資源の獲得(時間監視付き) |
mulcos_ref_sem | セマフォの状態参照 |
mulcos_cre_eflg | イベントフラグの生成/ID取得 |
---|---|
mulcos_del_eflg | イベントフラグの削除 |
mulcos_set_eflg | イベントフラグのセット |
mulcos_wai_eflg | イベントフラグの待ち(時間監視付き) |
mulcos_clr_eflg | イベントフラグのクリア |
mulcos_ref_eflg | イベントフラグの状態参照 |
mulcos_cre_shm | 共有メモリの生成/ID取得 |
---|---|
mulcos_del_shm | 共有メモリの削除 |
mulcos_rdy_shm | 共有メモリのアクセス許可 |
mulcos_ref_shm | 共有メモリの状態参照 |
対応CPU | NXP i.MX6シリーズ , i.MX7シリーズ(対応予定) Renesas RZ/G1シリーズ ALTERA SoC Xilinx Zynq®(対応予定) |
---|---|
必要要件 | TrustZoneテクノロジ、またはVirtualization Extensions、 或いはその両方が実装されたARM Cortex®-Aシリーズのプロセッサ |