移植が比較的容易なマイクロカーネル
一般にカーネルが持つべき機能とは、以下のようなものである。
- メモリーの管理機能
- プロセスのスケジューリング
- デバイス管理
- その他(APIなどによるカーネル機能の提供)
ただし、補助的な機能は入れられないというわけでもない。実際OSには、カーネルに多くの機能を詰め込んだものもあるし、最低限の機能しか持たないものもある。ここで登場するのが、最初の「Windows NT」が設計されたときに導入された「マイクロカーネル」という概念だ。
マイクロカーネルとは、さまざまな機能を詰め込んだ「モノリシックカーネル」に対する言葉で、最低限の機能のみをカーネルに入れ、単純化を目指したカーネルのことを言う。もともとOSを開発するときには、なんでもカーネルに入れるやり方と、カーネル部分を単純にするという2つの方向があったが、これを明確に区別したのが「マイクロカーネル」という言葉なのである。
一般にマイクロカーネルとは、以下のような機能のみをカーネル内に残すものだといわれている(図2)。OSとの機能は、カーネル外のモジュールで実現し、カーネルは「プロセス間通信」によりこれを制御する。
- メモリー管理
- スケジューラー
- プロセス間通信
マイクロカーネルという言葉ができたのは、「カーネルの移植を簡単にするために、コンパクトにしたい」(大きなものは移植が大変になる)という要求と、「カーネルを単純な小さなものにすれば、コードの堅牢性を高めるのが容易だろう」という推測からである。
逆にいうと、マイクロカーネルが言葉として登場した時期には、Unixカーネルのような「モノリシックカーネル」のOSがほとんどだった。当時でもカーネルが大きくなっていくことに対して問題意識はあった。さらに、Unixが実証した複数のアーキテクチャーへの移植をより容易にするには、カーネルをコンパクトにするべきという考えがあったからだ。
実際にマイクロカーネルを採用したWindows NTは現在のx86系以外にも、かつては「MIPS」「DEC Alpha」「PowerPC」といったRISC系プロセッサーに移植されたことがある(Windows Serverは現在でも、IA-64をサポートしている)。ただし、Windowsのカーネルは純粋なマイクロカーネルだったわけではなく、ウインドウ管理やグラフィックスの機能を取り込んだものになっており、モノリシックカーネルとマイクロカーネルの中間にある「ハイブリッドカーネル」と言えなくもない。
というのも、これらの機能をカーネルの外に出してしまうと、その部分とカーネルの通信がオーバーヘッドになってしまい、パフォーマンスが低下してしまうのである。そこでやむなく、性能に関係するモジュールをカーネル側へと持っていくことにしたわけだ。
Windowsに関する用語には、「カーネルモード」と「ユーザーモード」という言葉がある。例えばデバイスドライバーの場合、Windows Vista以前では事実上「カーネルモードドライバー」しか作れなかった。仕組みとしては「ユーザーモードドライバー」もあったのだが、開発の参考にするサンプルもわずかなら、開発のサポートもほとんどなく、事実上カーネルモードドライバーだけが開発可能だった。それをVistaで大きく改めたわけだ。
これを説明するためには、まず「カーネルモード」がなんであるのかを説明する必要がある。そしてこれこそが、カーネルがカーネルと呼ばれる理由のひとつでもある。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ