レガシー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のカーネルとはまったく違ったものになっている。
しかし、このままではVista用のアプリケーションは、MinWinをベースとしているWindows 7ではまったく動作しなくなる。そこで、レガシーDLLを新しいMinWin APIにマッピングする「Virtual DLL」という機能が用意された。
レガシータイプのAPIが呼び出された場合、Virtual DLLによってMinWin APIに変換されて、Windows 7カーネルに引き渡される。Virtual DLLは、レガシーAPIと新しいMinWin APIを照合するためのスキーマー(照合用データベースのようなもの)をブート時に読み込んで、各プロセスにマッピングしている。これらの仕組みにより、APIの実装と内部的なアーキテクチャーを分離しているわけだ。
このような機能を用意することで、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への移行で起こったような、カーネルのバージョンアップで多くのアプリケーションが動かなくなることも少なくなると期待される。
この連載の記事
-
第50回
PC
次期IE「Internet Explorer 10」プレビュー版が公開 -
第49回
PC
RTM版も登場 Windows Home Server 2011の変更点とは -
第48回
PC
5秒で起動するSplashtop OSを自作パソコンで試す -
第47回
PC
ベンチで検証 Internet Explorer 9 RCの互換性と性能 -
第46回
PC
正式版の直前となるInternet Explorer 9 RC版が登場 -
第45回
PC
Silverlightをさらに進化させる「Silverlight 5」 -
第44回
PC
「Windows on ARM」が持つ意味と課題は何か? -
第43回
PC
GPUを利用できる仮想化ソフト XenClient 実践編 -
第42回
PC
複数のWindowsを使い分ける仮想化ソフト XenClient -
第41回
PC
3秒で起動しWindowsと共存するOS「Splashtop OS」 -
第40回
PC
最新版「PP7」に見るIE9の性能と互換性の高さ - この連載の一覧へ