Windows上のWindows
コンピューティングでは、 Windows on Windows (一般にWOWと呼ばれます )は、Windows 3向けに作成されたレガシー16ビットプログラムの実行を限定的にサポートするようにNTVDMを拡張するMicrosoft Windows NTファミリのオペレーティングシステムの32ビットバージョンの互換性レイヤーです.x以前。 32ビットプログラムを実行する64ビットWindowsバージョンには、WoW64と呼ばれる同様のサブシステムがあります。
バックグラウンド
多くの16ビットWindowsレガシプログラムは、新しい32ビットエディションのWindowsで変更なしで実行できます。デザイナーがこれを可能にした理由は、 すべてのプログラムが使用する前にオペレーティングシステムを現在のバージョンにアップグレードする機能を制限することなく、Windows 3.1xからWindows 95以降への業界移行中にソフトウェア開発者がソフトウェアを修正する時間を確保するためです顧客の面倒を見ていた。
DOSのルーツを反映したWindows 9xシリーズのオペレーティングシステムは、基盤となるオペレーティングシステムが真に32ビットではないという意味で16ビットと32ビットのハイブリッドシステムとして機能したため、16ビットソフトウェアをネイティブに実行できました特別なエミュレーション。 Windows NTオペレーティングシステムは、アーキテクチャがWindows 9xと大きく異なるため、より複雑なソリューションが必要です。 16ビットプログラムを32ビットバージョンのWindowsで実行できるようにするために、2つの個別の戦略が使用されます(実行時の制限があります)。それらはサンクとシミングと呼ばれます。
サンク
オペレーティングシステムのWOWサブシステムは、16ビットポインター、メモリモデル、およびアドレス空間のサポートを提供するために、従来の16ビットAPIを新しい32ビット版にサンクします。
すべての16ビットプログラムは、共有メモリスペースを持つ単一の仮想DOSマシンでデフォルトで実行されます。ただし、独自の個別のメモリ空間で実行するように構成できます。この場合、各16ビットプロセスには専用の仮想マシンがあります。個別のメモリ空間は、16ビットプロセス間通信の削減とメモリ使用率の増加を犠牲にして、バグのある16ビットプログラムが互いに干渉するのを防ぐことにより、システムの安定性を高めます。
このサブシステムは、Windows NTの32ビット版でのみ利用可能です。 64ビット版(64ビット版のみのWindows Server 2008 R2以降を含む)は、サードパーティのエミュレーションソフトウェア(DOSBoxなど)なしで16ビットソフトウェアを実行できません。
Windows NTシステム上のWOWEXEC.EXEプロセスは、Windows-on-Windowsを促進します。 WIN.COMファイルは、Windows 95およびWindows 98カーネルをエミュレートするWindows-on-Windowsに加えて、Windows NT上で16ビットDOSベースのWindowsアプリケーションを実行するNTVDM用のWindows 3.xカーネルをエミュレートします。
シミング
アプリケーションの互換性の問題、特に長いファイル名、複数のユーザー、および最小権限の概念に関する問題により、一部のアプリケーションが動作しなくなる場合があります。たとえば、NTFSセキュリティが設定されているのに、ファイルシステム全体への完全な書き込みアクセスを誤って想定する場合があります。
オペレーティングシステムのWindows 95シリーズが設計されたとき、重要な要件は、ファイルシステムが8.3ファイル名との下位互換性を維持し、レガシーアプリケーションがプラットフォームで引き続き動作できるようにすることでした。したがって、Windows 95以降のオペレーティングシステムは、長いファイル名と短いファイル名の両方がファイル割り当てテーブルに保存される互換モードをサポートしています。
さらに、ハードウェアに直接アクセスしようとするレガシーアプリケーションは、ユーザーモードではアクセスできません。 DOSおよびWindows 9x時代のシステム構成ファイルがWindows NTベースのカーネルに存在しない場合、レガシアプリケーションも失敗する可能性があります。そのため、AUTOEXEC.BATやCONFIG.SYSなどのファイルの長さがゼロのバージョンを運用時に繰り越す必要がある理由それらを使用しないシステム。
Windowsの新しいバージョンのアプリケーション互換性レイヤーには、さまざまな仮定とオペレーティングシステムのベストプラクティスを念頭に置いて作成されたレガシアプリケーションによって行われたAPI呼び出しをインターセプトおよび変更するためのかなりの数のシムがあります。これらの修正は、使用中の一般的なレガシーアプリケーションで問題が発見されるたびに更新されます。