1-1.組込みシステムとリアルタイムOS
組込みシステムとは
組込みシステムとは、機器を制御するために組み込まれたコンピュータ・システムです。パソコンやサーバー、大型計算機などが、情報処理を行うコンピュータとして作られた機器であるのに対し、組込みシステムはユーザからコンピュータとして意識されることはありません。たとえば、最近の家電製品の多くはマイコンを搭載した組込みシステムですが、家電製品をコンピュータと意識して使っているユーザはまずいないでしょう。
パソコンなどの一般的なコンピュータの主な目的は、様々な情報処理によるサービスをユーザである人間に提供することです。具体的な目的はユーザごとに異なり、また一人のユーザが様々な目的でコンピュータを使うこともあります。よって、一般的なコンピュータは汎用的なシステムとなります。以降、本稿ではこのようなコンピュータを汎用コンピュータとよぶこととします。
組込みシステムと汎用コンピュータの相違点を表1にまとめます。汎用コンピュータの例としては、一般的なパソコンを想定しています。組込みシステムは用途や規模に応じて多くのバリエーションが存在しますが、ここでは典型的なIoTエッジノードを想定します。
パソコン | 組込みシステム | |
---|---|---|
CPU | 32~64bitの高性能プロセッサ(現在は64bitが主流) 複数のCPUコアを搭載したマルチコア・プロセッサが主流 |
8bit~32bitのマイコンが中心(一部64bitマイコンが使われ出している) 単一のCPUコアを搭載したシングルコアのマイコンが主流 |
メモリ | 数G byteの外部メモリ(通常はRAM) 多段のキャッシュや仮想メモリが使用される |
数十K byte~数百K byteのマイコンに搭載されたメモリ プログラムのコードはROMに記録されることが多い |
二次記憶 | 大容量のハードディスク等の外部記憶デバイス CD-ROM、SDカード、USBメモリ等の外部記憶デバイスにも対応 |
必須ではない |
OS | Windows、Linuxなどの汎用OS | 主にリアルタイムOSが使用される OSを使用しないシステムもある。 |
ネットワーク通信 | Ethernet、Wi-Fi、Bluetoothなど各種ネットワーク通信に対応 | 組込みシステムとしては必須ではないが、IoTエッジノードでは必須。近距離無線通信を使用する場合が多い |
リアルタイムOS
組込みシステムで使用されるOSは、コントローラ系のマイコンとプロセッサ系のマイコンとでは異なった傾向があります。
コントローラ系で主に使用されるOSは、リアルタイムOSとよばれる組込みシステムに向けて作られたOSです。また、コントローラ系の比較的単純なシステムではOSを使用しないこともあります。
一方、プロセッサ系のマイコンでは、Linuxやそれに準ずる高機能なOSが使用されることが多くあります。ただし、プロセッサ系でも用途に応じてリアルタイムOSが使用されることも少なからずあり、プロセッサ系だからLinuxに決まっているわけではありません。
リアルタイムOSを明確に定義することは難しいのですが、主に以下のような機能を持つOSがリアルタイムOSであるといえます。
- 省資源のマイコンで動作する軽量OS
- 複数の処理を並行実行するマルチタスク
- リアルタイム性に優れたOS
マルチタスクとは
マルチタスクでは複数のプログラム(タスク)が並列実行されます。しかし実際には、マイコンは一時に一つのプログラムしか実行できません。つまりマイコンの機能だけではマルチタスクの実現は不可能です。
そこでOSは、複数のタスクの実行を切り替えながら実行することによってマルチタスクを実現します。
マルチタスクの処理において、OSが実行するタスクの順番を決めていく処理をスケジューリングとよびます。そして決められたスケジューリングに従い、実際にタスクの実行を切り替える処理をディスパッチとよびます。
スケジューリングには様々な方式が存在します。一般的なものとして、マイコンの実行時間を分割して、それぞれのタスクの実行を割り当てていく時分割のスケジューリングがあります。最も単純な時分割のスケジューリングは、定めた実行時間ごとにタスクを順番に実行していくラウンドロビン・スケジューリングです(図1-1-1)。
このような時分割のスケジューリングは、パソコンなど汎用コンピュータのOSのスケジュールの基本的な考え方になっています。しかし、リアルタイムOSでは、時分割のスケジューリングは、リアルタイム性の実現に向かないため、通常は使用されません。
リアルタイム性の実現
リアルタイムOSは、リアルタイム性を実現するために、時分割のスケジュールとは異なった、タスクに与えられた優先度に基づく優先度スケジューリングの方式を採用しています。
実例としてμT-Kernelのタスクのスケジューリング規則を以下に示します。
- 全てのタスクには優先度が与えられている。
- OSは実行可能なタスクの中から最も高い優先度のタスクを実行する。
- ②において同一優先度のタスクが複数存在する場合は、先に実行可能になったタスクから実行する。
優先度スケジューリングでは、各タスクに与えられる実行時間が定まっていません。またタスクが実行される順番は優先度に従っているため、先に実行可能になった順番に実行されるわけではありません(図1-1-2)。
1-2. TRONプロジェクトとμT-Kernel
TRONプロジェクトとは
TRONプロジェクトは、産学共同のコンピュータ・アーキテクチャの開発プロジェクトです。1984年に発足しリアルタイムOSを含む様々なコンピュータ関連の開発を進め、現在に至っています。
TRONプロジェクトでは、プロジェクトリーダーである坂村健氏が提唱したHFDS(Highly Functionally Distributed System、超機能分散システム)または「どこでもコンピュータ」と呼ばれる構想の実現を目標としました。この構想は、日常生活のあらゆる部分にコンピュータが組み込まれ、それらがネットワークに接続し連携して快適な環境を作り出していくと言うものです(図1-2-1)。
このHFDSの考えは、のちにユビキタス・コンピューティングへとつながり、今ではIoTとして実現しようとしています。
組込みシステム向けOS ITRON
初期のTRONプロジェクトで開発されたものの一つに組込みシステム向けのリアルタイムOS ITRON(Industrial TRON)があります。このITRONがμT-Kernelのルーツと言えます。
ITRONは、1984年に最初の仕様がまとめられてから、1990年代にかけて組込みシステムが世の中に広まっていく中で、様々な分野に普及していきました。
当時の組込みシステムの主流は8~16ビットのマイコンであったことから、それに適応し機能を絞り込んだμITRONが開発されました。のちに、ITRONとμITRONはμITRON 3.0に統合されます。
μITRONの最後のメジャーバージョンは1999年に仕様が公開されたμITRON 4.0です。すでに20年以上が立っていますが、今現在でも多くの組込みシステムでμITRONが使用され続けています。
T-EngineプロジェクトとT-Kernel
2000年を過ぎた頃に、組込みシステムの標準開発プラットフォームを開発しようという新たなプロジェクトであるT-Engineプロジェクトが始まりました。
この当時は、組込みシステムのマイコンの高機能化が進み、ハイエンドのものでは32bit CPUにMMUを備えたマイコンが使用され始めた時代です。組込みシステムのソフトウェア自体も巨大化、複雑化し、開発効率の向上が重要視され始めていました。
一方で、多くのマイコン・メーカが独自仕様のマイコンを開発していましたが、標準と言える開発環境はありませんでした。
T-Engineプロジェクトでは、メーカを超えた標準の開発プラットフォームを作るべく、開発用のマイコンボードからリアルタイムOS、ソフトウェアの開発環境といった様々な開発、整備を行っていきました。その中で開発されたリアルタイムOSがT-Kernelです。
T-Kernelの展開とμT-Kernel
T-Engineプロジェットから生まれたリアルタイムOS T-Kernelは、普及に伴いいくつかの派生バージョンが開発されていきました。その一つがμT-Kernelです(図1-2-2)。
T-Kernelは、MMUを搭載した32bit CPUのハイエンドのマイコンを対象としており、従来からμITRONが対応していた8~16ビットのマイコンは対象外でした。しかし、T-Kernelが広まるとこれらのマイコンでもT-Kernelを使用したいという声が大きくなり、小規模な組込みシステム向けとしてμT-Kernelが開発されるに至りました。
2007年にリリースされたμT-Kernelの最初のバージョンは、8~16bitのマイコンに対応できるようにT-Kernelの基本機能にのみに対応したサブセットでした。その後、2013年の次バージョンのμT-Kernel 2.0で、プロファイルにより必要な機能のみを実装できるようにすることにより、T-Kernelの多くの機能を取り込みました。
現在のT-KernelとμT-Kernelの間では、機能的な差異は少なくなっています。ただし、T-KernelがMMUによるメモリ管理を前提とするのに対し、μT-KernelはMMUが実装されていないマイコン、またはMMUがあっても使用しないシステムを対象としている点が、μT-Kernelの大きな特徴として残されています。
近年ではコントローラ系のマイコンでも、32bit CPUが主流となりつつありますので、μT-KernelはMMUを搭載しないコントローラ系のマイコン向けのリアルタイムOSと言えるかと思います。
μT-Kernelは、現在は第三世代へと移行したμT-Kernel 3.0となっています。
1-3. IoTエッジノードの国際標準OSとμT-Kernel 3.0
IEEEによるIoTエッジノードOSの標準化
IoTが普及する中で、米国の標準化団体 IEEE (Institute of Electrical and Electronics Engineers)で、リアルタイムOSの標準化が行われました。
IEEEはIoTエッジノードのOSの標準化にあたり、組込みシステムで広く普及しているTRONのOSに注目し、μT-Kernel 2.0の仕様をベースに標準化が進められました。IEEEとトロンフォーラムの間の協議により、μT-Kernel 2.0の仕様の著作権がIEEEへ譲渡され(トロンフォーラムとIEEEの共有)、2018年にIEEE 2050-2018として正式に仕様が公開されました。
IEEE 2050-2018は、「小規模な組込みシステム向けリアルタイムOSのIEEE標準規格( IEEE Standard for a Real-Time Operating System (RTOS) for Small-Scale Embedded Systems)」という位置づけのリアルタイムOSの国際標準規格です。
μT-Kernel 3.0とは
μT-Kernel 3.0は2019年にトロンフォーラムより公開されたμT-Kernelの最新バージョンであり、現時点で最も新しいTRONのリアルタイムOSです。
μT-Kernel 3.0ではμT-Kernel 2.0から6年ぶりのメジャーバージョンアップということで、全面的に仕様の再検討およびリファレンスのソースコードの再実装が行われました。以下にμT-Kernel 2.0から3.0への主な変更点を示します。
IEEE2050-2018準拠
仕様面では、IEEE2050-2018の規格に完全に準拠しました。
新規マイコンの対応と移植性の改善
近年のマイコンでは、様々なI/Oデバイスが内蔵されるようになり、かつてはマイコンボード上の複数のチップで実現していた機能が1チップのマイコンで対応できるようになっています。一方で、ARMマイコンに代表されるように、CPUコアについてはメーカを超えて共通化される傾向があります。
T-KernelやμT-Kernelでは、従来から、特定のマイコンやハードウェアに依存しないように、ソースコードのハードウェア依存部をOSの共通部から分離した構成としてきました。μT-Kernel 3.0では、これを最近のマイコンの状況に合わせて再整理しました。
また、リファレンスのソースコードでは、主要なCPUコアへの対応を進めました。表1にリファレンスのソースコードが対応しているマイコンを示します。なお、この情報は執筆時のバージョン3.00.05のものであり、今後も対応マイコンは拡大していく予定です。
最近の開発環境への対応
μT-Kernel 2.0までのトロンフォーラムの標準的な開発環境では、プログラムの自動ビルドツールmakeやスクリプト言語Perlの使用を前提としており、リファレンスのソースコードもそれに対応する構成となっていました。
T-Kernel 3.0では、従来のmake、Perlなどのツールを前提とした開発環境から、特定の開発環境に極力依存しない方針に変更しました。
μT-Kernel 3.0は、C言語のプログラミング環境であれば、ソースコードの構成などを変更することなくビルドが出来るようになっています。執筆時点でEclipse、STM32CubeIDE、E2 Studio、SEGGER Embedded Studioなど各種の統合開発環境での実績があります。
Gitベースの開発とGitHubからのリリース
μT-Kernel 3.0から、その開発にバージョン管理システムGitが利用されるようになりました。μT-Kernel 3.0のリファレンスのソースコードは、従来のWebからのダウンロードに代わって、GitHubから公開されています。
これまでの組込みシステムでは、製品ソフトウェアの保守の観点から、OSの頻繁なバージョンアップは敬遠される傾向がありました。しかし、GitHubを利用することにより、バージョン間の差異の把握や過去の特定バージョンの取得などが容易になりましたので、より細かいバージョンアップが可能となりました。
また、正規のバージョンアップに先駆けて、評価用のプレリリース版を公開するなどの対応も速やかに行われるようになりました。
現在、トロンフォーラムでは、μT-Kernel 3.0に関連してGitHubに以下のレポジトリを公開しています。
μT-Kernel 3.0 (mtkernel_3)
https://github.com/tron-forum/mtkernel_3
μT-Kernel 3.0のソースコードを公開しています。
このレポジトリの「Release」から、μT-Kernel 3.0の正式版およびプレリリース版のソースコードを取得することができます。
μT-Kernel 3.0 開発環境コレクション (mtk3_devenv)
https://github.com/tron-forum/mtk3_devenv
各種の開発環境向けに、μT-Kernel 3.0とプロジェクトファイル等のセットを公開しています。
μT-Kernel 3.0では様々な開発環境を使用することができますが、自分で開発環境の構築を行うには、プロジェクトの作成など、ある程度の知識と作業が必要です。そこで、作成済みのプロジェクトを提供することにより、より簡単に開発環境の構築ができるようにしています。
μT-Kernel 3.0 BSPコレクション (mtk3_bsp)
https://github.com/tron-forum/mtk3_bsp
市販のマイコンボードにμT-Kernel 3.0を移植した上で、基本的なデバイスドライバ等も合わせて提供するパッケージとして、BSP(Board Support Package)を公開しています。
市販のマイコンボードを使って、μT-Kernel 3.0の学習、評価や、ソフトウェアの開発が容易に行えることを目的としています。