Qu'est-ce que c'est:
- un système d'exploitation 32 bits, lorsqu'il est installé sur un processeur 64 bits, peut exécuter d'anciennes applications 16 bits,
- mais si vous installez un système d'exploitation 64 bits, il ne peut pas exécuter ces applications directement et nécessite une sorte d'émulation (cela ne fonctionne pas toujours parfaitement)?
Pour être plus précis, j'ai un processeur 64 bits (Intel Core 2 Duo). Quand j'avais Windows XP et Windows 7 (tous deux 32 bits) installés, ils pouvaient exécuter d'anciennes applications DOS et Windows 616 bits.
Maintenant, j'ai installé l'édition 64 bits de Windows 7. Pourquoi ne peut-il plus exécuter ces mêmes applications?
Réponses:
Si je comprends bien, c'est parce qu'en mode Long (x64 natif), le processeur lui-même ne prend pas en charge le passage en mode 16 bits. Voir Wikipedia . Ainsi, afin de prendre en charge le mode 16 bits, le NTVDM (couche 16 bits de Windows) devrait émuler complètement un processeur 16 bits.
Je suppose qu'ils ont pesé dans la ré-implémentation d'une couche d'émulation par rapport à l'utilisation d'un logiciel de virtualisation déjà existant (VirtualPC, VirtualBox) pour gérer cela, et il a été décidé de supprimer le VDM.
la source
Parce que les handles 64 bits ont 32 bits significatifs :
Sous Windows, les programmes transmettent des "descripteurs" au système d'exploitation et inversement (des nombres que le système d'exploitation utilise pour identifier de manière unique une ressource particulière, telle qu'une fenêtre).
Pour prendre en charge les programmes 16 bits, Windows 32 bits génère uniquement des descripteurs comportant 16 bits significatifs - les 16 bits supérieurs sont ignorés par le système d'exploitation (même si les programmes ne doivent pas en tirer parti). Donc, aucun programme ne peut interagir avec plus de 2 16 objets, ce qui est en fait assez faible.
Cependant, pour améliorer cela, Windows 64 bits a augmenté le nombre de bits significatifs dans un handle à 32. Mais maintenant, cela signifie que les handles ne peuvent pas être passés à des programmes 16 bits sans perte d'informations. Les programmes 16 bits ne peuvent donc pas s'exécuter sur Windows 64 bits.
la source
EnumWindows
et qu'il y a plus de 2 ^ 16 fenêtres dans le système?Pour Windows, c'est parce que les versions x86 du système d'exploitation incluent une émulation 16 bits qui leur permet d'exécuter ces processus DOS plus anciens. Dans les versions x64, ils doivent déjà émuler l'exécution x86 (ils l'appellent WoW64) pour permettre l'exécution de processus 32 bits, et je suppose que l'utilisation de Wow64 pour émuler davantage l'émulateur 16 bits a causé trop de problèmes.
Une poignée de processus 16 bits reconnus s'exécutera car l'émulation est codée en dur pour les gérer, mais le reste ne fonctionne pas car l'émulation n'est pas incluse dans x64.
Voir "Pas de code 16 bits" à l'article MSKB: http://support.microsoft.com/kb/282423
la source
Corrigez-moi si je me trompe, mais si j'ai bien compris, c'est simplement à cause d'un problème spécifique à Windows que NTVDM utilise le mode 8086 virtuel. Le mode de compatibilité sur les processeurs x64 (fonctionnant en mode long) prend en charge le mode protégé «propre», 16 et 32 bits de ce que j'ai trouvé ici: http://en.wikipedia.org/wiki/Long_mode , mais pas certains des 386 ajouts tels que le mode virtuel 8086. Donc, il n'est probablement pas pris en charge car il est inutile pour Microsoft de reprogrammer NTVDM, ce qui nécessiterait probablement l'ajout d'émulation supplémentaire, car certaines applications en mode protégé 16 bits peuvent utiliser le 8086 virtuel, même si la plupart ne le font pas. Je suppose qu'avec suffisamment de travail, il est possible d'écrire quelque chose de plus rapidement que dosbox qui s'exécute en mode long, car les applications 16 bits prennent en charge le matériel.
la source
La situation est différente pour les applications Dos et les applications Windows 16 bits.
Pour les applications Dos, le problème est que le mode 8086 virtuel n’est pas disponible en mode long. Ceci est une limitation de l'architecture de la CPU.
Pour les applications Windows 16 bits (qui s'exécutent en mode protégé 16 bits), la raison en est que MS n'était pas prêt à effectuer le travail nécessaire pour implémenter une couche de compatibilité appropriée. Amusingly Wine est parfaitement capable d’exécuter des applications Windows 16 bits sur un Linux 64 bits.
la source
Je pense que la raison la plus probable est que seul un pourcentage infime des propriétaires de PC souhaitent pouvoir exécuter d'anciennes applications 16 bits sur leur nouveau matériel 64 bits. Microsoft a probablement pensé que cela ne valait pas la peine de continuer à prendre en charge les applications 16 bits.
la source