IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第24回は、POSIX互換のリアルタイムカーネル「Nanoexec」を用いたウェアラブル端末向けRTOS「UNISON RTOS」を紹介する。
今回はカナダのRoweBots Limitedが提供するリアルタイムOS(RTOS)「UNISON RTOS」をご紹介する。RoweBotsはカナダのオンタリオ州の片田舎に所在するIoT(モノのインターネット)向けシステムなどを手掛ける企業だが、オフィスの地図を見ると、元は教会だった建物を居抜きで借りてるらしいあたりがちょっと面白い(図1)。
創業者はKim Rowe(キム・ロウ)氏で、1997年にRoweBotsを、2008年には子会社のRoweBots Research Inc.を創業。現在もCEOを務めている。ただRoweBots Researchの方は2013年にRoweBotsに吸収されたようである。ついでに言えば当時はカナダのウォータールーに所在地があったようだ。
まぁ開発企業の話はこの程度にして、本題のUNISON RTOSに移ろう。UNISON RTOSは、「Nanoexec」と呼ばれるカーネルをベースにしたRTOSである。企業が提供するRTOSということもあり、Nanoexecやその上位にあたるUNISON RTOSそのものはプロプライエタリな形で開発されている。
まずNanoexecだが、これはPOSIX互換の軽量リアルタイムカーネルだそうで、pthreads/semaphores/mutexes/条件変数/condition variables/message queues/join/barriers/memory managers/timers/clock/rendezvous/events/interrupt management/DirectoryないしName Serverといった各機能を提供する。
見慣れないのはrendezvousで、これはPOSIX上でプログラミング言語の一つである「Ada」のコードを実行する場合に必要(というか、rendezvousという概念はAdaで実装されているもの)だが、マニュアルを見てみると、
mr_init()/mr_send()/mr_receive()/mr_reply()/mr_sigrecv()/mr_sigpost()を使ってrendezvousが実装できる
という話であってサービスとしてrendezvousが実装されているわけではなかった。
NanoexecはSingle Process Modelであり、ただしThreadをサポートするので、これによってマルチタスクを処理できる格好になっている。UNISON RTOSはこの上に被さる形でOSサービスを提供する(図2)。
ちなみに2015年に、Emprog, Inc.とRoweBotsが共同で出したリリースを見ると、UNISON RTOSのことを"“Embedded Linux RTOS”と表現しているが、POSIX互換のAPIを提供し、アプリケーションプログラムから見るとLinux上のProcessの形で実行できるところが「Linuxっぽい」というだけで、実際にはLinuxでも何でもない。もっと言えば、マルチプロセス構成のプログラムはそのままでは実行できない(単一プロセス内でマルチスレッドを利用して動くように書き直す必要がある)。当然ながら、fork()やexec()は「あるけど動かない」ものになっている(abort/execve/exit/Exit/fork/getpid/isatty/kill/sbrk/times/waitの各関数はlibcで提供されるが、これらはDo-nothing Stubsとなっており、何も起きない。単にPOSIXとの互換性を保つために、関数のガワだけが用意されている)。ちなみにThread間のスケジューリングはプライオリティベースとなっている。
Copyright © ITmedia, Inc. All Rights Reserved.