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.