確定的車載タスクのための POSIX リアルタイムスレッド設計ガイドライン

PREEMPT_RT Linux や車載 RTOS における高信頼性ソフトウェア設計には、厳格なスレッド管理が不可欠です。制御ループにおけるわずかなページフォールトや優先度逆転が、重大な操舵遅延を招きます。本稿ではスレッド優先度、CPU アフィニティ、メモリ固定の原則を解説します。

mlockall とメモリ事前確保によるページフォールトの完全排除

リアルタイム実行中の動的メモリ確保(malloc)はページフォールトを引き起こし、スレッドをミリ秒単位で停止させます。車載 POSIX アプリケーションでは、スレッド起動前に必ず `mlockall(MCL_CURRENT | MCL_FUTURE)` を呼び出して全メモリを物理 RAM に固定し、スタックを事前確保(Pre-fault)した上で静的メモリプールを使用する必要があります。

プライオリティ・インヘリタンス・ミューテックスによる優先度逆転の防止

低優先度のログ収集スレッドがミューテックスを保持したまま中優先度タスクにプリエンプトされると、超重要であるブレーキ制御スレッドが無期限に待たされる「優先度逆転」が発生します。POSIX では `PTHREAD_PRIO_INHERIT` を設定することで、ロック保持スレッドの優先度を一時的に最高位まで引き上げ、迅速なクリティカルセクション脱出を保証します。

ドメインポートフォリオを見る