stringtranslate.com

WoW64

В вычислениях на платформах Microsoft WoW64 ( Windows 32-bit on Windows 64 - bit ) — это подсистема операционной системы Windows, способная запускать 32-битные приложения на 64-битной Windows. [1] Она включена во все 64-битные версии Windows, за исключением Windows Server Server Core , где она является необязательным компонентом, и Windows Nano Server , где она не включена. [a] WoW64 стремится устранить многие различия между 32-битной и 64-битной Windows, в частности, связанные со структурными изменениями в самой Windows.

Библиотеки перевода

Подсистема WoW64 включает в себя облегченный слой совместимости , который имеет схожие интерфейсы на всех 64-битных версиях Windows. Она направлена ​​на создание 32-битной среды, которая предоставляет интерфейсы, необходимые для запуска немодифицированных 32-битных приложений Windows на 64-битной системе. WOW64 реализован с использованием нескольких DLL, некоторые из которых включают: [3]

  1. Wow64.dll, основной интерфейс ядра Windows NT , который осуществляет преобразование (трансляцию) между 32-битными и 64-битными вызовами, включая манипуляции с указателями и стеком вызовов
  2. Wow64win.dll, который обеспечивает соответствующие точки входа для 32-битных приложений (win32k thunks)
  3. DLL, которая позволяет выполнять 32-битные инструкции x86, которые различаются в зависимости от архитектуры набора инструкций .
    • На x86-64 , Wow64cpu.dllзаботится о переключении процессора из 32-битного в 64-битный режим. Это вычислительно дешево, так как машины x86-64 имеют собственный режим для запуска 32-битного кода x86. [4]
    • На IA-64 ( Itanium 2 ) для более медленной [5] программной эмуляции необходимы три файла : Wow64cpu.dll«уровень абстракции ЦП»; IA32Exec.binпрограммный эмулятор x86; и Wowia32x.dllмост между эмулятором и системой WOW64. [6]
    • На ARMv8 64-бит , xtajit.dllдля эмуляции x86 и wowarmhw.dllдля переключения в режим ARM32. [3]

Реестр и файловая система

Подсистема 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-битные библиотеки и исполняемые файлы. Исключениями из этих перенаправлений являются: [7]

Перенаправление помогает поддерживать работу 32-разрядных приложений без необходимости знать о статусе WoW64. [7] Если 32-разрядное приложение хочет получить доступ к реальному %SystemRoot%\System32, оно может сделать это через псевдокаталог, %SystemRoot%\sysnativeначиная с Windows Vista. [7] Определение статуса Wow64 возможно через IsWow64Process().

Существует два каталога Program Files, каждый из которых виден как 32-битным, так и 64-битным приложениям. Каталог, в котором хранятся 32-битные файлы, называется Program Files (x86) , чтобы различать их, в то время как 64-битная версия сохраняет традиционное имя Program Files без дополнительных квалификаторов. Перенаправление файловой системы не используется для поддержания разделения; вместо этого изменения WoW64 и аналогичные результаты запроса указывают программам установки на правильный каталог. [8]FOLDERID_ProgramFiles

Несколько новых каталогов также найдены в ARM64, где WOW64 обрабатывает не только запуск 32-битных программ x86, но и 32-битных программ ARM, которые используют SysArm32вместо этого. ARM64 также поддерживает так называемый CHPE "compiled-hybrid-PE", который имеет код ARM64 в контейнере x86 dll (для более эффективной совместимости без эмуляции); эти dll находятся в SyCHPE32. [9]

Совместимость приложений

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, поскольку ЦП не поддерживает режим 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-разрядную версию.

По состоянию на 2010 год ошибка в слое трансляции версии x64 WoW64 [10] [11] также делает все 32-битные приложения, которые полагаются на функцию Windows API GetThreadContext, несовместимыми. К таким приложениям относятся отладчики приложений, трассировщики стека вызовов (например, IDE, отображающие стек вызовов) и приложения, которые используют механизмы сборки мусора (GC). Одним из наиболее широко используемых, но затронутых [12] механизмов сборки мусора является Boehm GC . Он также используется в качестве сборщика мусора по умолчанию не менее популярного Mono . Хотя Mono представила новый (но необязательный) GC с октября 2010 года под названием SGen-GC, он выполняет сканирование стека таким же образом, как и Boehm GC, что также делает его несовместимым с WoW64. По состоянию на июль 2016 года исправление не было предоставлено, хотя были предложены обходные пути. [13]

Производительность

По данным Microsoft, 32-разрядное программное обеспечение, работающее под WOW64 (x64), имеет производительность, схожую с производительностью под 32-разрядной Windows, но с меньшим количеством возможных потоков. В системах, отличных от x64, WOW64 влечет за собой накладные расходы производительности из-за задействованной программной эмуляции. [5]

32-разрядному приложению может быть выделено целых 4 гигабайта виртуальной памяти на 64-разрядной системе, тогда как на 32-разрядной системе часть этой адресуемой памяти теряется, поскольку она используется ядром и периферийными устройствами, отображаемыми в памяти, такими как видеоадаптер , в результате чего приложения обычно могут использовать максимум 2 или 3 ГБ оперативной памяти.

Смотрите также

Примечания

  1. ^ В частности:Wine , который не является продуктом Microsoft, также предлагает экспериментальную версию WoW64 в версии x64. [2] Wine также имеет wow64.dll, wow64win.dll, и wow64cpu.dll.

Ссылки

  1. ^ QuinnRadich; DCtheGeek; msatranjr (19.08.2020). "Подробности реализации WOW64". learn.microsoft.com . Архивировано из оригинала 16.04.2023 . Получено 16.04.2023 .
  2. ^ Конвей, Адам (2023-01-25). "Wine 8.0 выпущен с лучшей совместимостью с контроллерами, экспериментальной поддержкой WoW64 и многим другим". XDA Developers . Архивировано из оригинала 2023-04-16 . Получено 2023-04-16 .
  3. ^ ab "Подробности реализации WOW64". Microsoft . Получено 2018-04-21 .
  4. ^ Экелс, Стивен (9 ноября 2020 г.). «WOW64!Hooks: Внутреннее устройство подсистемы WOW64 и методы перехвата». Mandiant .
  5. ^ ab "Производительность и потребление памяти в WOW64". Microsoft . Получено 2013-05-06 .
  6. ^ "Подробности реализации WOW64 (Windows)". 26 апреля 2010 г. Архивировано из оригинала 2010-04-26.– Более ранняя версия статьи, которая показана Wow64cpu.dllкак часть реализации IA-64.
  7. ^ abc "File System Redirector (Windows)". msdn.microsoft.com . 2 февраля 2023 г.
  8. ^ "winapi - SHGetFolderPath() 32 бит против 64 бит". Переполнение стека .
  9. ^ Бенеш, Петр (4 ноября 2018 г.). «Внутренности WoW64: повторное открытие Heaven's Gate на ARM». mindless-area (wbenny.github.io) .
  10. ^ Saw, Zach (13 ноября 2010 г.). "Ошибка WOW64: GetThreadContext() может возвращать устаревшее содержимое". Блог Zach Saw . Получено 15.11.2010 .
  11. ^ "Ошибка ОС WOW64: старые 32-разрядные приложения XP не работают под Win7 WOW64". Microsoft Developer Network . 11 ноября 2010 г. Получено 15 ноября 2010 г.
  12. ^ "Обсуждения мусоросборника Boehm (Boehm GC)" . Получено 2010-11-25 .
  13. ^ "GetThreadContext возвращает устаревшие значения регистров на WOW64". Microsoft= 2016-07-23 . Получено 2016-07-23 .

Внешние ссылки