W Windows opartych na architekturze x64 nadal możemy uruchamiać
oprogramowanie 32 bitowe. Dowiedzmy się jak to jest możliwe oraz, czy starsze
programy działają tak samo wydajnie, jak na systemach 32 bitowych.
Wstęp
Oprogramowanie 64 bitowe wymaga zmiany kodu w celu dostosowania go do pracy w
nowym środowisku. Więc, aby wykorzystać pełnię możliwości naszego systemu bazującego na
architekturze x64 powinniśmy posiadać odpowiednio przekompilowane aplikacje. Niestety nie
wszystkie programy do tej pory doczekały się swoich 64 bitowych odpowiedników
przeznaczonych do pracy pod kontrolą nowych systemów operacyjnych. Jednakże w 64
bitowych OS'ach z rodziny Windows został zaimplementowany mechanizm
umożliwiający uruchamianie starszych aplikacji. Microsoft jednakże całkowicie
zrezygnował z podsystemu 16 bitowego, także w Windows Vista 32 bit.
Za możliwość uruchamiania programów 32 bitowych w Windows x64 odpowiada
zaimplementowana,
specjalnie do tego celu, warstwa translacyjna o nazwie WoW64
(WindowsOnWindows64).
Budowa emulatora WoW64
Pliki emulatora zlokalizowane są w katalogu Windows\System32\WOW64 na
partycji systemowej. W skład mechanizmu WoW64 wchodzą następujące biblioteki:
- Wow64.dll - odpowiada za strukturę emulacji środowiska.
- Wow64Win.dll - odpowiada za funkcję punktów wejścia dla pliku
Win32k.sys.
- Wow64Cpu.dll - odpowiada za emulację instrukcji x86 w
procesorach Intel Itanium (ia64), które nie posiadają wbudowanej obsługi
instrukcji 32 bitowych x86. Nie jest wykorzystywana przez procesory bazujące
na architekturze x64, gdyż są one zgodne wstecznie, a obsługa 64 bitowych
instrukcji jest jedynie rozszerzeniem ich możliwości.
- Ntdll.dll - w systemach x64 bitowych znajduje się 64
bitowa wersja tej biblioteki i nie możliwe jest jej wykorzystanie podczas
uruchamiania oprogramowania 32 bitowego. Służy do tego, ładowana podczas
startu, 32 bitowa odmiana tej biblioteki.
Jak to działa?
Podczas uruchamiania systemu WoW64 ładuje 32 bitową bibliotekę Ntdll.dll,
następnie inicjowany jest jej kod, który uruchamia niezbędne, pozostałe 32 bitowe
pliki. Większość z nich jest kopią pochodzącą z Windows 32 bit. Niektóre
jednakże zostały napisane od nowa, gdyż wymagała tego zgodność z translatorem Windows on
Windows 64. Pamiętajmy jednak, iż w wypadku uruchomienia starszego programu
nadal panują narzuty znane ze środowiska Windows 32 bit.
Programy, które instalujemy w środowisku Windows są umieszczane domyślnie w
katalogu Program Files na dysku systemowym. Jednakże w Windows x64 odnajdziemy
dwa tego typu foldery - pierwszy, wspomniany, gdzie znajdziemy oprogramowanie
64 bitowe oraz drugi, mianowicie Program Files x86, w którym to instalowane są
starsze programy - 32 bitowe. Pamiętajmy, aby nie instalować aplikacji 32
bitowych w folderze Program Files, gdyż może to wpłynąć na stabilność
funkcjonowania programu
oraz samego środowiska Windows.

Podczas uruchamiania programu 32 bitowego tworzona jest sekwencja odwoławcza.
Jednakże proces ten w trybie użytkownika nie może być zrealizowany przez system 64
bitowy. I tutaj wkracza do akcji emulator WindowsOnWindows64. Sekwencja jest przechwytywana przez
komponent Wow64.dll i polecenie jest wykonywane przez procesor w natywnym
środowisku 64 bitowym. Dokładny schemat działania aplikacji 32 bitowej w
systemie Windows x64 pokazuje grafika poniżej.

Ograniczenia WoW64
Emulator WindowsOnWindows64 posiada jednakże pewne ograniczenia. Poniżej
możemy zobaczyć listę przedstawiającą restrykcje, które narzuca ten mechanizm
podczas wykonywania kodu 32 bitowego:
- Ograniczenie przestrzeni adresowania pamięci do 2 GB dla procesu (domyślnie). Jednakże
stosując przełącznik /LARGEADDRESSAWARE możemy rozszerzyć tą wartość do 4
gigabajtów
- Brak możliwości uruchamiania oprogramowania 16 bitowego (w Windows Vista 32
bit podsystem ten także został usunięty)
- Zablokowano Wirtualną Maszynę DOS (VMD)
- Proces 32 bitowy nie ma sposobności uruchomienia 64
bitowej biblioteki DLL
- Fizyczne rozszerzenie adresu (PAE) jest niedostępne w IPF
- Brak wsparcia dla sprzętowej akceleracji DirectX w IPF
Zmienne środowiskowe
Poniższa tabela przedstawia zmienne środowiskowe wprowadzone w celu
zachowania kompatybilności.
| Zmienna środowiskowa |
Wartość 64 bitowa |
Wartość 32 bitowa |
| Architektura procesora |
Natywna (AMD64 lub IA64) |
x86 |
| PROCESSOR_ARCHITEW6432 |
Niedostępne |
%PROCESSOR_ARCHITECTURE% |
| ProgramFiles |
%ProgramFiles% |
%ProgramFiles(x86)% |
| ProgramW6432 |
Niedostępne |
%ProgramFiles% |
| CommonProgramFiles |
%CommonProgramFiles% |
%CommonProgramFiles(x86)% |
| CommonProgramW6432 |
Niedostępne |
%CommonProgramFiles% |
Tabela druga natomiast przedstawia zależności, jakie zachodzą podczas
uruchamiania przez program, aplikacji 32 bitowej, 64 bitowej oraz pliku
niezdefiniowanego.
|
32 bitowa aplikacja |
64 bitowa aplikacja |
plik niezdefiniowany |
| 32 bitowa aplikacja |
Oba procesy uruchamiane są w WoW64 |
32 bitowa aplikacja zatrzymuje przekazanie, uruchamia 64 bitową
aplikację i ponownie powtarza przekazanie |
Uruchamiany jest interpreter 32 bitowy i następuje przekazanie do
WoW64 |
| 64 bitowa aplikacja |
Proces zostaje przekazany do lokalizacji SysWow64 |
Oba procesy są natywne i nie ma potrzeby stosowania dodatkowych
zabiegów |
Uruchamiana jest 64 bitowa wersja interpretera |
A jak to wygląda w praktyce?
Większość programów 32 bitowych nie sprawia problemów na platformie x64.
Emulator WoW64 sprawdza się bardzo dobrze w tej roli, nie powodując w większości
sytuacji spadku wydajności aplikacji. Znane są nawet przypadki, gdy
oprogramowanie 32 bitowe uruchomione w środowisku 64 bitowym działało szybciej,
niż w Windows 32 bit! Problemy zazwyczaj występują z oprogramowaniem, które
odwołuje się bezpośrednio do warstwy jądra systemu operacyjnego lub sprzętowej.
W takim wypadku pozostaje nam jedynie poszukanie 64 bitowej wersji aplikacji lub
też zmiana oprogramowania na inne - kompatybilnego ze środowiskiem x64. Jako
ciekawostkę możemy dodać to, iż wiele programów dostarczanych wraz z Windows x64
konfiguruje w systemie jako aplikacje 32 bitowe, np. odtwarzacz Windows Media
Player, a inne istnieją w obu wersjach, jak np. Internet Explorer.
Podsumowanie
Implementacja funkcji WoW64 w Windows Vista z pewnością pozwoli nam,
korzystając z najnowszych rozwiązań Microsoftu, użytkować starsze programy bez
wyraźnego spadku wydajności. Do czasu, aż oprogramowanie 64 bitowe "trafi pod
strzechy" bez obaw możemy już dziś wykorzystać potencjał platformy x64
użytkując zarówno aplikacje, które pozwolą wykorzystać w pełni moc sprzętu, który
posiadamy w sąsiedztwie programów, na których 64 bitowe odpowiedniki jeszcze
ciągle czekamy.