リアルタイムオペレーティングシステム(RTOS)用に作成されたレガシーアプリケーションコードがあります。ほとんどのコードは、OS固有のプロセス間通信(IPC)呼び出しを使用します。これは、シグナルと非常によく似ています。
2つのIPC呼び出しがあります。
status_code signal_push(connector, event)
event signal_wait(connector)
テストとデバッグを改善するために、そのアプリケーションをLinuxにゆっくりと移植したいと思います。
イベントとハンドラーに関連付けられたIPCプリミティブのタスクをカバーするタスク記述ファイルを作成したいと思います。
例は次のようになります。
SignalHandler(connector=crypto_connector,
events = [(cyrpto_init, crypto_init_handler),
(crypto_run, crypto_run_handler),
(crypto_done, crypto_done_handler])
Task(name=crypto, priority=1, stack_size=256, connector=crypto_connector)
この記述ファイルから、エンジニアによって作成された、対応するハンドラーを呼び出すタスクごとにスレッドを生成する必要があります。また、次のようなコールスタブを生成します。emit_crypto_init()
このRTOSの説明からどのようなコードを生成するかは非常に明確ですが、LinuxにどのようなIPCを使用すべきかはまだわかりません。最初のバージョンでは、おそらく動作を維持するものなら何でも問題ありません。将来のバージョンでは、ターゲットでLinuxを使用するのが妥当である可能性があるため、IPCのオーバーヘッドはほとんどありません。
私は次のIPCメカニズムを見つけました:
- Unixシグナル(オプションではないようです)
- Unixソケット(単に信号を送信するだけではありません)
- セマフォ(実行回数は少なくなりますが、グローバル整数を使用してイベントを相手に渡すことができます)
この要件に適合する、より適切なIPCソリューションはありますか?