AMD64
50923
28525138
2008-04-10T18:01:35Z
91.164.155.136
/* Implémentations */
[[Image:Amd64_logo.png||right|Logo AMD64]]
'''AMD64''' est le nom de l'architecture des premiers [[microprocesseur]]s 64 [[Bit (informatique)|bits]] de la société [[Advanced Micro Devices]]. Son nom de code est ''Hammer'' (de l'[[anglais]] ''marteau'') remplaçant l'appellation x86-64.
Cette architecture est compatible avec le standard 32 bits [[x86]] d'[[Intel]]. Elle est utilisée par les [[Athlon 64]], [[Athlon FX]], [[Athlon X2]], [[Sempron]] 64, [[Turion (informatique)|Turion]] et [[Opteron]].
Intel a par la suite adopté cette architecture, sous le nom de [[Intel 64]], '''EM64T''' ou '''IA-32e''', dans ses processeurs récents de type [[Pentium 4]], [[Pentium D]], [[Pentium Extreme Edition]], [[Celeron D]], et [[Xeon]]. Microsoft communique sur cette technologie sous le nom de x64.
Dirk Meyer, ingénieur ayant travaillé sur les [[processeur]]s [[DEC Alpha|Alpha]] de chez [[Digital Equipment Corporation|DEC]], a participé au projet.
== Architecture ==
Le jeu d'instruction de l'architecture AMD x86-64 est une extension de l'architecture Intel [[IA-32]] (x86-32). Les caractéristiques principales de l'architecture AMD64 est le support de registres généraux de 64 bits, de l'arithmétique des entiers et des opérations logiques 64 bits ainsi que des adresses virtuelles 64 bits. Les créateurs ont profité de l'opportunité d'une nouvelle architecture pour proposer d'autres améliorations, incluant principalement :
*'''Support complet des entiers 64 bits''' : tous les registres généraux (GPRs : General Purpose Registers) passent de 32 à 64 bits et toutes les opérations logiques et arithmétiques, de la mémoire vers les registres et des registres vers la mémoire, etc. sont disponibles nativement pour les entiers 64 bits. Les ''push'' (empilement) et les ''pop'' (dépilement) sur la pile sont toujours d'une largeur de 8 octets (64 bits), de même que les pointeurs.
*'''[[Registre (informatique)|Registres]] supplémentaires''' : le nombre des registres généraux est doublé pour atteindre 16. Il y a par conséquent moins besoin de sauvegarder les registres, de les restaurer et plus généralement de les manipuler ; la plupart des arguments de la plupart des fonctions peut de même est passé par les registres plutôt que sur la pile. À titre de comparaison l'architecture PowerPC 970 dispose de 32 GPRs. La taille et le nombre de registre est en effet un des points faible du [[x86]]. Avec des applications optimisées, on peut attendre un gain de performances, notamment pour les programmes disposant de nombreuses boucles.
*'''Registres XMM supplémentaires''' : de manière similaire, le nombre de registres XMM (utilisés pour les instructions [[Single Instruction Multiple Data|SIMD]]) est aussi augmenté de 8 à 16.
*'''Espace mémoire virtuel plus grand''' : les modèles de processeurs implémentant actuellement l'architecture AMD64 peuvent adresser jusqu'à 256 [[Préfixe binaire|tebioctets]] d'adresse mémoire virtuelle (2<sup>48</sup> octets). Cette limite peut être étendue dans de futures implémentations à 16 [[Préfixe binaire|exbioctets]] (2<sup>64</sup> octets). Ceci peut être comparé aux 4 [[Préfixe binaire|gibioctets]] pour les architectures x86 32bits.
*'''Espace mémoire physique plus grand''' : les modèles de processeurs implémentant actuellement l'architecture AMD64 peuvent adresser 1 [[Préfixe binaire|tebioctet]] d'adresse mémoire physique. Cette limite peut être étendue dans de futures implémentations à 4 [[Préfixe binaire|pebioctets]] (2<sup>52</sup> octets) (limités par le format des entrées de la table de page). En [[legacy mode]] (mode compatible x86), l'extension PAE ([[Physical Address Extension]]) est supportée, comme sur les processeurs x86 32 bits les plus courant, autorisant l'accès à un maximum de 64 [[Préfixe binaire|gibioctets]].
*'''Accès aux données relatifs au pointeur d'instruction''' : les instructions peuvent désormais référencer les données relativement pointeur d'instruction (registre RIP). Ceci permet de générer du code indépendant de la position du programme en mémoire (PIC, ou Position Independent Code) plus efficace ; ceci est souvent utilisé dans les bibliothèques partagées ou les code chargés à l'exécution.
*'''Instructions SSE''' : l'architecture original AMD64 a adopté les instructions [[Streaming SIMD Extensions|SSE]] et [[SSE2]] au sein du cœur du processeur. Les instructions [[SSE3]] ont été ajoutées en avril 2005. SSE2 remplace le jeu d'instructions [[x87]] de 80 bits de précision, incluant le choix d'opérations mathématiques flottantes en 32 ou 64 bits. Ceci permet des opérations en virgule flottante compatibles avec les autres CPUs modernes. Les instructions SSE et SSE2 ont aussi été étendues pour supporter les huis nouveaux registres XMM. SSE et SSE2 sont disponibles en 32 bits sur les processeurs x86 modernes ; cependant s'ils sont utilisés par des programmes 32 bits, ces derniers ne pourront fonctionner que sur des processeurs supportant ces instructions. Ceci n'est pas un problème pour des programmmes 64 bits, du fait que tous les processeurs AMD64 supportent ces jeux d'instruction. Utiliser les instructions SSE et SSE2 au lieu des x87 ne réduit alors pas le nombre de plateformes sur lesquelles les programmes pourront fonctionner. Du fait que les instructions SSE et SSE2 sont généralement plus rapide et fournissent les mêmes fonctionnalités que les jeux [[MMX (processeur)|MMX]] et [[3DNow!]], ces derniers sont considérés comme dépassés sur AMD64.
*'''[[NX bit|No-Execute bit]]''' : le bit 'NX' (bit 63 des entrées de la table des pages) permet au système d'exploitation de spécifier quelles pages d'adresse mémoire virtuelle peuvent contenir du code exécutable et quelles pages ne le peuvent pas. Une tentative d'exécuter du code d'une page identifiée comme 'no execute' provoquera une violation d'accès mémoire, identique à celle générée lors d'une tentative d'écriture sur une page en mode "lecture seule". Ceci devrait rendre plus difficile pour un code malicieux de prendre le contrôle du système ''via'' les attaques par "buffer overrun" ou liées à des problèmes de vérifications des tampons mémoire. Une fonctionnalité identique était déjà disponible sur les processeurs [[x86]] depuis le [[80286]] à l'aide d'un attribut des descripteurs de segment, mais ne peut alors s'appliquer qu'à un segment entier. L'adressage par segment est considéré comme obsolète depuis longtemps et tous les systèmes d'exploitation actuels pour PC ne l'utilisent effectivement pas, en plaçant l'adresse de base de chacun d'entre eux à 0 et sa taille à 4 giga-octets. AMD a été le premier vendeur de la famille x86 à supporter l'accès ''non exécutable'' en mode d'adressage linéaire. Cette fonctionnalité est aussi disponible en mode 'legacy' sur les processseurs AMD64, ainsi que les processeurs Intel x86 récents, avec l'utilisation du mode [[Physical Address Extension|PAE]].
*'''Suppression de fonctionnalités anciennes''' : un certain nombre de fonctionnalités de ''programmation système'' de l'architecture x86 non utilisées dans les systèmes d'exploitation moderne ne sont plus disponibles sur AMD64 en "long mode". Ceci inclut l'adressage mémoire segmenté (bien que les segments FS et GS subsistent, pour la compatibilité avec le code Windows), le mécanisme de changement de tâches (''task switch'') et le [[Mode virtuel 8086]]. Ces fonctionnalités subsistent en "legacy mode", pour permettre à ces processeurs d'exécuter complètement les codes 32 et 16 bits sans modification. Si, dans le futur, ne devrait plus subsister de code 32 bits utilisant ces fonctionnalités, leur support pourrait être supprimé des processeurs pour améliorer la conception des processeurs et économiser sur les coûts de production. Ces fonctionnalités pourraient de plus être émulées par le système d'exploitation pour préserver la compatibilité avec les applications "legacy".
==Les différents modes de fonctionnement ==
{| class="wikitable"
|- bgcolor="#cccccc"
! colspan="2" | Mode de fonctionnement
! [[Système d'exploitation]] requis
! Recompilation requise
! Taille des adresses par défaut
! Taille des opérandes par défaut
! Extensions de registres
! Taille typique des registres GPR
<!--
|-
| Address<br>size(bits)
| Operand<br>size(bits)
-->
|- align="center"
| rowspan="3" | [[Long mode]]
| 64-bit mode
| rowspan="3" | OS compatibles 64-bit (x86-64) (par ex. [[Microsoft Windows XP Professionnel 64|Win XP Pro x64]], Linux x86-64)
| oui
| 64
| 32
| oui
| 64
|- align="center"
| rowspan="2" | Compatibility mode
| rowspan="2" | non
| 32
| 32
| rowspan="2" | non
| 32
|- align="center"
| 16
| 16
| 16
|- align="center"
| rowspan="4" | Legacy Mode
| rowspan="2" | Protected Mode
| rowspan="3" | OS "Legacy 16-bit ou 32-bit"
| rowspan="4" | non
| 32
| 32
| rowspan="4" | non
| 32
|- align="center"
| 16
| 16
| 16
|- align="center"
| [[mode virtuel 8086]]
| rowspan="2" | 16
| rowspan="2" | 16
| rowspan="2" | 16
|- align="center"
| Real mode
| Legacy 16-bit OS
|}
===Description de ces modes===
*Long Mode : mode 64 bits natif avec compatibilité 32 bits (des programmes non recompilés peuvent être utilisés sans perte de performance notable). Il nécessite un [[système d'exploitation]] 64 bits comme [[GNU/Linux]], les [[Berkeley Software Distribution|BSD]]s, [[Solaris (informatique)|Solaris 10]] ou [[Microsoft Windows XP Professionnel 64|Windows XP Pro x64]].
*Legacy Mode : dans ce mode le [[processeur]] fonctionne classiquement avec le jeu d'instructions [[x86]], avec tous les [[Système d'exploitation|systèmes d'exploitation]] précédents comme [[MS-DOS]] et Windows non 64 bits.
== Implémentations ==
Les processeurs suivants implémentent l'architecture AMD64 :
* AMD K8
** AMD [[Athlon 64]]
** AMD [[Athlon 64 X2]]
** AMD [[Athlon 64|Athlon 64 FX]]
** AMD [[Opteron]]
** AMD [[Turion 64]]
** AMD [[Sempron]] (seulement les modèles 'Palermo')
* Intel [[NetBurst]] ([[Intel 64]])
** Intel [[Xeon]] (quelques modèles depuis 'Nocona')
** Intel [[Celeron D]] (quelques modèles depuis 'Prescott')
** Intel [[Pentium 4]] (quelques modèles depuis 'Prescott')
** Intel [[Pentium D]]
** Intel [[Pentium Extreme Edition]]
* Intel Core
** Intel Core 2 (Quad, Duo, Solo) et dérivés (Celeron 4x0, Celeron Dual Core, Pentium E)
** Intel Xeon
== Voir aussi ==
* [[i386]]
* [[Intel 64]]
* [[NX bit]]
* [[IA-64]]
== Liens externes ==
* [http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_875_7044,00.html Documentation technique de l'architecture AMD64] (en)
{{Microprocesseurs AMD}}
{{Portail informatique}}
[[Catégorie:Microprocesseur]]
[[Catégorie:Architecture x86]]
[[Catégorie:Processeur 64 bit]]
[[ar:AMD 64]]
[[ca:AMD64]]
[[cs:AMD64]]
[[da:X86-64]]
[[de:AMD64]]
[[en:X86-64]]
[[es:AMD64]]
[[fi:AMD64]]
[[hu:X86-64]]
[[id:AMD64]]
[[it:AMD64]]
[[ja:AMD64]]
[[ko:X86-64]]
[[nl:X86-64]]
[[no:X86-64]]
[[pl:AMD64]]
[[pt:AMD64]]
[[ru:AMD64]]
[[sk:X86-64]]
[[sl:X86-64]]
[[sv:AMD64]]
[[th:X86-64]]
[[tr:X86-64]]
[[zh:X86-64]]