さてそれではもう少しPikeOSの中身を。SYSGOのRobert Kaiser博士(当時はManaging Director兼取締役であった。2009年からドイツのビンゲン応用科学工科大学教授、その後2011〜2023年にドイツのラインマイン大学教授を務める)とStephan Wagner氏による論文によれば、SYSGOは当初P4と呼ばれるL4 version 2.0のAPIに互換な独自のマイクロカーネルを、開発していたそうだ。L4そのものではないのは、組み込み向けに移植性を高めるために完全にC言語で記述され、また完全なPre-emptive性を備えた構成になったからだ。ただしこれを利用して作成したP4であるが、実際に組み込み向けに投入して利用すると、L4 KernelのAPIに色々問題があることが分かったそうで、最終的にPikeOSではL4 Kernelとは全く異なるAPIを提供することになった。
カーネルそのものもスクラッチから書き直され、APIも異なるとなると、もうL4 Kernelをベースとしたという表現そのものが怪しいのだが、ただSYSGOはPikeOSの開発にあたり、L4 Kernelの元々の開発者であった(連載第19回の冒頭でも出てくる)Jochen Liedtke博士の「On micro-kernel construction」という論文で提示された原則に基づいて行われた、としているあたりは間接的にL4 Kernelの影響を受けていると言ってもよいかもしれない。
そんなPikeOSの概略がこちら(図2)。これだとPikeOSがやたらに大きいように思えるが、ここはマイクロカーネルベースの本当に薄い層で、プリミティブなカーネルとタイプ1(ベアメタル)ハイパーバイザーのみで構成される。
そのPikeOSのカーネルとハイパーバイザーの上に、複数のGuest OSやUser Mode Driverが動作する、という形になっている。このGuest OSはそれぞれ異なるパーティションに割り振られる形になっているが、それらのスケジューリングもTime-triggeredとEvent-triggeredの両方がサポートされており、またマルチプロセッサ環境であれば任意のパーティションに必要な数のCPUコアを固定的に割り当てることも可能である。
それぞれのパーティション自体は完全にアイソレーションされており、完全に独立して動作できるようになっている。ちなみにI/Oに関してはこの手の方法だと直接ハードウェアを触るのは厳禁なので、一度PikeOSでリクエストを受けて、それをPikeOSが改めて実行する形になる。ただし、利用するプロセッサがIOMMUに対応している場合は、IOMMU Managerで不正なDMA転送などを防止することで、安全性を担保しながらゲストOSが直接DMAを発行できるため、性能の向上が図れるようになっている。
ちなみにゲストOSとしては、2005年にPikeOSが初めてリリースされた時にはLinuxの他にPOSIXとOSEKのAPIに対応していた。OSEKは連載第9回のERIKA Enterpriseの所で少し触れたが、欧州の車載向けOSである。
POSIXの方は、これに対応したRTOSが結構色々あるから、ポーティングは難しくないとしていた。現在は? というと、ElinOSを含むLinux、(ホストがx86に限られるが)Windows、POSIX API、ARINC 653(航空機のアビオニクス向けOSの仕様)準拠OS、PikeOS Nativeがサポートされるほか、その他のOS/RTOSの対応も可能とされる。
Copyright © ITmedia, Inc. All Rights Reserved.