【応用情報技術者試験】リアルタイムOSとは?「待ったなし」のOSとプリエンプション、セマフォを徹底解説

noteへのバナー

リアルタイムOS (Real-Time Operating System) とは、「決められた時間(デッドライン)までに、必ず処理を完了させること」を最重要視するOSのことです。

応用情報技術者試験の勉強中、OSの分野でこの「リアルタイムOS (RTOS)」や「プリエンプション」という言葉に出会い、「普通のOSと何が違うの?」と疑問に思ったことはありませんか?

今回は、これらの概念を「病院のER(救急救命室)」の例えを使って、わかりやすく解説します。

目次

リアルタイムOS (RTOS) とは?

普通のOSとの違い

冒頭で紹介したように、リアルタイムOSとは、「決められた時間(デッドライン)までに、必ず処理を完了させること」を最重要視するOSのことです。
普通のOSとの違いをまとめておきましょう。

普通のOS(Windows, macOS, Linuxなど)リアルタイムOS (RTOS)
「スループット(全体の処理能力)」を重視
たくさんの作業をそつなくこなし、システム全体として効率よく動くことを目指す
多少の処理遅れ(マウスカーソルが少し待たされるなど)は許容される
応答時間(リアルタイム性)」を重視
工場のロボットアーム、自動車のエアバッグ、医療機器(心臓のペースメーカー)など、「今、この瞬間に動かないと大事故になる」というシステムで使われる

    OSの違いを病院でたとえると

    次に、普通のOSとリアルタイムOSを病院にたとえて見ていきましょう。

    [画像:普通のOSとリアルタイムOSの違い]

    普通のOS:一般外来の受付

    普通の「一般外来の受付」です。たくさんの患者さん(タスク)を順番に、または効率よくさばきます。少し待合室で待たされても(処理が遅れても)、全体が回っていればOKです。

    リアルタイムOS:ER(救急救命室)

    リアルタイムOSは「ER(救急救命室)」です。心停止の患者(最優先タスク)が運ばれてきたら、他のどんな作業(例えばカルテの記入)よりも最優先で、かつ「数秒以内」に処置を開始しなければなりません。この「時間」を逃せば、それはシステムの致命的な失敗となります。

    プリエンプション(Preemption)とは?

    「最優先タスク」を「時間通りに」実行するための技術

    リアルタイムOSが「最優先タスク」を「時間通りに」実行するために使う技術がプリエンプションです。

    プリエンプションとは、「OSが、実行中のタスクからCPUの利用権を強制的に奪い取り、別のタスクに切り替えること」を指します。

    この機能を持つOSの仕組みをプリエンプティブ・マルチタスク方式と呼び、現在のほとんどのOS(WindowsやLinux、もちろんリアルタイムOSも)が採用しています。

    ERの医師でたとえると

    再び、病院の仕事にたとえて、プリエンプションを解説していきます。
    ERの医師(CPU)が、軽傷の患者(タスクB)の問診をしているとします。

    プリエンプションの流れ
    1. 実行状態: 医師が「タスクB(軽傷の患者)」を処理しています。
    2. 割り込み発生: そこへ、救急隊から「心停止の患者(最優先のタスクA)が今から到着する!」という連絡が入りました。
    3. プリエンプション: 医師は問診(タスクB)を強制的に中断します。これが「プリエンプション(強制的な割り込み)」です。
    4. 状態遷移:
      • タスクB(軽傷の患者): 処理を中断させられましたが、別に終わったわけでも、検査待ち(I/O待ち)でもありません。ただ「待たされている」だけです。この状態が「実行可能状態(Ready)」です。
      • タスクA(心停止の患者): 医師(CPU)によって、ただちに処置が開始されます。これが「実行状態(Running)」になります。

    セマフォ (Semaphore) とは?

    1つしかない資源の使い方

    プリエンプションによって、タスクがいつ切り替わるか分からない(非同期的である)のがリアルタイムOSの基本です。しかし、ここで新たな問題が生まれます。

    もし、複数のタスクが「1つしかない資源」を同時に使おうとしたら?

    例えば、「タスクA」がデータをファイルに書き込んでいる最中に、より優先度の高い「タスクB」が発生(プリエンプション)して、同じファイルに別のデータを書き込もうとしたらどうなるでしょう?
    ファイルは中途半端なデータで上書きされ、壊れてしまいます。

    このような「複数のタスクが同時にアクセスすると壊れてしまう資源(共有メモリ、通信ポート、ファイルなど)」を共有資源 (Shared Resource)と呼びます。

    この共有資源を、必ず「1つのタスクだけ」が独占して使えるようにする仕組みが必要です。これを排他制御 (Mutual Exclusion)と呼びます。

    そして、この排他制御を実現するためにリアルタイムOSが提供する機能がセマフォ (Semaphore)です。

    1台しかない「MRI室」の鍵

    ER(リアルタイムOS)には、非常に高価な「MRI室」(共有資源)が1つしかないとします。

    舞台設定
    • 共有資源: MRI室(1室のみ)
    • タスク: MRIを使いたい医師たち(タスクA、タスクB)
    • セマフォ: MRI室のドアの「鍵」(1本のみ)

    では、MRIが1室しかない状態で、医師たちがタスクAとタスクBをどのように処理していくかを追っていきましょう。

    タスクの流れ
    1. セマフォの取得 (Acquire / P操作)
      医師(タスクA)はMRIを使うために、まずナースステーションに行き「MRI室の鍵」を借ります。これが「セマフォの取得」です。
    2. クリティカルセクション
      鍵を手に入れた医師(タスクA)は、MRI室に鍵をかけて入り、検査を始めます。この「他のタスクに邪魔されたくない、鍵をかけている間の処理」をクリティカルセクション(臨界領域)と呼びます。
    3. タスクの待機 (Block)
      検査の途中で、別の医師(タスクB)がMRIを使いたくてナースステーションに来ました。しかし、鍵はすでに出払っています。
      タスクBは鍵が返却されるまで、OSによって「待ち状態(Block)」にされ、待機させられます。
    4. セマフォの解放 (Release / V操作)
      医師(タスクA)が検査を終え、MRI室から出てきて「鍵」をナースステーションに返します。これが「セマフォの解放」です。
    5. タスクの再開 (Wake Up)
      鍵が返ってきたことをOSが検知し、待っていた医師(タスクB)を起こします(実行可能状態にします)。タスクBは鍵を受け取り、無事にMRI室を使い始めることができます。

    このように、セマフォ(鍵)という仕組みを使うことで、たった1つのMRI室(共有資源)が同時に使われて混乱するのを防ぎ、システムの秩序を守ることができます。

    過去問に挑戦!

    ここからは、応用情報技術者試験の過去問から、リアルタイムOSに関する問題を取り上げ、解説していきます。

    令和7年度 応用情報技術者試験 春期 午前 問16より

    リアルタイムOSにおいて、実行中のタスクがプリエンプションによって遷移する状態はどれか。

    休止状態
    実行可能状態
    終了状態
    待ち状態

    解答と解説

    この問題は、まさに先ほどのERの例えの通りです。

    問診されていた軽傷のタスクBが、より緊急なタスクAが来たことで強制的に中断させられた(プリエンプション)ことによって、遷移する状態はどれか?

    タスクBは、まだやるべき処理は残っていますが、CPUの利用権を奪われたため、「CPUさえ空けば、いつでも再開できる」という状態で待機します。
    この状態をOSの用語で「実行可能状態(Ready)」と呼びます。

    したがって、正解は です。
    このほかの選択肢については以下のとおりです。

    • エ(待ち状態): タスクが自ら「ディスクからデータを読み込みたい」など、CPU以外の資源(I/Oなど)の完了を待つ状態です。プリエンプションは「強制的に奪われる」ものであり、自ら「待つ」のとは区別されます。
    • ア(休止状態)、ウ(終了状態): これらはタスクが終了したり、意図的に止められたりする状態であり、一時的な中断であるプリエンプションとは異なります。

    令和7年度 応用情報技術者試験 秋期 午前 問16より

    一つのI2Cバスに接続された二つのセンサがある。それぞれのセンサ値を読み込む二つのタスクで排他的に制御したい。利用するリアルタイムOSの機能として、適切なものはどれか。

    キュー

    セマフォ

    マルチスレッド

    ラウンドロビン

    解答と解説

    「I2Cバス」という言葉を初めて見た人は難しく感じてしまうかもしれませんが、「排他的に制御する」「リアルタイムOSの機能」というキーワードをもとに、「セマフォ」という答えを導きます。
    したがって、正解は です。

    念のため、ほかの選択肢も確認しておきましょう。

    • ア キュー: タスクとタスクの間で「データを送受信」するための仕組みです(メールボックスのようなもの)。排他制御の機能ではありません。
    • ウ マルチスレッド: 1つのプログラム内で複数の処理(スレッド)を並行して動かす「仕組み」そのものです。今回の問題は、マルチスレッド(マルチタスク)環境で発生する課題であり、マルチスレッド自体は解決策ではありません。
    • エ ラウンドロビン: タスクの「スケジューリング方式」の一つです。優先度に関係なく、全てのタスクに順番に一定の実行時間(タイムスライス)を割り当てる方式です。排他制御の機能ではありません。

    令和4年度 応用情報技術者試験 秋期 午前 問18より

    優先度に基づくプリエンティブなスケジューリングを行うリアルタイム OS における割込み処理の説明のうち、適切なものはどれか。ここでは、割込み禁止状態は考慮しないものとし、割込み処理を行うプログラムを割込み処理ルーチン、割込み処理以外のプログラムをタスクと呼ぶ。

    タスクの切替えを禁止すると、割込みが発生しても割込み処理ルーチンは呼び出されない。
    割込み処理ルーチンの処理時間の長さは、システムの応答性に影響を与えない。
    割込み処理ルーチンは、最も優先度の高いタスクよりも優先して実行される。
    割込み処理ルーチンは、割り込まれたタスクと同一のコンテキストで実行される。

    解答と解説

    この問題は、「タスク」と「割込み」のどちらが偉い(優先される)かを問うています。
    結論から言うと、割込み処理は、どんなタスクよりも優先されます。したがって、正解は です。

    この問題を病院の救急救命室でたとえて考えてみましょう。

    プリエンティブなタスク処理のおさらい
    • タスク = ERで待機している医師たち(優先度(専門性)の高い医師、低い医師がいる)
    • 最も優先度の高いタスク = 病院で一番偉い外科部長
    • 割込み = 救急車が「たった今、病院の入口に到着した」という外部からの緊急連絡(アラート)

    これは、「救急車が到着した(割込み発生)」というアラートは、外科部長が他の患者の手術(最高優先度のタスク)をしている最中でも、その耳に届き、対応を強いるのと同じです。
    同様に、ハードウェアからの「データが届いた!」「タイマーがゼロになった!」という割込み信号は、OSが管理するタスクの優先度とは無関係に、CPUに強制的に割り込みます。

    • ア 誤り: 「タスクの切替えを禁止」はOS(ソフトウェア)レベルの制御です。「割込み」はCPU(ハードウェア)レベルで発生するイベントです。ハードウェアがOSの都合を待ってくれることはないので、タスク切替えが禁止されていても、割込みは発生し、割込み処理ルーチンは(通常)呼び出されます。
    • イ 誤り: これはリアルタイムOSにおいて最もやってはいけないことの一つです。 割込み処理(救急車の受け入れ)がダラダラと長引いていたら、その間、外科部長(最高優先度タスク)は手術を再開できません。システムの応答性は致命的に悪化します。RTOSの鉄則は「割込み処理ルーチンは、可能な限り短く」です。
    • エ 誤り: 割込み処理は、タスクの文脈(コンテキスト)とは切り離された、特別な「割込みコンテキスト」で実行されます。これは少し難しい概念です。「手術中の外科部長」の道具(コンテキスト)を使わずに、「救急隊員」が専用の道具(割込みコンテキスト)で初期処置を行う、というイメージです。そのため、割込み処理ルーチン内では使えるOS機能に制限がある場合があります。

    まとめ

    今回はリアルタイムOSとその機能について解説しました。

    • RTOSは「時間厳守」が命のOS。
    • プリエンプションは「CPUの利用権」をOSが管理する仕組み。
    • セマフォは「共有資源の利用権」をタスク同士が管理する仕組み。

    この3点の関係性を押さえておけば、OSのタスク管理に関する問題はバッチリです!
    応用情報技術者試験では頻出の問題であるため、しっかりと学習しておきましょう。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次