モノリシックカーネル

ウィキペディアから無料の百科事典

モノリシックカーネルの概念図

モノリシックカーネルmonolithic kernel、一枚岩(モノリス)のような、一体のカーネルの意)とは、オペレーティングシステム(以下、OSと略記)におけるカーネルの構造、および設計思想を指す。「入出力機能やネットワーク機能、デバイスのサポートなどOSの一般的な機能」をカーネルと同一のメモリ空間に実装・実行する手法を言う。

代表的なモノリシックカーネルOSとしては、古典的なUNIXその派生OSがあげられる。

モノリス(monolith)とは「一枚岩」の意であり、モノリシック(monolithic)とは「一枚板の」という形容詞である。「モノシリックカーネル」は誤り。

モノリシックカーネルとマイクロカーネル[編集]

OSの構成要素を単一のメモリ空間で実行するモノリシックカーネルに対し、OSを構成する幾つかの要素・機能をカーネル空間から切り離し、外部モジュール化するなどで実装する手法をマイクロカーネルと呼ぶ。

モノリシックカーネルの設計思想および概念それ自体は旧来より存在するが、モノリシックカーネルというタームの成立は、このマイクロカーネルという概念・実装の登場(による対概念として要請され、命名されたこと)による(レトロニム)。

カーネル実装方式とその議論[編集]

モノリシックカーネル方式は、より近代的な設計手法とされるマイクロカーネル方式のOSに比べ、OSの機能のほとんどすべてが単一のメモリ空間で行なわれるゆえ、同一の処理を行う際に費やされるコンテキストスイッチプロセス間通信などによるオーバーヘッドは相対的に少ないものとなり、実効パフォーマンスにおいて有利であるといった見解がある。実際にプロセッサの動作クロックが数MHz - 数十MHz程度に留まっていた時代には、乱発されるコンテキストスイッチなどの実行コストの問題は深刻なものであった。1980年代にデビューした商用UNIXは、そのほとんどがモノリシックカーネル方式を採用している。

しかし、プロセッサの処理速度は20世紀末から21世紀初頭にかけて長足の進歩を遂げた。また、マイクロカーネル側の実装における高速化技法の進展、必要に応じて一部パフォーマンスを要求されるサブシステムのみカーネル空間に取り込む実装も登場し、モノリシックカーネルのパフォーマンスにおける原理上の優位性は小さくなった。

2005年現在では、純然たるモノリシックカーネル方式で開発する利点は少ないとする意見に収束して来ている[要出典]。しかし、同等の機能を実装した場合にその原理上実行時の(コンピュータのメモリ上の)OSカーネルのフットプリントを比較的小さなものに留めておきやすいこと、ノンプリエンプティブ (non-preemptive) 制約を付加すれば、サービス実装を行う時に考慮するべきことが減り、開発が楽になることなどが利点として挙げられる。

一方、モノリシックなカーネルにさまざまな機能を取り込むことで巨大化することによる欠点・弊害としては、OSの機能を動的に切り替えたり更新したりすることが(マイクロカーネルと比較した場合に)困難なものになりやすいことなどが挙げられる。

研究開発の世界では、カーネルの機能を最小限にとどめるマイクロカーネルが主流になった1990年代当初、モノリシックカーネルは時代遅れとされてきた。しかし、実装レベルでの差が動作上の致命的な設計問題であるはずもなく、現在では必要な機能を必要な性能レベルで提供できれば問題ないという形での議論終結が図られている。

Solaris / HP-UX / AIXや日本の国産UNIXの系統も全てモノリシックカーネルを基礎とするカーネルを使用している。また、x86系PCでのUNIX互換機能提供を目指して作られたLinux[1]では基本的にモノリシックカーネルを採用しているが、実行時に読み込むカーネルモジュールを設けるなど、実行時の柔軟性を高めている。

Windows NTは、当初よりマイクロカーネル方式での実装を模索していたが、オーバーヘッドを削減するためにNT 4.0でWindowsサブシステムとグラフィクスデバイスドライバがカーネル空間から直接見える様に修正された。さらにWindows 2000以降では、ハードウェア管理機能の一部をマイクロカーネル直轄のモジュールとしての外部モジュールからカーネル制御部本体による制御方式に切り替えており、純粋なマイクロカーネルから外れた実装になっている。NT4.0では800キロバイト弱だったNTOSKRNL(Windows NT系のカーネルシステム)のフットプリントは、Windows XPでは2メガバイト強にまで肥大している(但しWindows Vistaにおいては、動作の安定性やシステム全体の堅牢性に対する配慮から一部「先祖返り」を起こしている)。 マイクロカーネルとしての構造は依然残されているため、マイクロカーネルとモノリシックカーネルの折衷をとったハイブリッドカーネルとでも呼ぶべき実装になっている。

またMachから派生したmacOSも、BSDサブシステムやファイルシステム、ネットワークなどをカーネル空間に統合しており、純粋なマイクロカーネルから離れた実装になっている。Windowsと同様、マイクロカーネルとモノリシックカーネル両方の利点を活かした設計である。

有名な論争[編集]

モノリシックカーネルとマイクロカーネルについては、Linuxの作者リーナス・トーバルズMINIX(ミニックス)の作者アンドリュー・タネンバウム1992年の論争が有名である。

モノリシックカーネルの採用例[編集]

脚注[編集]

  1. ^ 初期のLinuxは、モジュールとなるコードをオブジェクトファイルの形でカーネルから分離することができる。ただし、カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある。現在はモジュールのインターフェースに対する抽象化が行われ、モジュールをカーネルの構築状態に依存することなく追加できる。

外部リンク[編集]