マイクロコントローラオペレーティングシステム(MicroC/OS、μC/OS、またはMicrium OSと表記される)は、 1991年にジャン・J・ラブロースによって設計されたリアルタイムオペレーティングシステム(RTOS)です。これは、マイクロプロセッサ向けの優先度ベースのプリエンプティブリアルタイムカーネルであり、主にプログラミング言語Cで記述されています。組み込みシステムでの使用を目的としています。
MicroC/OSでは、C言語で複数の関数を定義することができ、それぞれの関数は独立したスレッドまたはタスクとして実行できます。各タスクは異なる優先度で実行され、中央処理装置(CPU)を所有しているかのように動作します。優先度の低いタスクは、優先度の高いタスクによっていつでもプリエンプトされる可能性があります。優先度の高いタスクは、オペレーティングシステム(OS)サービス(遅延やイベントなど)を使用して、優先度の低いタスクの実行を許可します。OSサービスは、タスクとメモリの管理、タスク間の通信、およびタイミングのために提供されます。[ 4 ]
MicroC/OSカーネルは、当初Embedded Systems Programming誌の3部構成の記事とLabrosse著の書籍μC/OS The Real-Time Kernelで公開されました。 [ 5 ]彼は当初、自分のために開発したポータブルOSの内部構造を単に説明するつもりでしたが、後に自身の会社Micrium, Inc.でバージョンIIとIIIとして商用製品として開発しました。
2016年にMicrium, Inc.はSilicon Laboratories [ 6 ]に買収され、その後Apacheライセンスの下でオープンソースとしてリリースされました。
Silicon Labs は、自社のシリコンで使用するために Micrium OS というオープンソース製品を維持し続けています[ 7 ]。また、Micrium, Inc. の元従業員グループ (Labrosse を含む) は、μC/OSと、オープンソースリリース直後に作成された独自のフォークである Cesium RTOS の両方についてコンサルティングとサポートを提供しています[ 8 ] 。
μC/OSのソースコードを基に開発され、1998年に商用製品として発表されたμC/OS-IIは、マイクロプロセッサおよびデジタル信号プロセッサ(DSP)向けの、移植性、ROM対応性、拡張性、プリエンプティブ性、リアルタイム性、決定論性、マルチタスク機能を備えたカーネルです。最大64個のタスクを管理でき、用途に応じて必要な機能のみを含むようにサイズを5~24KBの間で調整できます。
μC/OS-IIの大部分は移植性の高いANSI Cで記述されており、対象マイクロプロセッサ固有のコードはアセンブリ言語で記述されている。後者の使用は、他のプロセッサへの移植を容易にするために最小限に抑えられている。
μC/OS-IIは組み込み用途向けに設計されています。適切なツールチェーン(Cコンパイラ、アセンブラ、リンカロケータなど)があれば、 μC/OS-IIを製品の一部として組み込むことができます。
μC/OS-IIは、以下のような多くの組み込みシステムで使用されています。
μC/OS-IIはマルチタスクオペレーティングシステムです。各タスクは無限ループであり、以下の5つの状態のいずれかになります(下の図も参照)。
さらに、最大64個のタスクを管理できます。ただし、これらのタスクのうち8個はμC/OS-II用に予約しておくことが推奨されており、アプリケーションは最大56個のタスクを実行できます。[ 9 ]
カーネルとは、オペレーティングシステムのほとんどのハウスキーピングタスクを実行するプログラムの名前です。ブートローダーはカーネルに制御を渡し、カーネルはさまざまなデバイスを既知の状態に初期化し、コンピュータを一般的な操作の準備状態にします。カーネルはタスクの管理(つまり、CPU の時間の管理)とタスク間の通信を担当します。[ 10 ]カーネルが提供する基本的なサービスはコンテキストスイッチングです。
スケジューラは、次にどのタスクを実行するかを決定するカーネルの一部です。[ 11 ]ほとんどのリアルタイムカーネルは優先度ベースです。優先度ベースのカーネルでは、CPU の制御は常に実行準備が整った最も優先度の高いタスクに与えられます。優先度ベースのカーネルには、非プリエンプティブとプリエンプティブの 2 種類があります。非プリエンプティブカーネルでは、各タスクが CPU の制御を明示的に手放す必要があります。[ 11 ]プリエンプティブカーネルは、システムの応答性がより重要な場合に使用されます。したがって、μC/OS-IIおよびほとんどの商用リアルタイムカーネルはプリエンプティブです。[ 12 ]実行準備が整った最も優先度の高いタスクに常に CPU の制御が与えられます。
実行速度が最も高いタスクには、レートモノトニックスケジューリングを使用して最高の優先度が与えられます。[ 13 ]このスケジューリングアルゴリズムは、静的優先度スケジューリングクラスを備えたリアルタイムオペレーティングシステム(RTOS)で使用されます。[ 14 ]
コンピューティングにおいて、タスクとは実行単位のことです。オペレーティングシステムによっては、タスクはプロセスと同義であり、他のシステムではスレッドと同義です。バッチ処理システムでは、タスクはジョブ内の実行単位です。μC /OS-IIのシステムユーザーは、以下の機能を使用してタスクを制御できます。
断片化を避けるため、μC/OS-II では、アプリケーションが連続したメモリ領域で構成されたパーティションから固定サイズのメモリブロックを取得できるようにしています。すべてのメモリブロックは同じサイズで、パーティションには整数個のブロックが含まれています。これらのメモリブロックの割り当てと解放は定数時間で行われ、決定論的なシステムです。[ 16 ]
μC/OS-IIでは、時間遅延やタイムアウトを追跡するために周期的な時間源を提供する必要があります。ティックは毎秒 10 ~ 1000 回、つまりヘルツで発生する必要があります。ティック レートが速いほど、μC/OS-IIがシステムに課すオーバーヘッドが大きくなります。クロック ティックの周波数は、アプリケーションに必要なティック分解能によって異なります。ティック ソースは、ハードウェア タイマーを専用にするか、交流(AC) 電源ライン (50 または 60 Hz) 信号から割り込みを生成することによって取得できます。この周期的な時間源はクロック ティックと呼ばれます。[ 17 ]
時計のティックが決定された後、タスクは次のようになります。
μC/OS-IIにおけるタスク間またはプロセス間通信は、セマフォ、メッセージメールボックス、メッセージキュー、タスク、および割り込みサービスルーチン(ISR)を介して行われます。タスクまたはISRがイベント制御ブロック(ECB)と呼ばれるカーネルオブジェクトを介してタスクにシグナルを送ると、これらの要素は相互に通信できます。このシグナルはイベントとみなされます。
μC/OS-IIIは、Micro-Controller Operating Systems Version 3の略で、2009年に導入され、μC/OS-II RTOSに機能を追加したものです。
μC/OS-III は、μC/OS-IIのすべての機能を提供します。最大の違いは、サポートされるタスクの数です。μC /OS-II では、255 の優先度レベルごとに 1 つのタスクしか許可されず、最大で 255 個のタスクしか許可されません。μC /OS-IIIでは、プロセッサのメモリへのアクセスによってのみ制限されるものの、任意の数のアプリケーション タスク、優先度レベル、およびレベルごとのタスクが許可されます。[ 18 ] [ 19 ]
μC/OS-IIおよびμC/OS-IIIは現在、Silicon Labsの子会社であるMicrium, Inc.によって保守されており、製品ごと、または製品ラインごとにライセンスを取得できます。
用途はμC/OS-IIと同じです。
μC/OS-IIIはマルチタスクオペレーティングシステムです。各タスクは無限ループであり、5 つの状態 (休止、準備完了、実行中、中断、保留中) のいずれかになります。μC /OS-IIIは無制限のタスク優先度をサポートしていますが、通常、32 ~ 256 のタスク優先度を設定すると、ほとんどの組み込みシステムに適しています。[ 20 ]
2つ以上のタスクの優先度が同じ場合、カーネルは1つのタスクを所定の時間(クォンタムと呼ばれる)実行させ、その後別のタスクを選択します。このプロセスはラウンドロビンスケジューリングまたはタイムスライシングと呼ばれます。カーネルは、次のタスクに制御を移します。
μC/OS-IIIのカーネル機能は、 μC/OS-IIのカーネル機能と同じです。
タスク管理機能はμC/OS-IIと同様です。ただし、μC/OS-IIIはマルチタスクをサポートしており、アプリケーションは任意の数のタスクを持つことができます。タスクの最大数は、プロセッサが使用できるコンピュータメモリ(コード領域とデータ領域の両方)の量によってのみ制限されます。
タスクは、スケジュールされた完了まで実行され、完了時に自身を削除する方法で実装することも、より一般的な方法として、イベントの発生を待機してそれらのイベントを処理する無限ループとして実装することもできます。
メモリ管理はμC/OS-IIと同様の方法で行われます。
μC/OS-IIIは、μC/OS-IIと同様の時間管理機能を提供します。また、アプリケーションがタスクの実行をユーザー定義の時間遅延で一時停止できるサービスも提供します。遅延時間は、クロックティック数、または時、分、秒、ミリ秒で指定します。
タスクまたは割り込みサービスルーチン(ISR)は、 2つのタスクが同時に同じ特定のデータやハードウェアリソースにアクセスすると危険な場合があるため、他のタスクに情報を伝達する必要があることがあります。これは、タスク間通信と呼ばれる情報転送によって解決できます。タスク間で情報を伝達する方法は、グローバルデータを使用する方法と、メッセージを送信する方法の2つがあります。
グローバル変数を使用する場合、各タスクまたはISRは、変数への排他的アクセスを確保する必要があります。ISRが関与する場合、共通変数への排他的アクセスを確保する唯一の方法は、割り込みを無効にすることです。2つのタスクがデータを共有する場合、割り込みを無効にするか、スケジューラをロックするか、セマフォを使用するか、または推奨される方法として相互排他セマフォを使用することで、それぞれが変数への排他的アクセスを取得できます。メッセージは、メッセージキューと呼ばれる中間オブジェクトに送信することも、タスクに直接送信することもできます。μC /OS-IIIでは、各タスクに独自の組み込みメッセージキューがあるためです。複数のタスクがメッセージを待機する場合は、外部メッセージキューを使用します。受信したデータを処理するタスクが1つだけの場合は、メッセージをタスクに直接送信します。タスクがメッセージの到着を待機している間は、CPU時間を消費しません。
ポートには、CPU、OS、ボード固有 (BSP) コードの 3 つの側面が含まれます。μC /OS-IIとμC/OS-IIIには、市場で最も一般的なプロセッサとボード用のポートがあり、航空、医療システム、原子力施設などの安全性が重要な組み込みシステムでの使用に適しています。μC/OS-IIIOS_CPU.Hポートでは、カーネル固有の 3 つのファイル ( 、、OS_CPU_A.ASMおよび)の内容を書き込むか変更しますOS_CPU_C.C。最後に、使用する評価ボードまたはターゲットボード用のボードサポートパッケージ (BSP) を作成または変更します。μC /OS-IIIポートは、 μC/OS-IIポートと似ています。ここにリストされているよりもはるかに多くのポートがあり、ポートは継続的に開発されています。μC /OS-IIとμC/OS-IIIの両方は、 wolfSSLなどの一般的なSSL/TLSライブラリによってサポートされており、すべての接続でセキュリティが確保されます。
Silicon Labsによる買収後、Micriumは2020年2月にオープンソースライセンスモデルに移行しました。これには、uC/OS III、それ以前のすべてのバージョン、およびUSB、ファイルシステム、GUI、TCP/IPなどのすべてのコンポーネントが含まれます。
サポートは、一般的なサポートフォーラムと、複数の包括的な書籍を通じて提供されます。これらの書籍の中には、特定のマイクロコントローラアーキテクチャや開発プラットフォームに特化したものもあり、無料のPDF版、または低価格のハードカバー版として購入できます。有料サポートは、Weston Embedded Solutionsから提供されています。