Veuillez expliquer la différence entre x86
, x32
y x64
? C'est un peu confus quand il s'agit de x86
y x32
parce que la plupart du temps, les programmes 32 bits fonctionnent sur x86...
Réponses
Trop de publicités?Les réponses de Hans et DarkDust ont couvert i386/i686 et amd64/x86_64, il n'y a donc aucun sens à les revisiter. Cette réponse se concentrera sur X32, et fournira quelques informations apprises après un portage 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 la plus petite mémoire et l'empreinte du cache des types de données 32 bits avec le plus grand ensemble de registres de x86_64. (Référence : Page du port Debian X32 ).
x32 permet de réduire jusqu'à environ 30 % l'utilisation de la mémoire et d'augmenter jusqu'à environ 40 % la vitesse. Les cas d'utilisation de l'architecture sont les suivants :
- hébergement de vserver (limité en mémoire)
- netbooks/tablettes (faible mémoire, performances)
- tâches scientifiques (performance)
x32 est un ajout assez récent. Il nécessite le support du noyau (3.4 et plus), le support de la distribution (voir ci-dessous), le support de la libc (2.11 ou plus), et GCC 4.8 et plus (support amélioré du préfixe de taille d'adresse).
Pour les distros, il a été rendu disponible dans Ubuntu 13.04 ou Fedora 17. Le support du noyau exigeait seulement que le pointeur soit compris entre 0x00000000 et 0xffffffff. Depuis le Interface binaire d'application System V, AMD64 (avec les modèles de programmation LP64 et ILP32) Section 10.4, p. 132 (c'est la seule phrase) :
10.4 Support du noyau
Le noyau doit limiter la pile et les adresses renvoyées par les appels système entre 0x00000000 et 0xffffffff.
Cuando démarrage un noyau avec le support, vous devez utiliser syscall.x32=y
option. Lorsque bâtiment un noyau, vous devez inclure le CONFIG_X86_X32=y
option. (Référence : Page du port Debian X32 y Interface binaire d'application du système V de X32 ).
Voici ce que j'ai appris lors d'un portage récent après que les gens de Debian nous aient signalé quelques bogues après les tests :
- le système ressemble beaucoup à X86
- le préprocesseur définit
__x86_64__
(et amis) y__ILP32__
mais pas__i386__
/__i686__
(et amis) - vous ne pouvez pas utiliser
__ILP32__
seul parce qu'il apparaît de manière inattendue sous Clang et Sun Studio - lorsque vous interagissez avec la pile, vous devez utiliser les instructions 64 bits
pushq
ypopq
- 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 ces registres, comme par exemple
adcq
- faites attention à l'extension du 0 qui se produit sur les 32 bits supérieurs.
Si vous recherchez une plate-forme de test, vous pouvez utiliser la version 8 ou supérieure de Debian. Leur page wiki à Portage Debian X32 contient toutes les informations. Le tour en 3 secondes : (1) activer X32 dans le noyau au démarrage ; (2) utiliser la fonction debootstrap
pour installer l'environnement chroot X32, et (3) chroot debian-x32
pour entrer dans l'environnement et tester votre logiciel.
X86 fait référence à l'architecture du processeur Intel qui était utilisé dans les PC. Les numéros de modèle étaient 8088 (version à bus 8 bits du 8086 et utilisée dans le premier PC IBM), 8086, 286, 386, 486. Par la suite, ils ont remplacé les numéros par des noms 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 du jeu d'instructions x86 qui permettent le code 64 bits. Inventé par AMD et copié plus tard par Intel lorsqu'ils n'ont pas réussi à rendre leur propre architecture 64 bits compétitive, Itanium n'a pas bien marché. Les autres noms 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 noms qu'Intel lui a donnés (EM64T et "Intel 64") n'ont jamais été adoptés.
x32 est un terme flou qui n'est pas associé au matériel. Il tend à être utilisé pour signifier "32 bits" ou "architecture de pointeur 32 bits", Linux possède une ABI de ce nom.
x86
signifie compatible Intel 80x86. Cela incluait autrefois le 8086, un processeur 16 bits seulement. Aujourd'hui, cela signifie en gros n'importe quel processeur avec un jeu d'instructions 32 bits compatible Intel (généralement tout ce qui est à partir du Pentium). Ne lisez jamais x32
utilisé.
x64
signifie une unité centrale qui est x86
mais dispose également d'un mode 64 bits (le plus souvent, il s'agit du jeu d'instructions 64 bits introduit par AMD ; l'idée d'Intel d'un mode 64 bits était totalement stupide et, heureusement, Intel l'a admis et utilise désormais la variante d'AMD).
Donc, la plupart du temps, vous pouvez le simplifier de cette façon : x86
est compatible avec Intel en mode 32 bits, x64
est compatible avec Intel en mode 64 bits.
Comme la version 64 bits est une x86
et a donc été appelé pour la première fois x86-64
Ce serait le nom le plus approprié, selon moi. Aussi, x32
est une chose (comme mentionné précédemment) - "x64", cependant, n'est pas une continuation de cela, est donc (théoriquement) trompeur (même si beaucoup de gens savent de quoi vous parlez) et devrait donc être reconnu seulement comme une chose de marketing, pas une architecture "officielle" (encore une fois, IMO - évidemment, d'autres ne sont pas d'accord).