カーネル実装方式とその議論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/06 04:22 UTC 版)
「モノリシックカーネル」の記事における「カーネル実装方式とその議論」の解説
モノリシックカーネル方式は、より近代的な設計手法とされるマイクロカーネル方式のOSに比べ、OSの機能のほとんどすべてが単一のメモリ空間で行なわれるゆえ、同一の処理を行う際に費やされるコンテキストスイッチやプロセス間通信などによるオーバーヘッドは相対的に少ないものとなり、実効パフォーマンスにおいて有利であるといった見解がある。実際にプロセッサの動作クロックが数MHz - 数十MHz程度に留まっていた時代には、乱発されるコンテキストスイッチなどの実行コストの問題は深刻なものであった。1980年代にデビューした商用UNIXは、そのほとんどがモノリシックカーネル方式を採用している。 しかし、プロセッサの処理速度は20世紀末から21世紀初頭にかけて長足の進歩を遂げた。また、マイクロカーネル側の実装における高速化技法の進展、必要に応じて一部パフォーマンスを要求されるサブシステムのみカーネル空間に取り込む実装も登場し、モノリシックカーネルのパフォーマンスにおける原理上の優位性は小さくなった。 2005年現在では、純然たるモノリシックカーネル方式で開発する利点は少ないとする意見に収束して来ている[要出典]。しかし、同等の機能を実装した場合にその原理上実行時の(コンピュータのメモリ上の)OSカーネルのフットプリントを比較的小さなものに留めておきやすいこと、ノンプリエンプティブ (non-preemptive) 制約を付加すれば、サービス実装を行う時に考慮するべきことが減り、開発が楽になることなどが利点として挙げられる。 一方、モノリシックなカーネルにさまざまな機能を取り込むことで巨大化することによる欠点・弊害としては、OSの機能を動的に切り替えたり更新したりすることが(マイクロカーネルと比較した場合に)困難なものになりやすいことなどが挙げられる。 研究開発の世界では、カーネルの機能を最小限にとどめるマイクロカーネルが主流になった1990年代当初、モノリシックカーネルは時代遅れとされてきた。しかし、実装レベルでの差が動作上の致命的な設計問題であるはずもなく、現在では必要な機能を必要な性能レベルで提供できれば問題ないという形での議論終結が図られている。 Solaris / HP-UX / AIXや日本の国産UNIXの系統も全てモノリシックカーネルを基礎とするカーネルを使用している。また、x86系PCでのUNIX互換機能提供を目指して作られたLinuxでは基本的にモノリシックカーネルを採用しているが、実行時に読み込むカーネルモジュールを設けるなど、実行時の柔軟性を高めている。 Windows NTは、当初よりマイクロカーネル方式での実装を模索していたが、オーバーヘッドを削減するためにNT 4.0でWindowsサブシステムとグラフィクスデバイスドライバがカーネル空間から直接見える様に修正された。さらにWindows 2000以降では、ハードウェア管理機能の一部をマイクロカーネル直轄のモジュールとしての外部モジュールからカーネル制御部本体による制御方式に切り替えており、純粋なマイクロカーネルから外れた実装になっている。NT4.0では800キロバイト弱だったNTOSKRNL(Windows NT系のカーネルシステム)のフットプリントは、WindowsXPでは2メガバイト強にまで肥大している(但しWindows Vistaにおいては、動作の安定性やシステム全体の堅牢性に対する配慮から一部「先祖返り」を起こしている)。マイクロカーネルとしての構造は依然残されているため、マイクロカーネルとモノリシックカーネルの折衷をとったハイブリッドカーネルとでも呼ぶべき実装になっている。 またMachから派生したmacOSも、BSDサブシステムやファイルシステム、ネットワークなどをカーネル空間に統合しており、純粋なマイクロカーネルから離れた実装になっている。Windowsと同様、マイクロカーネルとモノリシックカーネル両方の利点を活かした設計である。
※この「カーネル実装方式とその議論」の解説は、「モノリシックカーネル」の解説の一部です。
「カーネル実装方式とその議論」を含む「モノリシックカーネル」の記事については、「モノリシックカーネル」の概要を参照ください。
- カーネル実装方式とその議論のページへのリンク