Linux豆知識 130

モノリシックカーネルとマイクロカーネル

今回は、「モノリシックカーネルとマイクロカーネル」について。

「モノリシックカーネル」の「Monolithic」とは、「一枚岩である」という意味です。カーネルの設計において、OSのほとんどの機能をカーネルに盛り込み、一体化させたもの、ということができます。たとえば入出力の機能やネットワーク機能、デバイスのサポートなどの全てをカーネルが一手に引き受けます。この方法のメリットとしては、OS全体が一体化しているため、実行速度が速いという点が挙げられています。以前のUNIX系OSでは、このモノリシック方式のカーネルが採用されていました。

一方、「マイクロカーネル」は、文字通り「小さなカーネル」です。この方式では、カーネルは割り込み処理やプロセス間通信の処理など、OSの中核として必要最小限の機能だけを持っています。他の処理は「モジュール」に任せます。マイクロカーネルのメリットは、カーネルの肥大化を防ぐことができる、機能をモジュールの形にすることで開発効率を上げる、移植や機能追加を容易にすることができる、などです。

さて、それではLinuxはモノリシックカーネルでしょうか、マイクロカーネルでしょうか?書籍などを参照すると、「Linuxはモノリシックカーネルである」としてあるケースが多くあります。たしかに、カーネルをコンパイルする際に、さまざまな機能を選択することができるものの、それらの機能はカーネルの一部となりますので、モノリシックカーネルであると言うことができます。しかし、Linuxも、いくつかの機能をモジュールとして分割し、必要に応じてロードするというようなことも行うようになってきています。
すなわち、マイクロカーネルのような要素も持ち合わせているということになります。

実はこのことは、Linuxに限ったことではありません。マイクロカーネルの代表格と言われたWindowsでも、最近ではいくつかの機能をカーネルに組み込むようになっており、モノリシックカーネルのような要素も持ち合わせたカーネルになってきている、と言うことができます。

すなわち、「完全にモノリシックカーネル」「完全にマイクロカーネル」というのは、最近では少なくなってきたのです。アーキテクチャや機能の多様化・進化に伴い、「この機能はカーネルに組み込む」「この機能はモジュールにする」のように使い分けるほうが、設計上もパフォーマンスの上でも好ましいため、と言えるでしょう。

だからと言って、「マイクロカーネル」「モノリシックカーネル」の分類が意味をなさないわけではありません。性能を最大限に引き出すためには、カーネルの設計の基本として、このような2つの考え方があるということは知っておいたほうがよいでしょう。


ページトップへ