web-dev-qa-db-fra.com

Pourquoi un SE 64 bits ne peut-il pas exécuter une application 16 bits?

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). Une fois Windows XP et Windows 7 (tous deux en 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?

38
Bob

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, pour 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é pour ré-implémenter 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 couper le VDM.

25
Matt Sieker

Parce que les handles 64 bits ont 32 bits significatifs :

Notez que Windows 64 bits ne prend pas en charge l'exécution d'applications Windows 16 bits.
La raison principale en est que les descripteurs ont 32 bits significatifs sous Windows 64 bits.
Par conséquent, les descripteurs ne peuvent pas être tronqués et transmis à des applications 16 bits sans perte de données.

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 uniquement génère des descripteurs dotés de 16 bits significatifs. Les 16 bits supérieurs sont ignorés par le système d'exploitation profitant de ce fait). Donc, aucun programme ne peut interagir avec plus de 216 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 fonctionner sur Windows 64 bits.

14
Mehrdad

Pour Windows, c’est 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" dans l'article de la base de connaissances MSKB: http://support.Microsoft.com/kb/282423

10
SqlRyan

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 n'est pas rentable 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.

3
MichaelS

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 tout en continuant à prendre en charge les applications 16 bits.

1
Stephen C

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.

1
plugwash