さてそんなFunkOSだが、このR3を最後にしばらく開発を中断というか作業が終了する。恐らくはSlevinsky氏の作業が一段落して、これ以上FunkOSに手を入れる必要がなくなってしまったのだろう。またFunkOSはスケールの拡大が難しく(当初は8〜32ビット対応と言いつつ、実装は8/16ビットのみだった)、また多様多種のデバイスへの対応が難しかった。
ただSlevinsky氏は別にこれでRTOSへの情熱を失ったわけではなく、その後もRTOSに携わり続けた。最終的に2013年、FunkOSのコンセプトは大きく変えないまま、C++でスクラッチから起こし直した「Mark3」を開発したことをArduino Forumで公開している。
最終的にMark3 R1は2015年3月にリリースされ、以降、R3が同年6月、R4が2016年3月、R5が同年12月、R6が2017年7月、R7が2019年2月、R8が同年3月、R9が同年4月にリリースされ、最新版のR10は2019年12月である(R2は実験用のものでリリースされていない)。
ターゲットはAVRとMSP430の他、Cortex-M3/M4が加わった。AVRについては、ATMega328Pに加えATMega2560やArduino Pro Megaも対象となり、他にAtmel SAMD20やQEMUベースながらRaspberry Pi 3やTIのStellaris LM3Sの評価ボード(LM3S6965:https://www.ti.com/lit/ml/spmt127b/spmt127b.pdf)などの動作もサポートされている。R7では、ArmのAArch64対応ということでCortex-A53もターゲットに追加された。
機能面での強化も著しく、例えばThread間同期にはEvent FlagやMailbox、Dynamic Message Queuesなども追加されたし、新たにTickless software timerが実装されている。またカーネルも完全にThreadベースで統一され、スケジューラもより洗練されたものになった。
もちろんそうなるとフットプリントが多少増えることは避けがたいが、ATMega1284pをターゲットにAVR-GCC 5.4.0を利用した場合の数字で言えば、カーネルコンポーネントのメモリフットプリントは以下のようになっている(表2)。
機能 | メモリフットプリント |
---|---|
Atomic Operations | 56バイト |
Allocate-once Heap | 120バイト |
Base Class | 126バイト |
Condition Variables | 286バイト |
Coroutine task-list management | 122バイト |
Main coroutine task object | 336バイト |
Coroutine task scheduler | 318バイト |
Event Flag | 872バイト |
Mark3 Kernel Base Class | 142バイト |
Semaphore | 568バイト |
Fundamental Kernel Linked-List Classes | 560バイト |
RAII Locking Support based on Mark3 Mutex class | 62バイト |
Mailbox IPC Support | 1064バイト |
Message-based IPC | 288バイト |
Mutex | 658バイト |
Notification Blocking Object | 626バイト |
Performance-profiling timers | 366バイト |
Round-Robin Scheduling Support | 265バイト |
Reader-writer Locks | 206バイト |
Thread Scheduling | 570バイト |
Thread Implementation | 1501バイト |
Fundamental Kernel Thread-list Data Structures | 440バイト |
Thread List Data Structures | 20バイト |
Software Timer Kernel Object | 241バイト |
Software Timer Management | 412バイト |
Atmel AVR Kernel Interrupt Implemenation | 28バイト |
Atmel AVR Kernel Timer Implementation | 810バイト |
Atmel AVR Basic Threading Support | 506バイト |
合計 | 1万1569バイト |
表2 ATMega1284pをターゲットにした場合のMark3のメモリフットプリント |
全部合計しても11KBを少し上回るくらいとかなり控えめである。これはATMega32のようにフラッシュ容量が32KBの8ビットMCUでも十分動作する範囲である。ライセンスもSleepycatsからBSD3項ライセンスに切り替わった。
ちなみに現状Mark3がどうなっているかというと、既に公式サイトの「http://mark3os.com」はドメイン登録が失効しているようで、Internet Archive経由でないとアクセスできなくなっている。
ただし、R1〜R6はSourceForgeで、R6〜R10はGitHubでそれぞれ公開されている。何なら、もともとのFunkOSもSourceForgeからまだ入手可能である。
Mark3の方は、カーネルの実装方法がドキュメントで細かく説明されており、対比するソースの行番号まで示されているという親切設計だ。これを使って何か製品を作る、というのにはいろいろ足りないものがありそうだが、RTOSを勉強するための教材や、それこそRISC-Vに移植してみるなんて遊び方の題材としては手ごろなRTOSといえるかもしれない。
Copyright © ITmedia, Inc. All Rights Reserved.