Article de reference

x86-64

AMD Opteron , le premier processeur à introduire les extensions x86-64 en avril 2003 L'ensemble en cinq volumes du manuel du programmeur d'architecture x86-64 , tel que publié e...

AMD Opteron , le premier processeur à introduire les extensions x86-64 en avril 2003
L'ensemble en cinq volumes du manuel du programmeur d'architecture x86-64 , tel que publié et distribué par AMD en 2002

x86-64 (également connu sous le nom de x64 , x86_64 , AMD64 et Intel 64 ) est une version 64 bits du jeu d'instructions x86 , annoncée pour la première fois en 1999. Il a introduit deux nouveaux modes de fonctionnement, le mode 64 bits et le mode de compatibilité, ainsi qu'un nouveau mode de pagination à 4 niveaux .

Avec le mode 64 bits et le nouveau mode de pagination, il prend en charge des quantités de mémoire virtuelle et de mémoire physique bien plus importantes que celles possibles sur ses prédécesseurs 32 bits , ce qui permet aux programmes de stocker de plus grandes quantités de données en mémoire. x86-64 étend également les registres à usage général à 64 bits et en étend le nombre de 8 (dont certains avaient des fonctionnalités limitées ou fixes, par exemple pour la gestion de la pile) à 16 (entièrement général), et fournit de nombreuses autres améliorations. L'arithmétique à virgule flottante est prise en charge via des instructions obligatoires de type SSE2 , et les registres de style x87 / MMX ne sont généralement pas utilisés (mais toujours disponibles même en mode 64 bits) ; à la place, un ensemble de 16 registres vectoriels , de 128 bits chacun, est utilisé. (Chaque registre peut stocker un ou deux nombres double précision ou un à quatre nombres simple précision , ou divers formats entiers.) En mode 64 bits, les instructions sont modifiées pour prendre en charge les opérandes 64 bits et le mode d'adressage 64 bits .

Le mode de compatibilité défini dans l'architecture permet aux applications utilisateur 16 bits et 32 ​​bits de fonctionner sans modification, en coexistant avec les applications 64 bits si le système d'exploitation 64 bits les prend en charge. Comme les jeux d'instructions x86 16 bits et 32 ​​bits complets restent implémentés dans le matériel sans aucune émulation intermédiaire, ces exécutables plus anciens peuvent s'exécuter avec peu ou pas de pénalité de performances, tandis que les applications plus récentes ou modifiées peuvent tirer parti des nouvelles fonctionnalités de la conception du processeur pour obtenir des améliorations de performances. De plus, un processeur prenant en charge x86-64 s'allume toujours en mode réel pour une compatibilité totale avec le 8086 , comme le font les processeurs x86 prenant en charge le mode protégé depuis le 80286 .

La spécification originale, créée par AMD et publiée en 2000, a été implémentée par AMD, Intel et VIA . La microarchitecture AMD K8 , dans les processeurs Opteron et Athlon 64 , a été la première à l'implémenter. Il s'agissait du premier ajout significatif à l' architecture x86 conçu par une société autre qu'Intel. Intel a été obligé de suivre le mouvement et a introduit une famille NetBurst modifiée qui était compatible logiciellement avec la spécification d'AMD. VIA Technologies a introduit le x86-64 dans son architecture VIA Isaiah, avec le VIA Nano .

L'architecture x86-64 a été rapidement adoptée pour les ordinateurs de bureau et portables ainsi que pour les serveurs, qui étaient généralement configurés pour 16 Gio ( gibioctets ) de mémoire ou plus. Elle a remplacé efficacement l' architecture Intel Itanium (anciennement IA-64 ), qui était initialement destinée à remplacer l'architecture x86. x86-64 et Itanium ne sont pas compatibles au niveau du jeu d'instructions natif, et les systèmes d'exploitation et les applications compilés pour une architecture ne peuvent pas être exécutés sur l'autre de manière native.

AMD64

Logo AMD64

Histoire

L'architecture AMD64 (également appelée par AMD dans sa documentation « technologie AMD 64 bits » et « architecture AMD x86-64 ») a été créée comme une alternative à l' architecture IA-64 radicalement différente conçue par Intel et Hewlett-Packard , qui était rétrocompatible avec IA-32 , la version 32 bits de l' architecture x86 . AMD a initialement annoncé l'architecture AMD64 en 1999 avec une spécification complète disponible en août 2000 Comme AMD n'a jamais été invité à contribuer à l'architecture IA-64 et qu'un quelconque type de licence semblait peu probable, l'architecture AMD64 a été positionnée par AMD dès le début comme un moyen évolutif d'ajouter des capacités de calcul 64 bits à l'architecture x86 existante tout en prenant en charge le code x86 32 bits hérité , par opposition à l'approche d'Intel consistant à créer une architecture 64 bits entièrement nouvelle et totalement incompatible avec x86 avec IA-64.

Le premier processeur basé sur AMD64, l' Opteron , est sorti en avril 2003.

Implémentations

Les processeurs AMD implémentant l'architecture AMD64 incluent Opteron , Athlon 64 , Athlon 64 X2 , Athlon 64 FX , Athlon II (suivi de « X2 », « X3 » ou « X4 » pour indiquer le nombre de cœurs, et les modèles XLT), Turion 64 , Turion 64 X2 , Sempron (stepping « Palermo » E6 et tous les modèles « Manila »), Phenom (suivi de « X3 » ou « X4 » pour indiquer le nombre de cœurs), Phenom II (suivi de « X2 », « X3 », « X4 » ou « X6 » pour indiquer le nombre de cœurs), FX , Fusion/APU et Ryzen / Epyc .

Caractéristiques architecturales

La principale caractéristique déterminante de l'AMD64 est la disponibilité de registres de processeur à usage général 64 bits (par exemple, rax ), d'opérations arithmétiques et logiques entières 64 bits et d'adresses virtuelles 64 bits . Les concepteurs ont également profité de l'occasion pour apporter d'autres améliorations.

Les changements notables dans les extensions 64 bits incluent :

Capacité d'entier 64 bits
Tous les registres à usage général (GPR) sont étendus de 32 bits à 64 bits, et toutes les opérations arithmétiques et logiques, les opérations de mémoire à registre et de registre à mémoire, etc., peuvent fonctionner directement sur des entiers de 64 bits. Les push et pops sur la pile sont par défaut des pas de 8 octets, et les pointeurs ont une largeur de 8 octets.
Registres supplémentaires
En plus d'augmenter la taille des registres à usage général, le nombre de registres à usage général nommés est augmenté de huit (c'est-à-dire eax , ecx , edx , ebx , esp , ebp , esi , edi ) en x86 à 16 (c'est- à-dire rax , rcx , rdx , rbx , rsp , rbp , rsi , rdi , r8 , r9, r10, r11 , r12 , r13 , r14 , r15 ) . Il est donc possible de conserver davantage de variables locales dans les registres plutôt que sur la pile, et de laisser les registres contenir des constantes fréquemment consultées ; les arguments pour les sous-routines petites et rapides peuvent également être transmis dans les registres dans une plus grande mesure.
L'AMD64 possède toujours moins de registres que de nombreux jeux d'instructions RISC (par exemple, Power ISA possède 32 GPR ; ARM 64 bits , RISC-V I, SPARC , Alpha , MIPS et PA-RISC en possèdent 31) ou des machines de type VLIW telles que l' IA-64 (qui possède 128 registres). Cependant, une implémentation AMD64 peut avoir beaucoup plus de registres internes que le nombre de registres architecturaux exposés par le jeu d'instructions (voir renommage des registres ). (Par exemple, les cœurs AMD Zen possèdent 168 registres internes physiques à virgule flottante de 64 bits et 160 registres internes physiques à virgule flottante de 128 bits.)
Registres XMM (SSE) supplémentaires
De même, le nombre de registres XMM 128 bits (utilisés pour les instructions Streaming SIMD ) est également augmenté de 8 à 16.
La pile de registres FPU x87 traditionnelle n'est pas incluse dans l'extension de taille du fichier de registres en mode 64 bits, contrairement aux registres XMM utilisés par SSE2, qui ont été étendus. La pile de registres x87 n'est pas un simple fichier de registres, bien qu'elle permette un accès direct aux registres individuels par des opérations d'échange à faible coût.
Espace d'adressage virtuel plus grand
L'architecture AMD64 définit un format d'adresse virtuelle 64 bits, dont les 48 bits de poids faible sont utilisés dans les implémentations actuelles. Cela permet jusqu'à 256 Tio (2,48 octets ) d'espace d'adressage virtuel. La définition de l'architecture permet d'augmenter cette limite dans les futures implémentations jusqu'à 64 bits, étendant l'espace d'adressage virtuel à 16 Eio (2,64 octets ). Cela est à comparer à seulement 4 Gio ( 2,32 octets) pour le x86.
Cela signifie que des fichiers très volumineux peuvent être traités en mappant l'intégralité du fichier dans l'espace d'adressage du processus (ce qui est souvent beaucoup plus rapide que de travailler avec des appels de lecture/écriture de fichier), plutôt que de devoir mapper des régions du fichier dans et hors de l'espace d'adressage.
Espace d'adressage physique plus grand
L'implémentation originale de l'architecture AMD64 implémentait des adresses physiques de 40 bits et pouvait donc adresser jusqu'à 1 TiB (2,40 octets ) de RAM. Les implémentations actuelles de l'architecture AMD64 (à partir de la microarchitecture AMD 10h ) étendent cela à des adresses physiques de 48 bits et peuvent donc adresser jusqu'à 256 TiB (2,48 octets ) de RAM. L'architecture permet d'étendre cela à 52 bits dans le futur (limité par le format d'entrée de la table des pages) ; cela permettrait d'adresser jusqu'à 4 PiB de RAM. À titre de comparaison, les processeurs x86 32 bits sont limités à 64 Gio de RAM en mode Physical Address Extension (PAE), ou 4 Gio de RAM sans mode PAE.
Espace d'adressage physique plus grand en mode hérité
En mode hérité, l'architecture AMD64 prend en charge le mode d'extension d'adresse physique (PAE), comme le font la plupart des processeurs x86 actuels, mais l'AMD64 étend le PAE de 36 bits à une limite architecturale de 52 bits d'adresse physique. Toute implémentation autorise donc la même limite d'adresse physique qu'en mode long .
Accès relatif aux données par pointeur d'instruction
Les instructions peuvent désormais référencer des données relatives au pointeur d'instruction (registre RIP). Cela rend le code indépendant de la position , comme c'est souvent le cas dans les bibliothèques partagées et le code chargé au moment de l'exécution, plus efficace.
Instructions SSE
L'architecture AMD64 d'origine a adopté les instructions SSE et SSE2 d'Intel comme instructions de base. Ces jeux d'instructions fournissent un complément vectoriel au FPU x87 scalaire , pour les types de données simple précision et double précision. SSE2 offre également des opérations vectorielles entières, pour des types de données allant de 8 bits à 64 bits de précision. Cela rend les capacités vectorielles de l'architecture comparables à celles des processeurs x86 les plus avancés de son époque. Ces instructions peuvent également être utilisées en mode 32 bits. La prolifération des processeurs 64 bits a rendu ces capacités vectorielles omniprésentes dans les ordinateurs domestiques, permettant l'amélioration des normes des applications 32 bits. L'édition 32 bits de Windows 8, par exemple, nécessite la présence d'instructions SSE2. SSE3 et les jeux d'instructions Streaming SIMD Extensions ultérieurs ne sont pas des fonctionnalités standard de l'architecture.
Bit de non-exécution
Le bit No-Execute ou bit NX (bit 63 de l'entrée de la table des pages) permet au système d'exploitation de spécifier quelles pages de l'espace d'adressage virtuel peuvent contenir du code exécutable et lesquelles ne le peuvent pas. Une tentative d'exécution de code à partir d'une page marquée "no execute" entraînera une violation d'accès à la mémoire, similaire à une tentative d'écriture sur une page en lecture seule. Cela devrait rendre plus difficile pour un code malveillant de prendre le contrôle du système via des attaques de " dépassement de tampon " ou de "tampon non contrôlé". Une fonctionnalité similaire est disponible sur les processeurs x86 depuis le 80286 en tant qu'attribut des descripteurs de segment ; cependant, cela ne fonctionne que sur un segment entier à la fois.
L'adressage segmenté a longtemps été considéré comme un mode de fonctionnement obsolète, et tous les systèmes d'exploitation PC actuels le contournent en définissant tous les segments sur une adresse de base de zéro et (dans leur implémentation 32 bits) une taille de 4 Gio. AMD a été le premier fournisseur de la famille x86 à implémenter la fonction no-execute en mode d'adressage linéaire. Cette fonctionnalité est également disponible en mode hérité sur les processeurs AMD64 et les processeurs Intel x86 récents, lorsque PAE est utilisé.
Suppression des anciennes fonctionnalités
Quelques fonctionnalités de « programmation système » de l'architecture x86 étaient soit inutilisées, soit sous-utilisées dans les systèmes d'exploitation modernes et ne sont soit pas disponibles sur AMD64 en mode long (64 bits et compatibilité), soit n'existent que sous une forme limitée. Il s'agit notamment de l'adressage segmenté (bien que les segments FS et GS soient conservés sous forme résiduelle pour être utilisés comme pointeurs de base supplémentaires vers les structures du système d'exploitation), le mécanisme de changement d'état des tâches et le mode 8086 virtuel . Ces fonctionnalités restent entièrement implémentées en « mode hérité », ce qui permet à ces processeurs d'exécuter des systèmes d'exploitation 32 bits et 16 bits sans modifications. Certaines instructions qui se sont avérées rarement utiles ne sont pas prises en charge en mode 64 bits, notamment la sauvegarde/restauration des registres de segments sur la pile, la sauvegarde/restauration de tous les registres (PUSHA/POPA), l'arithmétique décimale, les instructions BOUND et INTO, et les sauts et appels « lointains » avec des opérandes immédiats.

Détails de l'espace d'adressage virtuel

Adresses de forme canonique

Implémentations de l'espace d'adressage canonique (les diagrammes ne sont pas à l'échelle)

Bien que les adresses virtuelles soient larges de 64 bits en mode 64 bits, les implémentations actuelles (et toutes les puces dont on sait qu'elles sont en phase de planification) ne permettent pas d'utiliser l'intégralité de l'espace d'adressage virtuel de 2,64 octets (16 EiB ). Cela représenterait environ quatre milliards de fois la taille de l'espace d'adressage virtuel sur les machines 32 bits. La plupart des systèmes d'exploitation et des applications n'auront pas besoin d'un espace d'adressage aussi large dans un avenir proche, donc la mise en œuvre d'adresses virtuelles aussi larges ne ferait qu'augmenter la complexité et le coût de la traduction d'adresses sans aucun avantage réel. AMD a donc décidé que, dans les premières implémentations de l'architecture, seuls les 48 bits les moins significatifs d'une adresse virtuelle seraient réellement utilisés dans la traduction d'adresses ( recherche dans la table des pages ).

De plus, la spécification AMD exige que les 16 bits les plus significatifs de toute adresse virtuelle, les bits 48 à 63, soient des copies du bit 47 (d'une manière proche de l'extension de signe ). Si cette exigence n'est pas respectée, le processeur génère une exception. Les adresses conformes à cette règle sont appelées « forme canonique ». Les adresses de forme canonique vont de 0 à 00007FFF'FFFFFFFF, et de FFFF8000'00000000 à FFFFFFFF'FFFFFFFF, pour un total de 256 Tio d'espace d'adressage virtuel utilisable. C'est toujours 65 536 fois plus grand que l'espace d'adressage virtuel de 4 Gio des machines 32 bits.

Cette fonctionnalité facilite l'évolutivité ultérieure vers un véritable adressage 64 bits. De nombreux systèmes d'exploitation (y compris, mais sans s'y limiter, la famille Windows NT ) prennent la moitié la plus haute de l'espace d'adressage (appelée espace noyau ) pour eux-mêmes et laissent la moitié la plus basse ( espace utilisateur ) pour le code d'application, les piles en mode utilisateur, les tas et d'autres régions de données. La conception de « l'adresse canonique » garantit que chaque implémentation compatible AMD64 possède, en effet, deux moitiés de mémoire : la moitié inférieure commence à 00000000'00000000 et « grandit vers le haut » à mesure que davantage de bits d'adresse virtuelle deviennent disponibles, tandis que la moitié supérieure est « ancrée » au sommet de l'espace d'adressage et grandit vers le bas. De plus, l'application de la « forme canonique » des adresses en vérifiant les bits d'adresse inutilisés empêche leur utilisation par le système d'exploitation dans des pointeurs étiquetés comme indicateurs, marqueurs de privilège, etc., car une telle utilisation pourrait devenir problématique lorsque l'architecture est étendue pour implémenter davantage de bits d'adresse virtuelle.

Les premières versions de Windows pour x64 n'utilisaient même pas la totalité des 256 Tio ; elles étaient limitées à seulement 8 Tio d'espace utilisateur et 8 Tio d'espace noyau. Windows n'a pas pris en charge l'intégralité de l'espace d'adressage 48 bits avant Windows 8.1 , sorti en octobre 2013.

Structure de la table des pages

Le mode d'adressage 64 bits (« mode long ») est un sur-ensemble des extensions d'adresse physique (PAE) ; de ce fait, les tailles de page peuvent être de 4 Ko (2 12 octets) ou de 2 Mio (2 21 octets). Le mode long prend également en charge les tailles de page de 1 Gio (2 30 octets). Plutôt que le système de table de pages à trois niveaux utilisé par les systèmes en mode PAE, les systèmes exécutés en mode long utilisent quatre niveaux de table de pages : la table de pointeurs de répertoire de pages de PAE est étendue de quatre entrées à 512, et une table de mappage de page de niveau 4 (PML4) supplémentaire est ajoutée, contenant 512 entrées dans les implémentations 48 bits. Une hiérarchie de mappage complète de pages de 4 Ko pour l'ensemble de l'espace 48 bits prendrait un peu plus de 512 Go de mémoire (environ 0,195 % de l'espace virtuel de 256 Tio).

Intel a mis en œuvre un schéma avec une table de pages à 5 niveaux , qui permet aux processeurs Intel 64 de prendre en charge un espace d'adressage virtuel de 57 bits. D'autres extensions peuvent autoriser un espace d'adressage virtuel complet de 64 bits et une mémoire physique avec des descripteurs de table de pages de 12 bits et des décalages de mémoire de 16 ou 21 bits pour des tailles d'allocation de page de 64 Ko et 2 Mio ; l'entrée de la table de pages serait étendue à 128 bits pour prendre en charge des indicateurs matériels supplémentaires pour la taille de la page et la taille de l'espace d'adressage virtuel.

Limites du système d'exploitation

Le système d'exploitation peut également limiter l'espace d'adressage virtuel. Des détails, le cas échéant, sont fournis dans la section « Compatibilité et caractéristiques du système d'exploitation ».

Détails de l'espace d'adressage physique

Les processeurs AMD64 actuels prennent en charge un espace d'adressage physique allant jusqu'à 248 octets de RAM, soit 256 Tio . Cependant, en 2020 , il n'existait aucune carte mère x86-64 connue prenant en charge 256 Tio de RAM. Le système d'exploitation peut imposer des limites supplémentaires à la quantité de RAM utilisable ou prise en charge. Des détails sur ce point sont donnés dans la section « Compatibilité et caractéristiques du système d'exploitation » de cet article.

Modes de fonctionnement

L'architecture possède deux modes de fonctionnement principaux : le mode long et le mode hérité.

Diagramme d'état des modes de fonctionnement x86-64

Mode long

Le mode long est le mode de fonctionnement principal prévu par l'architecture ; il s'agit d'une combinaison du mode 64 bits natif du processeur et d'un mode de compatibilité combiné 32 bits et 16 bits. Il est utilisé par les systèmes d'exploitation 64 bits. Sous un système d'exploitation 64 bits, les programmes 64 bits s'exécutent en mode 64 bits, et les applications en mode protégé 32 bits et 16 bits (qui n'ont pas besoin d'utiliser le mode réel ou le mode virtuel 8086 pour s'exécuter à tout moment) s'exécutent en mode de compatibilité. Les programmes en mode réel et les programmes qui utilisent le mode virtuel 8086 à tout moment ne peuvent pas être exécutés en mode long à moins que ces modes ne soient émulés dans le logiciel. Cependant, de tels programmes peuvent être démarrés à partir d'un système d'exploitation exécuté en mode long sur des processeurs prenant en charge VT-x ou AMD-V en créant un processeur virtuel exécuté dans le mode souhaité.

Étant donné que le jeu d'instructions de base est le même, l'exécution de code x86 en mode protégé ne présente quasiment aucune baisse de performances. Cela est différent de l'IA-64 d'Intel , où les différences dans le jeu d'instructions sous-jacent signifient que l'exécution de code 32 bits doit être effectuée soit en émulation de x86 (ce qui ralentit le processus), soit avec un coprocesseur x86 dédié. Cependant, sur la plate-forme x86-64, de nombreuses applications x86 pourraient bénéficier d'une recompilation 64 bits , en raison des registres supplémentaires dans le code 64 bits et de la prise en charge garantie des FPU basées sur SSE2, qu'un compilateur peut utiliser pour l'optimisation. Cependant, les applications qui traitent régulièrement des entiers plus larges que 32 bits, comme les algorithmes cryptographiques, auront besoin d'une réécriture du code traitant les entiers énormes afin de tirer parti des registres 64 bits.

Mode héritage

Le mode Legacy est le mode dans lequel se trouve le processeur lorsqu'il n'est pas en mode long. Dans ce mode, le processeur agit comme un ancien processeur x86 et seul le code 16 bits et 32 ​​bits peut être exécuté. Le mode Legacy autorise un adressage virtuel maximum de 32 bits qui limite l'espace d'adressage virtuel à 4 Gio. Les programmes 64 bits ne peuvent pas être exécutés à partir du mode Legacy.

Mode protégé

Le mode protégé est devenu un sous-mode du mode hérité. Il s'agit du sous-mode dans lequel fonctionnent les systèmes d'exploitation 32 bits et les systèmes d'exploitation en mode protégé 16 bits lorsqu'ils s'exécutent sur un processeur x86-64.

Mode réel

Le mode réel est le mode de fonctionnement initial lorsque le processeur est initialisé et constitue un sous-mode du mode hérité. Il est rétrocompatible avec les processeurs Intel 8086 et Intel 8088 d'origine . Le mode réel est principalement utilisé aujourd'hui par les chargeurs de démarrage des systèmes d'exploitation, qui sont requis par l'architecture pour configurer les détails de la mémoire virtuelle avant de passer aux modes supérieurs. Ce mode est également utilisé par tout système d'exploitation qui doit communiquer avec le micrologiciel du système avec une interface de type BIOS traditionnelle .

Intel 64

Intel 64 est l'implémentation d'Intel du x86-64, utilisé et implémenté dans divers processeurs fabriqués par Intel.

Histoire

Historiquement, AMD a développé et produit des processeurs avec des jeux d'instructions calqués sur les conceptions originales d'Intel, mais avec le x86-64, les rôles ont été inversés : Intel s'est retrouvé dans la position d'adopter l' ISA qu'AMD a créé comme une extension de la propre gamme de processeurs x86 d'Intel.

Le projet d'Intel portait à l'origine le nom de code Yamhill (d'après la rivière Yamhill dans la vallée de Willamette en Oregon). Après avoir nié son existence pendant plusieurs années, Intel a annoncé lors de l' IDF de février 2004 que le projet était bel et bien en cours. Le président d'Intel à l'époque, Craig Barrett , a admis qu'il s'agissait de l'un de leurs secrets les moins bien gardés.

Le nom d'Intel pour ce jeu d'instructions a changé plusieurs fois. Le nom utilisé à l'IDF était CT (probablement pour Clackamas Technology , un autre nom de code provenant d'une rivière de l'Oregon ) ; en quelques semaines, ils ont commencé à l'appeler IA-32e (pour les extensions IA-32 ) et en mars 2004, ils ont dévoilé le nom « officiel » EM64T (Extended Memory 64 Technology). Fin 2006, Intel a commencé à utiliser le nom Intel 64 pour son implémentation, parallèlement à l'utilisation par AMD du nom AMD64.

Le premier processeur à implémenter Intel 64 fut le processeur multisocket Xeon nom de code Nocona en juin 2004. En revanche, les puces Prescott initiales (février 2004) ne permettaient pas cette fonctionnalité. Intel a ensuite commencé à vendre des Pentium 4 compatibles Intel 64 utilisant la révision E0 du cœur Prescott, vendus sur le marché OEM sous le nom de Pentium 4, modèle F. La révision E0 ajoute également eXecute Disable (XD) (le nom d'Intel pour le bit NX ) à Intel 64, et a été incluse dans le Xeon actuel nom de code Irwindale . Le lancement officiel par Intel de l'Intel 64 (sous le nom EM64T à l'époque) dans les processeurs de bureau grand public était le Prescott-2M à l'étape N0.

Le premier processeur mobile Intel implémentant Intel 64 est la version Merom du processeur Core 2 , sorti le 27 juillet 2006. Aucun des précédents processeurs pour ordinateurs portables d'Intel ( Core Duo , Pentium M , Celeron M , Mobile Pentium 4 ) n'implémente Intel 64.

Implémentations

Les processeurs Intel implémentant l'architecture Intel64 incluent les Pentium 4 série F/série 5x1, 506 et 516, les modèles Celeron D 3x1, 3x6, 355, 347, 352, 360 et 365 et tous les Celerons ultérieurs , tous les modèles de Xeon depuis « Nocona », tous les modèles de processeurs Pentium Dual-Core depuis « Merom-2M », les Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 et N2800, toutes les versions des processeurs Pentium D , Pentium Extreme Edition , Core 2 , Core i9 , Core i7 , Core i5 et Core i3 , ainsi que les Processeurs de la série Xeon Phi 7200.

X86S

X86S est une simplification du x86-64 proposée par Intel en mai 2023 pour ses produits « Intel 64 ». La nouvelle architecture supprimerait la prise en charge des systèmes d'exploitation 16 bits et 32 ​​bits, tandis que les programmes 32 bits fonctionneraient toujours sous un système d'exploitation 64 bits. Un processeur n'aurait plus de mode hérité et démarrerait directement en mode long 64 bits . Il y aura un moyen de passer à la pagination à 5 niveaux sans passer par le mode non paginé. Les fonctionnalités spécifiques supprimées incluent :

  • Portes de segmentation
  • Anneau 32 bits 0
    • VT-x n'émulera plus cette fonctionnalité
  • Anneaux 1 et 2
  • Accès au port d'E/S Ring 3 ( IN / OUT ) ; voir E/S mappées sur port
  • Port de chaîne E/S ( INS / OUTS )
  • Mode réel (y compris le mode réel énorme ), mode protégé 16 bits, VM86
  • Mode d'adressage 16 bits
    • VT-x ne fournira plus de mode sans restriction
  • Prise en charge 8259 ; le seul APIC pris en charge serait X2APIC
  • Quelques bits de mode de système d'exploitation inutilisés
  • IPI de démarrage 16 bits et 32 ​​bits (SIPI)

Intel estime que ce changement fait suite logiquement à la suppression de la porte A20 en 2008 et à la suppression de la prise en charge des systèmes d'exploitation 16 bits et 32 ​​bits dans le micrologiciel Intel en 2020. La prise en charge des systèmes d'exploitation hérités serait réalisée via une virtualisation accélérée par le matériel et/ou une émulation en anneau 0.

Extensions de performances avancées

Advanced Performance Extensions est une proposition Intel 2023 pour de nouvelles instructions et 16 registres à usage général supplémentaires.

Implémentation x86-64 de VIA

VIA Technologies a présenté sa première implémentation de l'architecture x86-64 en 2008 après cinq années de développement par sa division CPU, Centaur Technology . Nom de code « Isaiah », l'architecture 64 bits a été dévoilée le 24 janvier 2008, et lancée le 29 mai sous la marque VIA Nano .

Le processeur prend en charge un certain nombre d'extensions x86 spécifiques à VIA conçues pour améliorer l'efficacité des appareils à faible consommation. On s'attend à ce que l'architecture Isaiah soit deux fois plus rapide en termes de performances en nombres entiers et quatre fois plus rapide en termes de performances en virgule flottante que la génération précédente de VIA Esther à une vitesse d'horloge équivalente . La consommation d'énergie devrait également être comparable à celle des processeurs VIA de la génération précédente, avec une puissance de conception thermique allant de 5 W à 25 W. Étant une conception entièrement nouvelle, l'architecture Isaiah a été conçue avec la prise en charge de fonctionnalités telles que le jeu d'instructions x86-64 et la virtualisation x86 qui n'étaient pas disponibles sur ses prédécesseurs, la gamme VIA C7 , tout en conservant leurs extensions de chiffrement.

Niveaux de microarchitecture

En 2020, grâce à une collaboration entre AMD, Intel, Red Hat et SUSE , trois niveaux de microarchitecture (ou niveaux de fonctionnalités) au-dessus de la base de référence x86-64 ont été définis : x86-64-v2, x86-64-v3 et x86-64-v4. Ces niveaux définissent des fonctionnalités spécifiques qui peuvent être ciblées par les programmeurs pour fournir des optimisations au moment de la compilation. Les fonctionnalités exposées par chaque niveau sont les suivantes :

Les niveaux de fonctionnalités de la microarchitecture x86-64 peuvent également être trouvés sous les noms AMD64-v1, AMD64-v2 .. ou AMD64_v1 .. dans les paramètres où la nomenclature « AMD64 » est utilisée. Ceux-ci sont utilisés comme synonymes de la nomenclature x86-64-vX et sont donc fonctionnellement identiques. Par exemple, la documentation du langage Go ou la distribution Linux Fedora.

Tous les niveaux incluent des fonctionnalités présentes dans les niveaux précédents. Les extensions de jeu d'instructions non concernées par le calcul à usage général, notamment AES-NI et RDRAND , sont exclues des exigences de niveau.

Différences entre AMD64 et Intel 64

Bien que presque identiques, il existe quelques différences entre les deux jeux d'instructions dans la sémantique de quelques instructions machine (ou situations) rarement utilisées, qui sont principalement utilisées pour la programmation système . Les compilateurs produisent généralement des exécutables (c'est-à-dire du code machine ) qui évitent toute différence, du moins pour les programmes d'application ordinaires . Cela intéresse donc principalement les développeurs de compilateurs, de systèmes d'exploitation et autres, qui doivent traiter des instructions système individuelles et spéciales.

Implémentations récentes

  • BSFLes instructions et les processeurs Intel 64 BSRagissent différemment de ceux d'AMD64 lorsque la source est zéro et que la taille de l'opérande est de 32 bits. Le processeur définit l'indicateur zéro et laisse les 32 bits supérieurs de la destination indéfinis. Notez qu'Intel documente que le registre de destination a une valeur indéfinie dans ce cas, mais en pratique, dans le silicium, il implémente le même comportement qu'AMD (destination non modifiée). L'affirmation distincte selon laquelle il ne faut peut-être pas préserver les bits dans les 32 bits supérieurs n'a pas été vérifiée, mais n'a été exclue que pour Core 2 et Skylake, pas pour toutes les microarchitectures Intel comme le Pentium 4 64 bits ou l'Atom basse consommation.
  • AMD64 nécessite un format de mise à jour du microcode différent et contrôle les MSR (registres spécifiques au modèle), tandis qu'Intel 64 implémente la mise à jour du microcode inchangée par rapport à leurs processeurs 32 bits uniquement.
  • Intel 64 ne dispose pas de certains MSR considérés comme architecturaux dans AMD64. Il s'agit notamment de SYSCFG, TOP_MEM, et TOP_MEM2.
  • Intel 64 autorise SYSCALL/ SYSRETuniquement en mode 64 bits (pas en mode de compatibilité), et autorise SYSENTER/ SYSEXITdans les deux modes. AMD64 n'a pas SYSENTER/ SYSEXITdans les deux sous-modes du mode long .
  • En mode 64 bits, les branches proches avec le préfixe 66H (remplacement de la taille de l'opérande) se comportent différemment. Intel 64 ignore ce préfixe : l'instruction a un décalage étendu de signe de 32 bits et le pointeur d'instruction n'est pas tronqué. AMD64 utilise un champ de décalage de 16 bits dans l'instruction et efface les 48 premiers bits du pointeur d'instruction.
  • Sur Intel 64 mais pas AMD64, le REX.Wpréfixe peut être utilisé avec les instructions de pointeur lointain ( LFS, LGS, LSS, JMP FAR, CALL FAR) pour augmenter la taille de leur argument de pointeur lointain à 80 bits (décalage 64 bits + segment 16 bits).
  • Lorsque l' MOVSXDinstruction est exécutée avec un opérande source mémoire et une taille d'opérande de 16 bits, l'opérande mémoire sera accessible avec une lecture de 16 bits sur Intel 64, mais une lecture de 32 bits sur AMD64.
  • Les instructions FCOMI/ FCOMIP/ FUCOMI/ FUCOMIP(comparaison de virgule flottante x87) effaceront les bits OF, SF et AF d' EFLAGS sur Intel 64, mais laisseront ces bits d'indicateur inchangés sur AMD64.
  • Pour les instructions VMASKMOVPS/ VMASKMOVPD/ VPMASKMOVD/ VPMASKMOVQ(déplacement masqué AVX/AVX2 vers/depuis la mémoire), l'architecture Intel 64 garantit que les instructions ne provoqueront pas d'erreurs de mémoire (par exemple, des erreurs de page et des erreurs de segmentation) pour les voies masquées par zéro, alors qu'AMD64 ne fournit pas une telle garantie.
  • Intel 64 n'a pas la capacité de sauvegarder et de restaurer une version réduite (et donc plus rapide) de l' état à virgule flottante (impliquant les instructions FXSAVEet FXRSTOR).
  • Depuis l'Opteron Rev. E et l'Athlon 64 Rev. D, les processeurs AMD ont réintroduit un support limité pour la segmentation, via le bit LMSLE (Long Mode Segment Limit Enable), pour faciliter la virtualisation des invités 64 bits. Le support LMLSE a été supprimé dans le processeur Zen 3.
  • Lors du retour à une adresse non canonique à l'aide de SYSRET, les processeurs AMD64 exécutent le gestionnaire d'erreurs de protection générale au niveau de privilège 3, tandis que sur les processeurs Intel 64, il est exécuté au niveau de privilège 0.
  • Les garanties de commande fournies par certaines instructions de commande de mémoire telles que LFENCEet MFENCEdiffèrent entre Intel 64 et AMD64 :
    • LFENCEest sérialisé (ce qui lui permet d'être utilisé comme barrière de spéculation ) sur Intel 64 mais il n'est pas architecturalement garanti qu'il soit sérialisé sur AMD64.
    • MFENCEest une instruction de sérialisation complète (y compris la sérialisation de récupération d'instructions) sur AMD64 mais pas sur Intel 64.

Implémentations plus anciennes

  • Les processeurs AMD64 antérieurs à la révision F (qui se distingue par le passage de la mémoire DDR à la mémoire DDR2 et les nouveaux sockets AM2 , F et S1 ) de 2006 ne disposaient pas de l' CMPXCHG16Binstruction, qui est une extension de l' CMPXCHG8Binstruction présente sur la plupart des processeurs post- 80486 . Similaire à CMPXCHG8B, CMPXCHG16Bpermet des opérations atomiques sur des mots octa (valeurs de 128 bits). Ceci est utile pour les algorithmes parallèles qui utilisent la comparaison et l'échange sur des données plus grandes que la taille d'un pointeur, ce qui est courant dans les algorithmes sans verrouillage et sans attente . Sans cela CMPXCHG16B, il faut utiliser des solutions de contournement, comme une section critique ou des approches alternatives sans verrouillage. Windows 64 bits antérieur à Windows 8.1 d'avoir un espace d'adressage en mode utilisateur supérieur à 8 Tio . La version 64 bits de Windows 8.1 nécessite l'instruction.
  • Les premiers processeurs AMD64 et Intel 64 manquaient LAHFd' SAHFinstructions en mode 64 bits. AMD a introduit ces instructions (également en mode 64 bits) avec ses processeurs 90 nm (révision D), à commencer par l'Athlon 64 en octobre 2004. Intel a introduit les instructions en octobre 2005 avec la version 0F47h ​​et les révisions ultérieures de NetBurst . La version 64 bits de Windows 8.1 nécessite cette fonctionnalité.
  • Les premiers processeurs Intel avec Intel 64 ne disposent pas non plus de la fonctionnalité NX de l'architecture AMD64. Elle a été ajoutée dans le Pentium 4 E0 (0F41h) en octobre 2004. Cette fonctionnalité est requise par toutes les versions de Windows 8.
  • Les premières implémentations Intel 64 avaient un adressage physique de la mémoire de 36 bits (64 Gio) tandis que les implémentations AMD64 originales avaient un adressage physique de 40 bits (1 Tio ). Intel a utilisé l'adressage physique de 40 bits pour la première fois sur Xeon MP ( Potomac ), lancé le 29 mars 2005. La différence n'est pas une différence des ISA visibles par l'utilisateur. En 2007, l'Opteron basé sur AMD 10h a été le premier à fournir un espace d'adressage physique de 48 bits (256 Tio). L'adressage physique de l'Intel 64 a été étendu à 44 bits (16 TiB) dans Nehalem-EX en 2010 et à 46 bits (64 TiB) dans Sandy Bridge E en 2011. Avec les processeurs Xeon Scalable Ice Lake de 3e génération, Intel a augmenté l'adressage virtuel à 57 bits (128 PiB ) et physique à 52 bits (4 PiB) en 2021, nécessitant une pagination à 5 niveaux . L'année suivante, AMD64 a ajouté la même chose dans l'EPYC de 4e génération (Genoa). Les processeurs non-serveurs conservent des espaces d'adressage plus petits plus longtemps.

Adoption

Un graphique en aires montrant la représentation des différentes familles de microprocesseurs dans la liste de classement des supercalculateurs TOP500, de 1993 à 2020

Dans les supercalculateurs suivis par TOP500 , l'apparition d'extensions 64 bits pour l'architecture x86 a permis aux processeurs x86 64 bits d'AMD et d'Intel de remplacer la plupart des architectures de processeurs RISC précédemment utilisées dans ces systèmes (y compris PA-RISC , SPARC , Alpha et autres), ainsi que le x86 32 bits, même si Intel lui-même a initialement tenté sans succès de remplacer le x86 par une nouvelle architecture 64 bits incompatible dans le processeur Itanium .

En 2023 , un supercalculateur basé sur HPE EPYC appelé Frontier est numéro un. Le premier supercalculateur basé sur ARM est apparu sur la liste en 2018 et, ces dernières années, les coprocesseurs d'architecture non CPU ( GPGPU ) ont également joué un rôle important dans les performances. Les coprocesseurs Xeon Phi « Knights Corner » d'Intel , qui implémentent un sous-ensemble de x86-64 avec quelques extensions vectorielles, sont également utilisés, avec les processeurs x86-64, dans le supercalculateur Tianhe-2 .

Compatibilité et caractéristiques du système d'exploitation

Les systèmes d’exploitation et versions suivants prennent en charge l’architecture x86-64 en mode long .

BSD

DragonFly BSD

Les travaux préliminaires d'infrastructure ont commencé en février 2004 pour un portage x86-64. Ce développement a ensuite été interrompu. Le développement a repris en juillet 2007 et s'est poursuivi pendant Google Summer of Code 2008 et SoC 2009. La première version officielle à contenir le support x86-64 était la version 2.4.

FreeBSD

FreeBSD a d'abord ajouté le support x86-64 sous le nom "amd64" en tant qu'architecture expérimentale dans la version 5.1-RELEASE en juin 2003. Il a été inclus comme architecture de distribution standard à partir de la version 5.2-RELEASE en janvier 2004. Depuis lors, FreeBSD l'a désigné comme une plate-forme de niveau 1. La version 6.0-RELEASE a corrigé certaines bizarreries liées à l'exécution d'exécutables x86 sous amd64, et la plupart des pilotes fonctionnent exactement comme sur l'architecture x86. Des travaux sont actuellement en cours pour intégrer plus complètement l' interface binaire d'application (ABI) x86, de la même manière que fonctionne actuellement la compatibilité ABI 32 bits de Linux.

NetBSD

La prise en charge de l'architecture x86-64 a été intégrée pour la première fois dans l' arborescence source de NetBSD le 19 juin 2001. Depuis NetBSD 2.0, publié le 9 décembre 2004, NetBSD/amd64 est un port entièrement intégré et pris en charge. Le code 32 bits est toujours pris en charge en mode 64 bits, avec une couche de compatibilité du noyau netbsd-32 pour les appels système 32 bits. Le bit NX est utilisé pour fournir une pile et un tas non exécutables avec une granularité par page (la granularité de segment étant utilisée sur x86 32 bits).

OpenBSD

OpenBSD supporte AMD64 depuis OpenBSD 3.5, sorti le 1er mai 2004. L'implémentation complète de la prise en charge d'AMD64 dans l'arbre a été réalisée avant la sortie initiale du matériel car AMD avait prêté plusieurs machines pour le hackathon du projet cette année-là. Les développeurs d'OpenBSD ont adopté la plateforme en raison de sa prise en charge du bit NX , qui a permis une implémentation facile de la fonctionnalité W^X .

Le code du portage AMD64 d'OpenBSD fonctionne également sur les processeurs Intel 64 qui contiennent une utilisation clonée des extensions AMD64, mais comme Intel a laissé de côté le bit NX de la table des pages dans les premiers processeurs Intel 64, il n'y a pas de capacité W^X sur ces processeurs Intel ; les processeurs Intel 64 ultérieurs ont ajouté le bit NX sous le nom de « bit XD ». Le multitraitement symétrique (SMP) fonctionne sur le portage AMD64 d'OpenBSD, à partir de la version 3.6 du 1er novembre 2004.

DOS

Il est possible d'entrer en mode long sous DOS sans extension DOS, mais l'utilisateur doit revenir en mode réel pour appeler les interruptions du BIOS ou du DOS.

Il est également possible d'entrer en mode long avec un extendeur DOS similaire à DOS/4GW , mais plus complexe puisque x86-64 n'a pas de mode 8086 virtuel . DOS lui-même n'en est pas conscient, et aucun avantage ne doit être attendu à moins d'exécuter DOS dans une émulation avec un backend de pilote de virtualisation adéquat, par exemple : l'interface de stockage de masse.

Linux

Linux a été le premier noyau de système d'exploitation à exécuter l'architecture x86-64 en mode long , à partir de la version 2.4 en 2001 (avant la disponibilité du matériel). Linux fournit également une compatibilité ascendante pour l'exécution d'exécutables 32 bits. Cela permet aux programmes d'être recompilés en mode long tout en conservant l'utilisation de programmes 32 bits. Les distributions Linux actuelles sont livrées avec des noyaux et des espaces utilisateur natifs x86-64 . Certaines, comme Arch Linux , SUSE , Mandriva et Debian , permettent aux utilisateurs d'installer un ensemble de composants et de bibliothèques 32 bits lors de l'installation à partir d'un support de distribution 64 bits, permettant ainsi à la plupart des applications 32 bits existantes de fonctionner parallèlement au système d'exploitation 64 bits.

L'ABI x32 (Application Binary Interface), introduite dans Linux 3.4, permet aux programmes compilés pour l'ABI x32 de s'exécuter en mode 64 bits de x86-64 tout en utilisant uniquement des pointeurs et des champs de données 32 bits. Bien que cela limite le programme à un espace d'adressage virtuel de 4 Gio, cela réduit également l'empreinte mémoire du programme et dans certains cas peut lui permettre de s'exécuter plus rapidement.

Linux 64 bits autorise jusqu'à 128 Tio d'espace d'adressage virtuel pour les processus individuels et peut adresser environ 64 Tio de mémoire physique, sous réserve des limitations du processeur et du système, ou jusqu'à 128 Tio (virtuel) et 4 Tio (physique) avec la pagination à 5 niveaux activée.

macOS

Mac OS X 10.4.7 et les versions supérieures de Mac OS X 10.4 exécutent des outils de ligne de commande 64 bits à l'aide des bibliothèques POSIX et mathématiques sur des machines Intel 64 bits, tout comme toutes les versions de Mac OS X 10.4 et 10.5 les exécutent sur des machines PowerPC 64 bits. Aucune autre bibliothèque ou infrastructure ne fonctionne avec les applications 64 bits dans Mac OS X 10.4. Le noyau et toutes les extensions du noyau sont uniquement 32 bits.

Mac OS X 10.5 prend en charge les applications GUI 64 bits utilisant Cocoa , Quartz , OpenGL et X11 sur les machines Intel 64 bits, ainsi que sur les machines PowerPC 64 bits . Toutes les bibliothèques et frameworks non GUI prennent également en charge les applications 64 bits sur ces plates-formes. Le noyau et toutes les extensions du noyau sont uniquement 32 bits.

Mac OS X 10.6 est la première version de macOS qui prend en charge un noyau 64 bits . Cependant, tous les ordinateurs 64 bits ne peuvent pas exécuter le noyau 64 bits, et tous les ordinateurs 64 bits qui peuvent exécuter le noyau 64 bits ne le feront pas par défaut. Le noyau 64 bits, comme le noyau 32 bits, prend en charge les applications 32 bits ; les deux noyaux prennent également en charge les applications 64 bits. Les applications 32 bits ont une limite d'espace d'adressage virtuel de 4 Gio sous l'un ou l'autre noyau. les extensions de noyau 32 bits , et le noyau 32 bits ne prend pas en charge les extensions de noyau 64 bits.

OS X 10.8 inclut uniquement le noyau 64 bits, mais continue de prendre en charge les applications 32 bits ; il ne prend toutefois pas en charge les extensions de noyau 32 bits.

macOS 10.15 inclut uniquement le noyau 64 bits et ne prend plus en charge les applications 32 bits. Cette suppression de prise en charge a posé un problème pour WineHQ (et la version commerciale CrossOver ), car il doit toujours pouvoir exécuter des applications Windows 32 bits. La solution, appelée wine32on64 , a consisté à ajouter des thunks qui font entrer et sortir le processeur du mode de compatibilité 32 bits dans l'application nominalement 64 bits.

macOS utilise le format binaire universel pour regrouper les versions 32 et 64 bits du code d'application et de bibliothèque dans un seul fichier ; la version la plus appropriée est automatiquement sélectionnée au moment du chargement. Dans Mac OS X 10.6, le format binaire universel est également utilisé pour le noyau et pour les extensions de noyau qui prennent en charge les noyaux 32 et 64 bits.

Solaris

Solaris 10 et les versions ultérieures prennent en charge l'architecture x86-64.

Pour Solaris 10, comme pour l' architecture SPARC , il n'existe qu'une seule image de système d'exploitation, qui contient un noyau 32 bits et un noyau 64 bits ; elle est appelée image DVD-ROM « x64/x86 ». Le comportement par défaut consiste à démarrer un noyau 64 bits, ce qui permet d'exécuter à la fois les exécutables 64 bits et les exécutables 32 bits existants ou nouveaux. Un noyau 32 bits peut également être sélectionné manuellement, auquel cas seuls les exécutables 32 bits s'exécuteront. La isainfocommande peut être utilisée pour déterminer si un système exécute un noyau 64 bits.

Pour Solaris 11, seul le noyau 64 bits est fourni. Toutefois, le noyau 64 bits prend en charge les exécutables, les bibliothèques et les appels système 32 et 64 bits.

Fenêtres

Les éditions x64 de Microsoft Windows client et serveur, Windows XP Professionnel Édition x64 et Windows Server 2003 Édition x64, ont été publiées en mars 2005. En interne, elles sont en fait la même version (5.2.3790.1830 SP1), car elles partagent la même base source et les mêmes binaires de système d'exploitation, de sorte que même les mises à jour système sont publiées dans des packages unifiés, à la manière des éditions Windows 2000 Professionnel et Server pour x86. Windows Vista , qui possède également de nombreuses éditions différentes, a été publié en janvier 2007. Windows 7 est sorti en juillet 2009. Windows Server 2008 R2 n'a été vendu qu'en éditions x64 et Itanium ; les versions ultérieures de Windows Server ne proposent qu'une édition x64.

Les versions de Windows pour x64 antérieures à Windows 8.1 et Windows Server 2012 R2 offrent les fonctionnalités suivantes :

  • 8 Tio d'espace d'adressage virtuel par processus, accessible à la fois en mode utilisateur et en mode noyau, appelé espace d'adressage en mode utilisateur. Un programme x64 peut utiliser tout cela, sous réserve des limites de stockage de sauvegarde sur le système, et à condition qu'il soit lié à l'option « large address awareness », qui est présente par défaut. Il s'agit d'une augmentation de 4096 fois par rapport à l'espace d'adressage virtuel en mode utilisateur par défaut de 2 Gio offert par Windows 32 bits.
  • 8 TiB d'espace d'adressage virtuel en mode noyau pour le système d'exploitation. Comme pour l'espace d'adressage en mode utilisateur, il s'agit d'une augmentation de 4096 fois par rapport aux versions Windows 32 bits. L'espace accru profite principalement au cache du système de fichiers et aux « tas » en mode noyau (pool non paginé et pool paginé). Windows n'utilise qu'un total de 16 TiB sur les 256 TiB implémentés par les processeurs car les premiers processeurs AMD64 n'avaient pas d' CMPXCHG16Binstruction.

Sous Windows 8.1 et Windows Server 2012 R2, les espaces d'adressage virtuels en mode utilisateur et en mode noyau ont été étendus à 128 Tio. Ces versions de Windows ne s'installeront pas sur les processeurs dépourvus de cette CMPXCHG16Binstruction.

Les caractéristiques supplémentaires suivantes s'appliquent à toutes les versions x64 de Windows :

  • Possibilité d'exécuter des applications 32 bits existantes ( .exeprogrammes) et des bibliothèques de liens dynamiques ( .dlls) à l'aide de WoW64 si WoW64 est pris en charge sur cette version. De plus, un programme 32 bits, s'il a été lié avec l'option « large address awareness », peut utiliser jusqu'à 4 Gio d'espace d'adressage virtuel dans Windows 64 bits, au lieu des 2 Gio par défaut (3 Gio en option avec /3GBl'option de démarrage et l'option de lien « large address awareness ») offerts par Windows 32 bits. Contrairement à l'utilisation de l' /3GBoption de démarrage sur x86, cela ne réduit pas l'espace d'adressage virtuel en mode noyau disponible pour le système d'exploitation. Les applications 32 bits peuvent donc bénéficier de l'exécution sur Windows x64 même si elles ne sont pas recompilées pour x86-64.
  • Les applications 32 et 64 bits, si elles ne sont pas liées à la « prise en charge des grandes adresses », sont limitées à 2 Gio d'espace d'adressage virtuel.
  • Possibilité d'utiliser jusqu'à 128 Gio (Windows XP/Vista), 192 Gio (Windows 7), 512 Gio (Windows 8), 1 Tio (Windows Server 2003), 2 Tio (Windows Server 2008/Windows 10), 4 Tio (Windows Server 2012) ou 24 Tio (Windows Server 2016/2019) de mémoire vive physique (RAM).
  • Modèle de données LLP64 : en C/C++, les types « int » et « long » ont une largeur de 32 bits, « long long » a une largeur de 64 bits, tandis que les pointeurs et les types dérivés des pointeurs ont une largeur de 64 bits.
  • Les pilotes de périphériques en mode noyau doivent être des versions 64 bits ; il n'existe aucun moyen d'exécuter des exécutables en mode noyau 32 bits dans le système d'exploitation 64 bits. Les pilotes de périphériques en mode utilisateur peuvent être de 32 ou 64 bits.
  • Les applications Windows 16 bits (Win16) et DOS ne fonctionneront pas sur les versions x86-64 de Windows en raison de la suppression du sous-système de machine DOS virtuelle (NTVDM) qui reposait sur la possibilité d'utiliser le mode virtuel 8086. Le mode virtuel 8086 ne peut pas être activé lors de l'exécution en mode long.
  • Implémentation complète de la fonctionnalité de protection de page NX (No Execute). Cette fonctionnalité est également implémentée sur les versions 32 bits récentes de Windows lorsqu'elles sont démarrées en mode PAE.
  • Au lieu du descripteur de segment FS sur les versions x86 de la famille Windows NT , le descripteur de segment GS est utilisé pour pointer vers deux structures définies par le système d'exploitation : le bloc d'informations sur les threads (NT_TIB) en mode utilisateur et la région de contrôle du processeur (KPCR) en mode noyau. Ainsi, par exemple, en mode utilisateur, GS:0il s'agit de l'adresse du premier membre du bloc d'informations sur les threads. Le maintien de cette convention a facilité le port x86-64, mais a obligé AMD à conserver la fonction des segments FS et GS en mode long, même si l'adressage segmenté en soi n'est pas vraiment utilisé par les systèmes d'exploitation modernes.
  • Les premiers rapports affirmaient que le planificateur du système d'exploitation ne sauvegardait pas et ne restaurait pas l' état de la machine x87 FPU lors des changements de contexte de thread. Le comportement observé montre que ce n'est pas le cas : l'état x87 est sauvegardé et restauré, sauf pour les threads en mode noyau uniquement (une limitation qui existe également dans la version 32 bits). La documentation la plus récente disponible auprès de Microsoft indique que les instructions x87/ MMX / 3DNow! peuvent être utilisées en mode long, mais qu'elles sont obsolètes et peuvent entraîner des problèmes de compatibilité à l'avenir. (3DNow! n'est plus disponible sur les processeurs AMD, à l'exception des instructions PREFETCHet , qui sont également prises en charge sur les processeurs Intel à partir de Broadwell .)PREFETCHW
  • Certains composants comme Jet Database Engine et Data Access Objects ne seront pas portés sur des architectures 64 bits telles que x86-64 et IA-64.
  • Microsoft Visual Studio peut compiler des applications natives pour cibler soit l'architecture x86-64, qui ne peut s'exécuter que sur Microsoft Windows 64 bits, soit l' architecture IA-32 , qui peut s'exécuter en tant qu'application 32 bits sur Microsoft Windows 32 bits ou Microsoft Windows 64 bits en mode d'émulation WoW64 . Les applications gérées peuvent être compilées en modes IA-32, x86-64 ou AnyCPU. Les logiciels créés dans les deux premiers modes se comportent respectivement comme leurs homologues en code natif IA-32 ou x86-64 ; toutefois, lors de l'utilisation du mode AnyCPU, les applications des versions 32 bits de Microsoft Windows s'exécutent en tant qu'applications 32 bits, alors qu'elles s'exécutent en tant qu'applications 64 bits dans les éditions 64 bits de Microsoft Windows.

Consoles de jeux vidéo

La PlayStation 4 et la Xbox One , ainsi que toutes les variantes de ces consoles, intègrent des processeurs AMD x86-64, basés sur la microarchitecture Jaguar . Le micrologiciel et les jeux sont écrits en code x86-64 ; aucun code x86 hérité n'est impliqué.

La génération actuelle, la PlayStation 5 et les Xbox Series X et Series S respectivement, intègrent également des processeurs AMD x86-64, basés sur la microarchitecture Zen 2.

Bien que considéré comme un PC, le Steam Deck utilise une unité de traitement accélérée (APU) AMD x86-64 personnalisée, basée sur la microarchitecture Zen 2.

Conventions de dénomination de l'industrie

Étant donné que les architectures AMD64 et Intel 64 sont très similaires, de nombreux logiciels et matériels utilisent un terme neutre pour indiquer leur compatibilité avec les deux implémentations. La désignation originale d'AMD pour cette architecture de processeur, « x86-64 », est toujours utilisée à cette fin, tout comme la variante « x86_64 ». D'autres sociétés, telles que Microsoft et Sun Microsystems / Oracle Corporation , utilisent la contraction « x64 » dans leurs supports marketing.

Le terme IA-64 fait référence au processeur Itanium et ne doit pas être confondu avec x86-64, car il s'agit d'un jeu d'instructions complètement différent.

De nombreux systèmes d'exploitation et produits, en particulier ceux qui ont introduit la prise en charge x86-64 avant l'entrée d'Intel sur le marché, utilisent le terme « AMD64 » ou « amd64 » pour désigner à la fois AMD64 et Intel 64.

Licences

x86-64/AMD64 a été développé exclusivement par AMD. Jusqu'en avril 2021, date à laquelle les brevets concernés ont expiré, AMD détenait des brevets sur les techniques utilisées dans AMD64 ; ces brevets devaient être concédés sous licence par AMD afin de mettre en œuvre AMD64. Intel a conclu un accord de licence croisée avec AMD, accordant à AMD une licence sur ses brevets sur les techniques x86 existantes et à AMD une licence sur ses brevets sur les techniques utilisées dans x86-64. En 2009, AMD et Intel ont réglé plusieurs procès et désaccords en matière de licences croisées, prolongeant leurs accords de licences croisées.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index