L4

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

L4は第二世代マイクロカーネルファミリーで、一般的にはUnix系オペレーティングシステムの実装に使われるが他の様々なシステムにも使われる。前身のL3マイクロカーネルと同じように、ドイツのコンピュータ科学者ヨッヘン・リートケ英語版によってそれ以前のマイクロカーネルベースのオペレーティングシステムの性能の低さを解決する答えとしてL4は作られた。リートケは性能を最優先に設計したシステムであれば実用的なマイクロカーネルを作ることができるのではないかと考えた。彼のインテルi386アセンブリ言語でハードコードした最初の実装はコンピュータ産業界の関心を引いた。これを始めとしてL4はプラットフォーム非依存、セキュリティの改善、分離、堅牢性に向けた開発が行われた。

オリジナルのL4カーネルインターフェース(ABI)やその後継がいくつも再実装されている。L4KA::Pistachio(カールスルーエ工科大学), L4/MIPS(ニューサウスウェールズ大学), Fasco(ドレスデン工科大)などがある。 このためL4はリートケの最初の実装だけを指すのではなくファミリーの名前になっている。 現在ではオリジナルのL4とその改良版のカーネルインターフェースを持つマイクロカーネルファミリーが該当する。L4は広く開発が行われている。一つのバリエーションであるOKL4はOpen Kernel Labs英語版(現 ジェネラル・ダイナミクス・ミッション・システムズ)で開発され数十億台のモバイル機器に使われた。[1][2]

設計理念[編集]

リートケによるマイクロカーネルの一般的な設計指針は以下のようなものである

それをカーネルの外に移した場合、つまり競合の実装を許した場合にシステム必須の機能を妨げてしまう場合だけマイクロカーネルの中に入れても構わない

この考え方に基づいてL4マイクロカーネルはわずかな基本的機構を提供する

  • アドレス空間(抽象化されたページテーブルとメモリ保護の提供)
  • スレッドとスケジューリング(抽象化された実行と一時的な保護の提供)
  • プロセス間通信(分離された領域間の制御された通信)

歴史[編集]

Machのような第一世代マイクロカーネルのパフォーマンスの低さから、1990年代半ばに多くの開発者がマイクロカーネルについての考え方全体の再検討を行った。Machで使われる非同期のカーネル内バッファリングプロセス間通信は低い性能の原因の一つであることが分かった。このためMachベースのオペレーティングシステム開発者はファイルシステムやデバイスドライバのような時間的な制約が大きい要素をカーネルの中に戻した[要出典]。これはいくらかのパフォーマンス改善をもたらすが、真のマイクロカーネルの極小原則(とその利点の大部分)に大きく反する。

Machのボトルネックの詳細な分析によれば、ワーキングセットが大きすぎる事を示している。IPCコードはメモリ空間的な局所性が特に低い。それが非常に多くのカーネル内のキャッシュミスの原因になっている。この分析は、効率のよいマイクロカーネルでは性能最優先のコードの大部分は少なくとも(第一レベル)キャッシュに収まるものでなくてはならず、できればキャッシュのわずかな部分を占める程度であるべき、という原則を示す。

L3[編集]

ヨッヘン・リートケは、パフォーマンスに充分注意を払い、(プラットフォーム非依存性に反する形で)マシン固有の設計を行い、うまく作られた小さなIPCレイヤーを使う設計ならば実際のパフォーマンスが大幅に向上することを証明した。 Machの複雑なIPCシステムの代わりに、彼のL3マイクロカーネルはオーバーヘッドを最小限にして単純なメッセージを渡すだけにした。 必要なセキュリティポリシーの定義と実装は、ユーザー空間のサーバーの任務とみなされた。 カーネルの役割は、ユーザーレベルのサーバーがポリシーを実施するのに必要なメカニズムを提供することだけでした。 1988年に開発されたL3は、例えばTÜV SÜD(ドイツの検査技術協会)[要出典]などで長く使用され安全で堅牢なオペレーティングシステムであることを示した。

L4 family tree

L4[編集]

L3を使った経験から、リートケはいくつかの他のMachの発想も間違っていると結論づけた。マイクロカーネルの概念をさらに単純化して、高性能化を主眼に設計した最初のL4カーネルを開発した。少しでも性能を出せるように、カーネル全体をアセンブリ言語で記述した結果、IPCはMachの20倍高速になった。[3] このような劇的な性能の向上は、オペレーティングシステムでは稀なことでリートケの業績は新たなL4の実装のきっかけとなり、ドレスデン工科大学やニューサウスウェールズ大学などの大学やリートケが1996年に働き始めるIBMなどのいくつもの研究施設でのL4ベースのシステムの研究が始められた。リートケはIBMのトーマス・J・ワトソン研究所で同僚と共にL4とマイクロカーネルシステム一般の研究と特にSawmill OS[4] の研究を続けた。

L4Ka::Hazelnut[編集]

1999年、リートケはカールスルーエ大学のシステムアーキテクチャグループを引き継ぐ形でマイクロカーネルシステムの研究を続けた。高級言語による高性能マイクロカーネルの構築が可能であることを証明するためにグループはIA-32およびARMベースのマシンで動作するカーネルのC++版であるL4Ka::Hazelnutを開発した。この試みは成功し、性能は依然許容範囲とみなされた。そのためアセンブリ言語だけの版のカーネルは実質的に開発中止になった。

L4/Fiasco[編集]

L4Kaの開発と並行して1998年にTUドレスデン(ドレスデン工科大)のオペレーティングシステムグループがL4/Fiascoと呼ばれるL4カーネルインターフェースの独自のC++実装の開発を始めた。L4Ka::Hazelnutはカーネル内では全く並行動作を認めず、その後継のL4Ka::Pistachioでは特定の割り込みポイントでのみ割り込みが許可されるのに対してL4/Fiascoは割り込みのレイテンシを小さくするために(極めて小さいアトミック処理の部分を除いて)完全プリエンプティブであった。これはTUドレスデンで開発されていたハードリアルタイム処理が可能なオペレーティングシステムDROPSの基礎として使うための必要性からであった。しかし、完全プリエンプティブな設計の複雑さのためFiascoの後継版のカーネルでは限られた割込みポイントを除いてカーネル内では割込みを禁止する従来のL4の方針に戻された。

プラットフォームの非依存化[編集]

L4Ka::Pistachio[編集]

L4Ka::PistachioとFiascoの後期バージョン(1.1以降)がリリースされるまでは全てのL4マイクロカーネルは本質的に根本的なところでCPUアーキテクチャに密接に結びつけられていた。L4開発の次の大きな変革は、高い移植性を得ながら高性能を維持するプラットフォームに依存しないAPIの開発であった。カーネルの基本的な考え方は同じであるが新しいAPIは、マルチプロセッサへのより良い対応、スレッドとアドレス空間の間の制約の緩和、ユーザーレベルスレッドコントロールブロック(UTCB)と仮想レジスタの導入など、それ以前のL4のバージョンからは多数の大きな違いがある。2001年の初めに新しいL4 API(バージョンX.2 、バージョン4と呼ばれることもある)をリリースした後、カールスルーエ大学のシステムアーキテクチャグループは新しいカーネルL4Ka::Pistachioの実装を行った。これは性能と移植性の両方を重視して完全にゼロから書き直された。二条項BSDライセンスでリリースされている。

L4/Fiascoの初期バージョン以降[編集]

L4/Fiascoは何年にも渡って大きく改良が続けられた。[5][6]

  • Ver.1.1 x86, ARMのいくつかのアーキテクチャをサポートした
  • Ver.1.2 APIの拡張(1.0はv2とX.0 API)
    • 例外IPC CPU例外をユーザーアプリケーションに送信可能
    • バージョンX.2形式のUTCB
    • ローカルIPC
    • Alienスレッド英語版 システムコールの細かい制御が可能

またFiascoはLinuxのシステムコールへのインターフェースが用意され、Linuxのユーザランドで動かすことができる(Fiasco-UX)。2018年現在、マイクロカーネルFiasco.OCと基本的なユーザー環境のL4Reとしてx86、x86_64、ARM、MIPSのアーキテクチャをサポートして開発が続けられている。L4Re上ではLinuxカーネルを動かすことができる(L4Linux英語版[7]

ニューサウスウェールズ大学とNICTA[編集]

開発はニューサウスウェールズ大学(UNSW)でも続けられいくつかの64ビットプラットフォームでL4実装が行われた。この結果がL4/MIPSL4/Alphaである。リートケのオリジナルは遡ってL4/x86と呼ばれる。UNSWのカーネル(アセンブリ言語とCで書かれている)はリートケのオリジナル同様ゼロから書き起こされたもので移植性が考慮されていなかった。高い移植性を持つL4Ka::PistachioのリリースによりUNSWのグループは自分たちのカーネルを放棄してL4Ka::Pistachioを高度に最適化する事を選んだ。その成果にはその時点での最高速のメッセージパッシングの報告(Itaniumアーキテクチャで36サイクル)もあった。また、ユーザーレベルデバイスドライバがカーネル内のドライバと同等に動作することを実証した。さらにx86、ARM、MIPSの各プロセッサで動くL4上の移植性の高いLinuxであるWombat英語版を開発した。XScaleプロセッサにおいてWombatは本来のLinuxに比較してコンテクストスイッチのコストが1/30となることを実証した。

UNSWグループは後に拠点をNICTA英語版(オーストラリアの公的情報通信分野研究機関)に移しL4Ka::Pistachioから分岐した新しいL4、NICTA::L4-embeddedを開発した。これは名前が示すように商用の組み込みシステム向けで、メモリの使用量を少なくすることを優先して実装され、複雑さを抑えることを目指した。プリエンプションポイントなしでも高いリアルタイム応答性を維持するため、ほとんど全てのシステムコールは十分短時間で終了するようにAPIは変更された。

商業的展開[編集]

2005年11月、NICTAはクアルコム社の移動局モデムチップセット(Mobile Station Modem:MSM)にNICTA版L4を供給することを発表した。[8]これにより2006年後半以降の携帯電話でL4が使われる事になった。2006年8月、UNSWのジャーノット・ハイザー教授と組み込み用リアルタイムOSリーダーのスピンアウトによりOpen Kernel Labs英語版(OK Labs)が設立され、商業目的のL4のサポートを行い、OKL4というブランド名の商業利用向けのL4の開発もNICTAと密接に協力して行った。2008年4月にリリースされたOKL4バージョン2.1は一般利用可能英語版なバージョンのL4でCapability-based securityを特徴として持っていた。2008年10月にリリースされたOKL4 3.0は最後のオープンソース版OKL4である。これ以降のバージョンのOKL4はクローズドソースでネイティブハイパーバイザとして動くように書き換えられOKL4 Microvisorと呼ばれるようになった。OK LabsはまたWombatの後継の準仮想化LinuxをOK:Linuxとして供給し、準仮想化したSymbian OSAndroidの供給も行った。OK LabはNICTAからseL4の権利も取得した。 OKL4の出荷は2012年初めには15億台を超えた。[2] ほとんどはクアルコムのワイヤレスモデムチップである。他のものには車載インフォティメントシステムが含まれる。 A7以降のAシリーズAppleモバイルアプリケーションプロセッサ英語版に含まれるSecure EnclaveコプロセッサではNICTAが2006年に開発したL4-embeddedカーネルベースのL4オペレーティングシステムが動作している。これは現在、全てのiOSデバイスでL4が出荷されていることを意味し、2015年の総出荷量はおよそ3億1000万台とされる。

脚注[編集]

  1. ^ https://gdmissionsystems.com/cyber/products/trusted-computing-cross-domain/microvisor-products/
  2. ^ a b “Open Kernel Labs Software Surpasses Milestone of 1.5 Billion Mobile Device Shipments” (プレスリリース), Open Kernel Labs, (2012年1月19日), http://www.ok-labs.com/releases/release/ok-labs-software-surpasses-milestone-of-1.5-billion-mobile-device-shipments 
  3. ^ Liedtke, Jochen (December 1993). “Improving IPC by kernel design”. 14th ACM Symposium on Operating System Principles. Asheville, NC, USA. pp. 175–88. http://portal.acm.org/citation.cfm?id=168619.168633&coll=portal&dl=ACM&type=series&idx=168619&part=Proceedings&WantType=Proceedings&title=ACM%20Symposium%20on%20Operating%20Systems%20Principles&CFID=18793560&CFTOKEN=54028606 
  4. ^ Gefflaut, Alain; Jaeger, Trent; Park, Yoonho; Liedtke, Jochen; Elphinstone, Kevin; Uhlig, Volkmar; Tidswell, Jonathon; Deller, Luke et al. (2000). “The Sawmill multiserver approach”. ACM SIGOPS European Workshop. Kolding, Denmark. pp. 109–114. http://dl.acm.org/citation.cfm?id=566726.566751 
  5. ^ https://os.inf.tu-dresden.de/fiasco/prev/
  6. ^ https://os.inf.tu-dresden.de/fiasco/prev/download/README
  7. ^ http://l4linux.org/overview.shtml
  8. ^ “NICTA L4 Microkernel to be Utilised in Select QUALCOMM Chipset Solutions” (プレスリリース), NICTA, (2005年11月24日), オリジナル2006年8月25日時点によるアーカイブ。, https://web.archive.org/web/20060825225104/http://www.nicta.com.au/director/mediacentre/media_releases_2005.cfm?viewArticle=true&item_id=2563&startrow=1 

関連項目[編集]

ウィキポータル 関連ポータルのリンク

外部リンク[編集]