このページの本文へ

前へ 1 2 次へ

あなたの知らないWindows 第23回

なぜWindows 7のカーネルはVistaより軽量化できたのか?

2010年03月04日 16時29分更新

文● 山本雅史

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

レガシーDLLを新しいAPIにマッピングする「Virtual DLL」

 MinWinを開発する際に非常に重要だったのが、Vistaで提供されているシステムDLLを整理する必要である。Vistaが持つレガシーDLLをそのままWindows 7に持ち込むと、Vistaと同じようにパフォーマンス面でデメリットになる。そこで、MinWinを開発する時に、「DLLリファクタリング」という作業が行なわれた。

 DLLリファクタリングでは、実装内容は変更せずにDLLの構成や構造を変更して、レガシーな環境をMinWinには持ち込まないようにしたという。さらにMinWinでは、Windowsが持つ多数のAPIも整理している。例えば、32bitと64bitで重複する機能などを整理したり、複数の機能をひとつのDLLにまとめたりしている。そのため、MinWinで動作しているカーネルは、Vistaのカーネルとはまったく違ったものになっている。

DLLリファクタリングによりAPIとDLLを整理

DLLリファクタリングによりAPIとDLLを整理。これにより、カーネルに必要なDLLを新たに開発している

 しかし、このままではVista用のアプリケーションは、MinWinをベースとしているWindows 7ではまったく動作しなくなる。そこで、レガシーDLLを新しいMinWin APIにマッピングする「Virtual DLL」という機能が用意された。

 レガシータイプのAPIが呼び出された場合、Virtual DLLによってMinWin APIに変換されて、Windows 7カーネルに引き渡される。Virtual DLLは、レガシーAPIと新しいMinWin APIを照合するためのスキーマー(照合用データベースのようなもの)をブート時に読み込んで、各プロセスにマッピングしている。これらの仕組みにより、APIの実装と内部的なアーキテクチャーを分離しているわけだ。

レガシーAPIとの互換性を保つために「Virtual DLL」を用意

レガシーAPIとの互換性を保つために「Virtual DLL」を用意

Virtual DLLをMinWinの「Logical DLL」にマッピングするには

Virtual DLLをMinWinの「Logical DLL」にマッピングするには、中間に変換リスト(キーマー)を持つ「ApiSetSchema.dll」が介在している

 このような機能を用意することで、Windows 7ではカーネルを全面的に書き換えても、Vistaと同じ動作が保証されている。さらにWindows 7の次バージョン「Windows 8」(仮称)では、Virtual DLLの機能をより強化して、カーネル自体は64bit化され、Virtual DLLでレガシーの32bit DLLをサポートするようになるかもしれない。こうなると、OSの32bit/64bit版という区別もなくなり、32bit環境を完全にサポートした64bit OSになるだろう。

 また、次世代Windowsで新しい機能が入ったとしても、Virtual DLLによってレガシーAPIにマッピングされるため、XPからVistaへの移行で起こったような、カーネルのバージョンアップで多くのアプリケーションが動かなくなることも少なくなると期待される。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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