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

Veuillez expliquer la différence entre x86,x32 et x64? C'est un peu confus quand il s'agit de x86 et x32 parce que la plupart du temps les programmes 32 bits fonctionnent sur x86...

35
demandé sur jww 2011-10-03 16:32:43

3 réponses

x86 renvoie à L'architecture du processeur Intel qui était utilisée dans les PC. Les numéros de modèle étaient 8088 (version de bus 8 bits de 8086 et utilisé 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 des processeurs. Pentium etc, jamais un Hexium :).

x64 est le nom de l'architecture pour les extensions de l'ensemble d'instructions x86 qui activent le code 64 bits. Inventé par AMD et ensuite copié par Intel quand ils ne pouvaient pas obtenir leur propre arche de 64 bits pour être compétitif, Itanium n'a pas bien fonctionné. Les autres noms pour cela sont x86_64, le nom original D'AMD et couramment utilisé dans les outils open source. Et amd64, le nom suivant D'AMD et couramment utilisé dans les outils Microsoft. Les propres noms d'Intel pour cela (EM64T et "Intel 64") n'ont jamais été trouvés.

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

22
répondu Hans Passant 2015-09-17 23:30:34

Hans et DarkDust répondre à couvert sur les architectures i386, i686 et amd64/x86_64, donc il n'y a aucun sens à revisiter. Cette réponse se concentrera sur X32, et fournira quelques informations apprises après un port X32.

x32 est un ABI pour les processeurs amd64/x86_64 utilisant des entiers de 32 bits, des longueurs et des pointeurs. L'idée est de combiner la mémoire plus petite et l'empreinte de cache des types de données 32 bits avec le plus grand jeu de registre de x86_64. (Référence: page de portage Debian X32).

x32 peuvent fournir jusqu'à 30% de réduction de l'utilisation de la mémoire et jusqu'à environ 40% d'augmentation de la vitesse. Les cas d'utilisation pour l'architecture sont les suivantes:

  • vserver d'hébergement (lié à la mémoire)
  • netbooks et tablettes (de mémoire faible, rendement)
  • tâches scientifiques (performance)

x32 est un peu plus récente. Il nécessite le support du noyau (3.4 et au-dessus), le support de distro (voir ci-dessous), le support de libc (2.11 ou au-dessus), et GCC 4.8 et au-dessus (amélioré prise en charge du préfixe de taille d'adresse).

Pour les distributions, il a été rendu disponible dans Ubuntu 13.04 ou Fedora 17. Le support du noyau ne nécessitait que le pointeur pour être dans la gamme de 0x00000000 à 0xffffff. À partir de la System V Interface Binaire, AMD64 (Avec LP64 et ILP32 Modèles de Programmation), Section 10.4, p. 132 (c'est la seule phrase):

10.4 Support Du Noyau

Le noyau devrait limiter la pile et les adresses retournées à partir des appels système entre 0x00000000 et 0xffffff.

Quand démarrage un noyau avec le support, vous devez utiliser syscall.x32=y option. Lorsque un noyau, vous devez inclure le CONFIG_X86_X32=y option. (Référence: page de portage Debian X32 et X32 System V Application Binary Interface).


Voici ce que j'ai appris grâce à une récente port après la Debian gens rapporté quelques bugs sur nous après test:

  • le système ressemble beaucoup à X86
  • le préprocesseur __x86_64__ (et amis) et__ILP32__ mais pas __i386__/__i686__ (et amis)
  • vous ne pouvez pas utiliser __ILP32__ seul parce qu'il apparaît de façon inattendue sous Clang et Sun Studio
  • lorsque vous interagissez avec la pile, vous devez utiliser les instructions 64 bits pushq et popq
  • une fois 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
  • attention à l'extension 0 qui se produit sur les 32 bits supérieurs.

si vous êtes à la recherche d'une plate-forme de test, vous pouvez utiliser Debian 8 ou une version plus récente. Leur page wiki à Le Portage Debian X32 a toutes les informations. La visite de 3 secondes: (1) Activer X32 dans le noyau au démarrage; (2) utiliser debootstrap pour installer L'environnement x32 chroot, et (3)chroot debian-x32 pour entrer dans le environnement et tester votre logiciel.

20
répondu jww 2016-06-27 08:10:52

x86 signifie compatible Intel 80x86. Cela incluait le 8086, un processeur 16 bits seulement. De nos jours, cela signifie grossièrement n'importe quel CPU avec un jeu D'instructions compatible Intel 32 bits (généralement n'importe quoi à partir de Pentium). Ne jamais lire x32 utilisé.

x64 signifie un CPU qui est x86 compatible mais dispose d'un mode 64 bits ainsi (le plus souvent, l'instruction 64 bits comme introduit par AMD est visé; L'idée D'Intel d'un mode 64 bits était totalement stupide et heureusement Intel admis et est maintenant à l'aide d'Amd variante).

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

6
répondu DarkDust 2011-10-03 12:42:15