PX5 MODULESについて解説する本コラムは3回にわたっての連載です。
PX5製品群の中のうちPX5 MODULESという製品を使用すると、モジュール単位の動的な処理の起動と停止、メモリプロテクション動作、動的なモジュールの入れ替えなどを行うことができます。
PX5 MODULESとは
組込み向けリアルタイムOSである「PX5 RTOS」上で動作する、別々にコンパイル・リンクされたCアプリケーションコード(モジュール)を動的またはインプレースで実行可能にする技術です。
従来の組込みシステムでは難しかった「アプリケーションごとのメモリ分離」や「システムの部分アップデート」を、非常に軽量なリソースで実現します。
主な特徴
- 超軽量なプロセス管理
各モジュールは少なくとも1つのスレッドを持ち、実行中にスレッドを動的追加することも可能です。一般的なOSのプロセスよりも非常に軽量なプロセスとして機能します。
- メモリ空間の隔離(安全性の向上)
モジュールごとに独立した独自のメモリ領域が割り当てられます。これにより、万が一特定のモジュールでバグやメモリ破損が起きても、システム全体のクラッシュを防ぎ、他の領域から隔離(アイソレーション)できます。
- 柔軟な配置とロード
位置に依存しない方法(コードとデータ)で構築することも、ファームウェアメモリ内の固定アドレスにリンクすることも可能です。
- 動的な部分アップデート
システム実行時に必要なモジュールだけを動的にロードできるため、ファームウェア全体を書き換えることなく、部分的なソフトウェア更新(ファームウェアアップデート)を行えます。
本製品はPX5製品の特長の一つであり、数は多くないものの、興味を持っていただいたお客様からはさまざまな深い質問が来ています。あまりにも内部動作に関する質問が多いので、今回はこのPX5 MODULESについてお客様からいただいた技術的な質問の中からいくつかピックアップし、一部の内部構造も含めて解説してみようかと思います。なお、筆者の私見も多少入っていることはご了承ください。
全体の処理構造
PX5 MODULESを使用したアプリケーションは、マネージャー(Manager)側といくつかのユーザーモジュール(User Module)で構成されます。
マネージャー側
マネージャー側は、PX5 RTOSとモジュールマネージャー機能、およびユーザーが追加するレジデントアプリケーション(Resident Application)と呼ばれる、いわゆる「常駐プログラム」の三つの機能で構成されます。またそれぞれの機能と役割は、以下の通りです。
- PX5 RTOS
RTOSの機能本体。ただしPX5 MODULES用に機能が追加されている。
- モジュールマネージャー
PX5 MODULESのマネージャー側の本体。ディスパッチなどの基本機能はPX5 RTOS側が行うが、ユーザーモジュール全体の管理やモジュール単位の動的な処理の起動と停止などを行う。
- レジデントアプリケーション
ユーザーが追加する処理。常駐プログラムとしてバックグラウンドで動作する処理や、ユーザーモジュールからのリクエストを受けて動作する処理などがある。
マネージャー側はドライバ等も含めるため、基本的にはメモリプロテクションが無効の状態で動作します。

ユーザーモジュール
ユーザーモジュールは、モジュールディスクリプション(Module Description)と、ユーザーが追加するアプリケーションスレッド(Application Threads)、およびPX5 MODULE Codeの三つの機能で構成されます。またそれぞれの機能と役割は、以下の通りです。
- モジュールディスクリプション
ユーザーモジュールのエントリポイントやメモリプロテクション動作の設定などが定義されたデータ。
- アプリケーションスレッド
ユーザーが追加する処理。ユーザーモジュールとしての、アプリケーション本体の処理。
- PX5 MODULE Code
PX5 MODULESのユーザーモジュール側の本体。ユーザーモジュールのアプリケーションは、基本的にはPX5 RTOSのAPI(PX5 FILE、PX5 NETのAPIも使用可)を使用して構成するが、ユーザーモジュール側のAPI処理そのものはPX5 MODULE Codeを通してマネージャー側に要求し実行される。

ユーザーアプリケーションで使用するAPIは、マネージャー側は直接APIを呼び出して実行されますが、モジュール側はPX5 MODULE Codeを通してマネージャー側で実行される、という違いがあります。PX5 MODULE Codeのような処理を一般的には「ラッパー(Wrapper)」(あるいはラッパーライブラリ)などと呼ぶ場合もあります。
