ハイブリッドカーネル
この項目「ハイブリッドカーネル」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:英語版 "Hybrid kernel" 2024年5月17日 (金) 19:54 (UTC)) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2024年8月) |
ハイブリッドカーネル(英語: hybrid kernel)とは、オペレーティングシステムで使用されているモノリシックカーネルとマイクロカーネルのアーキテクチャの特徴と利点を組み合わせようとするオペレーティングシステムのカーネルアーキテクチャである[1][2][信頼性要検証]。
概要
[編集]伝統的にカーネルはモノリシックカーネルとマイクロカーネルにカテゴリ分けされてきた[注釈 1]。「ハイブリッド」というカテゴリは、ハイブリッドカーネルと通常のモノリシックカーネルの類似性から議論を呼んでいる。この用語はリーナス・トーバルズによって単なるマーケティング用語として却下された[3]。
ハイブリッドカーネルの背後にある考えは、マイクロカーネルに似たカーネル構造を持ちながら、その構造をモノリシックカーネルの方法で実装することである。マイクロカーネルとは対照的に、ハイブリッドカーネルの(殆ど)全てのオペレーティングシステムのサービスはカーネル空間に置かれている。マイクロカーネルのようにユーザー空間にサービスを置くことによる信頼性の利点はない。しかし、通常のモノリシックカーネルと同様に、マイクロカーネルで通常発生するカーネルとユーザーモードの間のメッセージの送受信やコンテキストスイッチによる性能上のオーバーヘッドはない。
例
[編集]NTカーネル
[編集]ハイブリッドカーネルの代表的な例としては、Windows 11とWindows Server 2022を含み、Windows Phone 8、Windows Phone 8.1、Xbox One、Xbox Series X/Sでも採用されている、Windows NT系の全てのオペレーティングシステムで採用されているMicrosoft Windows NTカーネルがある。
Windows NTはハイブリッドカーネルをベースとした最初のWindowsオペレーティングシステムであった[要出典].。このハイブリッドカーネルはカーネギーメロン大学のリチャード・ラシッドが開発したMachマイクロカーネルの影響を受けた修正されたマイクロカーネルとして設計されたが、純粋なマイクロカーネルの全ての基準は満たしていなかった。Windows NT系はエミュレーションサブシステムがモノリシックカーネルのようにカーネルモードで実行されるのではなくユーザーモードのサーバプロセスで実行され、更に多くの設計目標がMachの設計目標多数あることから[注釈 2]、モノリシックカーネルではなくハイブリッドカーネル(またはマイクロカーネル[4])に分類される。逆に、Windows NT系がマイクロカーネルシステムでない理由は、モノリシックカーネルの設計の場合と同様に、システムコンポーネントの殆どがカーネルと同じアドレス空間で実行されるためである[注釈 3]。
Windowsの主なオペレーティングシステムのパーソナリティは常に存在するWindows APIである。このパーソナリティを実装するエミュレーションサブシステムはクライアント/サーバー ランタイム サブシステム(csrss.exe
)と呼ばれている。Windows NT 4.0より以前まではこのサブシステムにはウィンドウマネージャ、グラフィックデバイスインターフェース、グラフィックデバイスドライバも含まれていた。ただし、性能上の理由からWindows NT 4.0以降ではこれらのモジュールはカーネルモード実行される[注釈 4][4]。
Windows NT系で実行されるアプリケーションはOSのパーソナリティの1つ[注釈 5]に記述されており、ドキュメントが公開されていないOSのネイティブなAPIには記述されていない[注釈 6]。OSのパーソナリティはエミュレーションサブシステムサーバプロセスと共に、必要に応じてアプリケーションプロセスのアドレス空間にマッピングされる一連のユーザーモードDLLを介して実装される。アプリケーションは同じアドレス空間にマッピングされたOSのパーソナリティのDLLを呼び出すことによってシステムサービスに接続し、同じくアプリケーションプロセスのアドレス空間にマッピングされたNTランタイムライブラリ(ntdll.dll
)を呼び出す。NTランタイムライブラリはカーネルモードにトラッピングしてカーネルモードのExecutiveルーチンを呼び出すか、適切なユーザーモードサブシステムサーバプロセスにローカルプロシージャコールを行うことによってこれらの要求を処理し、NT APIを使用してアプリケーションプロセス、カーネルモードサブシステム、及び相互に通信する[5]。
XNUカーネル
[編集]XNUとは、AppleがmacOS、iOS、watchOS、tvOSで使用するために取得し開発し、Darwinの一部としてFLOSSとして公開したカーネルである。XNUはX is Not Unixの頭字語である[6]。
XNUは元々はNeXTによってNeXTSTEP用に開発され、Machカーネルのバージョン2.5に4.3BSDのコンポーネントとDriver Kitと呼ばれるドライバ開発用オブジェクト指向APIを組み合わせたハイブリッドカーネルであった。
AppleがNeXTを買収した後、MachコンポーネントはマイクロカーネルのOSFMK 7.3にアップグレードされた[7][8]。AppleはFreeBSDの一部が組み込まれたハイブリッドカーネルとして動作する大幅に変更されたOSFMK 7.3を使用している[注釈 7][7]。BSDコンポーネントはFreeBSDプロジェクトに由来するコードによってアップグレードされ、Driver KitはI/O Kitと呼ばれるドライバ開発用のC++ APIに置き換えられた[要出典]。
説明
[編集]他の現代的なカーネルと同様に、XNUはハイブリッドカーネルであり、モノリシックカーネルとマイクロカーネルの両方の機能を備えており、マイクロカーネルのメッセージパッシング機能などの両方の技術を最大限に活用して、モジュール性を高めて[要出典]OSのより大きな部分でメモリ保護の利点を享受できるようにしながら[要出典]、ある程度の重要なタスクに対してに対してモノリシックカーネルの速度を維持することを目指している。
その他
[編集]脚注
[編集]注釈
[編集]- ^ ナノカーネルとエクソカーネルはマイクロカーネルのより極端なバージョンと見られている。
- ^ 特にOSのパーソナリティを一般的なカーネル設計から分離すること。
- ^ 従来のモノリシックカーネルの設計では、マイクロカーネルそのものが存在しないが、モノリシックカーネルでもWindows NT系のマイクロカーネルとカーネルモードサブシステムと同様の機能を実装する。
- ^ これらのモジュールはモノリシックカーネルベースのシステム、特に内部グラフィックサポートのない状態で設計されたシステムでもユーザーモードで実装されることが多い。
- ^ 通常はWindows API。
- ^ デバイスドライバの開発で使用されるルーチンを除く。
- ^ OSFMK 7.3にはユタ大学のMach 4から適用できるコードと、オリジナルのカーネギーメロン大学のMach 3.0カーネルからフォークした多くのMach 3.0バリアントから適用できるコードが含まれている。
- ^ ハイブリッドカーネルにMachを使用しない最初のBSD系OS。
出典
[編集]- ^ “Hybrid Kernel - OSDev Wiki”. wiki.osdev.org. 2021年1月11日閲覧。
- ^ “What is Hybrid Kernel? - Definition from Techopedia” (英語). Techopedia.com (22 August 2011). 2021年1月11日閲覧。
- ^ “Linus Torvalds”. 2024年8月2日閲覧。 “As to the whole "hybrid kernel" thing - it's just marketing. It's "Oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let's use a cool name and try to imply that it has all the PR advantages that that other system has.”
- ^ a b “MS Windows NT Kernel-mode User and GDI White Paper”. Microsoft Corporation (2007年). 2022年8月24日閲覧。
- ^ Probert, Dave (2005年). “Overview of Windows Architecture”. Using Projects Based on Internal NT APIs to Teach OS Principles. Microsoft Research/Asia - Beijing. 2007年11月28日時点のオリジナルよりアーカイブ。2007年3月1日閲覧。
- ^ “Porting UNIX/Linux Applications to OS X: Glossary”. Apple Computer (2005年). 2017年6月16日閲覧。
- ^ a b Jim Magee. WWDC 2000 Session 106 - Mac OS X: Kernel. 14 minutes in.
- ^ Douglas M. Wells (1994). A Trusted, Scalable, Real-Time Operating System Environment (PDF). 1994 IEEE Dual-Use Technologies and Applications Conference. S2CID 5205380. 2017年8月22日時点のオリジナル (PDF)よりアーカイブ。
- ^ “An Overview of the NetWare Operating System”. 2024年8月2日閲覧。
- ^ “OS/2 Kernel”. 2020年9月4日閲覧。
参考文献
[編集]- Mark Russinovich (November 23, 2004). “Inside the Native API”. Sysinternals. March 15, 2006時点のオリジナルよりアーカイブ。July 24, 2006閲覧。