Dlaczego tak jest:
- 32-bitowy system operacyjny zainstalowany na 64-bitowym procesorze może obsługiwać stare 16-bitowe aplikacje,
- ale jeśli zainstalujesz 64-bitowy system operacyjny, nie będzie on mógł bezpośrednio uruchamiać tych aplikacji i wymagać jakiejś emulacji (która nie zawsze działa idealnie)?
Mówiąc ściślej, mam 64-bitowy procesor (Intel Core 2 Duo). Kiedy miałem zainstalowany system Windows XP i Windows 7 (oba 32-bitowe), mogły one uruchamiać stare aplikacje DOS i 616-bitowe Windows.
Teraz zainstalowałem 64-bitową wersję systemu Windows 7. Dlaczego nie można już uruchamiać tych samych aplikacji?
Odpowiedzi:
Z mojego zrozumienia wynika, że sam procesor nie obsługuje przejścia w tryb 16-bitowy podczas pracy w trybie długim (tryb macierzysty x64). Zobacz Wikipedia . Aby więc obsługiwać tryb 16-bitowy, NTVDM (16-bitowa warstwa w systemie Windows) musiałby w pełni emulować 16-bitowy procesor.
Przypuszczam, że ważyli ponowne wdrożenie warstwy emulacyjnej w porównaniu z użyciem już istniejącego oprogramowania do wirtualizacji (VirtualPC, VirtualBox), aby sobie z tym poradzić, i postanowiono wyciąć VDM.
źródło
Ponieważ uchwyty 64-bitowe mają 32 znaczące bity :
W systemie Windows programy przekazują „uchwyty” do systemu operacyjnego i odwrotnie (są to liczby używane przez system operacyjny do jednoznacznej identyfikacji określonego zasobu, takiego jak okno).
Aby obsługiwać programy 16-bitowe, 32-bitowy system Windows generuje tylko uchwyty, które mają 16 znaczących bitów - 16 górnych bitów jest ignorowanych przez system operacyjny (nawet jeśli programy nie wykorzystują tego faktu). Dlatego żaden program nie może wchodzić w interakcje z więcej niż 2 16 obiektami, co w rzeczywistości jest raczej niskie.
Jednak, aby to poprawić, 64-bitowy system Windows zwiększył liczbę znaczących bitów w uchwycie do 32. Ale teraz oznacza to, że uchwyty nie mogą być przekazywane do programów 16-bitowych bez utraty informacji. Dlatego programy 16-bitowe nie mogą działać w 64-bitowym systemie Windows.
źródło
EnumWindows
i w systemie jest więcej niż 2 ^ 16 okien?W przypadku systemu Windows jest tak, ponieważ wersje systemu operacyjnego x86 zawierają 16-bitową emulację, która pozwala im uruchamiać starsze procesy DOS. W wersjach x64 muszą już emulować wykonanie x86 (nazywają to WoW64), aby umożliwić uruchomienie procesów 32-bitowych, i chyba Wow64 do dalszej emulacji 16-bitowego emulatora spowodował zbyt wiele problemów.
Uruchomi się garść rozpoznanych 16-bitowych procesów, ponieważ emulacja jest na stałe zakodowana, aby je obsłużyć, ale reszta nie działa, ponieważ emulacji nie ma w x64.
Zobacz „Brak kodu 16-bitowego” w artykule MSKB: http://support.microsoft.com/kb/282423
źródło
Popraw mnie, jeśli się mylę, ale według mojego zrozumienia, NTVDM używa wirtualnego trybu 8086 tylko z powodu specyficznego dla systemu Windows problemu. Tryb zgodności na procesorach x64 (działających w trybie długim) obsługuje pełny „czysty” tryb chroniony, 16- i 32-bitowy z tego, co tu znalazłem: http://en.wikipedia.org/wiki/Long_mode , ale nie niektóre z 386 dodatków, takich jak wirtualny tryb 8086. Więc najprawdopodobniej nie jest obsługiwany, ponieważ nie opłaca się Microsoftowi przeprogramować NTVDM, co prawdopodobnie wymagałoby dodatkowej emulacji, ponieważ niektóre 16-bitowe aplikacje w trybie chronionym mogą korzystać z wirtualnego 8086, nawet jeśli większość tego nie robi. Przypuszczam, że przy wystarczającej pracy można napisać coś szybciej niż dosbox działający w trybie długim, ponieważ istnieje wsparcie sprzętowe dla aplikacji 16-bitowych.
źródło
Inaczej jest w przypadku aplikacji Dos i 16-bitowych aplikacji Windows.
W przypadku aplikacji Dos problem polega na tym, że wirtualny tryb 8086 nie jest dostępny w trybie długim. Jest to ograniczenie architektury procesora.
W przypadku 16-bitowych aplikacji Windows (które działają w 16-bitowym trybie chronionym) powodem jest to, że MS nie był przygotowany do wykonania odpowiedniej implementacji warstwy kompatybilności. Zabawnie Wine jest doskonale zdolny do uruchamiania 16-bitowych aplikacji Windows na 64-bitowym systemie Linux.
źródło
Myślę, że najbardziej prawdopodobnym powodem jest to, że tylko niewielki procent właścicieli komputerów naprawdę chce mieć możliwość uruchamiania starych 16-bitowych aplikacji na nowym 64-bitowym sprzęcie. Microsoft prawdopodobnie doszedł do wniosku, że nie warto było kontynuować obsługi 16-bitowych aplikacji.
źródło