De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

AMD Opteron , la primera CPU en introducir las extensiones x86-64 en 2003
El conjunto de cinco volúmenes de la Guía del programador de arquitectura x86-64 , publicado y distribuido por AMD en 2002

x86-64 (también conocido como x64 , x86_64 , AMD64 e Intel 64 ) [nota 1] es una versión de 64 bits del conjunto de instrucciones x86 , lanzado por primera vez en 1999. Introdujo dos nuevos modos de operación, modo de 64 bits y modo de compatibilidad, junto con un nuevo modo de paginación de 4 niveles .

Con el modo de 64 bits y el nuevo modo de paginación, admite cantidades mucho más grandes de memoria virtual y memoria física de lo que era posible en sus predecesores de 32 bits, lo que permite a los programas almacenar mayores cantidades de datos en la memoria. x86-64 también expande los registros de propósito generala 64 bits, y amplía el número de ellos de 8 (algunos de los cuales tenían una funcionalidad limitada o fija, por ejemplo, para la gestión de la pila) a 16 (totalmente general), y proporciona muchas otras mejoras. Las operaciones de coma flotante son compatibles a través de instrucciones obligatorias similares a SSE2, y los registros de estilo x87 / MMX generalmente no se usan (pero aún están disponibles incluso en modo de 64 bits); en su lugar, se utiliza un conjunto de 16 registros vectoriales, de 128 bits cada uno. (Cada registro puede almacenar uno o dos números de precisión doble o de uno a cuatro números de precisión simple, o varios formatos enteros). En el modo de 64 bits, las instrucciones se modifican para admitir operandos de 64 bits y el modo de direccionamiento de 64 bits.

El modo de compatibilidad definido en la arquitectura permite que las aplicaciones de usuario de 16 y 32 bits se ejecuten sin modificaciones, coexistiendo con aplicaciones de 64 bits si el sistema operativo de 64 bits las admite. [11] [nota 2] Como los conjuntos completos de instrucciones x86 de 16 y 32 bits permanecen implementados en el hardware sin ninguna emulación intermedia, estos ejecutables más antiguos pueden ejecutarse con poca o ninguna penalización de rendimiento, [13] mientras que las aplicaciones más nuevas o modificadas pueden aproveche las nuevas funciones del diseño del procesador para lograr mejoras de rendimiento. Además, un procesador que admite x86-64 aún se enciende en modo real para una compatibilidad total con versiones anteriores del 8086, como lo han hecho los procesadores x86 que admiten el modo protegido desde el 80286 .

La especificación original, creada por AMD y lanzada en 2000, ha sido implementada por AMD, Intel y VIA . La microarquitectura AMD K8 , en los procesadores Opteron y Athlon 64 , fue la primera en implementarla. Esta fue la primera adición significativa a la arquitectura x86 diseñada por una empresa distinta a Intel. Intel se vio obligado a hacer lo mismo e introdujo una familia NetBurst modificada que era compatible con el software con la especificación de AMD. VIA Technologies introdujo x86-64 en su arquitectura VIA Isaiah, con VIA Nano .

La arquitectura x86-64 es distinta de la arquitectura Intel Itanium (anteriormente IA-64 ), que no es compatible en el nivel del conjunto de instrucciones nativas con la arquitectura x86. Los sistemas operativos y las aplicaciones compiladas para uno no se pueden ejecutar en el otro.

AMD64 [ editar ]

Logotipo de AMD64

Historia [ editar ]

AMD64 se creó como una alternativa a la arquitectura IA-64 radicalmente diferente , que fue diseñada por Intel y Hewlett Packard . Anunciada originalmente en 1999 [14] mientras que una especificación completa estuvo disponible en agosto de 2000, [15] AMD posicionó la arquitectura AMD64 desde el principio como una forma evolutiva de agregar capacidades informáticas de 64 bits a la arquitectura x86 existente, en lugar de El enfoque de Intel de crear una arquitectura de 64 bits completamente nueva con IA-64.

El primer procesador basado en AMD64, el Opteron , se lanzó en abril de 2003.

Implementaciones [ editar ]

Los procesadores de AMD que implementan la arquitectura AMD64 incluyen Opteron , Athlon 64 , Athlon 64 X2 , Athlon 64 FX , Athlon II (seguido de "X1", "X2", "X3" o "X4" para indicar la cantidad de núcleos y XLT modelos), Turion 64 , Turion 64 X2 , Sempron (paso a paso "Palermo" E6 y todos los modelos "Manila"), Phenom (seguido de "X3" o "X4" para indicar el número de núcleos), Phenom II (seguido de " X2 "," X3 "," X4 "o" X6 "para indicar el número de núcleos), FX , Fusion / APU y Ryzen / Epyc .[ cita requerida ]

Características arquitectónicas [ editar ]

La principal característica definitoria de AMD64 es la disponibilidad de registros de procesador de propósito general de 64 bits (por ejemplo, rax y rbx), operaciones aritméticas y lógicas enteras de 64 bits y direcciones virtuales de 64 bits . [ cita requerida ] Los diseñadores aprovecharon la oportunidad para hacer otras mejoras también.

Algunos de los cambios más significativos [¿ según quién? ] se describen a continuación: [ cita requerida ]

Capacidad de entero de 64 bits
Todos los registros de propósito general (GPR) se expanden de 32  bits a 64 bits, y todas las operaciones aritméticas y lógicas, operaciones de memoria a registro y de registro a memoria, etc., pueden operar directamente en enteros de 64 bits. Los empujes y estallidos en la pila tienen por defecto pasos de 8 bytes, y los punteros tienen un ancho de 8 bytes.
Registros adicionales
Además de aumentar el tamaño de los registros de propósito general, el número de registros de propósito general con nombre aumenta de ocho (es decir, eax, ecx, edx, ebx, esp, ebp, esi, edi) en x86 a 16 (es decir, rax , rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Por lo tanto, es posible mantener más variables locales en los registros en lugar de en la pila, y permitir que los registros contengan constantes a las que se accede con frecuencia; Los argumentos para subrutinas pequeñas y rápidas también se pueden pasar en registros en mayor medida.
AMD64 todavía tiene menos registros que muchos conjuntos de instrucciones RISC (por ejemplo, PA-RISC , Power ISA y MIPS tienen 32 GPR; Alpha , ARM de 64 bits y SPARC tienen 31) o máquinas similares a VLIW como IA-64 (que tiene 128 registros). Sin embargo, una implementación AMD64 puede tener muchos más registros internos que el número de registros arquitectónicos expuestos por el conjunto de instrucciones (consulte el cambio de nombre de registros ). (Por ejemplo, los núcleos AMD Zen tienen 168 registros internos físicos de punto flotante vectorial de 64 bits y 160 registros internos físicos de punto flotante vectorial de 128 bits).
Registros XMM (SSE) adicionales
De manera similar, el número de registros XMM de 128 bits (utilizados para las instrucciones de Streaming SIMD ) también aumenta de 8 a 16.
La pila de registros FPU x87 tradicional no está incluida en la extensión del tamaño del archivo de registro en el modo de 64 bits, en comparación con los registros XMM utilizados por SSE2, que se extendieron. La pila de registros x87 no es un simple archivo de registro, aunque permite el acceso directo a registros individuales mediante operaciones de intercambio de bajo costo.
Mayor espacio de direcciones virtuales
La arquitectura AMD64 define un formato de dirección virtual de 64 bits, de los cuales los 48 bits de bajo orden se utilizan en las implementaciones actuales. [11] ( p120 ) Esto permite hasta 256  TiB (2 48 bytes ) de espacio de direcciones virtuales. La definición de la arquitectura permite que este límite se eleve en implementaciones futuras a los 64 bits completos, [11] ( p2 ) ( p3 ) ( p13 ) ( p117 ) ( p120 ) ampliando el espacio de direcciones virtuales a 16  EiB (2 64 bytes). [dieciséis]Esto se compara con solo 4  GiB (2 32 bytes) para el x86. [17]
Esto significa que se pueden operar archivos muy grandes mapeando el archivo completo en el espacio de direcciones del proceso (que a menudo es mucho más rápido que trabajar con llamadas de lectura / escritura de archivos), en lugar de tener que asignar regiones del archivo dentro y fuera de el espacio de direcciones.
Mayor espacio de direcciones físicas
La implementación original de la arquitectura AMD64 implementó direcciones físicas de 40 bits y, por lo tanto, podría abordar hasta 1 TiB (2 40 bytes) de RAM. [11] ( p24 ) Las implementaciones actuales de la arquitectura AMD64 (a partir de la microarquitectura AMD 10h ) extienden esto a direcciones físicas de 48 bits [18] y, por lo tanto, pueden direccionar hasta 256 TiB de RAM. La arquitectura permite extender esto a 52 bits en el futuro [11] ( p24 ) [19] (limitado por el formato de entrada de la tabla de páginas); [11] ( p131 ) esto permitiría direccionar hasta 4  PiBde RAM. A modo de comparación, los procesadores x86 de 32 bits están limitados a 64 GiB de RAM en el modo de extensión de dirección física (PAE), [20] o 4 GiB de RAM sin el modo PAE. [11] ( pág. 4 )
Mayor espacio de direcciones físicas en modo heredado
Cuando funciona en modo heredado, la arquitectura AMD64 admite el modo de extensión de dirección física (PAE), al igual que la mayoría de los procesadores x86 actuales, pero AMD64 extiende PAE de 36 bits a un límite arquitectónico de 52 bits de dirección física. Por lo tanto, cualquier implementación permite el mismo límite de direcciones físicas que en el modo largo . [11] ( pág . 24 )
Puntero de instrucción acceso a datos relativos
Las instrucciones ahora pueden hacer referencia a datos relacionados con el puntero de instrucción (registro RIP). Esto hace que el código independiente de la posición , como se usa a menudo en las bibliotecas compartidas y el código cargado en tiempo de ejecución, sea más eficiente.
Instrucciones SSE
La arquitectura AMD64 original adoptó SSE y SSE2 de Intel como instrucciones centrales. Estos conjuntos de instrucciones proporcionan un complemento vectorial a la FPU escalar x87 , para los tipos de datos de precisión simple y precisión doble. SSE2 también ofrece operaciones de vectores enteros, para tipos de datos que van desde 8 bits hasta 64 bits de precisión. Esto hace que las capacidades vectoriales de la arquitectura estén a la par con las de los procesadores x86 más avanzados de su tiempo. Estas instrucciones también se pueden utilizar en modo de 32 bits. La proliferación de procesadores de 64 bits ha hecho que estas capacidades vectoriales sean omnipresentes en los ordenadores domésticos, lo que permite mejorar los estándares de las aplicaciones de 32 bits. La edición de 32 bits de Windows 8, por ejemplo, requiere la presencia de instrucciones SSE2. [21] Las instrucciones SSE3 y los conjuntos de instrucciones de Streaming SIMD Extensions posteriores no son características estándar de la arquitectura.
Bit de no ejecución
El bit No-Execute o el bit NX (bit 63 de la entrada de la tabla de páginas) permite al sistema operativo especificar qué páginas del espacio de direcciones virtuales pueden contener código ejecutable y cuáles no. Un intento de ejecutar código desde una página etiquetada como "no ejecutar" resultará en una violación de acceso a la memoria, similar a un intento de escribir en una página de solo lectura. Esto debería dificultar que el código malintencionado tome el control del sistema a través de ataques de " saturación del búfer " o "búfer no verificado". Una característica similar ha estado disponible en los procesadores x86 desde el 80286 como un atributo de los descriptores de segmento ; sin embargo, esto solo funciona en un segmento completo a la vez.
El direccionamiento segmentado se ha considerado durante mucho tiempo un modo de funcionamiento obsoleto, y todos los sistemas operativos de PC actuales lo omiten, estableciendo todos los segmentos en una dirección base de cero y (en su implementación de 32 bits) un tamaño de 4 GB. AMD fue el primer proveedor de la familia x86 en implementar la no ejecución en el modo de direccionamiento lineal. La función también está disponible en modo heredado en procesadores AMD64 y procesadores Intel x86 recientes, cuando se usa PAE.
Eliminación de funciones antiguas
Algunas características de "programación del sistema" de la arquitectura x86 no se usaron o se subutilizaron en los sistemas operativos modernos y no están disponibles en AMD64 en modo largo (64 bits y compatibilidad), o existen solo en forma limitada. Estos incluyen el direccionamiento segmentado (aunque los segmentos FS y GS se conservan en forma vestigial para su uso como punteros extra-base a las estructuras del sistema operativo), [11] ( p70 ) el mecanismo de cambio de estado de la tarea y el modo 8086 virtual. Estas características permanecen completamente implementadas en "modo heredado", lo que permite que estos procesadores ejecuten sistemas operativos de 32 y 16 bits sin modificaciones. Algunas instrucciones que resultaron ser raras veces útiles no se admiten en el modo de 64 bits, incluido el guardado / restauración de registros de segmento en la pila, guardado / restauración de todos los registros (PUSHA / POPA), aritmética decimal, instrucciones BOUND e INTO y " far "salta y llama con operandos inmediatos.

Detalles del espacio de direcciones virtuales [ editar ]

Direcciones de forma canónica [ editar ]

Implementaciones canónicas del espacio de direcciones (diagramas no a escala)
Implementación de 56 bits
Implementación de 64 bits

Aunque las direcciones virtuales tienen 64 bits de ancho en el modo de 64 bits, las implementaciones actuales (y todos los chips que se sabe que están en las etapas de planificación) no permiten que se utilice todo el espacio de direcciones virtuales de 2 64 bytes (16 EiB). Esto sería aproximadamente cuatro mil millones de veces el tamaño del espacio de direcciones virtuales en máquinas de 32 bits. La mayoría de los sistemas operativos y aplicaciones no necesitarán un espacio de direcciones tan grande en el futuro previsible, por lo que la implementación de direcciones virtuales tan amplias simplemente aumentaría la complejidad y el costo de la traducción de direcciones sin ningún beneficio real. AMD, por lo tanto, decidió que, en las primeras implementaciones de la arquitectura, solo los 48 bits menos significativos de una dirección virtual se usarían realmente en la traducción de direcciones ( búsqueda en la tabla de páginas ). [11]( p120 )

Además, la especificación AMD requiere que los 16 bits más significativos de cualquier dirección virtual, los bits 48 al 63, sean copias del bit 47 (de manera similar a la extensión del signo ). Si no se cumple este requisito, el procesador generará una excepción. [11] ( p131 ) Las direcciones que cumplen con esta regla se denominan "forma canónica". [11] ( p130 ) Las direcciones de formato canónico van desde 0 hasta 00007FFF'FFFFFFFF, y desde FFFF8000'00000000 hasta FFFFFFFF'FFFFFFFF, para un total de 256 TiB de espacio de direcciones virtuales utilizable. Esto sigue siendo 65.536 veces más grande que el espacio de direcciones virtual de 4 GiB de las máquinas de 32 bits.

Esta característica facilita la escalabilidad posterior a un verdadero direccionamiento de 64 bits. Muchos sistemas operativos (incluida, entre otros, la familia Windows NT ) toman la mitad de la dirección superior del espacio de direcciones ( espacio de kernel con nombre ) para sí mismos y dejan la mitad de la dirección inferior ( espacio de usuario ) para el código de la aplicación, modo de usuario pilas, montones y otras regiones de datos. [22]El diseño de "dirección canónica" asegura que cada implementación compatible con AMD64 tenga, en efecto, dos mitades de memoria: la mitad inferior comienza en 00000000'00000000 y "crece hacia arriba" a medida que se dispone de más bits de dirección virtual, mientras que la mitad superior está "acoplada". a la parte superior del espacio de direcciones y crece hacia abajo. Además, hacer cumplir la "forma canónica" de las direcciones mediante la verificación de los bits de dirección no utilizados evita que el sistema operativo las use en punteros etiquetados como banderas, marcadores de privilegios, etc., ya que dicho uso podría volverse problemático cuando la arquitectura se amplía para implementar más virtuales. bits de dirección.

Las primeras versiones de Windows para x64 ni siquiera usaban los 256 TiB completos; estaban restringidos a solo 8 TiB de espacio de usuario y 8 TiB de espacio de kernel. [22] Windows no admitió todo el espacio de direcciones de 48 bits hasta Windows 8.1 , que se lanzó en octubre de 2013. [22]

Estructura de la tabla de páginas [ editar ]

El modo de direccionamiento de 64 bits (" modo largo ") es un superconjunto de extensiones de dirección física (PAE); debido a esto, los tamaños de página pueden ser 4  KiB (2 12 bytes) o 2  MiB (2 21 bytes). [11] ( p120 ) El modo largo también admite tamaños de página de 1  GiB (1073741824 (2 30 ) bytes). [11] ( p120 ) En lugar del sistema de tabla de página de tres niveles utilizado por los sistemas en modo PAE, los sistemas que se ejecutan en modo largo utilizan cuatro niveles de tabla de página: PAELa tabla de puntero de directorio de página se amplía de cuatro entradas a 512, y se agrega una tabla de nivel 4 de mapa de página (PML4) adicional, que contiene 512 entradas en implementaciones de 48 bits. [11] ( p131 ) Una jerarquía de mapeo completa de 4 páginas KiB para todo el espacio de 48 bits requeriría un poco más de 512 GiB de memoria (aproximadamente 0.195% del espacio virtual de 256 TiB).

Intel ha implementado un esquema con una tabla de páginas de 5 niveles , que permite que los procesadores Intel 64 admitan un espacio de direcciones virtuales de 57 bits. [23] Otras extensiones pueden permitir un espacio completo de direcciones virtuales de 64 bits y memoria física al expandir el tamaño de entrada de la tabla de páginas a 128 bits, y reducir los recorridos de página en la jerarquía de 5 niveles utilizando un tamaño de asignación de página de 64 KiB más grande que aún admite operaciones de página de 4 KiB para compatibilidad con versiones anteriores. [24]

Límites del sistema operativo [ editar ]

El sistema operativo también puede limitar el espacio de direcciones virtuales. Los detalles, en su caso, se dan en la sección " Características y compatibilidad del sistema operativo ".

Detalles del espacio de direcciones físicas [ editar ]

Los procesadores AMD64 actuales admiten un espacio de direcciones físicas de hasta 2 48 bytes de RAM o 256 TiB. [18] Sin embargo, en junio de 2010 , no se conocían placas base x86-64 que admitieran 256 TiB de RAM. [25] [26] [27] [28] [ verificación fallida ] El sistema operativo puede imponer límites adicionales a la cantidad de RAM que se puede utilizar o admitir. Los detalles sobre este punto se dan en la sección " Características y compatibilidad del sistema operativo " de este artículo.

Modos de funcionamiento [ editar ]

La arquitectura tiene tres modos principales de operación, modo largo, modo heredado y modo real.

  1. ^ a b c d Tenga en cuenta que el código de 16 bits escrito para 80286 y siguientes no utiliza instrucciones de operando de 32 bits. El código escrito para 80386 y superior puede usar el prefijo de anulación del tamaño del operando (0x66). Normalmente, este prefijo es usado por código de modo largo y protegido con el propósito de usar operandos de 16 bits, ya que ese código se estaría ejecutando en un segmento de código con un tamaño de operando predeterminado de 32 bits. En modo real, el tamaño del operando predeterminado es de 16 bits, por lo que el prefijo 0x66 se interpreta de manera diferente, cambiando el tamaño del operando a 32 bits.
Diagrama de estado de los modos de funcionamiento x86-64

Modo largo [ editar ]

El modo largo es el modo de funcionamiento principal previsto de la arquitectura; es una combinación del modo nativo de 64 bits del procesador y un modo de compatibilidad combinado de 32 y 16 bits. Lo utilizan los sistemas operativos de 64 bits. En un sistema operativo de 64 bits, los programas de 64 bits se ejecutan en modo de 64 bits y las aplicaciones en modo protegido de 32 y 16 bits (que no necesitan utilizar el modo real o el modo 8086 virtual para ejecutarse en cualquier momento). time) se ejecutan en modo de compatibilidad. Los programas en modo real y los programas que usan el modo 8086 virtual en cualquier momento no se pueden ejecutar en modo largo a menos que esos modos se emulen en software. [11] : 11 Sin embargo, dichos programas pueden iniciarse desde un sistema operativo que se ejecuta en modo largo en procesadores compatibles con VT-x o AMD-V creando un procesador virtual que se ejecuta en el modo deseado.

Dado que el conjunto de instrucciones básicas es el mismo, casi no hay penalización de rendimiento para ejecutar código x86 en modo protegido. Esto es diferente al IA-64 de Intel , donde las diferencias en el conjunto de instrucciones subyacentes significan que la ejecución de código de 32 bits debe realizarse en emulación de x86 (haciendo que el proceso sea más lento) o con un coprocesador x86 dedicado. Sin embargo, en la plataforma x86-64, muchas aplicaciones x86 podrían beneficiarse de una recompilación de 64 bits , debido a los registros adicionales en el código de 64 bits y la compatibilidad garantizada con FPU basada en SSE2, que un compiladorpuede utilizar para la optimización. Sin embargo, las aplicaciones que manejan regularmente números enteros de más de 32 bits, como los algoritmos criptográficos, necesitarán una reescritura del código que maneja los números enteros grandes para aprovechar los registros de 64 bits.

Modo heredado [ editar ]

El modo heredado es el que utilizan los sistemas operativos de "modo protegido" de 32 o 16 bits. [29] En este modo, el procesador actúa como un procesador x86 más antiguo y solo se puede ejecutar código de 16 y 32 bits. El modo heredado permite un direccionamiento virtual de 32 bits como máximo, lo que limita el espacio de direcciones virtuales a 4 GiB. [11] ( p14 ) ( p24 ) ( p118 ) Los programas de 64 bits no se pueden ejecutar desde el modo heredado.

Modo real [ editar ]

El modo real es el modo de funcionamiento inicial cuando se inicializa el procesador. Es compatible con versiones anteriores de los procesadores 8086 y 8088 originales . El modo real lo utilizan principalmente los cargadores de arranque del sistema operativo, que son requeridos por la arquitectura para configurar los detalles de la memoria virtual antes de pasar a modos superiores.

Intel 64 [ editar ]

Intel 64 es la implementación de Intel de x86-64, utilizada e implementada en varios procesadores fabricados por Intel.

Historia [ editar ]

Históricamente, AMD ha desarrollado y producido procesadores con conjuntos de instrucciones siguiendo el patrón de los diseños originales de Intel, pero con x86-64, los roles se invirtieron: Intel se encontró en la posición de adoptar el ISA que AMD había creado como una extensión de la propia línea de procesadores x86 de Intel. .

El proyecto de Intel originalmente recibió el nombre en código de Yamhill (en honor al río Yamhill en el valle de Willamette en Oregón). [ cita requerida ] Después de varios años de negar su existencia, Intel anunció en la IDF de febrero de 2004 que el proyecto estaba realmente en marcha. El presidente de Intel en ese momento, Craig Barrett , admitió que este era uno de sus secretos peor guardados. [30] [31]

El nombre de Intel para este conjunto de instrucciones ha cambiado varias veces. El nombre utilizado en las FDI fue CT (presumiblemente [ ¿investigación original? ] Para Clackamas Technology , otro nombre en clave de un río de Oregón ); en pocas semanas comenzaron a referirse a él como IA-32e (para extensiones IA-32 ) y en marzo de 2004 dieron a conocer el nombre "oficial" EM64T (Tecnología de memoria extendida 64). A fines de 2006, Intel comenzó a usar el nombre Intel 64 para su implementación, en paralelo con el uso de AMD del nombre AMD64. [32]

El primer procesador en implementar Intel 64 fue el procesador de múltiples sockets Xeon con el nombre en código Nocona en junio de 2004. Por el contrario, los chips Prescott iniciales (febrero de 2004) no habilitaban esta característica. Posteriormente, Intel comenzó a vender Pentium 4 habilitados para Intel 64 utilizando la revisión E0 del núcleo Prescott, que se vendió en el mercado OEM como Pentium 4, modelo F.La revisión E0 también agrega eXecute Disable (XD) (el nombre de Intel para el bit NX ) a Intel 64, y se ha incluido en el actual nombre en código de Xeon Irwindale . El lanzamiento oficial de Intel de Intel 64 (bajo el nombre EM64T en ese momento) en los procesadores de escritorio convencionales fue el Prescott-2M paso a paso N0.

El primer procesador móvil Intel que implementó Intel 64 es la versión Merom del procesador Core 2 , que fue lanzado el 27 de julio de 2006. Ninguna de las CPUs portátiles anteriores de Intel ( Core Duo , Pentium M , Celeron M , Mobile Pentium 4 ) implementan Intel 64 .

Implementaciones [ editar ]

Los procesadores de Intel que implementan la arquitectura Intel64 incluyen Pentium 4 F-series / 5x1 series, 506 y 516, Celeron D modelos 3x1, 3x6, 355, 347, 352, 360 y 365 y todos los Celerons posteriores , todos los modelos de Xeon desde " Nocona ", todos los modelos de procesadores Pentium Dual-Core desde" Merom-2M ", Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 y N2800, todas las versiones del Pentium D , Pentium Extreme Edition , Core 2 , Core i9 , Core i7 , Core i5 yProcesadores Core i3 y procesadores de la serie Xeon Phi 7200.

Implementación x86-64 de VIA [ editar ]

VIA Technologies presentó su primera implementación de la arquitectura x86-64 en 2008 después de cinco años de desarrollo por parte de su división de CPU, Centaur Technology . [33] Con el nombre en clave "Isaiah", la arquitectura de 64 bits se dio a conocer el 24 de enero de 2008, [34] y se lanzó el 29 de mayo bajo la marca VIA Nano . [35]

El procesador admite una serie de extensiones x86 específicas de VIA diseñadas para aumentar la eficiencia en dispositivos de bajo consumo. Se espera que la arquitectura Isaiah sea dos veces más rápida en rendimiento de enteros y cuatro veces más rápida en rendimiento de punto flotante que el VIA Esther de la generación anterior a una velocidad de reloj equivalente . También se espera que el consumo de energía esté a la par con las CPU VIA de la generación anterior, con una potencia de diseño térmico que varía de 5 W a 25 W. [36] Al ser un diseño completamente nuevo, la arquitectura Isaiah se construyó con soporte para características como el x86 -Conjunto de 64 instrucciones y virtualización x86 que no estaban disponibles en sus predecesores, el VIA C7 línea, conservando sus extensiones de cifrado.

Niveles de microarquitectura [ editar ]

En 2020, a través de una colaboración entre proveedores, se definieron algunos niveles de microarquitectura, x86-64-v2, x86-64-v3 y x86-64-v4. [37] Estos niveles definen características específicas que los programadores pueden apuntar para proporcionar optimizaciones en tiempo de compilación. Las características expuestas por cada nivel son las siguientes (de la interfaz binaria de la aplicación System V): [38]

Diferencias entre AMD64 e Intel 64 [ editar ]

Aunque son casi idénticas, existen algunas diferencias entre los dos conjuntos de instrucciones en la semántica de algunas instrucciones (o situaciones) de máquina que se utilizan con poca frecuencia, que se utilizan principalmente para la programación del sistema . [39] Los compiladores generalmente producen ejecutables (es decir , código de máquina ) que evitan cualquier diferencia, al menos para los programas de aplicación ordinarios . Por lo tanto, esto es de interés principalmente para los desarrolladores de compiladores, sistemas operativos y similares, que deben tratar con instrucciones de sistema individuales y especiales.

Implementaciones recientes [ editar ]

  • Las instrucciones BSFe Intel 64 BSRactúan de manera diferente a las de AMD64 cuando la fuente es cero y el tamaño del operando es de 32 bits. El procesador establece la bandera de cero y deja los 32 bits superiores del destino sin definir [ cita requerida ] . Tenga en cuenta que Intel documenta que el registro de destino tiene un valor indefinido en este caso, pero en la práctica en el silicio implementa el mismo comportamiento que AMD (destino sin modificar). La afirmación separada sobre tal vez no preservar bits en los 32 superiores no se ha verificado, pero solo se ha descartado para Core 2 y Skylake, [40] no todas las microarquitecturas Intel como Pentium 4 de 64 bits o Atom de bajo consumo.
  • AMD64 requiere un formato de actualización de microcódigo diferente y controla los MSR (registros específicos del modelo), mientras que Intel 64 implementa la actualización de microcódigo sin cambios desde sus procesadores de solo 32 bits.
  • Intel 64 carece de algunos MSR que se consideran arquitectónicos en AMD64. Estos incluyen SYSCFG, TOP_MEM, y TOP_MEM2.
  • Intel 64 permite SYSCALL/ SYSRETsolo en modo de 64 bits (no en modo de compatibilidad), [41] y permite SYSENTER/ SYSEXITen ambos modos. [42] AMD64 carece de SYSENTER/ SYSEXITen ambos submodos del modo largo . [11] : 33
  • En el modo de 64 bits, las ramas cercanas con el prefijo 66H (anulación del tamaño del operando) se comportan de manera diferente. Intel 64 ignora este prefijo: la instrucción tiene un desplazamiento extendido de signo de 32 bits y el puntero de instrucción no está truncado. AMD64 utiliza un campo de compensación de 16 bits en la instrucción y borra los 48 bits superiores del puntero de instrucción.
  • Los procesadores AMD plantean un punto flotante no válida excepción al realizar una FLDo FSTPde una señalización NaN de 80 bits, mientras que los procesadores de Intel no lo hacen.
  • Intel 64 carece de la capacidad de guardar y restaurar una versión reducida (y por lo tanto más rápida) del estado de punto flotante (que incluye las instrucciones FXSAVEy FXRSTOR).
  • Los procesadores AMD desde Opteron Rev. E y Athlon 64 Rev. D han reintroducido el soporte limitado para la segmentación, a través del bit Long Mode Segment Limit Enable (LMSLE), para facilitar la virtualización de invitados de 64 bits. [43] [44]
  • Al regresar a una dirección no canónica usando SYSRET, los procesadores AMD64 ejecutan el manejador de fallas de protección general en el nivel de privilegio 3, [45] mientras que en los procesadores Intel 64 se ejecuta en el nivel de privilegio 0. [46]

Implementaciones anteriores [ editar ]

  • Los primeros procesadores AMD64 (típicamente en Socket 939 y 940) carecían de la CMPXCHG16Binstrucción, que es una extensión de la CMPXCHG8Binstrucción presente en la mayoría de los procesadores posteriores a 80486 . Similar a CMPXCHG8B, CMPXCHG16Bpermite operaciones atómicas en octa-palabras (valores de 128 bits). Esto es útil para algoritmos paralelos que usan comparar e intercambiar datos más grandes que el tamaño de un puntero, común en los algoritmos sin bloqueo y sin espera . Sin CMPXCHG16Buno, se deben utilizar soluciones alternativas, como una sección crítica o enfoques alternativos sin bloqueo. [47] Su ausencia también evita que Windows de 64 bits anterior a Windows 8.1 tenga un modo de usuarioespacio de direcciones superior a 8 terabytes. [48] La versión de 64 bits de Windows 8.1 requiere la instrucción. [49]
  • A principios AMD64 e Intel 64 CPUs carecían LAHFe SAHFinstrucciones en modo de 64 bits. AMD introdujo estas instrucciones (también en modo de 64 bits) con sus procesadores Athlon 64, Opteron y Turion 64 revisión D en marzo de 2005 [50] [51] [52] mientras que Intel introdujo las instrucciones con el Pentium 4 G1 escalonado en diciembre de 2005 La versión de 64 bits de Windows 8.1 requiere esta función. [49]
  • Las primeras CPU de Intel con Intel 64 también carecen del bit NX de la arquitectura AMD64. Esta función es necesaria para todas las versiones de Windows 8.x.
  • Las primeras implementaciones de Intel 64 ( Prescott y Cedar Mill ) solo permitían el acceso a 64 GiB de memoria física, mientras que las implementaciones originales de AMD64 permitían el acceso a 1 TiB de memoria física. Las implementaciones recientes de AMD64 proporcionan 256 TiB de espacio de direcciones físicas (y AMD planea una expansión a 4 PiB), [ cita requerida ] mientras que algunas implementaciones de Intel 64 podrían abordar hasta 64 TiB. [53] Las capacidades de memoria física de este tamaño son apropiadas para aplicaciones a gran escala (como grandes bases de datos) y computación de alto rendimiento (aplicaciones orientadas centralmente y computación científica).

Adopción [ editar ]

Un gráfico de áreas que muestra la representación de diferentes familias de microprocesadores en la lista de clasificación de supercomputadoras TOP500, de 1993 a 2019. [54]

En las supercomputadoras rastreadas por TOP500 , la aparición de extensiones de 64 bits para la arquitectura x86 permitió que los procesadores x86 de 64 bits de AMD e Intel reemplazaran la mayoría de las arquitecturas de procesadores RISC utilizadas anteriormente en dichos sistemas (incluidos PA-RISC , SPARC , Alpha y otros) , así como x86 de 32 bits, aunque la propia Intel inicialmente intentó sin éxito reemplazar x86 con una nueva arquitectura incompatible de 64 bits en el procesador Itanium .

A partir de 2020 , una supercomputadora basada en Fujitsu A64FX llamada Fugaku es la número uno. La primera supercomputadora basada en ARM apareció en la lista en 2018 [55] y, en los últimos años, los coprocesadores de arquitectura sin CPU ( GPGPU ) también han jugado un papel importante en el rendimiento. Los coprocesadores Xeon Phi "Knights Corner" de Intel , que implementan un subconjunto de x86-64 con algunas extensiones vectoriales, [56] también se utilizan, junto con los procesadores x86-64, en la supercomputadora Tianhe-2 . [57]

Compatibilidad y características del sistema operativo [ editar ]

Los siguientes sistemas operativos y versiones admiten la arquitectura x86-64 en modo largo .

BSD [ editar ]

DragonFly BSD [ editar ]

El trabajo de infraestructura preliminar se inició en febrero de 2004 para un puerto x86-64. [58] Este desarrollo se estancó más tarde. El desarrollo comenzó de nuevo durante julio de 2007 [59] y continuó durante Google Summer of Code 2008 y SoC 2009. [60] [61] La primera versión oficial que contó con soporte x86-64 fue la versión 2.4. [62]

FreeBSD [ editar ]

FreeBSD agregó por primera vez soporte x86-64 bajo el nombre "amd64" como arquitectura experimental en 5.1-RELEASE en junio de 2003. Se incluyó como una arquitectura de distribución estándar a partir de 5.2-RELEASE en enero de 2004. Desde entonces, FreeBSD lo ha designado como una plataforma de nivel 1. La versión 6.0-RELEASE eliminó algunas peculiaridades con la ejecución de ejecutables x86 en amd64, y la mayoría de los controladores funcionan igual que en la arquitectura x86. Actualmente se está trabajando para integrar más completamente la interfaz binaria de aplicaciones (ABI) x86 , de la misma manera que funciona actualmente la compatibilidad con ABI de 32 bits de Linux.

NetBSD [ editar ]

El soporte de la arquitectura x86-64 se comprometió por primera vez con el árbol de fuentes de NetBSD el 19 de junio de 2001. A partir de NetBSD 2.0, lanzado el 9 de diciembre de 2004, NetBSD / amd64 es un puerto totalmente integrado y compatible. El código de 32 bits todavía se admite en el modo de 64 bits, con una capa de compatibilidad del kernel netbsd-32 para llamadas al sistema de 32 bits. El bit NX se utiliza para proporcionar una pila y un montón no ejecutables con granularidad por página (la granularidad de segmento se utiliza en x86 de 32 bits).

OpenBSD [ editar ]

OpenBSD ha admitido AMD64 desde OpenBSD 3.5, lanzado el 1 de mayo de 2004. La implementación completa en el árbol del soporte AMD64 se logró antes del lanzamiento inicial del hardware porque AMD había prestado varias máquinas para el hackatón del proyecto ese año. Desarrolladores de OpenBSD han llevado a la plataforma debido a su apoyo a la bit NX , lo que permitió una fácil implementación de la W ^ X característica.

El código para el puerto AMD64 de OpenBSD también se ejecuta en procesadores Intel 64 que contienen el uso clonado de las extensiones AMD64, pero como Intel omitió el bit NX de la tabla de páginas en los primeros procesadores Intel 64, no hay capacidad W ^ X en esas CPU Intel ; los procesadores Intel 64 posteriores agregaron el bit NX con el nombre de "bit XD". El multiprocesamiento simétrico (SMP) funciona en el puerto AMD64 de OpenBSD, comenzando con la versión 3.6 el 1 de noviembre de 2004.

DOS [ editar ]

Es posible ingresar al modo largo en DOS sin un extensor de DOS, [63] pero el usuario debe regresar al modo real para llamar a BIOS o interrupciones de DOS.

También es posible ingresar al modo largo con un extensor de DOS similar a DOS / 4GW , pero más complejo ya que x86-64 carece del modo 8086 virtual . El propio DOS no es consciente de eso, y no se deben esperar beneficios a menos que ejecute DOS en una emulación con un controlador de virtualización adecuado, por ejemplo: la interfaz de almacenamiento masivo.

Linux [ editar ]

Linux fue el primer kernel del sistema operativo en ejecutar la arquitectura x86-64 en modo largo , comenzando con la versión 2.4 en 2001 (anterior a la disponibilidad del hardware). [64] [65] Linux también proporciona compatibilidad con versiones anteriores para ejecutar ejecutables de 32 bits. Esto permite que los programas se recompilen en modo largo conservando el uso de programas de 32 bits. Varias distribuciones de Linux se envían actualmente con kernels y áreas de usuario nativas x86-64 . Algunos, como Arch Linux , [66] SUSE , Mandriva y DebianPermitir a los usuarios instalar un conjunto de componentes y bibliotecas de 32 bits cuando instalan desde un DVD de 64 bits, lo que permite que la mayoría de las aplicaciones de 32 bits existentes se ejecuten junto con el sistema operativo de 64 bits. Otras distribuciones, como Fedora , Slackware y Ubuntu , están disponibles en una versión compilada para una arquitectura de 32 bits y otra compilada para una arquitectura de 64 bits. Fedora y Red Hat Enterprise Linux permiten la instalación simultánea de todos los componentes del área de usuario en versiones de 32 y 64 bits en un sistema de 64 bits.

x32 ABI (Application Binary Interface), introducido en Linux 3.4, permite que los programas compilados para el x32 ABI se ejecuten en el modo de 64 bits de x86-64 mientras solo usan punteros y campos de datos de 32 bits. [67] [68] [69] Aunque esto limita el programa a un espacio de direcciones virtuales de 4 GB, también reduce la huella de memoria del programa y, en algunos casos, puede permitir que se ejecute más rápido. [67] [68] [69]

Linux de 64 bits permite hasta 128  TiB de espacio de direcciones virtuales para procesos individuales y puede abordar aproximadamente 64 TiB de memoria física, sujeto a las limitaciones del procesador y del sistema. [70]

macOS [ editar ]

Mac OS X 10.4.7 y versiones superiores de Mac OS X 10.4 ejecutan herramientas de línea de comandos de 64 bits utilizando las bibliotecas POSIX y matemáticas en máquinas basadas en Intel de 64 bits, al igual que todas las versiones de Mac OS X 10.4 y 10.5 las ejecutan en máquinas PowerPC de 64 bits. Ninguna otra biblioteca o marco funciona con aplicaciones de 64 bits en Mac OS X 10.4. [71] El kernel y todas las extensiones del kernel son solo de 32 bits.

Mac OS X 10.5 admite aplicaciones GUI de 64 bits que utilizan Cocoa , Quartz , OpenGL y X11 en máquinas basadas en Intel de 64 bits, así como en máquinas PowerPC de 64 bits . [72] Todas las bibliotecas y marcos que no son GUI también admiten aplicaciones de 64 bits en esas plataformas. El kernel y todas las extensiones del kernel son solo de 32 bits.

Mac OS X 10.6 es la primera versión de macOS que admite un kernel de 64 bits . Sin embargo, no todas las computadoras de 64 bits pueden ejecutar el kernel de 64 bits, y no todas las computadoras de 64 bits que pueden ejecutar el kernel de 64 bits lo harán de forma predeterminada. [73] El kernel de 64 bits, como el kernel de 32 bits, admite aplicaciones de 32 bits; ambos núcleos también admiten aplicaciones de 64 bits. Las aplicaciones de 32 bits tienen un límite de espacio de direcciones virtuales de 4 GiB en cualquier kernel. [74] [75]

OS X 10.8 incluye solo el kernel de 64 bits, pero sigue admitiendo aplicaciones de 32 bits.

macOS 10.15 incluye solo el kernel de 64 bits y ya no admite aplicaciones de 32 bits.

El kernel de 64 bits no admite extensiones de kernel de 32 bits y el kernel de 32 bits no admite extensiones de kernel de 64 bits.

macOS usa el formato binario universal para empaquetar versiones de 32 y 64 bits del código de la aplicación y la biblioteca en un solo archivo; la versión más adecuada se selecciona automáticamente en el momento de la carga. En Mac OS X 10.6, el formato binario universal también se utiliza para el kernel y para aquellas extensiones de kernel que admiten kernel de 32 y 64 bits.

Solaris [ editar ]

Solaris 10 y versiones posteriores admiten la arquitectura x86-64.

Para Solaris 10, al igual que con la arquitectura SPARC , solo hay una imagen de sistema operativo, que contiene un kernel de 32 bits y un kernel de 64 bits; esto está etiquetado como la imagen de DVD-ROM "x64 / x86". El comportamiento predeterminado es arrancar un kernel de 64 bits, lo que permite ejecutar ejecutables de 64 bits y existentes o nuevos de 32 bits. También se puede seleccionar manualmente un kernel de 32 bits, en cuyo caso solo se ejecutarán los ejecutables de 32 bits. El isainfocomando se puede utilizar para determinar si un sistema está ejecutando un kernel de 64 bits.

Para Solaris 11, solo se proporciona el kernel de 64 bits. Sin embargo, el kernel de 64 bits admite ejecutables, bibliotecas y llamadas al sistema de 32 y 64 bits.

Windows [ editar ]

Las ediciones x64 del cliente y servidor de Microsoft Windows ( Windows XP Professional x64 Edition y Windows Server 2003 x64 Edition) se lanzaron en marzo de 2005. [76] Internamente, son en realidad la misma compilación (5.2.3790.1830 SP1), [77] [78] ya que comparten la misma base de origen y los mismos binarios del sistema operativo, incluso las actualizaciones del sistema se publican en paquetes unificados, de la misma manera que las ediciones Windows 2000 Professional y Server para x86. Windows Vista , que también tiene muchas ediciones diferentes, se lanzó en enero de 2007. Windows 7 se lanzó en julio de 2009. Windows Server 2008 R2se vendió solo en ediciones x64 e Itanium; las versiones posteriores de Windows Server solo ofrecen una edición x64.

Las versiones de Windows para x64 anteriores a Windows 8.1 y Windows Server 2012 R2 ofrecen lo siguiente:

  • 8 TiB de espacio de direcciones virtuales por proceso, accesible desde el modo de usuario y el modo de kernel, denominado espacio de direcciones del modo de usuario. Un programa x64 puede usar todo esto, sujeto a los límites de almacenamiento de respaldo en el sistema, y ​​siempre que esté vinculado con la opción de "reconocimiento de direcciones grandes". [79] Este es un aumento de 4096 veces sobre el espacio de direcciones virtuales en modo de usuario de 2 GiB predeterminado que ofrece Windows de 32 bits. [80] [81]
  • 8 TiB de espacio de direcciones virtuales en modo kernel para el sistema operativo. [80] Al igual que con el espacio de direcciones del modo de usuario, este es un aumento de 4096 veces respecto a las versiones de Windows de 32 bits. El aumento de espacio beneficia principalmente al caché del sistema de archivos y a los "montones" del modo kernel (grupo no paginado y grupo paginado). Windows solo usa un total de 16 TiB de los 256 TiB implementados por los procesadores porque los primeros procesadores AMD64 carecían de una CMPXCHG16Binstrucción. [82]

En Windows 8.1 y Windows Server 2012 R2, los espacios de direcciones virtuales tanto en modo de usuario como en modo kernel se han ampliado a 128 TiB. [22] Estas versiones de Windows no se instalarán en procesadores que carezcan de las CMPXCHG16Binstrucciones.

Las siguientes características adicionales se aplican a todas las versiones x64 de Windows:

  • Capacidad para ejecutar aplicaciones ( .exeprogramas) de 32 bits existentes y bibliotecas de enlaces dinámicos .dllutilizando WoW64 si WoW64 es compatible con esa versión. Además, un programa de 32 bits, si se vinculó con la opción "reconocimiento de direcciones grandes", [79] puede usar hasta 4 GiB de espacio de direcciones virtuales en Windows de 64 bits, en lugar de los 2 GiB predeterminados (opcional 3 GiB con /3GBopción de arranque y opción de enlace "con reconocimiento de direcciones grandes") ofrecidos por Windows de 32 bits. [83] A diferencia del uso de la /3GBopción de arranque en x86, esto no reduce el espacio de direcciones virtuales del modo kernel disponible para el sistema operativo. Por lo tanto, las aplicaciones de 32 bits pueden beneficiarse de la ejecución en Windows x64 incluso si no se han recompilado para x86-64.
  • Tanto las aplicaciones de 32 como de 64 bits, si no están vinculadas con "reconocimiento de direcciones grandes", están limitadas a 2 GiB de espacio de direcciones virtuales.
  • Capacidad para utilizar hasta 128 GiB (Windows XP / Vista), 192 GiB (Windows 7), 512 GiB (Windows 8), 1 TiB (Windows Server 2003), 2 TiB (Windows Server 2008 / Windows 10), 4 TiB ( Windows Server 2012) o 24 TiB (Windows Server 2016/2019) de memoria física de acceso aleatorio (RAM). [84]
  • Modelo de datos LLP64 : los tipos "int" y "long" tienen 32 bits de ancho, long long son 64 bits, mientras que los punteros y los tipos derivados de punteros tienen 64 bits de ancho.
  • Los controladores de dispositivo en modo kernel deben ser versiones de 64 bits; no hay forma de ejecutar ejecutables en modo kernel de 32 bits dentro del sistema operativo de 64 bits. Los controladores de dispositivo en modo de usuario pueden ser de 32 bits o de 64 bits.
  • Las aplicaciones de Windows (Win16) y DOS de 16 bits no se ejecutarán en las versiones x86-64 de Windows debido a la eliminación del subsistema de máquina virtual de DOS (NTVDM) que dependía de la capacidad de usar el modo 8086 virtual. No se puede ingresar al modo 8086 virtual mientras se ejecuta en modo largo.
  • Implementación completa de la función de protección de página NX (No Execute). Esto también se implementa en versiones recientes de 32 bits de Windows cuando se inician en modo PAE.
  • En lugar del descriptor de segmento FS en las versiones x86 de la familia Windows NT , el descriptor de segmento GS se utiliza para señalar dos estructuras definidas por el sistema operativo: el bloque de información de subprocesos (NT_TIB) en modo de usuario y la región de control del procesador (KPCR) en modo kernel. Así, por ejemplo, en el modo de usuario GS:0está la dirección del primer miembro del bloque de información del hilo. Mantener esta convención facilitó el puerto x86-64, pero requirió que AMD mantuviera la función de los segmentos FS y GS en modo largo, aunque el direccionamiento segmentado per se no es realmente utilizado por ningún sistema operativo moderno. [80]
  • Los primeros informes afirmaban que el programador del sistema operativo no guardaba ni restauraba el estado de la máquina x87 FPU en los cambios de contexto de subprocesos. El comportamiento observado muestra que este no es el caso: el estado x87 se guarda y se restaura, excepto para los subprocesos de modo kernel únicamente (una limitación que también existe en la versión de 32 bits). La documentación más reciente disponible de Microsoft establece que x87 / MMX / 3DNow! Las instrucciones pueden usarse en modo largo, pero están obsoletas y pueden causar problemas de compatibilidad en el futuro. [83]
  • Algunos componentes como el motor de base de datos Microsoft Jet y los objetos de acceso a datos no se migrarán a arquitecturas de 64 bits como x86-64 e IA-64. [85] [86]
  • Microsoft Visual Studio puede compilar aplicaciones nativas para apuntar a la arquitectura x86-64, que solo puede ejecutarse en Microsoft Windows de 64 bits, o la arquitectura IA-32 , que puede ejecutarse como una aplicación de 32 bits en Microsoft Windows de 32 bits o Microsoft Windows de 64 bits en modo de emulación WoW64 . Las aplicaciones administradas se pueden compilar en los modos IA-32, x86-64 o AnyCPU. El software creado en los dos primeros modos se comporta como sus homólogos de código nativo IA-32 o x86-64 respectivamente; Sin embargo, cuando se usa el modo AnyCPU, las aplicaciones en las versiones de 32 bits de Microsoft Windows se ejecutan como aplicaciones de 32 bits, mientras que se ejecutan como una aplicación de 64 bits en las ediciones de 64 bits de Microsoft Windows.

Consolas de videojuegos [ editar ]

Tanto PlayStation 4 como Xbox One y sus variantes incorporan procesadores AMD x86-64, basados ​​en la microarquitectura de Jaguar . [87] [88] El firmware y los juegos están escritos en código x86-64; no está involucrado ningún código x86 heredado.

Sus próximas generaciones, PlayStation 5 y Xbox Series X y Series S respectivamente, también incorporan procesadores AMD x86-64, basados ​​en la microarquitectura Zen 2 . [89] [90]

Convenciones de nomenclatura de la industria [ editar ]

Dado que AMD64 e Intel 64 son sustancialmente similares, muchos productos de software y hardware utilizan un término neutral del proveedor para indicar su compatibilidad con ambas implementaciones. La designación original de AMD para esta arquitectura de procesador, "x86-64", todavía se usa a veces para este propósito, [2] al igual que la variante "x86_64". [3] [4] Otras empresas, como Microsoft [6] y Sun Microsystems / Oracle Corporation , [5] utilizan la contracción "x64" en el material de marketing.

El término IA-64 se refiere al procesador Itanium y no debe confundirse con x86-64, ya que es un conjunto de instrucciones completamente diferente.

Muchos sistemas operativos y productos, especialmente aquellos que introdujeron soporte x86-64 antes de la entrada de Intel en el mercado, usan el término "AMD64" o "amd64" para referirse tanto a AMD64 como a Intel 64.

  • amd64
    • La mayoría de los sistemas BSD como FreeBSD , MidnightBSD , NetBSD y OpenBSD se refieren tanto a AMD64 como a Intel 64 bajo el nombre de arquitectura "amd64".
    • Algunas distribuciones de Linux como Debian , Ubuntu , Gentoo Linux se refieren tanto a AMD64 como a Intel 64 bajo el nombre de arquitectura "amd64".
    • Las versiones x64 de Microsoft Windows usan el apodo AMD64 internamente para designar varios componentes que usan o son compatibles con esta arquitectura. Por ejemplo, a la variable de entorno PROCESSOR_ARCHITECTURE se le asigna el valor "AMD64" en lugar de "x86" en las versiones de 32 bits, y el directorio del sistema en un CD-ROM de instalación de Windows x64 Edition se llama "AMD64", en contraste con "i386 "en versiones de 32 bits. [91]
    • El comando isalist de Solaris de Sun identifica los sistemas basados ​​en AMD64 e Intel 64 como "amd64".
    • Kit de desarrollo de Java (JDK): el nombre "amd64" se utiliza en los nombres de directorio que contienen archivos x86-64.
  • x86_64
    • El kernel de Linux [92] y la colección de compiladores GNU se refieren a la arquitectura de 64 bits como "x86_64".
    • Algunas distribuciones de Linux, como Fedora , openSUSE , Arch Linux , Gentoo Linux, se refieren a esta arquitectura de 64 bits como "x86_64".
    • Apple macOS se refiere a la arquitectura de 64 bits como "x86-64" o "x86_64", como se ve en el comando Terminal arch[3] y en su documentación para desarrolladores. [2] [4]
    • Rompiendo con la mayoría de los otros sistemas BSD, DragonFly BSD se refiere a la arquitectura de 64 bits como "x86_64".
    • Haiku se refiere a la arquitectura de 64 bits como "x86_64".

Licencias [ editar ]

x86-64 / AMD64 fue desarrollado exclusivamente por AMD. AMD posee patentes sobre técnicas utilizadas en AMD64; [93] [94] [95] esas patentes deben tener licencia de AMD para poder implementar AMD64. Intel celebró un acuerdo de licencia cruzada con AMD, otorgando a AMD sus patentes sobre técnicas x86 existentes y otorgando licencias a AMD sobre técnicas utilizadas en x86-64. [96] En 2009, AMD e Intel resolvieron varias demandas y desacuerdos sobre licencias cruzadas, ampliando sus acuerdos de licencias cruzadas. [97] [98] [99]

Ver también [ editar ]

  • Arquitectura de software encapsulado genérico de AMD (AGESA)

Notas [ editar ]

  1. ^ Se utilizan varios nombres para el conjunto de instrucciones. Antes del lanzamiento, se usaban x86-64 y x86_64, mientras que en el lanzamiento AMD lo llamó AMD64. [1] Intel utilizó inicialmente los nombres IA-32e y EM64T antes de decidirse finalmente por "Intel 64" para su implementación. Algunos en la industria, incluyendo Apple , [2] [3] [4] usan x86-64 y x86_64, mientras que otros, notablemente Sun Microsystems [5] (ahora Oracle Corporation ) y Microsoft , [6] usan x64. Lafamilia de sistemas operativos BSD y varias distribuciones de Linux [7] [8]utilice AMD64, al igual que Microsoft Windows internamente. [9] [10]
  2. ^ En la práctica, los sistemas operativos de 64 bits generalmente no admiten aplicaciones de 16 bits, aunque las versiones modernas de Microsoft Windows contienen una solución alternativa limitada que admite de manera efectiva losinstaladores InstallShield de 16 bitsy Microsoft ACME sustituyéndolos silenciosamente con código de 32 bits. [12]

Referencias [ editar ]

  1. ^ "Preguntas frecuentes sobre Debian AMD64" . Wiki de Debian . Consultado el 3 de mayo de 2012 .
  2. ^ a b c "Modelo de código x86-64" . Manzana . Consultado el 23 de noviembre de 2012 .
  3. ^ a b c arch(1)  -  Manual de comandos generales de Darwin y macOS
  4. ↑ a b c Kevin Van Vechten (9 de agosto de 2006). "re: informe de error de Intel XNU" . Lista de correo de Darwin-dev . Computadora Apple . Consultado el 5 de octubre de 2006 . Las herramientas del kernel y del desarrollador se han estandarizado en "x86_64" para el nombre de la arquitectura Mach-O
  5. ^ a b "Solaris 10 en AMD Opteron" . Oracle . Consultado el 9 de diciembre de 2010 .
  6. ^ a b "Computación de 64 bits de Microsoft" . Microsoft. Archivado desde el original el 12 de diciembre de 2010 . Consultado el 9 de diciembre de 2010 .
  7. ^ "Puerto AMD64" . Debian . Consultado el 23 de noviembre de 2012 .
  8. ^ "Proyecto Gentoo / AMD64" . Proyecto Gentoo . Consultado el 27 de mayo de 2013 .
  9. ^ "Detalles de implementación de WOW64" .
  10. ^ "Clase ProcessorArchitecture" .
  11. ^ a b c d e f g h i j k l m n o p q r AMD Corporation (diciembre de 2016). "Volumen 2: Programación del sistema" (PDF) . Manual del programador de la arquitectura AMD64 . AMD Corporation . Consultado el 25 de marzo de 2017 .
  12. ^ Raymond Chen (31 de octubre de 2013). "Si no hay una capa de emulación de 16 bits en Windows de 64 bits, ¿cómo es posible que se ejecuten ciertos instaladores de 16 bits?" .
  13. ^ IBM Corporation (6 de septiembre de 2007). "Desmitificación del rendimiento de IBM WebSphere Application Server de 64 bits" (PDF) . pag. 14 . Consultado el 9 de abril de 2010 . Las figuras 5, 6 y 7 también muestran que la versión de 32 bits de WAS ejecuta aplicaciones con un rendimiento de hardware nativo completo en las plataformas POWER y x86-64. A diferencia de algunas arquitecturas de procesador de 64 bits, el hardware POWER y x86-64 no emula el modo de 32 bits. Por lo tanto, las aplicaciones que no se benefician de las funciones de 64 bits pueden ejecutarse con un rendimiento completo en la versión de 32 bits de WebSphere que se ejecuta en las plataformas de 64 bits mencionadas anteriormente.
  14. ^ "AMD divulga nuevas tecnologías en el foro de microprocesadores" (Comunicado de prensa). AMD. 5 de octubre de 1999. Archivado desde el original el 8 de marzo de 2012 . Consultado el 9 de noviembre de 2010 .
  15. ^ "AMD lanza la especificación arquitectónica x86-64; permite la migración impulsada por el mercado a la informática de 64 bits" (comunicado de prensa). AMD. 10 de agosto de 2000. Archivado desde el original el 8 de marzo de 2012 . Consultado el 9 de noviembre de 2010 .
  16. ^ Mauerer, W. (2010). Arquitectura de kernel de Linux profesional. John Wiley e hijos.
  17. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, volumen 3A: Guía de programación del sistema, parte 1" (PDF) . págs. 4–7 . Consultado el 10 de julio de 2019 .
  18. ^ a b "Guía del desarrollador de BIOS y kernel (BKDG) para procesadores AMD Family 10h" (PDF) . pag. 24 . Consultado el 27 de febrero de 2016 . El espacio de direcciones físicas aumentó a 48 bits.
  19. ^ "Mitos y hechos sobre Linux de 64 bits" (PDF) . 2 de marzo de 2008. p. 7. Archivado desde el original (PDF) el 10 de octubre de 2010 . Consultado el 30 de mayo de 2010 . El espacio de direcciones físicas aumentó a 48 bits
  20. ^ Shanley, Tom (1998). Arquitectura del sistema Pentium Pro y Pentium II . Serie de arquitectura de sistemas de PC (segunda ed.). Addison-Wesley. pag. 445 . ISBN 0-201-30973-4.
  21. ^ Corporación Microsoft. "¿Qué es PAE, NX y SSE2 y por qué mi PC necesita admitirlos para ejecutar Windows 8?" . Consultado el 19 de marzo de 2013 .
  22. ^ a b c d "Límites de memoria para versiones de Windows" . MSDN . Microsoft . 16 de noviembre de 2013 . Consultado el 20 de enero de 2014 .
  23. ^ "Paginación de 5 niveles y EPT de 5 niveles" (PDF) . Intel. Mayo de 2017 . Consultado el 17 de junio de 2017 .
  24. ^ Patente de EE. UU . 9858198 , Larry Seiler, "Sistema de páginas de 64 KB que admite la operación de páginas de 4 KB", publicada el 29 de diciembre de 2016, emitida el 2 de enero de 2018, asignada a Intel Corp. 
  25. ^ "Placas base de la serie Opteron 6100" . Supermicro Corporation . Consultado el 22 de junio de 2010 .
  26. ^ "Supermicro XeonSolutions" . Supermicro Corporation . Consultado el 20 de junio de 2010 .
  27. ^ "Placas base de la serie Opteron 8000" . Supermicro Corporation . Consultado el 20 de junio de 2010 .
  28. ^ "Matriz de productos de Tyan" . Corporación Internacional MiTEC . Consultado el 21 de junio de 2010 .
  29. ^ Charney, Mark. "Definiciones del modo de máquina Xed" . Xed . Intel Corporation . Consultado el 16 de junio de 2019 .
  30. ^ "Craig Barrett confirma extensiones de direcciones de 64 bits para Xeon. Y Prescott" . El indagador. 17 de febrero de 2004.
  31. ^ "Un resumen de la informática de 64 bits", de internetnews.com
  32. ^ "Arquitectura Intel 64" . Intel . Consultado el 29 de junio de 2007 .
  33. ^ "VIA lanzará una nueva arquitectura de procesador en el 1T08" (requiere suscripción) . DigiTimes . Consultado el 25 de julio de 2007 .
  34. ^ Stokes, Jon (23 de enero de 2008). "Isaías reveló: nueva arquitectura de bajo consumo de VIA" . Ars Technica . Consultado el 24 de enero de 2008 .
  35. ^ "VIA lanza la familia de procesadores VIA Nano" (Comunicado de prensa). VIA . 29 de mayo de 2008 . Consultado el 25 de mayo de 2017 .
  36. ^ "Introducción a la arquitectura VIA Isaiah" (PDF) . VIA . 23 de enero de 2008. Archivado desde el original (PDF) el 7 de septiembre de 2008 . Consultado el 31 de julio de 2013 .
  37. ^ "Nuevos niveles de microarquitectura x86-64" .
  38. ^ "Información del sistema de bajo nivel de interfaz binaria de aplicación System V" . GitLab . 9 de marzo de 2021 . Consultado el 11 de marzo de 2021 .
  39. ^ Wasson, Scott. "Computación de 64 bits en teoría y práctica" . El informe técnico . El informe técnico . Consultado el 22 de marzo de 2011 .
  40. ^ "Discusión sobre desbordamiento de pila" . Marzo de 2021 . Consultado el 2 de marzo de 2021 .
  41. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 2 (2A, 2B y 2C): referencia de conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2013. págs. 4–397 . Consultado el 21 de enero de 2014 .
  42. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 2 (2A, 2B y 2C): referencia de conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2013. págs. 4–400 . Consultado el 21 de enero de 2014 .
  43. ^ "Cómo retirar la segmentación en modo largo AMD64 rompió VMware" . Pagetable.com. 9 de noviembre de 2006 . Consultado el 2 de mayo de 2010 .
  44. ^ "Tecnología de virtualización de CPU y VMware" (PDF) . VMware . Consultado el 8 de septiembre de 2010 .
  45. ^ "Volumen 3 del manual del programador de la arquitectura AMD64: instrucciones de uso general y del sistema" (PDF) . AMD. Mayo de 2018. p. 419 . Consultado el 2 de agosto de 2018 .
  46. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 2 (2A, 2B y 2C): referencia de conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2014. págs. 4–412 . Consultado el 28 de diciembre de 2014 .
  47. ^ Maged M. Michael. "Implementaciones prácticas LL / SC / VL sin bloqueo y sin espera utilizando CAS de 64 bits" (PDF) . IBM . Consultado el 21 de enero de 2014 .
  48. ^ darwou (20 de agosto de 2004). "¿Por qué el espacio de direcciones virtuales es de 4 GB de todos modos?" . Lo viejo y nuevo . Microsoft.
  49. ^ a b "Requisitos del sistema: Windows 8.1" . Consultado el 27 de abril de 2014 . Para instalar un sistema operativo de 64 bits en una PC de 64 bits, su procesador debe ser compatible con CMPXCHG16b, PrefetchW y LAHF / SAHF.
  50. ^ "Guía de revisión para procesadores AMD Athlon 64 y AMD Opteron", de AMD
  51. ^ "AMD Turion 64 en la foto en funcionamiento", de The Inquirer
  52. ^ "Athlon 64 revisión E no funcionará en algunas placas Nforce 3/4", de The Inquirer
  53. ^ "La arquitectura Intel 64 aumenta el espacio de direcciones lineales para el software a 64 bits y admite un espacio de direcciones físicas de hasta 46 bits". en la página Vol. 1 2-21 del Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, septiembre de 2014
  54. ^ "Estadísticas | Sitios de supercomputadoras TOP500" . Top500.org . Consultado el 22 de marzo de 2014 .
  55. ^ "Generador de sublistas | Sitios de supercomputadoras TOP500" . www.top500.org . Consultado el 6 de diciembre de 2018 .
  56. ^ "Manual de referencia de la arquitectura del conjunto de instrucciones del coprocesador Intel® Xeon PhiTM" (PDF) . Intel. 7 de septiembre de 2012. sección B.2 Limitaciones del modo de 64 bits del coprocesador Intel Xeon Phi.
  57. ^ "Intel impulsa la supercomputadora más rápida del mundo, revela tecnologías de computación de alto rendimiento nuevas y futuras" . Consultado el 21 de junio de 2013 .
  58. ^ "cvs commit: src / sys / amd64 / amd64 genassym.c src / sys / amd64 / include asm.h atomic.h bootinfo.h coredump.h cpufunc.h elf.h endian.h exec.h float.h fpu .h frame.h globaldata.h ieeefp.h limits.h lock.h md_var.h param.h pcb.h pcb_ext.h pmap.h proc.h profile.h psl.h ... " Consultado el 3 de mayo de 2009 .
  59. ^ "Puerto AMD64" . Consultado el 3 de mayo de 2009 .
  60. ^ "DragonFlyBSD: GoogleSoC2008" . Consultado el 3 de mayo de 2009 .
  61. ^ "Estudiantes aceptados de Summer of Code" . Consultado el 3 de mayo de 2009 .
  62. ^ "DragonFlyBSD: release24" . Consultado el 3 de mayo de 2009 .
  63. ^ "Tutorial para entrar en modo protegido y largo desde DOS" . Archivado desde el original el 22 de febrero de 2017 . Consultado el 6 de julio de 2008 .
  64. ^ Andi Kleen (26 de junio de 2001). "Portar Linux a x86-64" . Archivado desde el original el 10 de septiembre de 2010. Estado: El kernel, compilador, trabajo en cadena de herramientas. El kernel arranca y funciona en el simulador y se utiliza para portar el área de usuario y los programas en ejecución.
  65. ^ Andi Kleen. "Página de Andi Kleen" . Este fue el documento original que describe el puerto del kernel de Linux x86-64 cuando x86-64 solo estaba disponible en simuladores.
  66. ^ "Preguntas frecuentes de Arch64" . 23 de abril de 2012. Puede utilizar los paquetes multilib o un chroot i686.
  67. ↑ a b Thorsten Leemhuis (13 de septiembre de 2011). "Kernel Log: x32 ABI soluciona los inconvenientes de 64 bits" . www.h-online.com. Archivado desde el original el 28 de octubre de 2011 . Consultado el 1 de noviembre de 2011 .
  68. ^ a b "x32: una ABI nativa de 32 bits para x86-64" . linuxplumbersconf.org . Consultado el 1 de noviembre de 2011 .
  69. ^ a b "x32-abi" . Sitios de Google . Consultado el 1 de noviembre de 2011 .
  70. ^ "Puerto AMD64" . debian.org . Consultado el 29 de octubre de 2011 .
  71. ^ "Apple - Mac OS X Xcode 2.4 Notas de la versión: Herramientas del compilador" . Apple Inc. 11 de abril de 2007. Archivado desde el original el 22 de abril de 2009 . Consultado el 19 de noviembre de 2012 .
  72. ^ "Apple - Mac OS X Leopard - Tecnología - 64 bits" . Apple Inc. Archivado desde el original el 12 de enero de 2009 . Consultado el 19 de noviembre de 2012 .
  73. ^ "Mac OS X v10.6: Mac que utilizan el kernel de 64 bits" . Apple . Consultado el 29 de noviembre de 2012 .
  74. ^ John Siracusa. "Mac OS X 10.6 Snow Leopard: la revisión de Ars Technica" . Ars Technica LLC . Consultado el 20 de junio de 2010 .
  75. ^ "Tecnología Mac OS X" . Apple Inc. Archivado desde el original el 28 de marzo de 2011 . Consultado el 19 de noviembre de 2012 .
  76. ^ "Microsoft aumenta el límite de velocidad con la disponibilidad de las ediciones de 64 bits de Windows Server 2003 y Windows XP Professional | Centro de noticias" . news.microsoft.com . Consultado el 14 de agosto de 2016 .
  77. ^ "Una descripción de las versiones basadas en x64 de Windows Server 2003 y de Windows XP Professional x64 Edition" . Soporte de Microsoft . Consultado el 14 de agosto de 2016 .
  78. ^ "Paquete de herramientas de administración de Windows Server 2003 SP1" . Centro de descarga de Microsoft . Archivado desde el original el 27 de agosto de 2016 . Consultado el 14 de agosto de 2016 .
  79. ^ a b "/ LARGEADDRESSAWARE (Manejar direcciones grandes)" . Documentación de Visual Studio 2005 - Visual C ++ - Opciones de vinculador . Microsoft . Consultado el 19 de junio de 2010 . La opción / LARGEADDRESSAWARE le dice al enlazador que la aplicación puede manejar direcciones de más de 2 gigabytes.
  80. ↑ a b c Matt Pietrek (mayo de 2006). "Todo lo que necesita saber para comenzar a programar sistemas Windows de 64 bits" . Microsoft . Consultado el 24 de mayo de 2010 .
  81. ^ Chris St. Amand (enero de 2006). "Haciendo el cambio a x64" . Microsoft . Consultado el 24 de mayo de 2010 .
  82. ^ "Detrás del límite de direccionamiento de memoria virtual de 44 bits de Windows x86-64" . Consultado el 2 de julio de 2009 .
  83. ^ a b "Programación de 64 bits para desarrolladores de juegos" . Consultado el 21 de agosto de 2013 .
  84. ^ "Límites de memoria para versiones de Windows" . Microsoft . Consultado el 20 de febrero de 2013 .
  85. ^ Microsoft Developer Network - Directrices generales de portabilidad (programación de Windows de 64 bits)
  86. ^ Red de desarrolladores de Microsoft - Hoja de ruta de acceso a datos [ enlace muerto permanente ]
  87. ^ Anand Lal Shimpi (21 de mayo de 2013). "La Xbox One: análisis de hardware y comparación con PlayStation 4" . Anandtech . Consultado el 22 de mayo de 2013 .
  88. ^ "La prueba de especificaciones técnicas: Xbox One Vs. PlayStation 4" . Game Informer. 21 de mayo de 2013 . Consultado el 22 de mayo de 2013 .
  89. ^ "Qué esperar del lanzamiento de Sony 'PlayStation 5' en noviembre" . El Indian Express . 31 de agosto de 2020 . Consultado el 14 de septiembre de 2020 .
  90. ^ Cortador, Dr. Ian. "Blog en vivo de Hot Chips 2020: Arquitectura del sistema Microsoft Xbox Series X (6:00 pm PT)" . www.anandtech.com . Consultado el 14 de septiembre de 2020 .
  91. ^ Procesador Campos de arquitectura
  92. ^ "Un archivo de ejemplo del árbol de fuentes del kernel de Linux 3.7.8 que muestra el uso del término x86_64" . Archivado desde el original el 23 de septiembre de 2005 . Consultado el 17 de febrero de 2013 .
  93. ^ US 6877084 
  94. ^ US 6889312 
  95. ^ US 6732258 
  96. ^ "Acuerdo de licencia cruzada de patentes entre AMD e Intel" . 1 de enero de 2001. Archivado desde el original el 21 de junio de 2007 . Consultado el 23 de agosto de 2009 .
  97. ^ "Acuerdo de conciliación de AMD Intel" .
  98. ^ Stephen Shankland y Jonathan E. Skillings (12 de noviembre de 2009). "Intel pagará a AMD $ 1.25 mil millones en un acuerdo antimonopolio" . CNET . Consultado el 24 de abril de 2012 .
  99. ^ Smith, Ryan (12 de noviembre de 2009). "AMD e Intel resuelven sus diferencias: AMD consigue ir Fabless" . AnandTech . Archivado desde el original el 13 de mayo de 2010.

Enlaces externos [ editar ]

  • Guías, manuales y documentos ISA para desarrolladores de AMD
  • x86-64: Ampliación de la arquitectura x86 a 64 bits : charla técnica del arquitecto de AMD64 ( archivo de video ) y segunda charla del mismo orador ( archivo de video )
  • "Protección antivirus mejorada" de AMD
  • Intel ajusta EM64T para una compatibilidad completa con AMD64
  • Analista: Intel AMD64 de ingeniería inversa
  • Informe inicial de diferencias entre Intel IA32e y AMD64
  • Porting a sistemas GNU / Linux de 64 bits , por Andreas Jaeger de GCC Summit 2003. Un excelente artículo que explica casi todos los aspectos prácticos para una transición de 32 bits a 64 bits.
  • Arquitectura Intel 64
  • Red de software Intel: "64 bits"
  • Tutoriales de TurboIRC.COM, que incluyen ejemplos de cómo ingresar al modo protegido y al modo largo sin procesar desde DOS
  • Siete pasos para migrar un programa a un sistema de 64 bits
  • Límites de memoria para versiones de Windows