リアルタイムOSとμT-Kernel1-1.組込みシステムとリアルタイムOS組込みシステムとは組込みシステムとは、機器を制御するために組み込まれたコンピュータ・システムです。パソコンやサーバー、大型計算機などが、情報処理を行うコンピュータとして作られた機器であるのに対し、組込みシステムはユーザからコンピュータとして意識されることはありません。最近の家電製品の多くはマイコンを搭載した組込みシステムですが、家電製品をコンピュータと意識して使っているユーザはまずいないでしょう。パソコンなどの一般的なコンピュータの主な目的は、様々な情報処理によるサービスをユーザである人間に提供することです。具体的な目的はユーザごとに異なり、また一人のユーザが様々な目的でコンピュータを使うこともあります。よって、一般的なコンピュータは汎用的なシステムとなります。以降、本稿ではこのようなコンピュータを汎用コンピュータとよぶこととします。組込みシステムと汎用コンピュータの相違点を表1にまとめます。汎用コンピュータの例としては、一般的なパソコンを想定しています。組込みシステムは用途や規模に応じて多くのバリエーションが存在しますが、ここでは典型的なIoTエッジノードを想定します。リアルタイムOSが使用されるOSを使用しないシステムもある。使用する場合が多いリアルタイム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は実行可能なタスクの中から最も高い優先度のタスクを実行する。2において同一優先度のタスクが複数存在する場合は、先に実行可能になったタスクから実行する。優先度スケジューリングでは、各タスクに与えられる実行時間が定まっていません。タスクが実行される順番は優先度に従っているため、先に実行可能になった順番に実行されるわけではありません(図1-1-2)。TRONプロジェクトとμT-KernelTRONプロジェクトとはTRONプロジェクトは、産学共同のコンピュータ・アーキテクチャの開発プロジェクトです。1984年に発足しリアルタイムOSを含む様々なコンピュータ関連の開発を進め、現在に至っています。System、超機能分散システム)または「どこでもコンピュータ」と呼ばれる構想の実現を目標としました。この構想は、日常生活のあらゆる部分にコンピュータが組み込まれ、それらがネットワークに接続し連携して快適な環境を作り出していくと言うものです(図1-2-1)。このHFDSの考えは、のちにユビキタス・コンピューティングへとつながり、今ではIoTとして実現しようとしています。TRON)があります。このITRONがμT-Kernelのルーツと言えます。ITRONは、1984年に最初の仕様がまとめられてから、1990年代にかけて組込みシステムが世の中に広まっていく中で、様々な分野に普及していきました。当時の組込みシステムの主流は8~16ビットのマイコンであったことから、それに適応し機能を絞り込んだμITRONが開発されました。3.0に統合されます。20年以上が立っていますが、今現在でも多くの組込みシステムでμITRONが使用され続けています。T-EngineプロジェクトとT-Kernel2000年を過ぎた頃に、組込みシステムの標準開発プラットフォームを開発しようという新たなプロジェクトであるT-Engineプロジェクトが始まりました。CPUにMMUを備えたマイコンが使用され始めた時代です。組込みシステムのソフトウェア自体も巨大化、複雑化し、開発効率の向上が重要視され始めていました。一方で、多くのマイコン・メーカが独自仕様のマイコンを開発していましたが、標準と言える開発環境はありませんでした。T-Engineプロジェクトでは、メーカを超えた標準の開発プラットフォームを作るべく、開発用のマイコンボードからリアルタイムOS、ソフトウェアの開発環境といった様々な開発、整備を行っていきました。その中で開発されたリアルタイムOSがT-Kernelです。T-Kernelは、普及に伴いいくつかの派生バージョンが開発されていきました。その一つがμT-Kernelです(図1-2-2)。CPUのハイエンドのマイコンを対象としており、従来からμITRONが対応していた8~16ビットのマイコンは対象外でした。T-Kernelが広まるとこれらのマイコンでもT-Kernelを使用したいという声が大きくなり、小規模な組込みシステム向けとしてμT-Kernelが開発されるに至りました。2007年にリリースされたμT-Kernelの最初のバージョンは、8~16bitのマイコンに対応できるようにT-Kernelの基本機能にのみに対応したサブセットでした。2.0で、プロファイルにより必要な機能のみを実装できるようにすることにより、T-Kernelの多くの機能を取り込みました。現在のT-KernelとμT-Kernelの間では、機能的な差異は少なくなっています。T-KernelがMMUによるメモリ管理を前提とするのに対し、μT-KernelはMMUが実装されていないマイコン、またはMMUがあっても使用しないシステムを対象としている点が、μT-Kernelの大きな特徴として残されています。CPUが主流となりつつありますので、μT-KernelはMMUを搭載しないコントローラ系のマイコン向けのリアルタイムOSと言えるかと思います。3.0となっています。Engineers)で、リアルタイムOSの標準化が行われました。2.0の仕様をベースに標準化が進められました。2050-2018として正式に仕様が公開されました。Systems)」という位置づけのリアルタイムOSの国際標準規格です。3.0は2019年にトロンフォーラムより公開されたμT-Kernelの最新バージョンであり、現時点で最も新しいTRONのリアルタイムOSです。2.0から6年ぶりのメジャーバージョンアップということで、全面的に仕様の再検討およびリファレンスのソースコードの再実装が行われました。2.0から3.0への主な変更点を示します。仕様面では、IEEE2050-2018の規格に完全に準拠しました。近年のマイコンでは、様々なI/Oデバイスが内蔵されるようになり、かつてはマイコンボード上の複数のチップで実現していた機能が1チップのマイコンで対応できるようになっています。一方で、ARMマイコンに代表されるように、CPUコアについてはメーカを超えて共通化される傾向があります。T-KernelやμT-Kernelでは、従来から、特定のマイコンやハードウェアに依存しないように、ソースコードのハードウェア依存部をOSの共通部から分離した構成としてきました。3.0では、これを最近のマイコンの状況に合わせて再整理しました。リファレンスのソースコードでは、主要なCPUコアへの対応を進めました。表1にリファレンスのソースコードが対応しているマイコンを示します。この情報は執筆時のバージョン3.00.05のものであり、今後も対応マイコンは拡大していく予定です。2.0までのトロンフォーラムの標準的な開発環境では、プログラムの自動ビルドツールmakeやスクリプト言語Perlの使用を前提としており、リファレンスのソースコードもそれに対応する構成となっていました。3.0では、従来のmake、Perlなどのツールを前提とした開発環境から、特定の開発環境に極力依存しない方針に変更しました。3.0は、C言語のプログラミング環境であれば、ソースコードの構成などを変更することなくビルドが出来るようになっています。Studioなど各種の統合開発環境での実績があります。3.0から、その開発にバージョン管理システムGitが利用されるようになりました。3.0のリファレンスのソースコードは、従来のWebからのダウンロードに代わって、GitHubから公開されています。これまでの組込みシステムでは、製品ソフトウェアの保守の観点から、OSの頻繁なバージョンアップは敬遠される傾向がありました。GitHubを利用することにより、バージョン間の差異の把握や過去の特定バージョンの取得などが容易になりましたので、より細かいバージョンアップが可能となりました。正規のバージョンアップに先駆けて、評価用のプレリリース版を公開するなどの対応も速やかに行われるようになりました。3.0に関連してGitHubに以下のレポジトリを公開しています。3.0のソースコードを公開しています。3.0の正式版およびプレリリース版のソースコードを取得することができます。3.0とプロジェクトファイル等のセットを公開しています。3.0では様々な開発環境を使用することができますが、自分で開発環境の構築を行うには、プロジェクトの作成など、ある程度の知識と作業が必要です。そこで、作成済みのプロジェクトを提供することにより、より簡単に開発環境の構築ができるようにしています。Package)を公開しています。3.0の学習、評価や、ソフトウェアの開発が容易に行えることを目的としています。