x86-64 (también AMD64/Intel64/EM64T) es una versión de 64 bits (originalmente una extensión) de la arquitectura x86 , desarrollada por AMD e introducida en 2000 [1] , que permite que los programas se ejecuten en modo de 64 bits.
Es una extensión de la arquitectura x86 , y ahora es una versión de la arquitectura x86 que es casi completamente retrocompatible con la versión de 32 bits de la arquitectura x86, ahora conocida como IA-32 .
Microsoft y Oracle usan el término "x64" para referirse a esta versión de la arquitectura x86, pero el directorio que contiene los archivos de la arquitectura en Microsoft Windows de 64 bits se llama "amd64" ("i386" para x86 respectivamente). Esto también se observa en los repositorios de la mayoría de las distribuciones de Linux .
Actualmente se admite el conjunto de instrucciones x86-64:
Existen las siguientes convenciones de nomenclatura para esta versión x86 de 64 bits:
Actualmente, los nombres más comunes para la versión de 64 bits de x86 son: "x64", "x86-64" y "AMD64".
A veces, la mención de AMD engaña a los usuarios, hasta el punto de que se niegan a utilizar distribuciones de versiones nativas del sistema operativo, argumentando que la versión de AMD no funcionará en su procesador Intel; de hecho, los distribuidores de software usan el nombre amd64 solo porque eso AMD fue pionera en el desarrollo de la versión de 64 bits de x86.
A menudo, los usuarios confunden la arquitectura x86-64 con IA-64 , descargan por error software para esta arquitectura y luego descubren que el programa no se inicia. Para evitar tales errores, debe recordarse que Intel 64 e IA-64 son arquitecturas de microprocesador completamente diferentes e incompatibles. Este último es incompatible con x86-64.
Representantes de Intel 64:
Representantes de IA-64: familias Itanium e Itanium 2 .
Los procesadores de esta arquitectura admiten dos modos de funcionamiento: modo largo (modo "largo") y modo heredado ("heredado" - modo de compatibilidad con x86 de 32 bits).
El modo "Largo" es "nativo" para los procesadores AMD64. Este modo permite aprovechar al máximo la arquitectura x86-64. Este modo requiere cualquier sistema operativo de 64 bits (por ejemplo, Windows Server 2003/2003R2/2008/2008R2/2012, Windows XP Professional x64 Edition, Windows Vista x64, Windows 7/8/8.1/10/11 x64 o 64 bits). variantes de sistemas similares a UNIX GNU/Linux , FreeBSD , OpenBSD , NetBSD (sin embargo, las compilaciones puras de 64 bits tienen la capacidad de ejecutar aplicaciones de 32 bits), Solaris (compilación mixta de 32/64 con diferentes núcleos para 32 bits y Procesadores de 64 bits), Mac OS X (compilación mixta 32/64 con kernel de 32 bits, a partir de la versión 10.4.7).
Este modo le permite ejecutar programas de 64 bits. También (para compatibilidad con versiones anteriores) se proporciona soporte para la ejecución de código de 32 bits, por ejemplo, aplicaciones de 32 bits (naturalmente, los programas de 32 bits, incluso cuando se ejecutan en un sistema de 64 bits, no podrán usar 64 bits). -bit bibliotecas del sistema, y viceversa) . Para realizar esta tarea, la mayoría de los sistemas operativos de 64 bits proporcionan dos conjuntos de API del sistema necesarias : una para aplicaciones nativas de 64 bits y otra para programas de 32 bits (la misma técnica utilizada por los primeros sistemas de 32 bits como Windows 95 y Windows NT para ejecutar programas de 16 bits).
En el modo "largo", se suprimen una serie de "rudimentos" de la arquitectura x86-32 , en particular, como el modo virtual 8086 , el modelo de memoria segmentada (sin embargo, sigue siendo posible utilizar segmentos FS y GS, que es útil para encontrar rápidamente datos de subprocesos importantes al cambiar de tarea), multitarea de hardware , así como una serie de comandos que implementan las funciones descontinuadas y funcionan con números BCD , que prácticamente no se usaban en programas nuevos. El modo "largo" se activa configurando el indicador CR0.PG, que se utiliza para habilitar la MMU de paginación (siempre que dicha conmutación esté habilitada (EFER.LME=1), de lo contrario, simplemente habilitará la MMU en modo "heredado" ). Por lo tanto, es imposible ejecutar un código de 64 bits con paginación prohibida. Esto genera ciertas dificultades en la programación, ya que al pasar del modo "largo" al "heredado" y viceversa (por ejemplo, para llamar a funciones BIOS o DOS , monitor de máquina virtual , etc.), se requiere un reinicio doble de la MMU, para lo cual el código de cambio debe estar en la página representada de forma idéntica.
Este modo "heredado" permite que el procesador x86-64 ejecute instrucciones para procesadores x86 y, por lo tanto, logra una compatibilidad total con código de 32 bits y sistemas operativos de 32 bits para x86. En este modo, el procesador se comporta exactamente como un procesador x86 (como un Athlon o Pentium III). Las funciones y características proporcionadas por la arquitectura x86-64 (por ejemplo, registros de 64 bits) naturalmente no están disponibles en este modo. En este modo, los programas y sistemas operativos de 64 bits no funcionarán.
El conjunto de instrucciones x86-64 de AMD (más tarde rebautizado como AMD64) es una extensión de la arquitectura Intel IA-32 (x86-32). La principal característica distintiva de AMD64 es la compatibilidad con registros de propósito general de 64 bits, operaciones aritméticas y lógicas de 64 bits en números enteros y direcciones virtuales de 64 bits. Para abordar nuevos registros para comandos, se introdujeron los llamados "prefijos de extensión de registro", para lo cual se eligió el rango de códigos 40h-4Fh, utilizados para comandos INC <registro> y DEC <registro> en modos de 32 bits. Los comandos INC y DEC en modo de 64 bits deben codificarse en la forma más general de dos bytes.
La arquitectura x86-64 tiene:
Mientras desarrollaban la arquitectura AMD64 (implementaciones AMD de x86-64), los ingenieros de AMD decidieron eliminar para siempre el "rudimento" principal de la arquitectura x86: un modelo de memoria segmentada que ha sido compatible desde el 8086 . Sin embargo, debido a esto, al desarrollar la primera versión x86-64 de su producto de virtualización , los programadores de VMware encontraron dificultades insuperables al implementar una máquina virtual para sistemas invitados de 64 bits [2] : dado que el programa utilizaba un mecanismo de segmentación, esta tarea se ha vuelto casi irresoluble.
Al darse cuenta del error, AMD devolvió una versión limitada de la organización de memoria segmentada, comenzando con la revisión D de la arquitectura AMD64, que permitía ejecutar SO de 64 bits en máquinas virtuales . Intel no siguió este ejemplo, y en sus procesadores que no son compatibles con las herramientas de virtualización de hardware Intel VT (Intel Virtualization Technology) [3] , es imposible ejecutar una máquina virtual de 64 bits [4] . Para verificar si un procesador puede ejecutar sistemas operativos invitados de 64 bits, VMware proporciona una utilidad especial con sus productos.
Lanzar e instalar sistemas invitados de 64 bits en este momento (desde 2013) ya es posible (el producto de VMware, ESXi (estación de trabajo, etc.), es compatible con la arquitectura x86-64).
Cabe señalar que los comandos LAHF y SAHF que inicialmente cayeron bajo el cuchillo, que también son utilizados activamente por el software de virtualización, luego se devolvieron al sistema de comando. Con la difusión de las herramientas de virtualización de hardware (Intel VT, AMD-V), la necesidad de segmentación desaparecerá gradualmente.
Tecnologías de procesadores digitales | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arquitectura | |||||||||
Set de instrucciones arquitectura | |||||||||
palabra maquina | |||||||||
Paralelismo |
| ||||||||
Implementaciones | |||||||||
Componentes | |||||||||
Administración de energía |