RTOS|リアルタイム制御の要

RTOS

RTOSは、決められた期限内に処理を完了させることを最重要目標とする組込み向けのオペレーティングシステムである。最大スループットよりも「時間決定性」と「遅延の一貫性」を重視し、割込み応答、タスク切替、同期機構の最悪実行時間を見積もれる設計を採る。カーネルは小規模で、スケジューラ、割込み管理、タイマ、同期・通信プリミティブなど必要最小限の機能に絞られる。用途はモータ制御、産業機器、計測、車載、医療機器など、期限違反が品質や安全に直結する領域に広い。

リアルタイム性の定義と種類

リアルタイム性は「イベント発生から応答完了までの遅延上限を保証できること」で定義される。厳密に期限を外せないハードリアルタイムと、まれな遅延が許容されるソフトリアルタイムに大別される。前者は制御不安定や安全リスクを伴うため、最悪ケース(WCET)に基づくスケジュール可能性解析を要求する。後者でもジッタ低減は品質指標となるため、優先度設計や実行時間のばらつき抑制が重要である。

カーネル構成とスケジューリング

RTOSのコアはプリエンプティブな優先度ベースのスケジューラであることが多い。固定優先度ではRate-Monotonic(周期短いタスクほど高優先度)が広く用いられ、動的優先度ではEDF(Earliest Deadline First)が代表的である。タスクは就寝・実行・待ちの状態を遷移し、割込みやタイマ満了で即時の実行再開が可能となる。タイマは単発・周期の双方を持ち、近年は低消費電力化のためtickless実行に対応する実装も一般的である。

割込み処理とレイテンシ

割込み遅延は最重要指標の一つで、無用な割込みマスクや長いクリティカルセクションは厳禁である。実装ではISRは極小化し、時間を要する処理は遅延実行(defer)して下位半分の処理(例:タスクコンテキスト)に委ねる。コンテキストスイッチ時間、ISR遅延、タイマ精度、キャッシュミスやTLBミスなど、遅延源を定量化し上限を提示できることが望ましい。MPU/MMUを持つ環境では保護機構が遅延に影響するため、領域分割とオーバヘッドのバランス設計が必要である。

同期・通信プリミティブ

  • ミューテックス:相互排他に用いる。優先度逆転を招くため、優先度継承や優先度上限方式を併用する。
  • セマフォ:カウント型で資源プール管理に適用。バイナリ型は簡易ロックにも用いられる。
  • メッセージキュー:コピー型でタスク間通信を単純化する。ゼロコピー最適化でレイテンシを削減できる。
  • イベントフラグ:ビット和条件で起床でき、複合待ちを効率化する。

優先度逆転とその対策

低優先度タスクが保持する資源を高優先度タスクが待つと、中間優先度タスクの割込みで高優先度が阻害される現象が優先度逆転である。対策としてミューテックスに優先度継承を適用し、資源保有中は一時的に優先度を引き上げる。厳格なシステムでは優先度上限制御で設計段階から逆転可能性を封じる。

メモリ管理と保護

小規模マイコンでは静的配置が基本で、動的確保は断片化と時間不定性の原因となる。必要な場合は固定サイズブロックのプール型アロケータを採用し、割込み安全性と確保時間の上限を定義する。MPUを用いるとタスクごとの領域保護やスタック破壊検出が可能になり、機能安全の基盤を提供する。

タイミング設計とスケジュール可能性解析

周期タスク系では、タスクの実行時間、周期、デッドライン、優先度を与え、負荷率の合計と干渉解析によりスケジュール可能性を検証する。ブロッキング時間(資源待ち)が上限式に加算されるため、クリティカルセクションの短縮と資源階層の設計が鍵となる。非周期タスクはサーバタスク(例:Deferrable/ Sporadic Server)で帯域管理し、突発要求の遅延上限を保証する。

電力・クロックと決定性

省電力機能(DVFSやスリープ遷移)は遅延の不確実性を増大しうる。リアルタイム要求が高い区間ではクロック固定や遷移抑制を行い、許容区間でのみ省電力を適用する。ticklessでもハードウェアタイマの精度・再始動遅延を測定し、タイムキーピング誤差を見積もる。

マルチコアと資源共有

SMP構成では同一優先度のグローバルスケジューリング、あるいはコア固定(partitioning)を選ぶ。キャッシュ競合、割込みのコア間ルーティング、ロックの待ち時間が遅延の分散を広げるため、ローカル資源化やロックフリー構造、パイプライン並列の活用が有効である。AMPではコア間通信(メールボックス、共有メモリ)に明確なプロトコルを設け、デッドロックの防止と故障分離を図る。

開発プロセスと検証

  1. 時間測定:ISR遅延、スイッチ時間、API最悪遅延を計測し、統計だけでなく上限値を提示する。
  2. 静的解析:割込み禁止区間の長さ、ネスト深、優先度設計の矛盾を検出する。
  3. フォールト注入:タイムアウト、資源枯渇、割込み嵐に対する堅牢性を確認する。
  4. ログ設計:タイムスタンプ精度とオーバヘッドの両立を図り、現場で原因追跡可能にする。

組込みネットワークとI/O

フィールドバスやEthernet系の周期通信では、送受信割込みとアプリ処理の優先度整合が不可欠である。DMAや二重バッファを活用し、コピー回数を削減してジッタを抑える。I/O待ちをブロッキングにするか非同期にするかは、デッドライン要求とスループットのバランスで決める。

安全・規格への配慮

機能安全や品質規格が要求される分野では、開発プロセス、トレーサビリティ、診断機構(ウォッチドッグ、スタック監視、メモリ保護)を備える。ブートからアプリ初期化までの遷移もリアルタイム要件に含め、早期に制御を安定化させる。

実装上のアンチパターン

  • 長い割込み禁止や巨大なクリティカルセクション
  • 非決定的な動的メモリ確保の多用
  • 無制限キューでのバックプレッシャ不在
  • 優先度逆転対策なしのロック

設計指針の要点

RTOSを用いる設計では、(1)デッドラインとWCETの明確化、(2)優先度・資源階層の静的設計、(3)割込み最小化と遅延分解、(4)計測による上限値提示、(5)省電力と決定性の整合、を柱とする。これにより、要求期限内に動作する堅牢で読みやすいシステムを実現できる。

コメント(β版)