組み込みOSの種類と使い分け

炊飯器や洗濯機などの家電製品から自動車、さらには工場のロボットや医療機器などの機器の中には、組み込みソフトウェアが搭載されています。

これらの機器が定められた機能を、効率よく安定して実行するための土台となるのが、組み込みシステムに搭載される「組み込みOS(Operating System)」です。

組み込みOSとは何か

組み込みOSとは、マイコン(MCU)やプロセッサ上で動作し、CPU、メモリ、入出力装置などのハードウェアを効率よく管理するための土台となるソフトウェアです。たとえるならパソコンに入っているWindowsやmacOS、スマートフォンに入っているAndroidやiOSのようなものです。ただしパソコンやスマートフォンのOSと組み込みOSには大きな違いがあります。パソコンやスマートフォンで使われるのは「汎用OS」であり、事務作業や動画編集からゲームなどさまざまな用途に対応します。これに対して組み込みOSは、限られたリソースの中での特定機能の確実かつ安定した実行に特化されています。

組み込み機器に求められるOSとは

組み込み機器では、次のような要件への対応が求められるため、OSの設計思想にも汎用OSとは異なる考え方が求められます。

  • メモリ容量やCPU性能が限られている。
  • 決められた時間内に処理を終えるリアルタイム性が求められる。
  • 長時間の安定した動作が必須となる。
  • 特定の機器における限られた用途への最適化が必要となる
  • 省電力性が重要となる場合が多い。

組み込みOSの役割について

組み込みOSは、ハードウェア(CPU、メモリ、入出力装置など)を制御し、各種アプリケーションをスムーズに動かします。その具体的な役割は大きく次の3点、タスク管理、ハードウェアの抽象化、開発期間の短縮です。
タスク管理については、「センサの値を読む」「モータを回す」「画面に情報を表示する」など複数のタスクを、優先順位を付けて実行していきます。ハードウェアの抽象化が意味するのは、OSによるハードウェアごとの細かな違いの吸収です。これにより開発者はハードウェアの複雑な仕様に縛られず、開発に専念できます。開発期間の短縮については、ネットワーク接続やファイル管理などの共通機能がOSによって提供されるため、一から自作する手間を省けるのです。このように組み込みOSを使えば、複数の処理を整理して実行できるので、開発効率を大幅に向上できます。

組み込みシステムが携帯電話、エアコン、自動車などを制御しているイメージ図

組み込みOSの種類|機能の異なる3つのタイプ

組み込みOSは、その設計や機能によってベアメタル、組み込みLinux/Android系、そしてもっとも重要なRTOS(リアルタイムOS)の3つに分類されます。

1)ベアメタル(OSなし)とは

ベアメタルとは、OSを使わずアプリケーションが直接ハードウェアを制御する方式です。その特長はメモリ消費を最小限に抑えられる点にあります。余分な機能がないため処理が単純で、高速で動作します。単機能のマイコンで動く小型家電や電子レンジのタイマなどシンプルな制御機器で広く使われています。ただし、処理の切り替えやタイミング管理などをすべて自分で設計する必要があり、機能が複雑になると開発や管理の難易度が高まります。

2)組み込みLinux/Android系とは

パソコン用OSのLinuxを、組み込み機器向けにカスタマイズしたものです。その特長はネットワーク機能やファイルシステムの充実ぶりと、ブラフィック表示や通信処理の強みにあります。IoT機器、スマート家電、ネットワークルータなど高機能な機器に使われています。ただし、メモリ消費の大きさや起動時間の長さが欠点であり、リアルタイム保証もRTOSほどの厳密さはありません。

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

組み込み分野でもっとも重要なのがRTOS、「決められた時間内に必ず処理を完了させるリアルタイム性」を最優先に設計されたOSです。このリアルタイムが意味するのは、応答時間が予測可能であることと、時間制約を厳密に守れることであり、処理の速さではありません。また、RTOSを使用すると機能ごとに「タスク」という単位でソフトウェアが用意され、それらをOSが切り替えることで複雑な機能を実行できるようになります。これは「マルチタスク」と呼ばれる、RTOSを使用するメリットの1つです。

組み込みOSの3タイプ

項目 ベアメタル RTOS 組み込みLinux
メモリ消費 非常に小さい 小さい 大きい
リアルタイム性 高い 非常に高い(厳密) 弱い(ばらつきあり)
得意なこと 単純・低コスト 精密な時間制御 通信・複雑なUI
主な用途例 小型家電 ロボット・自動車制御 IoT・スマートデバイス

RTOSの特徴と設計の注意点、主なRTOSについて

RTOSの5つの特徴

1)決定論的なスケジューリング

特定のイベントが発生してから、処理が始まるまでの時間を常に一定の範囲内に収めます。これを「決定論的(デターミニスティック)な動作」と呼びます。

2)優先度ベースのスケジューリング

すべての処理に優先順位をつけて、もっとも重要な処理を即座に実行します。緊急性の高いイベントが発生すると、その時点で実行中の処理を一時中断してでも高優先度のタスクを実行します。低優先度のタスクは、高優先度のタスクを実行し終わった後、余った時間で実行されます。

3)高速な割り込み応答

センサ入力など外部からの信号に即座に反応するため、マイクロ秒単位での応答時間が保証されています。

4)小さなメモリフットプリント

無駄を削ぎ落としているので、数KB~数百KBと非常に小さなメモリで動作します。

5)リアルタイム性の2つのレベル

RTOSのリアルタイム性にはハードリアルタイムとソフトリアルタイムの2つのレベルがあります。ハードリアルタイムとは、ブレーキ制御やエアバッグ制御など1ミリ秒の遅れでもシステムの破綻や重大事故につながるものです。ソフトリアルタイムは、画面表示や音楽再生など多少の遅れなら品質低下だけで収まるものです。安全性を求められる分野では、ハードリアルタイム対応のRTOSが選択されます。

RTOS設計で注意すべき2つのポイント

1)優先度逆転問題を防ぐ

RTOS設計で注意すべきなのが優先度逆転問題です。これは低優先度タスクが資源を保持してしまったり、中優先度タスクが割り込んだりするために、高優先度のタスクを実行できなくなる問題です。RTOSはマルチタスクを実行できますが、実際に動作するCPUは、ハードウェアで決まったコア数しかありません。OSは限られたコアでの機能を優先度ごとに切り替えながらマルチタスクを実現しているだけです。そのため、このような優先度の逆転を起こすと、最優先の処理が実行されなくなるため、システムのフリーズや重大事故につながるおそれもあります。問題発生を防ぐためには、優先度継承プロトコルなどの手法を活用します。

2)メモリ管理を徹底する

パソコン用ソフトでは動的にメモリを確保して、使い終わったら解放します。しかしRTOSでは、固定メモリ管理が基本です。その理由は、動的確保を繰り返すとメモリ内でフラグメンテーション(断片化)を起こすため、長時間動かし続けるとメモリ不足で不具合を起こすリスクがあるからです。リスクを避けるためにはできる限り、必要な静的メモリを最初から確保しておくようにします。

主要な5つのRTOS

1)FreeRTOS

世界で最も普及しているオープンソースのRTOSで、小規模マイコンから使用可能です。Amazon (AWS) が管理していて、クラウド連携に強く、商用利用可能なMITライセンスで提供されています。IoT機器で広く採用されています。

2)μITRON/ITRON系(TOPPERSなど)

日本の製造業で長年にわたって標準仕様として使われており、自動車や産業機器で多くの実績があります。

3)VxWorks

極めて信頼性の高い商用OSで、火星探査機や航空機、産業ロボットなどの高信頼性を求められる分野で使われています。有償ですが、手厚いサポートと動作保証があります。

4)QNX

堅牢な構造であるマイクロカーネル型アーキテクチャを採用した商用RTOSで、特に車載システムで広く使用されています。

5)Azure RTOS(ThreadX)

Microsoftが提供するRTOSで、省電力性と安全認証に定評があります。

OSの選定基準|要件別の3つの基準

ベアメタル、RTOS、Linux/Androidと3つあるOSのどれを選ぶのか。OSの選択は、システム全体の方向性を左右します。開発する製品の要件に応じた適切なOSの選定が必要です。

小規模・単機能制御ならベアメタル

シンプルな機能で、メモリやコストを最小限に抑える場合に適しています。

時間制御重視・リアルタイム制御ならRTOS

時間制約が厳しい場合や応答時間の保証が必要な場合に適しています。特に安全性が重視される自動車、医療機器、産業用ロボットなどに適しています。

ネットワークやリッチな画面表示ならLinux/Android

ネットワーク機能やグラフィカルユーザーインターフェースを重視する場合に適しています。

組み込み開発時に注意すべきポイント

組み込みOSは、システムの性格を決める中枢的な存在です。ベアメタル、RTOS、Linux/Androidのそれぞれの特性を理解し、適切に使い分ける必要があります。OS選定を誤ると、後工程で大きな設計変更などを引き起こすリスクがあります。
リアルタイム性、リソース制約、コスト、開発期間など求められる要件を十分に検討した上で、適切なOSを選択する。これがプロジェクト成功のカギとなります。

組み込みソフトの世界 トップへ戻る