WOW64

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

WOW64(ワウ64、Windows-On-Windows 64)とは、64ビット版のMicrosoft WindowsWindows XPWindows Server 2003及びWindows Vistaの一部)においてWin32アプリケーションを実行する、エミュレーションレイヤー・サブシステムである。

目次

概要

64ビット版のWindowsは基本的に、完全に64ビット化された64ビットNTカーネルの上にある、Win64サブシステムで動作する。他のx64対応オペレーティングシステムが、32ビットABIを完全に見捨てるか、あるいは完全に互換性を取るかのいずれかの選択をした。64ビットのWindowsでは、64ビットABIと32ビットABIの両方をサポートし、Win32APIをWin64APIに呼び変えるエミュレーション層を実装した。これにより、32ビットアプリケーションはそのまま64ビットのWindowsでも動作する。

構造

WOW64は、WOW64ホストプロセスによって予約された4GBの仮想空間に32ビット ABIのコードを読み込み、そこで発生したWin64 APIに変換可能なAPI呼び出しを変換して、Win64サブシステムに伝達する。構造体のトランケート・エキスパンドは自動的に行われ、Win32側では現在動作しているOSが32ビットシステムか、64ビットシステムかを意識する必要は全くない。またユーザーランドで動作するコンポーネント群は32ビット版と64ビット版が用意され、例えばOLEなどは32bitで閉じた範囲で動作する事ができる。64ビット版で提供されるコードは単一のソースから、32ビット版と64ビット版両方をそれぞれコンパイルして作られている為、機能的には32ビットシステムと64ビットシステムの間に差異は無い。

問題点

Windowsの64ビットABIは、そのままWin32の32ビットABIを64ビットに拡張した物である。従って、64ビットABIのアプリケーションは8TBのアドレス空間を独占的に使える様になっている。ここに一つの問題点がある。32ビット ABIのコードを格納可能な仮想空間下位4GBが64ビットABIに独占されてしまった事である。この為、32ビットABIを格納する場所が無く、32ビットアプリケーションはもとより、DLLOCXをロードして呼び出す事も出来なくなってしまった。事実マイクロソフトは、32ビットABIのコードと64ビットABIのコードを相互に呼び出す事を禁止している(COMインターフェースを経由して相互乗り入れは可能であるが、x64アーキテクチャで本来可能であったシームレスな32ビットコードと64ビットコードの相互呼び出し機能は全く生かされていない)。この顕著な例として、Internet Explorerの振舞があげられる。32ビットのActiveXコンポーネントを検出すると、64ビット版Internet Explorerは処理を中断して32ビット版Internet Explorerに処理を引き継ぐ。32ビットアプリケーションと64ビットアプリケーションの間には、実行ファイル以外のコンポーネント群を互いに利用する事が出来ない深い溝がある。

プログラミング

16bit時代から32bitへの過渡期に用意されたthunkメカニズムはWOW64では提供されていない。 その代わり異なるABI間の呼び出しは、外部プロセスCOMインターフェースによって可能である。 なお前述の通り基本的にInprocサーバーは使用できない。 外部プロセスCOMインターフェースにより、ABI間のマーシャリングがMIDL情報を元にWOW64によって行われ、例えば64ビットプロセスから32ビットプロセスのメソッドを呼び出す事ができる(逆も可能である)。 この機能は非常に重要な機能を提供する。 2007年現在、Windowsアプリケーションやミドルウエアの殆どはx64に移植されていない。 よってこれらのソフトウエア資源を継承しつつ、x64に対応したアプリケーションを開発するには、WOW64の機能を使って32bitソフトウエア資源へのアクセスを確保し、64ビットアプリケーションに対してCOMインターフェースの形で提供する事で、異なるABIが混在する過渡期を乗り越える事ができる。 またCOMインターフェースの形をとる事により、.NET Frameworkへのアクセスも用意できる。

リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net