このページの本文へ

基礎から覚える 最新OSのアーキテクチャー 第2回

ARM版Windows実現の鍵はマイクロカーネルにあり?

2011年08月11日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

移植が比較的容易なマイクロカーネル

 一般にカーネルが持つべき機能とは、以下のようなものである。

  • メモリーの管理機能
  • プロセスのスケジューリング
  • デバイス管理
  • その他(APIなどによるカーネル機能の提供)

 ただし、補助的な機能は入れられないというわけでもない。実際OSには、カーネルに多くの機能を詰め込んだものもあるし、最低限の機能しか持たないものもある。ここで登場するのが、最初の「Windows NT」が設計されたときに導入された「マイクロカーネル」という概念だ。

 マイクロカーネルとは、さまざまな機能を詰め込んだ「モノリシックカーネル」に対する言葉で、最低限の機能のみをカーネルに入れ、単純化を目指したカーネルのことを言う。もともとOSを開発するときには、なんでもカーネルに入れるやり方と、カーネル部分を単純にするという2つの方向があったが、これを明確に区別したのが「マイクロカーネル」という言葉なのである。

 一般にマイクロカーネルとは、以下のような機能のみをカーネル内に残すものだといわれている(図2)。OSとの機能は、カーネル外のモジュールで実現し、カーネルは「プロセス間通信」によりこれを制御する。

  • メモリー管理
  • スケジューラー
  • プロセス間通信

図2 マイクロカーネル(左)とモノリシックカーネルの構造の違い

 マイクロカーネルという言葉ができたのは、「カーネルの移植を簡単にするために、コンパクトにしたい」(大きなものは移植が大変になる)という要求と、「カーネルを単純な小さなものにすれば、コードの堅牢性を高めるのが容易だろう」という推測からである。

 逆にいうと、マイクロカーネルが言葉として登場した時期には、Unixカーネルのような「モノリシックカーネル」のOSがほとんどだった。当時でもカーネルが大きくなっていくことに対して問題意識はあった。さらに、Unixが実証した複数のアーキテクチャーへの移植をより容易にするには、カーネルをコンパクトにするべきという考えがあったからだ。

 実際にマイクロカーネルを採用したWindows NTは現在のx86系以外にも、かつては「MIPS」「DEC Alpha」「PowerPC」といったRISC系プロセッサーに移植されたことがある(Windows Serverは現在でも、IA-64をサポートしている)。ただし、Windowsのカーネルは純粋なマイクロカーネルだったわけではなく、ウインドウ管理やグラフィックスの機能を取り込んだものになっており、モノリシックカーネルとマイクロカーネルの中間にある「ハイブリッドカーネル」と言えなくもない。

 というのも、これらの機能をカーネルの外に出してしまうと、その部分とカーネルの通信がオーバーヘッドになってしまい、パフォーマンスが低下してしまうのである。そこでやむなく、性能に関係するモジュールをカーネル側へと持っていくことにしたわけだ。

 Windowsに関する用語には、「カーネルモード」と「ユーザーモード」という言葉がある。例えばデバイスドライバーの場合、Windows Vista以前では事実上「カーネルモードドライバー」しか作れなかった。仕組みとしては「ユーザーモードドライバー」もあったのだが、開発の参考にするサンプルもわずかなら、開発のサポートもほとんどなく、事実上カーネルモードドライバーだけが開発可能だった。それをVistaで大きく改めたわけだ。

 これを説明するためには、まず「カーネルモード」がなんであるのかを説明する必要がある。そしてこれこそが、カーネルがカーネルと呼ばれる理由のひとつでもある。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン