TL

RTOSのスケジューリング(RMS・EDF)

組込みで「なぜ締切に間に合うのか」を数式レベルで保証できる。RMSとEDFの使い分け、応答時間解析、そして優先度逆転を潰す優先度継承まで、スケジューリングの原理を一本で押さえられる。

応用RTOSリアルタイムスケジューリング組込みRMSEDF最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.RTOSの本質は優先度ベースのプリエンプティブスケジューリング。実行可能な中で最も優先度の高いタスクが常にCPUを握り、より高優先度が来た瞬間に横取り(プリエンプト)する。
  • 2.RMSは周期が短いタスクほど高優先度を付ける固定優先度方式で、上限利用率は約69%。EDFは締切が近いものを優先する動的方式で理論上100%まで詰められるが、過負荷時の破綻が読みにくい。
  • 3.共有資源が絡むと低優先度タスクが高優先度をブロックする優先度逆転が起きる。優先度継承や優先度上限プロトコルでブロック時間を有界化し、応答時間解析に織り込む。

「間に合う」を保証するということ

汎用OSのスケジューラは公平性やスループットを最適化しますが、リアルタイムシステムで問われるのは平均ではなく最悪ケースです。「割り込みから何マイクロ秒以内に必ず応答する」という締切(デッドライン)を、どんなに条件が重なっても破らないと保証できるか——これがRTOS(リアルタイムOS)のスケジューリングが解こうとしている問題です。ここでは周期タスクの集合を対象に、なぜ間に合うと言い切れるのかを、スケジューリング可能性解析の原理から見ていきます。CPU側の割り込み機構やコンテキストスイッチの土台は /os/ 側の話題と地続きです。

優先度ベースのプリエンプティブスケジューリング

RTOSの中核は極めて単純な規則です。実行可能状態にあるタスクのうち、最も優先度の高いものを常に走らせる。そして、より高い優先度のタスクが実行可能になった瞬間、走行中のタスクを中断してCPUを奪う——これがプリエンプション(横取り)です。タイムスライスで公平に回すのではなく、優先度が絶対的な序列を与えます。

この方式が成立する前提は、コンテキストスイッチと割り込み応答が短く、かつ上限が確定していることです。最悪ケースを積み上げるには、各要素の遅延に必ず上界がなければなりません。周期タスクは通常、次の3つの量で特徴づけます。

記号意味解析上の役割
C(実行時間)1回の起動で必要な最悪実行時間(WCET)CPUをどれだけ占有するかの上界
T(周期)起動間隔。周期タスクはTごとに再起動利用率 C/T の分母
D(相対デッドライン)起動から締切までの許容時間多くの解析では D = T と仮定(暗黙デッドライン)

全タスクのCPU利用率の総和 U(各タスクの C/T を合計した値)が1を超えれば、どんな方式でも物理的に間に合いません。問題は「1未満のどこまでなら保証できるか」で、その答えが方式ごとに異なります。

RMS:周期が短いほど高優先度

RMS(Rate Monotonic Scheduling、レート単調)は固定優先度方式の代表です。規則は一つ、周期 T が短いタスクほど高い優先度を割り当てる。周期が固定なら優先度も一度決めたら変わりません。実装が単純で、優先度の付け替えが不要なため、多くの商用RTOSの標準的な使い方に馴染みます。

RMSの美点は、Liu と Layland(1973)が示したスケジューリング可能性の十分条件が閉じた形で書けることです。n個のタスクに対し、利用率の総和 U が次の上界以下なら、必ず全締切を守れます。

U ≤ n × (2^(1/n) − 1)

  n = 1 : 1.000
  n = 2 : 0.828
  n = 3 : 0.780
  n → ∞ : ln 2 ≈ 0.693  (約69%)

タスク数が増えると上界は約69%に収束します。つまりCPUの約3割を「保険」として空けておけば、周期と実行時間がどんな配置でもRMSは間に合う、という強い保証です。ただしこれは十分条件にすぎません。69%を超えていても実際にはスケジュール可能な場合が多く、そこを正確に判定するのが後述の応答時間解析です。

なぜ「周期が短い=高優先度」が最適なのか

固定優先度方式の中で、周期の短さを優先度の順序にするRMSが最適(他のどんな固定優先度割当でスケジュール可能な集合も、RMSならスケジュール可能)であることが証明されています。直観的には、締切が頻繁に来るタスクほど待たせる余裕がないため、先に処理すべきだからです。デッドラインが周期と一致しない場合(D が T 未満)は、周期ではなくデッドラインの短さで順序づける DMS(Deadline Monotonic)が最適になります。

EDF:締切が近いものを優先

EDF(Earliest Deadline First、最早デッドライン優先)は動的優先度方式です。優先度を静的に固定せず、その瞬間に絶対デッドライン(起動時刻+相対デッドライン)が最も早いタスクを走らせます。同じタスクでも起動のたびに締切の絶対時刻が変わるため、優先順位は動的に入れ替わります。

EDFの決定的な強みは、暗黙デッドライン(D = T)の周期タスクに対して利用率 U が1以下でありさえすればスケジュール可能という点です。すなわち理論上CPUを100%まで詰め込める。RMSの69%と比べ、同じハードウェアでより多くの負荷をさばけます。

観点RMS(固定優先度)EDF(動的優先度)
優先度周期で静的に決定絶対デッドラインで動的に決定
利用率上界約69%(n→∞)100%(暗黙デッドライン時)
実装コスト低い。優先度は固定高い。締切でキューを都度整列
過負荷時の挙動低優先度から順に破綻し予測しやすいドミノ倒し的に連鎖破綻しうる
採用状況商用RTOSで広く実用採用は限定的。理論的に強力

理論性能はEDFが上ですが、実務でRMSが根強いのには理由があります。EDFは締切ごとにレディキューを整列し直すオーバーヘッドがあり、何より過負荷(U が1超)に弱い。RMSなら負荷超過時も低優先度タスクから順に締切を落とすため、重要タスクは守られます。一方EDFは、一つ締切を落とすと連鎖的に他タスクの締切も崩れる「ドミノ効果」を起こしやすく、最悪ケースの振る舞いが読みにくいのです。

応答時間解析:本当に間に合うかを個別に検証

利用率の上界チェックは手軽ですが保守的です。固定優先度方式で必要十分に判定するのが応答時間解析(RTA)です。タスク i の最悪応答時間 R は、自身の実行時間に、より高優先度タスクからの妨害(プリエンプション)を積み上げて求めます。R が相対デッドライン D 以下ならスケジュール可能です。

R_i = C_i + Σ ceil( R_i / T_j ) × C_j
              j∈hp(i)

  hp(i) : i より高優先度のタスク集合
  ceil(x) : x の天井関数(切り上げ)

右辺に R が現れる再帰式なので、R = C_i から始めて値が収束するまで反復します。ceil(R/T_j) は「応答時間の窓の間に高優先度タスク j が何回起動して割り込んでくるか」を表し、その回数ぶんの実行時間が妨害として上乗せされます。この解析があるからこそ、利用率が69%を超える設計でも「このタスク集合は確かに全締切を守る」と定量的に言い切れます。

優先度逆転:低優先度が高優先度を止める

ここまでは各タスクが独立に走る前提でしたが、実際には共有資源(ミューテックスで保護された領域など)を奪い合います。ここで厄介な現象が起きます。

優先度逆転(Priority Inversion)

低優先度タスク L がミューテックスを保持中に、高優先度タスク H が同じミューテックスを要求してブロックされる。ここまでは正常です。問題は、L と H の中間の優先度を持つタスク M が割り込んでくると、M は L をプリエンプトして走り続け、L はミューテックスを解放できず、結果として H が M より長く待たされる点です。優先度の序列が事実上逆転し、H の応答時間が中間タスクの都合で青天井に伸びてしまいます。

これは理論上の懸念ではありません。1997年の火星探査機 Mars Pathfinder が現地で繰り返しリセットを起こした原因が、まさにこの優先度逆転でした。中間優先度の通信タスクが、高優先度タスクの待つ資源を握った低優先度タスクを締め出し、ウォッチドッグが暴走とみなして再起動をかけていたのです。

優先度継承と優先度上限プロトコル

対策の核心は、ブロック時間に上界を与えることです。青天井を有界化できれば、応答時間解析にブロック項 B を足すだけで保証が復活します。代表的な2つのプロトコルがあります。

プロトコル仕組み効果と注意点
優先度継承(PIP)資源を保持する低優先度タスクが、待っている最高優先度タスクの優先度を一時的に継承する中間タスクの割込みを封じブロックを有界化。ただしデッドロックは防げず、連鎖継承で解析がやや複雑
優先度上限(PCP/OCPP)各資源にそれを使う最高優先度を上限値として設定し、資源取得時にタスクの優先度をその上限まで引き上げるブロックは最大1回ぶんに抑えられデッドロックも予防。優先度の事前設計が必要

優先度継承(Priority Inheritance Protocol)は、資源を握った L が H の優先度を借りることで、中間タスク M の割り込みを排除します。Mars Pathfinder はこの機能を有効化する設定を遠隔で送り込み、復旧しました。より強力な優先度上限プロトコル(Priority Ceiling Protocol)は、ブロックを高々1回に抑えデッドロックまで防げるため、厳密な最悪ケース保証が要る系で好まれます。

資格・面接で問われる勘どころ

「RMSとEDFの違い」は、固定優先度(周期で決定・上界約69%)対 動的優先度(締切で決定・上界100%)で整理します。RMSの上限利用率 n(2^(1/n)−1) と、n→∞ で ln 2 に収束することは頻出です。優先度逆転は「低優先度が資源を握り、中間優先度が割り込むことで高優先度が待たされる」現象で、対策は優先度継承(借りる)と優先度上限(先に引き上げる)の2つを区別して押さえます。Mars Pathfinder の事例も定番の題材です。

まとめ

RTOSのスケジューリングは、優先度ベースのプリエンプションという単純な規則の上に、最悪ケースを積み上げて締切を数学的に保証する体系です。RMSは周期でまるごと優先度を固定する実装容易な方式で約69%の利用率まで無条件に保証し、それを超える領域は応答時間解析で個別に詰めます。EDFは締切を動的に見て理論上100%まで使えますが過負荷に脆く、採用は慎重に判断します。そして共有資源が入った瞬間に立ちはだかる優先度逆転を、優先度継承や優先度上限で有界化し解析へ織り込むことで、実システムの締切保証が完成します。より低いレイヤーで応答時間の上界を支えるタイマや割り込みの土台は /hardware-components/、制御周期そのものの設計思想は /dsp-control/ の観点と合わせて理解すると立体的になります。

組込み・IoT Article

RTOSのスケジューリング(RMS・EDF)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

RTOS

比較で見る軸

難易度: advanced / カテゴリ: 組込み・IoT / タグ数: 6

導入後に効く点

RMSは周期が短いタスクほど高優先度を付ける固定優先度方式で、上限利用率は約69%。EDFは締切が近いものを優先する動的方式で理論上100%まで詰められるが、過負荷時の破綻が読みにくい。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
組込み・IoT
タグ数
6

判断チェックリスト

  • 自社の用途が「RTOS / リアルタイム」に近いか確認する。
  • 強みである「RTOSの本質は優先度ベースのプリエンプティブスケジューリング。実行可能な中で最も優先度の高いタスクが常にCPUを握り、より高優先度が来た瞬間に横取り(プリエンプト)する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

RTOSリアルタイムスケジューリング組込みRMSRTOSリアルタイムスケジューリング