web-dev-qa-db-fra.com

Différence entre les architectures x86, x32 et x64?

S'il vous plaît expliquer la différence entre x86, x32 et x64? C'est un peu déroutant quand il s'agit de x86 et x32 parce que la plupart du temps les programmes 32 bits fonctionnent sur x86 ...

47
getjish

x86 fait référence à l'architecture de processeur Intel utilisée dans les PC. Les numéros de modèle étaient 8088 (version de bus 8 bits de 8086 et utilisés dans le premier PC IBM), 8086, 286, 386, 486. Après quoi, ils sont passés à des noms au lieu de numéros pour empêcher AMD de copier les noms de processeurs. Pentium etc., jamais un Hexium :).

x64 est le nom d'architecture des extensions du jeu d'instructions x86 qui activent le code 64 bits. Inventé par AMD et plus tard copié par Intel alors qu’ils ne parvenaient pas à concurrencer leur propre Arch 64 bits, Itanium n’a pas eu de bons résultats. Les autres noms correspondants sont x86_64, le nom d'origine d'AMD et couramment utilisés dans les outils open source. Et AMD64, prochain nom d'AMD et couramment utilisé dans les outils Microsoft. Les propres noms d'Intel pour cela (EM64T et "Intel 64") n'ont jamais été compris.

x32 est un terme flou qui n'est pas associé au matériel. Cela a tendance à être utilisé pour signifier "32 bits" ou "architecture de pointeur 32 bits", Linux a un ABI de ce nom.

25
Hans Passant

Hans et DarkDust ont répondu aux questions i386/i686 et AMD64/x86_64, il est donc inutile de les revoir. Cette réponse se concentrera sur X32 et fournira quelques informations apprises après un port X32.

x32 est une ABI pour les processeurs AMD64/x86_64 utilisant des entiers, des longs et des pointeurs 32 bits. L'idée est de combiner l'encombrement de la mémoire et du cache des types de données 32 bits avec le plus grand jeu de registres de x86_64. (Référence: page du port Debian X32 ).

x32 peut permettre une réduction de l’utilisation de la mémoire jusqu’à environ 30% et une augmentation de la vitesse jusqu’à environ 40%. Les cas d'utilisation de l'architecture sont les suivants:

  • hébergement vserver (lié à la mémoire)
  • netbooks/tablettes (mémoire insuffisante, performances)
  • tâches scientifiques (performance)

x32 est un ajout quelque peu récent. Il nécessite le support du noyau (3.4 et supérieur), du support de la distribution (voir ci-dessous), du support de la libc (2.11 ou supérieur) et de GCC 4.8 et supérieur (meilleur support du préfixe de taille d'adresse).

Pour les distributions, il était disponible dans Ubuntu 13.04 ou Fedora 17. La prise en charge par le noyau ne nécessitait que le pointeur qui se situe dans la plage de 0x00000000 à 0xffffffff. À partir de interface binaire d'application System V, AMD64 (avec modèles de programmation LP64 et ILP32) , Section 10.4, p. 132 (c'est la seule phrase):

10.4 Support du noyau
Le noyau devrait limiter la pile et les adresses renvoyées par les appels système entre 0x00000000 et 0xffffffff.

Lorsque booting un noyau avec le support, vous devez utiliser syscall.x32=y option. Lorsque construction un noyau, vous devez inclure le CONFIG_X86_X32=y option. (Référence: page Port Debian X32 et interface binaire d'application X32 System V ).


Voici une partie de ce que j'ai appris grâce à un port récent après que les gens de Debian eurent signalé quelques bugs après nous avoir testé:

  • le système ressemble beaucoup à X86
  • le préprocesseur définit __x86_64__ (et amis) et__ILP32__, mais non __i386__/__i686__ (et amis)
  • vous ne pouvez pas utiliser __ILP32__ seul car il apparaît de manière inattendue sous Clang et Sun Studio
  • lors de l'interaction avec la pile, vous devez utiliser les instructions 64 bits pushq et popq
  • une fois qu'un registre est rempli/configuré à partir de types de données 32 bits, vous pouvez effectuer les opérations 64 bits sur eux, comme adcq
  • faites attention à l'extension 0 qui se produit sur les 32 bits supérieurs.

Si vous recherchez une plate-forme de test, vous pouvez utiliser Debian 8 ou une version ultérieure. Leur page wiki à port Debian X32 contient toutes les informations. Le tour de 3 secondes: (1) active X32 dans le noyau au démarrage; (2) utilisez debootstrap pour installer l’environnement chroot X32, et (3) chroot debian-x32 pour entrer dans l'environnement et tester votre logiciel.

29
jww

x86 signifie Intel compatible 80x86. Cela incluait autrefois le 8086, un processeur 16 bits uniquement. De nos jours, cela signifie à peu près tout processeur avec un jeu d'instructions compatible Intel 32 bits (généralement à partir de Pentium). Jamais lu x32 utilisé.

x64 signifie un processeur qui est x86 compatible mais dispose également d’un mode 64 bits (le plus souvent, le jeu d’instructions introduit par AMD a été conçu; l’idée d’un mode 64 bits d’Intel était totalement stupide et, heureusement, Intel a admis cela et utilise maintenant la variante d’AMD ).

Donc, la plupart du temps, vous pouvez le simplifier de cette façon: x86 est compatible Intel en mode 32 bits, x64 est compatible Intel en mode 64 bits.

8
DarkDust