nanokernelのメモ
nanokernelという用語がある。...microkernelほど意味のある用語として確立しているものではなく、各社/各大学のOSチームがカーネルコンポーネントにそういう命名することがあるくらいの意味。
記事にしたいけど時間が無い。。
前提として、普通のOSがどういうカーネルなのかは知らないといけない。Linux/BSDは死ぬほどドキュメントや書籍があり、Windows Internal(インサイドWindows)のスレッド関連の章は無料公開されている。
旧MacOSのnanokernel
旧MacOSでは、PowerMacの導入に伴いnanokernelのアイデアが導入された。その後、ネイティブのマルチスレッド等を備えた新しいnanokernelがMacOS 8.6で導入され割と現代的な内容になった。いくつかのマルチスレッド/マルチプロセサ関連のドキュメントがMacOS8配下にあるのはこのため。
- https://github.com/elliotnunn/NanoKernel -- コメントされた逆アセンブル。nanokernel自体は非常に小さいことがわかる。
- https://developer.apple.com/library/archive/technotes/tn/tn2028.html#//apple_ref/doc/uid/DTS10003065 - TN2028。旧MacOSには大量のスレッド風機構が存在するため、それらをまとめている。
- https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/Multitasking_MultiproServ/02concepts/concepts.html#//apple_ref/doc/uid/TP30000268-SW1 -- About Multitasking on the Mac OS。良いドキュメント。
MacOS8.6とMacOS9のnanokernelは MP Task の形でスケジューリングプリミティブを持っている。旧MacOSにはThread Managerと呼ばれる別のスレッド機構もあるが、これは現代的にはGreen threadに近いものでフォアグラウンドになっているアプリケーションのスレッドのみがスケジュールされる。
MP Taskはプリエンプティブなマルチスレッドを実現しており、そのかわりMP Taskは殆どのsyscallを実行できない。(例えば、68k emulatorを呼ぶことができない) 重要なポイントとしては、ファイルシステム等は一応MP Taskから操作できる点で、この特徴によりMP Taskはある程度実用的になっている。
ちなみに旧MacOSの高度な機能の多くに共通する特徴として、MultiProcessingサービスも元々はDAYSTAR DIGITALがnPOWER系列のシステムのためにデザインした3rd party製となっている。
SymbianOS
- https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.168.3691&rep=rep1&type=pdf -- SymbianOS internals。SymbianOSはその最終盤でオープンソースになり、この内容も公式サイトのWikiで公開されていた。
SymbianOSのnanokernelは、いわゆるカーネルスレッドのみを実現する。この上にユーザーモードのスレッディングや各種RTOSのpersonalityが実装されている。mutexやsemaphoreのような基本的な同期プリミティブを備えたリアルタイムカーネルとなっており、 GSMのソフトウェアスタックを実現できる という明確な目標の下にデザインされている。
現代的な携帯電話を含め無線ネットワーク規格を実装したシステムは、無線プロトコルを実行するBaseband Processorと通常のOSやTCP/IPを実装するApplication Processorの2つ以上のプロセッサで構成されることが多い。しかし、SymbianOSはカーネルレベルでGSM携帯電話を想定してデザインされたリアルタイムOSであり、単一のプロセッサで両方の機能を実現することができた。
無線プロトコルの実装には最低応答時間を保証することが必要になるため、 nanokernelだけがプロセッサを割り込み禁止状態にできる というデザイン制約を引いて必要な機能を制約している。