У обчислювальній техніці на платформах Microsoft, WoW64 (Windows 32-bit on Windows 64-bit) — це підсистема операційної системи Windows, здатна запускати 32-бітні програми на 64-бітній Windows. Вона включена до всіх 64-бітних версій Windows, за винятком Windows Server Server Core, де вона є опціональним компонентом, та Windows Nano Server, де вона відсутня. WoW64 має на меті усунути багато відмінностей між 32-бітною та 64-бітною Windows, особливо ті, що пов'язані зі структурними змінами в самій Windows. Бібліотеки трансляції Підсистема WoW64 складається з легкої сумісності, що має схожі інтерфейси на всіх 64-бітних версіях Windows. Вона має на меті створити 32-бітне середовище, яке надає інтерфейси, необхідні для запуску немодифікованих 32-бітних програм Windows на 64-бітній системі. WOW64 реалізована за допомогою кількох DLL, серед яких: Wow64.dll, основний інтерфейс до ядра Windows NT, що транслює (thunks) виклики між 32-бітними та 64-бітними, включаючи маніпуляції з вказівниками та стеками викликів. Wow64win.dll, що надає відповідні точки входу для 32-бітних програм (win32k thunks). DLL, що дозволяє виконувати 32-бітні x86 інструкції, яка залежить від архітектури набору команд. На x86-64, Wow64cpu.dll відповідає за перемикання процесора з 32-бітного на 64-бітний режим. Це обчислювально недорого, оскільки x86-64 машини мають нативний режим для виконання 32-бітного x86 коду. На IA-64 (Itanium 2), для повільнішої програмної емуляції потрібні три файли: Wow64cpu.dll, «шар абстракції CPU»; , програмний емулятор x86; та , міст між емулятором та системою WOW64. – Рання версія статті, де Wow64cpu.dll вказано як частину реалізації IA-64. На ARMv8 64-bit, для емуляції x86 та для перемикання в режим ARM32.

Реєстр та файлова система Підсистема WoW64 також керує іншими ключовими аспектами запуску 32-бітних програм. Вона бере участь в управлінні взаємодією 32-бітних програм з компонентами Windows, такими як реєстр, який має окремі ключі для 64-бітних та 32-бітних програм. Наприклад, HKEY_LOCAL_MACHINE\Software\Wow6432Node є 32-бітним еквівалентом HKEY_LOCAL_MACHINE\Software (хоча 32-бітні програми не знають про цю переадресацію). Деякі ключі реєстру відображаються з 64-бітних на їх 32-бітні еквіваленти, тоді як вміст інших дублюється, залежно від версії Windows.

Операційна система використовує каталог %SystemRoot%\system32 для своїх 64-бітних бібліотек та виконуваних файлів. Це зроблено з міркувань зворотної сумісності, оскільки багато застарілих програм жорстко закодовані на використання цього шляху. При виконанні 32-бітних програм WoW64 прозоро перенаправляє доступ до "system32" (наприклад, завантаження DLL) до %SystemRoot%\SysWoW64, що містить 32-бітні бібліотеки та виконувані файли. Винятками з цих перенаправлень є:

(перенаправляється на Windows Server 2008, Windows Vista, Windows Server 2003 та Windows XP)

Перенаправлення допомагає забезпечити роботу 32-бітних програм без необхідності знати про стан WoW64. Якщо 32-бітна програма хоче отримати доступ до реального %SystemRoot%\System32, вона може зробити це через псевдо-каталог %SystemRoot%\sysnative, починаючи з Windows Vista. Виявлення стану Wow64 можливе за допомогою .

Існує два каталоги Program Files, обидва видимі як для 32-бітних, так і для 64-бітних програм. Каталог, що зберігає 32-бітні файли, називається , щоб відрізнити його від 64-бітного, який зберігає традиційну назву без додаткових уточнень. Для розділення не використовується перенаправлення файлової системи; натомість WoW64 змінює результати запитів, таких як , щоб направити інсталятори до правильного каталогу.

На ARM64 також є кілька нових каталогів, де WOW64 керує запуском не лише 32-бітних програм x86, але й 32-бітних програм ARM, які використовують . ARM64 також підтримує так звані CHPE («скомпільовані-гібридні-PE»), які мають код ARM64 у контейнері DLL x86 (для більш ефективної сумісності без емуляції); ці DLL знаходяться в .

Сумісність програм 32-бітні програми, що включають лише 32-бітні драйвери пристроїв режиму ядра, або ті, що вбудовуються в адресний простір компонентів, реалізованих виключно як 64-бітні процеси (наприклад, Windows Explorer), не можуть виконуватися на 64-бітній платформі.

32-бітні сервісні програми підтримуються. Папка SysWOW64, розташована в папці Windows на системному диску, містить кілька програм для підтримки 32-бітних додатків (наприклад, cmd.exe, odbcad32.exe для реєстрації ODBC з'єднань для 32-бітних програм). 16-бітні застарілі програми для MS-DOS та ранніх версій Windows зазвичай несумісні з 64-бітними версіями Windows Vista, 7, 8 та 10, але їх можна запускати на 64-бітній ОС Windows за допомогою програмного забезпечення для віртуалізації. 32-бітні версії Windows XP, Vista, 7, 8 та 10, навпаки, зазвичай можуть запускати 16-бітні програми з невеликими проблемами або без них. 16-бітні програми не можуть бути безпосередньо запущені під x64 версіями Windows, оскільки CPU не підтримує режим VM86 під час роботи в x64.

Internet Explorer реалізований як 32-бітна, так і 64-бітна програма через велику кількість 32-бітних ActiveX компонентів в Інтернеті, які не змогли б підключитися до 64-бітної версії.

Раніше 32-бітна версія використовувалася за замовчуванням, і було важко встановити 64-бітну версію як браузер за замовчуванням. Це змінилося в Internet Explorer 10, який запускав 32-бітні доповнення в 64-бітній сесії, усуваючи необхідність перемикатися між двома версіями. Якщо користувач заходив у 32-бітну папку (зазвичай C:\Program Files (x86)\Internet Explorer) і двічі клацав файл iexplore.exe, все одно завантажувалася 64-бітна версія. В Internet Explorer 9 та попередніх версіях це завантажувало лише 32-бітну версію.

, помилка в шарі трансляції x64 версії WoW64 також робить несумісними всі 32-бітні програми, що покладаються на функцію Windows API GetThreadContext. До таких програм належать зневаджувачі програм, трасувальники стеку викликів (наприклад, IDE, що відображають стек викликів) та програми, що використовують механізми збирання сміття (GC). Одним з найпоширеніших, але постраждалих GC-механізмів є Boehm GC. Він також використовується як збирач сміття за замовчуванням у не менш популярному Mono. Хоча Mono представила новий (але опціональний) GC станом на жовтень 2010 року під назвою SGen-GC, він виконує сканування стеку так само, як і Boehm GC, що робить його також несумісним під WoW64. Станом на липень 2016 року виправлення не було надано, хоча були запропоновані обхідні шляхи.

Продуктивність За даними Microsoft, 32-бітне програмне забезпечення, що працює під WOW64 (x64), має схожу продуктивність з виконанням під 32-бітною Windows, але з меншою кількістю можливих потоків. На не-x64 системі WOW64 призводить до зниження продуктивності через програмну емуляцію.

32-бітна програма може отримати повні 4 гігабайти віртуальної пам'яті на 64-бітній системі, тоді як на 32-бітній системі частина цієї адресованої пам'яті втрачається, оскільки вона використовується ядром та периферійними пристроями з відображенням у пам'яті, такими як відеоадаптер, що зазвичай призводить до того, що програми можуть використовувати максимум 2 або 3 ГБ оперативної пам'яті.

Нотатки

Примітки

Посилання Сторінка MSDN про запуск 32-бітних програм на 64-бітній Windows