0. 1 Linuxカーネルとは

 Linuxカーネルという言葉を耳にしますが、Linuxカーネルとは何をするものなのでしょうか?

 Linuxカーネルはアプリケーションが動作するための基本環境を提供します。アプリケーションは最小限の手続きで、アプリケーション本来の目的である処理を実行できるようになります。コンピュータのハードウェアそのものの制御はLinuxカーネルが行うため、アプリケーションはその苦労を知る必要はありません。またアプリケーションは、簡単な手続きで記憶装置を利用したり、ほかのコンピュータと通信を行ったりすることも可能です。アプリケーションは、システムコールという手続きでカーネルに依頼することにより、これらさまざまの便利なカーネル機能を呼び出せます(図0-1)。

 Linuxカーネルはこれらの便利な機能を提供しますが、処理を依頼されて初めて動作するイベント駆動型のプログラムです。アプリケーションからのシステムコールによる要求、ハードウェアからの割り込みによる要求を受けて、初めてその要求に対応する処理を行います。Linuxカーネルが能動的に動作することはありません。一見能動的に動作しているようにも見えますが、それらはすべてLinuxカーネル上で動作するデーモンやツール群の働きです。

0.1.1 UNIXの互換実装

 Linuxカーネルは伝統UNIX(System V、Solaris、BSDなど)と基本機能も基本構造もほぼ同じです。実装に当たっては、System VやBSDの公開された設計思想や実装技術を大いに参考にしていると思われます。Linuxカーネル内を見ると、随所にその影響を感じることができます。ただし、Linuxカーネルのコードを参照された方はご存じと思われますが、実装そのものはまったく異なっています。

 Linuxカーネルは伝統UNIXと同じく、非常にオーソドックスな構造のカーネルです。カーネル全体が1つの大きなプログラムとして実装されています。このような実装のカーネルは、1枚岩のカーネルという意味で、モノリシックカーネルと呼ばれています。一方、Linuxカーネルの対極の実装としてGNU Hurdがあります。GNUHurdは、Machを核として複数のプログラムから構成されるマイクロカーネルベースのOSで、設計思想からして大きく異なります。ただし、最終的な目的はモノリシックカーネルと同じであり、ユーザーからはどちらも同様のOSとして見え、大きな違いがあるようには感じられません。

 モノリシックカーネルは、マイクロカーネルと比較しカーネル内部機能が相互に密結合しており、各機能間のデータ交換・機能の相互呼び出しにおけるオーバーヘッドを最小限にできます。逆にそのことにより、カーネル機能が大きくなるに従い内部構造が非常に複雑になるという問題を抱えています。どちらの実装が優れているということはなく、それぞれが長所と欠点を持ち合わせています。