Warum ist es das:
- Auf einem 32-Bit-Betriebssystem, das auf einer 64-Bit-CPU installiert ist, können alte 16-Bit-Anwendungen ausgeführt werden.
- Wenn Sie jedoch ein 64-Bit-Betriebssystem installieren, können diese Anwendungen nicht direkt ausgeführt werden und benötigen eine Emulation (die nicht immer einwandfrei funktioniert).
Genauer gesagt habe ich einen 64-Bit-Prozessor (Intel Core 2 Duo). Wenn ich Windows XP und Windows 7 (beide 32-Bit) installiert hatte, konnten sie alte DOS- und 616-Bit-Windows-Anwendungen ausführen.
Jetzt habe ich die 64-Bit-Edition von Windows 7 installiert. Warum können dieselben Anwendungen nicht mehr ausgeführt werden?
Antworten:
Meines Erachtens liegt dies daran, dass die CPU im Long-Modus (x64 native) den Wechsel in den 16-Bit-Modus nicht unterstützt. Siehe Wikipedia . Um den 16-Bit-Modus zu unterstützen, müsste NTVDM (die 16-Bit-Schicht in Windows) einen 16-Bit-Prozessor vollständig emulieren.
Ich nehme an, sie haben abgewogen, eine Emulationsebene neu zu implementieren, anstatt eine bereits vorhandene Virtualisierungssoftware (VirtualPC, VirtualBox) zu verwenden, und es wurde beschlossen, den VDM zu kürzen.
quelle
Da 64-Bit-Handles 32 signifikante Bits haben :
In Windows übergeben Programme "Handles" an das Betriebssystem und umgekehrt (dies sind Zahlen, mit denen das Betriebssystem eine bestimmte Ressource, z. B. ein Fenster, eindeutig identifiziert).
Zur Unterstützung von 16-Bit-Programmen generiert 32-Bit-Windows nur Punkte mit 16 signifikanten Bits. Die 16 oberen Bits werden vom Betriebssystem ignoriert (auch wenn Programme diese Tatsache nicht ausnutzen sollen). Daher kann kein Programm mit mehr als 2 16 Objekten interagieren , was eigentlich ziemlich niedrig ist.
Um dies zu verbessern, hat 64-Bit-Windows die Anzahl der signifikanten Bits in einem Handle auf 32 erhöht. Dies bedeutet jedoch, dass Handles nicht ohne Informationsverlust an 16-Bit-Programme übergeben werden können. Daher können 16-Bit-Programme nicht unter 64-Bit-Windows ausgeführt werden.
quelle
EnumWindows
und sich mehr als 2 ^ 16 Fenster im System befinden?Unter Windows ist dies darauf zurückzuführen, dass die x86-Versionen des Betriebssystems eine 16-Bit-Emulation enthalten, mit der ältere DOS-Prozesse ausgeführt werden können. In den x64-Versionen müssen sie bereits die x86-Ausführung emulieren (sie nennen es WoW64), damit 32-Bit-Prozesse ausgeführt werden können, und ich vermute, dass die Verwendung von Wow64 zur weiteren Emulation des 16-Bit-Emulators zu viele Probleme verursacht hat.
Eine Handvoll erkannter 16-Bit-Prozesse werden ausgeführt, da die Emulation für ihre Verarbeitung hartcodiert ist. Der Rest funktioniert jedoch nicht, da die Emulation nicht in x64 enthalten ist.
Siehe "Kein 16-Bit-Code" im MSKB-Artikel: http://support.microsoft.com/kb/282423
quelle
Korrigieren Sie mich, wenn ich falsch liege, aber nach meinem Verständnis verwendet NTVDM nur aufgrund eines Windows-spezifischen Problems den virtuellen 8086-Modus. Der Kompatibilitätsmodus auf x64-Prozessoren (im langen Modus ausgeführt) unterstützt den vollständigen, 'sauberen' geschützten 16- und 32-Bit-Modus von dem, was ich hier gefunden habe: http://en.wikipedia.org/wiki/Long_mode , aber nicht einige der 386 Ergänzungen wie der virtuelle 8086-Modus. Daher wird es höchstwahrscheinlich nicht unterstützt, weil es sich nicht auszahlt, wenn Microsoft NTVDM neu programmiert. Dies würde wahrscheinlich das Hinzufügen einer weiteren Emulation erfordern, da einige 16-Bit-Anwendungen im geschützten Modus virtuelles 8086 verwenden können, auch wenn die meisten dies nicht tun. Ich nehme an, mit genügend Arbeit ist es möglich, etwas zu schreiben, das schneller ist als die Dosbox, die im Long-Modus läuft, da es Hardware-Unterstützung für 16-Bit-Apps gibt.
quelle
Bei Dos-Anwendungen und 16-Bit-Windows-Anwendungen ist die Situation anders.
Für Dos-Anwendungen besteht das Problem darin, dass der virtuelle 8086-Modus im langen Modus nicht verfügbar ist. Dies ist eine Einschränkung der CPU-Architektur.
Bei 16-Bit-Windows-Anwendungen (die im 16-Bit-geschützten Modus ausgeführt werden) lag der Grund darin, dass MS nicht bereit war, die Arbeit zur Implementierung einer geeigneten Kompatibilitätsebene auszuführen. Amüsanterweise ist Wine perfekt in der Lage, 16-Bit-Windows-Apps unter 64-Bit-Linux auszuführen.
quelle
Ich denke, der wahrscheinlichste Grund ist, dass nur ein kleiner Prozentsatz der PC-Besitzer tatsächlich in der Lage sein möchte, alte 16-Bit-Anwendungen auf ihrer neuen 64-Bit-Hardware auszuführen. Microsoft hat wahrscheinlich gedacht, dass es sich nicht lohnt, weiterhin 16-Bit-Anwendungen zu unterstützen.
quelle