富士通

マイクロカーネル


マイクロカーネル技術

●まずカーネルとは?


カーネル(kernel)は、文字どおりオペレーティングシステム(OS)の核となる部分のことをいいます。
OSは、コンピュータシステムを使いやすくするために「計算機プログラムの実行を制御するプログラムで、スケジューリングやデバッギング、入出力制御、課金処理、コンパイル、記憶割振り、データ管理およびこれらに関連したさまざまなサービス」(JIS規定)を提供します。
その中でカーネルは、中心的な役割を果たしているのですが、OSによってその機能は異なります。例えば、UNIXでは「プロセス(実行中のプログラム)の実行制御」「複数のプロセスを同時に実行する場合のスケジューリング」「メモリ管理」「二次記憶領域の管理(ファイル管理)」「周辺機器へのアクセス制御」などを行っています。

[イラスト0]

●なぜマイクロカーネルなのか?


マイクロカーネルは、従来OSのカーネルに対してより小さなカーネルを指す用語で、まだ標準化されたサイズや機能はありません。どこまでの機能を持っているかは、やはりOSごとに異なっています。
では、なぜ新しい技術としてマイクロカーネルが話題となっているのでしょうか。それには、コンピューティング環境の変化が大きくかかわっています。
登場した当時のコンピュータは、性能も低く、処理するプログラムも単一で、必要な操作はすべて人の手によって行われていました。やがて、磁気テープや磁気ドラムを複数接続するコンピュータが登場すると、その管理を行うプログラムが作られました。
さらに、コンピュータの性能向上に伴って、複数の処理を同時に実行するようになり、それをコントロールするプログラムが登場します。これらの機能がOSの原点です。OSは急速に機能を拡大し、複雑で巨大なプログラムとなってゆきます。
さて、OSに限らず大きく複雑なプログラムの開発は、大きな労力を必要とします。その昔、拡張に次ぐ拡張で全体を把握している人間は誰もいないシステムがあるといったうわさ話がたびたび聞かれたほどです。
その解決法として提唱されたのが、構造化プログラミングです。機能ごとに小さく簡単なプログラム(モジュール)に分け、その関係を定義し、概念の明確化と展開を図るもので、その一つに層構造があります。ハードウェアと人間の間にあるソフトウェアをいくつかの階層構造とし、OSはよりハードウェアに近い層(下層)に、その中でもカーネルは最もハードウェアよりに位置します。

[イラスト1]


モジュール化、階層化により必要な機能の変更や拡張が容易になりました。 しかしその後も、ネットワーク化、周辺機器の多様化などにより、カーネルにもさまざまな機能が組み込まれ複雑化してゆきました。しかも、オープン化の進展により「異なるプロセッサで同じOSを使いたい」、「同じプロセッサで異なるOSを動かしたい」などの要求が高まると、従来のカーネルでは複雑すぎて手間とコストがかかり簡単には対応できません。
シンプルで小さなマイクロカーネルは、より移植性に優れ、拡張性に富んだOSへの要求から考えられるようになったのです。

ではマイクロカーネルとは?


カーネルを小さくするための方法の一つに、プロセス指向があります。
OSは、カーネルとその他の(プロセス)プログラムでできています。プロセス指向を突き詰めると、カーネルには割込処理、プロセススケジューリグ、プロセス間通信などのプロセス管理だけをもたせ、従来のカーネルが提供していた機能群、例えばファイル管理やウインドウ管理、デバイス管理、メモリ管理でさえユーザプロセスとして実現するものです。新しい機能の追加も容易に行え、さらに、他のOSの機能をプロセスとして追加すれば複数のOSの機能を実現することも難しくありません。しかし、実際には、効率面などからマイクロカーネルにもOSの機能が盛り込まれています。
このマイクロカーネルは、優れた拡張性、他のノード(ネットワークにつながった他のコンピュータなど)を含めプロセスのある場所を意識せずにアクセスできる位置透過性のなどにより、分散システムや並列処理システムによくフィットし、今後のOSの有力なアプローチとして注目されています。