Articulo de referencia

x86-64

AMD Opteron, la primera CPU en introducir las extensiones x86-64 en abril de 2003. El conjunto de cinco volúmenes del Manual del programador de la arquitectura x86-64 , publicad...

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

x86-64 (también conocido como x86_64 , AMD64 , Intel 64 y x64 ) [ nota 1 ] es una extensión de 64 bits del conjunto de instrucciones x86 . Se anunció en 1999 y estuvo disponible por primera vez en la familia AMD Opteron en 2003. Introduce dos nuevos modos de funcionamiento: modo de 64 bits y modo de compatibilidad, junto con un nuevo mecanismo de paginación de cuatro niveles .

En modo de 64 bits, la arquitectura x86-64 admite cantidades significativamente mayores de memoria virtual y física en comparación con sus predecesoras de 32 bits , lo que permite a los programas informáticos utilizar más memoria. Esta arquitectura aumenta el número de registros de propósito general de 8 a 16 y amplía el ancho (capacidad) de cada registro a 64 bits.

La aritmética de punto flotante se admite mediante instrucciones SSE2 obligatorias en modo de 64 bits. Si bien los registros para implementaciones de punto flotante más antiguas ( x87 y MMX ) aún están disponibles, generalmente se reemplazan por registros vectoriales de 128 bits para el conjunto de instrucciones SSE. Estos registros vectoriales pueden almacenar dos números de punto flotante de doble precisión o hasta cuatro de precisión simple , junto con varios formatos de enteros.

En el modo de 64 bits, las instrucciones se modifican para admitir operandos de 64 bits y un modo de direccionamiento de 64 bits .

La arquitectura x86-64 define un modo de compatibilidad que permite que las aplicaciones de usuario de 16 y 32 bits se ejecuten sin modificaciones junto con las aplicaciones de 64 bits, siempre que el sistema operativo de 64 bits las admita. [ 11 ] [ nota 2 ] Dado que los conjuntos completos de instrucciones x86-32 permanecen implementados en hardware sin necesidad de emulación, 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 aprovechar las nuevas características del diseño del procesador para lograr mejoras de rendimiento. Además, los procesadores que admiten x86-64 siguen encendiéndose en modo real para mantener la retrocompatibilidad con el procesador 8086 original , como ha sido el caso con los procesadores x86 desde la introducción del modo protegido con el 80286 .

La especificación original, creada por AMD y publicada 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 obligada a seguir el ejemplo e introdujo una familia NetBurst modificada que era compatible por software con la especificación de AMD. VIA Technologies introdujo x86-64 en su microarquitectura Isaiah, con el VIA Nano .

La arquitectura x86-64 se adoptó rápidamente para ordenadores de sobremesa y portátiles, así como para servidores, que solían configurarse con 16  GiB ( gibibytes ) de memoria o más. Ha sustituido de facto a la arquitectura Intel Itanium (anteriormente IA-64 ), que se había descatalogado y que originalmente pretendía reemplazar a la arquitectura x86. Las arquitecturas x86-64 e Itanium no son compatibles a nivel de conjunto de instrucciones nativo, y los sistemas operativos y las aplicaciones compilados para una arquitectura no pueden ejecutarse de forma nativa en la otra.

En octubre de 2024, Intel y AMD formaron conjuntamente el Grupo Asesor del Ecosistema x86 . Entre sus objetivos se encontraban la mejora de la coherencia del software y la estandarización de las interfaces y características de x86. [ 14 ]

AMD64

Logotipo de AMD64

Historia

AMD64 (también denominada por AMD en su literatura y documentación como "Tecnología AMD de 64 bits" y "Arquitectura AMD x86-64") se creó como una alternativa a la arquitectura IA-64 radicalmente diferente diseñada por Intel y Hewlett-Packard , que era retrocompatible con IA-32 , la extensión de 32 bits de la arquitectura x86 . AMD anunció originalmente AMD64 en 1999 [ 15 ] con una especificación completa disponible en agosto de 2000. [ 16 ] Como AMD nunca fue invitada a contribuir a la arquitectura IA-64 y cualquier tipo de licencia parecía improbable, AMD posicionó la arquitectura AMD64 desde el principio como una forma evolutiva de agregar capacidades de computación de 64 bits a la arquitectura x86 existente, al tiempo que admitía el código x86 heredado de 32 bits , en contraposición al enfoque de Intel de crear una arquitectura de 64 bits completamente nueva e incompatible con x86 con IA-64.

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

Implementaciones

Los procesadores de AMD que implementan la arquitectura AMD64 incluyen Opteron , Athlon 64 , Athlon 64 X2 , Athlon 64 FX , Athlon II (seguido de "X2", "X3" o "X4" para indicar el número de núcleos, y modelos XLT), Turion 64 , Turion 64 X2 , Sempron (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 .

Características arquitectónicas

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

Entre los cambios más notables en las extensiones de 64 bits se incluyen:

Capacidad de enteros de 64 bits
Todos los registros de propósito general (GPR) se expanden de 32 a 64 bits , y todas las operaciones aritméticas y lógicas, las operaciones de memoria a registro y de registro a memoria, etc., pueden operar directamente con enteros de 64 bits. Las operaciones de inserción y extracción en la pila tienen pasos predeterminados 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 se incrementa de ocho (es decir, eax , ebx , ecx , edx , esi , edi , esp , ebp ) en x86 a 16 (es decir , rax , rbx , rcx , rdx , rsi , rdi , rsp , rbp , 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 almacenen constantes de acceso frecuente; los argumentos para subrutinas pequeñas y rápidas también pueden pasarse en los registros en mayor medida.
AMD64 aún tiene menos registros que muchos conjuntos de instrucciones RISC (por ejemplo, Power ISA tiene 32 GPR; ARM de 64 bits , RISC-VI , SPARC , Alpha , MIPS y PA-RISC tienen 31) o máquinas tipo VLIW como IA-64 (que tiene 128 registros). Sin embargo, una implementación de AMD64 puede tener muchos más registros internos que la cantidad de registros arquitectónicos expuestos por el conjunto de instrucciones (véase el cambio de nombre de registros ). (Por ejemplo, los núcleos AMD Zen tienen 168 registros internos físicos de punto flotante de enteros de 64 bits y 160 de punto flotante vectorial de 128 bits). 
Registros XMM (SSE) adicionales
Del mismo modo, el número de registros XMM de 128 bits (utilizados para las instrucciones Streaming SIMD ) también se incrementa de 8 a 16.
La pila de registros de la FPU x87 tradicional no se incluye en la extensión del tamaño del archivo de registros en modo de 64 bits, a diferencia de los registros XMM utilizados por SSE2, que sí se extendieron. La pila de registros x87 no es un simple archivo de registros, aunque permite el acceso directo a registros individuales mediante operaciones de intercambio de bajo costo.
Espacio de direcciones virtuales más grande
La arquitectura AMD64 define un formato de dirección virtual de 64 bits, de los cuales los 48 bits de orden inferior se utilizan en las implementaciones actuales. [ 11 ] : 120 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 futuras implementaciones a los 64 bits completos, [ 11 ] : 2 : 3 : 13 : 117 : 120 extendiendo el espacio de direcciones virtuales a 16 EiB (2 64 bytes). [ 18 ] Esto se compara con solo 4 GiB (2 32 bytes) para el x86. [ 19 ]   
Esto significa que se puede operar con archivos muy grandes asignando el archivo completo al espacio de direcciones del proceso (lo que suele ser 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 del espacio de direcciones.
Espacio de dirección física más grande
La implementación original de la arquitectura AMD64 implementaba direcciones físicas de 40 bits y, por lo tanto, podía direccionar hasta 1  TiB ( 2⁴⁰ bytes) de RAM. [ 11 ] : 24 Las implementaciones actuales de la arquitectura AMD64 (a partir de la microarquitectura AMD 10h ) extienden esto a direcciones físicas de 48 bits [ 20 ] y, por lo tanto, pueden direccionar hasta 256  TiB ( 2⁴⁸ bytes) de RAM. La arquitectura permite extender esto a 52 bits en el futuro [ 11 ] : 24 [ 21 ] (limitado por el formato de entrada de la tabla de páginas); [ 11 ] : 131 esto permitiría direccionar hasta 4  PiB de RAM. En comparación, los procesadores x86 de 32 bits están limitados a 64  GiB de RAM en modo de Extensión de Dirección Física (PAE), [ 22 ] o 4  GiB de RAM sin modo PAE. [ 11 ] : 4
Mayor espacio de direcciones físicas en modo heredado
Cuando opera 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 dirección física que en el modo largo . [ 11 ] : 24
Acceso a datos relativos al puntero de instrucción
Ahora las instrucciones pueden hacer referencia a datos relativos al puntero de instrucción (registro RIP). Esto hace que el código independiente de la posición , que se usa frecuentemente en bibliotecas compartidas y en código cargado en tiempo de ejecución, sea más eficiente.
Instrucciones SSE
La arquitectura AMD64 original adoptó las instrucciones SSE y SSE2 de Intel como instrucciones principales. Estos conjuntos de instrucciones proporcionan un complemento vectorial a la FPU escalar x87 , para los tipos de datos de precisión simple y doble. SSE2 también ofrece operaciones vectoriales enteras, 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 época. Estas instrucciones también se pueden usar en modo de 32 bits. La proliferación de procesadores de 64 bits ha hecho que estas capacidades vectoriales sean omnipresentes en las computadoras domésticas, lo que permite la mejora de 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. [ 23 ] Las instrucciones SSE3 y los conjuntos de instrucciones Streaming SIMD Extensions posteriores no son características estándar de la arquitectura.
bit de no ejecución
El bit de no ejecución o 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. Intentar ejecutar código desde una página marcada como "no ejecutar" provocará una violación de acceso a memoria, similar a intentar escribir en una página de solo lectura. Esto debería dificultar que el código malicioso tome el control del sistema mediante ataques de " desbordamiento de búfer " o "búfer no verificado". Una función similar está disponible en los procesadores x86 desde el 80286 como 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 operación obsoleto, y todos los sistemas operativos actuales para PC lo omiten, asignando a todos los segmentos una dirección base de cero y (en su implementación de 32 bits) un tamaño de 4  GiB. AMD fue el primer fabricante de la familia x86 en implementar la opción de no ejecución en el modo de direccionamiento lineal. Esta función también está disponible en modo heredado en los procesadores AMD64 y en los procesadores Intel x86 recientes, cuando se utiliza PAE.
Eliminación de funciones antiguas
Algunas características de "programación de sistemas" de la arquitectura x86 no se usaban o se usaban poco en los sistemas operativos modernos y no están disponibles en AMD64 en modo largo (64 bits y compatibilidad), o existen solo de forma limitada. Estas incluyen el direccionamiento segmentado (aunque los segmentos FS y GS se conservan de forma vestigial para su uso como punteros extrabase a estructuras del sistema operativo), [ 11 ] : 70 el mecanismo de cambio de estado de tarea y el modo virtual 8086. Estas características permanecen completamente implementadas en "modo heredado", lo que permite a estos procesadores ejecutar sistemas operativos de 32 bits y 16 bits sin modificaciones. Algunas instrucciones que demostraron ser raramente útiles no son compatibles con el modo de 64 bits, incluyendo guardar/restaurar registros de segmento en la pila, guardar/restaurar todos los registros (PUSHA/POPA), aritmética decimal, instrucciones BOUND e INTO, y saltos "lejanos" y llamadas con operandos inmediatos.

Detalles del espacio de direcciones virtuales

Direcciones de forma canónica

Implementaciones del espacio de direcciones canónico (diagramas sin escala)
Implementación actual de 48 bits
Implementación de 57 bits
Implementación de 64 bits

Aunque las direcciones virtuales tienen  un ancho de 64 bits en modo de 64 bits, las implementaciones actuales (y todos los chips que se sabe que están en fase de planificación) no permiten utilizar todo el espacio de direcciones virtuales de 2⁶⁴ 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 implementar direcciones virtuales tan amplias simplemente aumentaría la complejidad y el coste de la traducción de direcciones sin ningún beneficio real. Por lo tanto, AMD decidió que, en las primeras implementaciones de la arquitectura, solo se utilizarían los 48 bits menos significativos de una dirección virtual en la traducción de direcciones ( búsqueda en la tabla de páginas ). [ 11 ] : 120  

Además, la especificación AMD requiere que los 16 bits más significativos de cualquier dirección virtual, los bits 48 al 63, deben ser copias del bit 47 (de manera similar a la extensión de signo ). Si no se cumple este requisito, el procesador generará una excepción. [ 11 ] : 131 Las direcciones que cumplen con esta regla se denominan "forma canónica". [ 11 ] : 130 Las direcciones de forma canónica 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 mayor que el espacio de direcciones virtuales 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 otras, la familia Windows NT ) toman la mitad de mayor direccionamiento del espacio de direcciones (denominada espacio del kernel ) para sí mismos y dejan la mitad de menor direccionamiento ( espacio de usuario ) para el código de la aplicación, pilas de modo de usuario, montones y otras regiones de datos. [ 24 ] El diseño de "dirección canónica" garantiza 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 hay más bits de dirección virtual disponibles, mientras que la mitad superior está "acoplada" a la parte superior del espacio de direcciones y crece hacia abajo. Además, imponer la "forma canónica" de las direcciones mediante la comprobación de los bits de dirección no utilizados impide su uso por parte del sistema operativo en punteros etiquetados como indicadores, marcadores de privilegio, etc., ya que dicho uso podría volverse problemático cuando la arquitectura se extiende para implementar más bits de dirección virtual.

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

Estructura de la tabla de páginas

El modo de direccionamiento de 64 bits (" modo largo ") es un superconjunto de las Extensiones de Dirección Física (PAE); debido a esto, los tamaños de página pueden ser de 4 KiB (2 12 bytes) o 2 MiB (2 21 bytes). [ 11 ] : 120 El modo largo también admite tamaños de página de 1 GiB (2 30 bytes). [ 11 ] : 120 En lugar del sistema de tabla de páginas 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áginas: la Tabla de Punteros de Directorio de Páginas de PAE se extiende de cuatro entradas a 512, y se agrega una Tabla de Mapa de Páginas Nivel 4 (PML4) adicional , que contiene 512 entradas en implementaciones de 48 bits. [ 11 ] : 131 Una jerarquía de mapeo completa de páginas de 4 KiB para todo el espacio de 48 bits tomaría un poco más de 512 GiB de memoria (alrededor del 0,195% del espacio virtual de 256 TiB).       

Intel ha implementado un esquema con una tabla de páginas de 5 niveles , que permite a los procesadores Intel 64 admitir direcciones de 57 bits y, a su vez, un espacio de direcciones virtuales de 128 PiB . [ 25 ] Otras extensiones podrían permitir un espacio de direcciones virtuales completo de 64 bits y memoria física con descriptores de tabla de páginas de 12 bits y desplazamientos de memoria de 16 o 21 bits para tamaños de asignación de páginas de 64 KiB y 2 MiB; la entrada de la tabla de páginas se ampliaría a 128 bits para admitir indicadores de hardware adicionales para el tamaño de página y el tamaño del espacio de direcciones virtuales. [ 26 ]   

Límites del sistema operativo

El sistema operativo también puede limitar el espacio de direcciones virtuales. En la sección " Compatibilidad y características del sistema operativo " se ofrecen más detalles, cuando corresponda.

Detalles del espacio de la dirección física

Los procesadores AMD64 actuales admiten un espacio de direcciones físicas de hasta 248 bytes de RAM, o 256 TiB . [ 20 ] Sin embargo, a partir de 2020 No se conocían placas base x86-64 que admitieran 256  TiB de RAM. [ 27 ] [ 28 ] [ 29 ] [ 30 ] El sistema operativo puede imponer límites adicionales a la cantidad de RAM utilizable o compatible. Se ofrecen detalles sobre este punto en la sección « Compatibilidad y características del sistema operativo » de este artículo.

Modos de funcionamiento

La arquitectura tiene dos modos de funcionamiento principales: modo largo y modo heredado.

  1. 1 2 3 4 Tenga en cuenta que el código de 16 bits escrito para el 80286 y anteriores no utiliza instrucciones de operando de 32 bits. El código escrito para el 80386 y posteriores puede utilizar el prefijo de anulación de tamaño de operando (0x66). Normalmente, este prefijo lo utiliza el código en modo protegido y largo para utilizar operandos de 16 bits, ya que dicho código se ejecutaría en un segmento de código con un tamaño de operando predeterminado de 32 bits. En modo real, el tamaño de operando predeterminado es de 16 bits, por lo que el prefijo 0x66 se interpreta de forma diferente, cambiando el tamaño del operando a 32 bits.
Diagrama de estados de los modos de funcionamiento x86-64

Modo largo

El modo largo es el modo de operación 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 bits 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 de modo protegido de 32 bits y 16 bits (que no necesitan utilizar ni el modo real ni el modo virtual 8086 para ejecutarse en ningún momento) se ejecutan en modo de compatibilidad. Los programas en modo real y los programas que utilizan el modo virtual 8086 en algún momento no pueden ejecutarse 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 que admiten VT-x o AMD-V mediante la creación de un procesador virtual que se ejecuta en el modo deseado.

Dado que el conjunto de instrucciones básico es el mismo, prácticamente no hay penalización de rendimiento al ejecutar código x86 en modo protegido. Esto difiere de la arquitectura IA-64 de Intel , donde las diferencias en el conjunto de instrucciones subyacente implican que la ejecución de código de 32 bits debe realizarse mediante emulación de x86 (lo que ralentiza el proceso) o con un coprocesador x86 dedicado. Sin embargo, en la plataforma x86-64, muchas aplicaciones x86 podrían beneficiarse de una recompilación a 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 compilador puede usar para la optimización. No obstante, las aplicaciones que manejan regularmente enteros de más de 32 bits, como los algoritmos criptográficos, necesitarán reescribir el código que maneja estos enteros de gran tamaño para aprovechar los registros de 64 bits.

Modo heredado

El modo heredado es el modo en el que se encuentra el procesador cuando no está en modo largo. [ 11 ] : 14 En este modo, el procesador actúa como un procesador x86 antiguo, y solo se puede ejecutar código de 16 bits y 32 bits. El modo heredado permite un máximo de  direccionamiento virtual de 32 bits, lo que limita el espacio de direcciones virtuales a 4  GiB. [ 11 ] : 14 : 24 : 118 Los programas de 64 bits no se pueden ejecutar desde el modo heredado.

Modo protegido

El modo protegido se convierte en un submodo del modo heredado. [ 11 ] : 14 Es el submodo en el que operan los sistemas operativos de 32 bits y los sistemas operativos de modo protegido de 16 bits cuando se ejecutan en una CPU x86-64. [ 11 ] : 14

Modo real

El modo real es el modo de operación inicial cuando se inicializa el procesador y es un submodo del modo heredado. Es retrocompatible con los procesadores Intel 8086 e Intel 8088 originales . Actualmente, el modo real se utiliza principalmente por los gestores de arranque del sistema operativo, que la arquitectura requiere para configurar los detalles de la memoria virtual antes de pasar a modos superiores. Este modo también lo utiliza cualquier sistema operativo que necesite comunicarse con el firmware del sistema mediante una interfaz tradicional tipo BIOS . [ 31 ]

Intel 64

Intel  64 es la implementación de Intel del estándar x86-64, utilizado e implementado en varios procesadores fabricados por Intel.

Historia

Históricamente, AMD ha desarrollado y producido procesadores con conjuntos de instrucciones basados ​​en los diseños originales de Intel, pero con x86-64, los papeles se invirtieron: Intel se encontró en la posición de adoptar el conjunto de instrucciones que AMD creó como una extensión de su propia línea de procesadores x86.

El proyecto de Intel se denominó originalmente Yamhill [ 32 ] (en referencia al río Yamhill en el valle de Willamette, Oregón). Tras varios años negando su existencia, Intel anunció en la IDF de febrero de 2004 que el proyecto estaba en marcha. El entonces presidente de Intel, Craig Barrett , admitió que se trataba de uno de sus secretos peor guardados. [ 33 ] [ 34 ]

El nombre que Intel le da a este conjunto de instrucciones ha cambiado varias veces. El nombre utilizado en el IDF fue CT [ 35 ] (presumiblemente por Clackamas Technology , otro nombre en clave de un río de Oregón ) y en marzo de 2004 se reveló el nombre "oficial" EM64T (Extended Memory 64 Technology). A finales de 2006, Intel comenzó a usar el nombre Intel 64 para su implementación, de forma similar a como AMD usaba el nombre AMD64. [ 36 ] 

El primer procesador en implementar Intel  64 fue el procesador multisocket Xeon con nombre en clave Nocona en junio de 2004. En contraste, los chips Prescott iniciales (febrero de 2004) no habilitaban esta característica. Posteriormente, Intel comenzó a vender  Pentium 4 con Intel 64 habilitado utilizando la revisión E0 del núcleo Prescott, que se vendía 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 entonces vigente Xeon con nombre en clave Irwindale . El lanzamiento oficial de Intel  64 (bajo el nombre EM64T en ese momento) en procesadores de escritorio convencionales fue el Prescott-2M con revisión N0 en febrero de 2005. [ 37 ]

El primer procesador móvil de Intel que implementó Intel  64 fue el Merom Core 2 , lanzado el 27 de julio de 2006. Ninguno de los procesadores para portátiles anteriores de Intel ( Core Duo , Pentium M , Celeron M , Mobile Pentium 4 ) implementó Intel  64.

Implementaciones

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

Implementación x86-64 de VIA

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

El procesador admite varias extensiones x86 específicas de VIA diseñadas para aumentar la eficiencia en dispositivos de bajo consumo. En la publicidad previa al lanzamiento, VIA declaró que se esperaba que la arquitectura Isaiah fuera el doble de rápida en rendimiento de enteros y cuatro veces más rápida en rendimiento de punto flotante que la generación anterior (VIA Esther) a una velocidad de reloj equivalente . También se esperaba que el consumo de energía estuviera a la par con las CPU VIA de la generación anterior, con una potencia de diseño térmico que oscilaba entre 5  W y 25  W. [ 41 ] Al ser un diseño completamente nuevo, la arquitectura Isaiah se construyó con soporte para características como el conjunto de instrucciones x86-64 y la virtualización x86 que no estaban disponibles en sus predecesores, la línea VIA C7 , al tiempo que conservaba sus extensiones de cifrado.

Niveles de microarquitectura

En 2020, mediante una colaboración entre AMD, Intel, Red Hat y SUSE , se definieron tres niveles de microarquitectura (o niveles de características) sobre la base x86-64: x86-64-v2, x86-64-v3 y x86-64-v4. [ 42 ] [ 43 ] Estos niveles definen características específicas que los programadores pueden utilizar para proporcionar optimizaciones en tiempo de compilación. Las características expuestas por cada nivel son las siguientes: [ 44 ]

Los niveles de características de la microarquitectura x86-64 también se pueden encontrar como AMD64-v1, AMD64-v2 o AMD64_v1 en entornos donde se utiliza la nomenclatura "AMD64". Estos términos se usan como sinónimos de la nomenclatura x86-64-vX y, por lo tanto, son funcionalmente idénticos. Ejemplos de esto incluyen la documentación del lenguaje Go y la distribución Fedora Linux.

Todos los niveles incluyen características presentes en los niveles anteriores. Las extensiones del conjunto de instrucciones que no se ocupan de la computación de propósito general, como AES-NI y RDRAND , quedan excluidas de los requisitos de cada nivel.

En la mayoría de las distribuciones Linux x86_64 recientes, todos los niveles de características x86_64 compatibles con una CPU se pueden verificar mediante el comando: /lib64/ld-linux-x86-64.so.2 --help(disponible desde glibc 2.33 [ 45 ] ). El resultado será visible al final de la salida del comando:

Subdirectorios de los directorios glibc-hwcaps, en orden de prioridad:  x86-64-v4  x86-64-v3 (compatible, buscado)  x86-64-v2 (compatible, buscado)

En este caso, el nivel de características x86-64-v4 no es compatible con la CPU, pero sí lo son x86-64-v3 y x86-64-v2, lo que significa que esta CPU no es compatible con AVX512, requisito del nivel v4.

Diferencias entre AMD64 e Intel 64

Aunque casi idénticos, existen algunas diferencias entre los dos conjuntos de instrucciones en la semántica de algunas instrucciones de máquina (o situaciones) poco utilizadas, que se emplean principalmente para la programación de sistemas . [ 46 ] A menos que se indique lo contrario mediante -marchla configuración, los compiladores generalmente producen ejecutables (es decir, código máquina ) que evitan cualquier diferencia, al menos para los programas de aplicación ordinarios . Por lo tanto, esto interesa principalmente a los desarrolladores de compiladores, sistemas operativos y similares, que deben lidiar con instrucciones de sistema individuales y especiales.

Implementaciones recientes

  • Intel  64 permite SYSCALL/ SYSRETsolo en modo de 64 bits (no en modo de compatibilidad), [ 47 ] y permite SYSENTER/ SYSEXITen ambos modos. [ 48 ] AMD64 carece de SYSENTER/ SYSEXITen ambos submodos del modo largo . [ 11 ] : 33
  • Al regresar a una dirección no canónica usando SYSRET, los procesadores AMD64 ejecutan el controlador de fallas de protección general en el nivel de privilegio 3, [ 49 ] mientras que en  los procesadores Intel 64 se ejecuta en el nivel de privilegio 0. [ 50 ]
  • La SYSRETinstrucción cargará un conjunto de valores fijos en la parte oculta del SSregistro de segmento (dirección base, límite, atributos) en Intel  64, pero dejará la parte oculta SSsin cambios en AMD64. [ 51 ]
  • En Intel  64, la SYSRETinstrucción establece incondicionalmente el nivel de privilegio (RPL) del SSregistro de segmento a 3 (ya que la instrucción provoca un retorno al nivel de privilegio 3). [ 52 ] En AMD64, el RPL se establece en los bits correspondientes en el MSR STAR ( registro específico del modelo ), es decir, los bits 49 y 48. [ 53 ]
  • AMD64 requiere un formato de actualización de microcódigo y registros MSR de control diferentes, mientras que Intel  64 implementa la actualización de microcódigo sin cambios con respecto a 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 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 involucra las instrucciones FXSAVEy ).FXRSTOR
  • En AMD64, las instrucciones FXSAVE/ FXRSTORsolo guardarán/restaurarán punteros de excepción x87 (FCS/FIP, FDS/FDP, FOP) cuando haya una excepción x87 pendiente sin enmascarar. [ 54 ] [ 55 ] En Intel  64, estos punteros siempre se guardan y restauran independientemente del estado de la excepción x87.
  • En modo de 64 bits, las bifurcaciones 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 se trunca. AMD64 utiliza un campo de desplazamiento de 16 bits en la instrucción y borra los 48  bits superiores del puntero de instrucción.
  • En Intel  64 pero no en AMD64, el REX.Wprefijo se puede usar con las instrucciones de puntero lejano ( LFS, LGS, LSS, JMP FAR, CALL FAR) para aumentar el tamaño de su argumento de puntero lejano a 80 bits (desplazamiento de 64 bits + segmento de 16 bits).
  • Cuando la MOVSXDinstrucción se ejecuta con un operando de origen de memoria y un tamaño de operando de 16 bits, el operando de memoria se accederá con una lectura de 16 bits en Intel  64, pero con una lectura de 32 bits en AMD64.
  • Cuando la PUSHinstrucción se usa con un registro de segmento y un tamaño de operando de 32 bits en modo heredado/de compatibilidad, AMD64 extenderá el registro a cero de 2 a 4 bytes y colocará ese valor de 4 bytes en la pila. Intel  64 también decrementará el puntero de pila en 4, pero solo escribirá 2 bytes, dejando un espacio de 2 bytes sin escribir. [ 56 ] [ 57 ]
  • Cuando la POPinstrucción se usa con un registro de segmento y un tamaño de operando de 32 o 64 bits, AMD64 realizará una lectura de memoria desde la pila que es tan ancha como el tamaño del operando, mientras que Intel  64 realizará una lectura de memoria de 16 bits (pero aún así incrementará el puntero de pila de acuerdo con el tamaño del operando). [ 57 ]
  • Las instrucciones FCOMI/ FCOMIP/ FUCOMI/ FUCOMIP(comparación de punto flotante x87) borrarán los bits OF, SF y AF de EFLAGS en Intel  64, pero dejarán estos bits de bandera sin modificar en AMD64.
  • Para las instrucciones VMASKMOVPS/ VMASKMOVPD/ VPMASKMOVD/ VPMASKMOVQ(movimiento enmascarado hacia/desde la memoria AVX/AVX2), Intel  64 garantiza arquitectónicamente que las instrucciones no causarán fallas de memoria (por ejemplo, fallas de página y fallas de segmentación) para ningún carril enmascarado a cero, mientras que AMD64 no proporciona tal garantía.
  • Si la RDRANDinstrucción no logra obtener un número aleatorio (como se indica por EFLAGS.CF=0), el registro de destino tiene garantizada arquitectónicamente que se establezca en 0 en Intel  64 pero no en AMD64.
  • Para las instrucciones VPINSRDy VPEXTRD(inserción/extracción de carril vectorial AVX) fuera del modo de 64 bits, AMD64 requiere que las instrucciones estén codificadas con VEX.W=0, mientras que Intel  64 también acepta codificaciones con VEX.W=1. (En modo de 64 bits, tanto AMD64 como Intel  64 requieren VEX.W=0.)
  • Cuando la comprobación de alineación está habilitada ( EFLAGS.AC=1), las instrucciones AVX con operandos de memoria de 128 bits o 256 bits desalineados, y las PCMP*STR*instrucciones SSE4.2 con operandos de memoria de 128 bits desalineados, causarán excepciones #AC (comprobación de alineación) en AMD64 [ 58 ] pero no en Intel  64. [ 59 ]
  • El 0F 0D /rcódigo de operación con el campo Mod del byte ModR/M establecido en es un NOP11b reservado en Intel 64 [ 60 ] pero causará #UD (excepción de código de operación no válido) en AMD64. [ 61 ] 
  • Las garantías de ordenación proporcionadas por algunas instrucciones de ordenación de memoria, como LFENCEy , MFENCEdifieren entre Intel  64 y AMD64:
    • LFENCEes serializable por despacho (lo que permite usarlo como una barrera de especulación ) en Intel  64, pero no está arquitectónicamente garantizado que sea serializable por despacho en AMD64. [ 62 ]
    • MFENCEes una instrucción de serialización completa (incluida la serialización de la búsqueda de instrucciones) en AMD64 pero no en Intel  64.
    • Las instrucciones MOVCR8 INVPCIDse serializan en AMD64 pero no en Intel  64.
    • La LMSWinstrucción se serializa en Intel  64 pero no en AMD64.
    • WRMSREl ICR (Registro de Comando de Interrupción; MSR ) del x2APIC830h se usa comúnmente para producir una IPI ( Interrupción entre procesadores ); en las CPU Intel  64 [ 63 ] pero no en las AMD64 [ 64 ] , dicha IPI se puede reordenar antes de un almacenamiento de memoria anterior.
    • En los procesadores AMD64 recientes ( Zen 4 y posteriores), WRMSRel acceso a los FS_BASEMSR GS_BASEno KernelGSBasees serializable. [ 65 ] En los procesadores Intel  64, así como en los procesadores AMD64 más antiguos, WRMSRel acceso a estos MSR es serializable.

Implementaciones anteriores

  • Los procesadores AMD64 anteriores a la Revisión F [ 66 ] (distinguidos por el cambio de memoria DDR a DDR2 y los zócalos AM2 , F y S1 ) de 2006 carecían de la CMPXCHG16Binstrucción, que es una extensión de la CMPXCHG8Binstrucción presente en la mayoría de los procesadores posteriores al 80486. Similar a CMPXCHG8B, CMPXCHG16Bpermite operaciones atómicas en octapalabras (valores de 128 bits). Esto es útil para algoritmos paralelos que usan comparación e intercambio en datos más grandes que el tamaño de un puntero, común en algoritmos sin bloqueo y sin espera . Sin CMPXCHG16Buno debe usar soluciones alternativas, como una sección crítica o enfoques alternativos sin bloqueo. [ 67 ] Su ausencia también impide que Windows de 64 bits anterior a Windows 8.1 tenga un espacio de direcciones en modo de usuario mayor que 8 TiB . [ 68 ] Todas las versiones de 64 bits de Windows desde Windows 8.1 requieren la instrucción. [ 69 ] 
  •  Las primeras CPU AMD64 e Intel 64 carecían LAHFde SAHFinstrucciones en modo de 64 bits. AMD introdujo estas instrucciones (también en modo de 64 bits) con sus procesadores de 90  nm (revisión  D), comenzando con Athlon  64 en octubre de 2004. [ 70 ] [ 71 ] Intel introdujo las instrucciones en octubre de 2005 con la revisión 0F47h ​​y posteriores de NetBurst . [ b ] Todas las versiones de 64 bits de Windows desde Windows 8.1 requieren esta característica. [ 69 ]
  • Las primeras CPU de Intel con Intel  64 también carecían del bit NX de la arquitectura AMD64. Se añadió en el Pentium 4 stepping E0 (0F41h) en octubre de 2004. [ 77 ] Las versiones de 64 bits de Windows desde Windows 8.1 requieren esta característica. [ 69 ]
  • Las primeras implementaciones de Intel 64 tenían un direccionamiento físico de memoria de  36 bits (64 GiB), mientras que las implementaciones originales de AMD64 tenían un direccionamiento físico de 40 bits (1 TiB ). Intel utilizó el direccionamiento físico de 40 bits por primera vez en Xeon MP ( Potomac ), lanzado el 29 de marzo de 2005. [ 78 ] La diferencia no es una diferencia de las ISA visibles para el usuario. En 2007, el Opteron basado en AMD 10h fue el primero en proporcionar un espacio de direcciones físicas de 48 bits (256 TiB). [ 79 ] [ 80 ] El direccionamiento físico de Intel 64 se extendió a 44 bits (16 TiB) en Nehalem-EX en 2010 [ 81 ] y a 46 bits (64 TiB) en Sandy Bridge E en 2011. [ 82 ] [ 83 ] Con los procesadores Ice Lake de tercera generación Xeon Scalable, Intel aumentó el direccionamiento virtual a 57 bits (128 PiB ) y el físico a 52 bits (4 PiB) en 2021, lo que requirió una paginación de 5 niveles . [ 84 ] Al año siguiente, AMD64 agregó lo mismo en la cuarta generación EPYC (Genoa). [ 85 ] Las CPU que no son para servidores mantuvieron espacios de direcciones más pequeños durante más tiempo.       
  • En todos los procesadores AMD64, las instrucciones ` BSFand` BSR, cuando reciben un valor de origen de 0, dejan su registro de destino sin modificar. Esto  también ocurre en la mayoría de los procesadores Intel 64, excepto que en algunas  CPU Intel 64 más antiguas, la ejecución de estas instrucciones con un tamaño de operando de 32 bits borra los 32 bits superiores de su registro de destino incluso con un valor de origen de 0 (manteniendo los 32 bits inferiores sin cambios). [ 86 ]
  • Los procesadores AMD64 desde Opteron Rev. E y Athlon 64 Rev. D reintrodujeron 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. [ 87 ] [ 88 ] El soporte para LMSLE se eliminó en el procesador Zen 3. [ 89 ]
  • En todos  los procesadores Intel 64, CLFLUSHse ordena con respecto a SFENCE— esto también ocurre en los procesadores AMD64 más nuevos (Zen 1 y posteriores). En los procesadores AMD64 más antiguos, imponer el orden en la CLFLUSHinstrucción requería en su lugar MFENCE.
  • En los procesadores AMD64 más antiguos, las instrucciones XSAVE/ XRSTORse abstenían de guardar o restaurar los punteros de error x87 (FCS/FIP, FDS/FDP, FOP) a menos que existiera una excepción x87 pendiente sin enmascarar. En los  procesadores Intel 64 y los procesadores AMD64 más recientes (Zen 1 y posteriores), estos punteros de error siempre se guardan y restauran. (Esta diferencia entre Intel y AMD persiste para las instrucciones FXSAVE/ ).FXRSTOR

Adopción

Un gráfico de área que muestra la representación de diferentes familias de microprocesadores en la lista de clasificación de supercomputadoras TOP500, desde 1993 hasta 2020 [ 90 ]

En las supercomputadoras analizadas 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 (incluidas PA-RISC , SPARC , Alpha y otras), así como la arquitectura x86 de 32 bits, a pesar de que la propia Intel intentó inicialmente, sin éxito, reemplazar x86 con una nueva arquitectura de 64 bits incompatible en el procesador Itanium .

A partir de 2023La supercomputadora Frontier , basada en HPE EPYC , ocupa el primer lugar. La primera supercomputadora basada en ARM apareció en la lista en 2018 [ 91 ] 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, [ 92 ] también se utilizan, junto con procesadores x86-64, en la supercomputadora Tianhe-2 . [ 93 ]

Compatibilidad y características del sistema operativo

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

BSD

DragonFly BSD

En febrero de 2004 se iniciaron los trabajos preliminares de infraestructura para una versión x86-64. [ 94 ] Este desarrollo se estancó posteriormente. El desarrollo se reanudó en julio de 2007 [ 95 ] y continuó durante Google Summer of Code 2008 y SoC 2009. [ 96 ] [ 97 ] La primera versión oficial que incluyó soporte para x86-64 fue la versión 2.4 de 2009. [ 98 ]

FreeBSD

FreeBSD añadió soporte para x86-64 bajo el nombre "amd64" como arquitectura experimental en la versión 5.1-RELEASE en junio de 2003. Se incluyó como arquitectura de distribución estándar a partir de la versión 5.2-RELEASE en enero de 2004. Desde entonces, FreeBSD la ha designado como  plataforma de nivel 1. La versión 6.0-RELEASE corrigió algunos problemas al ejecutar 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 la ABI de 32 bits de Linux.

NetBSD

La compatibilidad con la arquitectura x86-64 se incorporó por primera vez al código fuente de NetBSD el 19 de junio de 2001. A partir de NetBSD  2.0, lanzado el 9 de diciembre de 2004, NetBSD/amd64 es una versión totalmente integrada y compatible. El código de 32 bits sigue siendo compatible en modo de 64 bits, con una capa de compatibilidad del kernel netbsd-32 para las llamadas al sistema de 32 bits. El bit NX se utiliza para proporcionar una granularidad por página a la pila y al montón no ejecutables (en x86 de 32 bits se utiliza la granularidad por segmento).

OpenBSD

OpenBSD ha sido compatible con AMD64 desde la versión 3.5, lanzada el 1 de mayo de 2004. La implementación completa de la compatibilidad con AMD64 se logró antes del lanzamiento inicial del hardware gracias a que AMD prestó varias máquinas para el hackathon del proyecto ese año. Los desarrolladores de OpenBSD adoptaron la plataforma debido a su compatibilidad con el bit NX , que facilitó la implementación de la función W^X .

El código de la versión AMD64 de OpenBSD también se ejecuta en procesadores Intel 64, que utilizan extensiones AMD64 similares. Sin embargo, dado que Intel omitió el bit NX de la tabla de páginas en los primeros procesadores Intel 64, estos no cuentan con la capacidad W^X. Los procesadores Intel 64 posteriores añadieron el bit NX bajo el nombre de "bit XD". El procesamiento simétrico multiprocesador (SMP) funciona en la versión AMD64 de OpenBSD desde la versión 3.6, lanzada el 1 de noviembre de 2004.

DOS

Es posible entrar en modo largo bajo DOS sin un extensor de DOS, [ 99 ] pero el usuario debe volver al modo real para poder llamar a las interrupciones de BIOS o DOS.

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

Linux

Linux fue el primer núcleo de sistema operativo en ejecutar la arquitectura x86-64 en modo largo , comenzando con la versión 2.4 en 2001 (antes de la disponibilidad del hardware). [ 100 ] [ 101 ] Linux también proporciona retrocompatibilidad para ejecutar ejecutables de 32 bits. Esto permite que los programas se recompilen en modo largo mientras se conserva el uso de programas de 32 bits. Las distribuciones actuales de Linux se distribuyen con núcleos y espacios de usuario nativos de x86-64 . Algunas, como Arch Linux , [ 102 ] SUSE , Mandriva y Debian , permiten a los usuarios instalar un conjunto de componentes y bibliotecas de 32 bits cuando se instalan desde un medio de distribución 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.

La ABI x32 (Interfaz Binaria de Aplicación), introducida en Linux 3.4, permite que los programas compilados para la ABI x32 se ejecuten en el modo de 64 bits de x86-64 utilizando únicamente punteros y campos de datos de 32 bits. [ 103 ] [ 104 ] [ 105 ] Si bien esto limita el programa a un espacio de direcciones virtuales de 4  GiB, también reduce el consumo de memoria del programa y, en algunos casos, puede permitir que se ejecute más rápido. [ 103 ] [ 104 ] [ 105 ]

Linux de 64 bits permite hasta 128 TiB de espacio de direcciones virtuales para procesos individuales y puede direccionar aproximadamente 64 TiB de memoria física, sujeto a las limitaciones del procesador y del sistema, [ 106 ] o hasta 128 PiB (virtual) y 4 PiB (físico) con paginación de 5 niveles habilitada. [ 107 ]    

macOS

Mac OS X 10.4.7 y versiones posteriores 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. [ 108 ] El núcleo, y todas las extensiones del núcleo, 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 Intel de 64 bits, así como en máquinas PowerPC de 64 bits . [ 109 ] Todas las bibliotecas y marcos de trabajo que no son GUI también admiten aplicaciones de 64 bits en esas plataformas. El núcleo, y todas las extensiones del núcleo, 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 todos los ordenadores de 64 bits pueden ejecutar el kernel de 64 bits, y no todos los ordenadores de 64 bits que pueden ejecutar el kernel de 64 bits lo harán de forma predeterminada. [ 110 ] El kernel de 64 bits, al igual que el kernel de 32 bits, admite aplicaciones de 32 bits; ambos kernels también admiten aplicaciones de 64 bits. Las aplicaciones de 32 bits tienen un límite de espacio de direcciones virtuales de 4  GiB bajo cualquiera de los kernels. [ 111 ] [ 112 ] 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.

OS X 10.8 incluye únicamente el núcleo de 64 bits, pero sigue siendo compatible con aplicaciones de 32 bits; sin embargo, no es compatible con extensiones del núcleo de 32 bits.

macOS 10.15 incluye únicamente el kernel de 64 bits y ya no admite aplicaciones de 32 bits. Esta eliminación de la compatibilidad ha supuesto un problema para Wine (y su versión comercial, CrossOver ), ya que necesita seguir ejecutando aplicaciones de Windows de 32 bits. La solución, denominada wine32on64 , consistió en añadir funciones auxiliares que activan y desactivan el modo de compatibilidad de 32 bits de la CPU en la aplicación nominalmente de 64 bits. [ 113 ] [ 114 ]

macOS utiliza el formato binario universal para empaquetar las versiones de 32 y 64 bits del código de las aplicaciones y bibliotecas en un único archivo; la versión más adecuada se selecciona automáticamente al cargar la aplicación. En Mac OS X 10.6, el formato binario universal también se utiliza para el núcleo y para aquellas extensiones del núcleo que admiten núcleos de 32 y 64 bits.

Solaris

Solaris 10 y versiones posteriores son compatibles con la arquitectura x86-64.

Para Solaris 10, al igual que con la arquitectura SPARC , solo existe una imagen del sistema operativo, que contiene un kernel de 32 bits y otro de 64 bits; esta se denomina imagen de DVD-ROM "x64/x86". El comportamiento predeterminado es arrancar con un kernel de 64 bits, lo que permite ejecutar tanto ejecutables de 64 bits como de 32 bits, ya sean existentes o nuevos. También se puede seleccionar manualmente un kernel de 32 bits, en cuyo caso solo se ejecutarán ejecutables de 32 bits. El isainfocomando puede utilizarse 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 tanto de 32 como de 64 bits.

Windows

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. [ 115 ] Internamente son en realidad la misma compilación (5.2.3790.1830 SP1), [ 116 ] [ 117 ] ya que comparten la misma base de código fuente y los binarios del sistema operativo, por lo que incluso las actualizaciones del sistema se lanzan en paquetes unificados, de manera muy similar a 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 R2 se 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 tanto desde el modo de usuario como desde el modo kernel, denominado espacio de direcciones en modo de usuario. Un programa x86-64 puede utilizar todo esto, sujeto a los límites de almacenamiento del sistema, y ​​siempre que esté vinculado con la opción "consciente de direcciones grandes", que está presente por defecto. [ 118 ] Esto supone un aumento de 4096 veces con respecto al  espacio de direcciones virtuales en modo de usuario de 2 GiB por defecto que ofrece Windows de 32 bits. [ 119 ] [ 120 ]
  • 8  TiB de espacio de direcciones virtuales en modo kernel para el sistema operativo. [ 119 ] Al igual que con el espacio de direcciones en modo usuario, esto representa un aumento de 4096 veces con respecto a las versiones de Windows de 32 bits. El espacio aumentado beneficia principalmente a la caché del sistema de archivos y a los "montones" en modo kernel (grupo no paginado y grupo paginado). Windows solo utiliza un total de 16  TiB de los 256  TiB implementados por los procesadores porque los primeros procesadores AMD64 carecían de una CMPXCHG16Binstrucción. [ 121 ]

En Windows 8.1 y Windows Server 2012 R2, los espacios de direcciones virtuales tanto en modo usuario como en modo kernel se han extendido a 128  TiB. [ 24 ] Estas versiones de Windows no se instalarán en procesadores que carecen de la CMPXCHG16Binstrucción.

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

  • .exeCapacidad para ejecutar aplicaciones ( programas) y bibliotecas de enlace dinámico ( s) de 32 bits existentes .dllusando WoW64 si WoW64 es compatible con esa versión. Además, un programa de 32 bits, si se enlazó con la opción "large address aware", [ 118 ] puede usar hasta 4  GiB de espacio de direcciones virtuales en Windows de 64 bits, en lugar de los 2  GiB predeterminados (3  GiB opcionales con /3GBla opción de arranque y la opción de enlace "large address aware") que ofrece Windows de 32 bits. [ 122 ] A diferencia del uso de la /3GBopción de arranque en x86, esto no reduce el espacio de direcciones virtuales en modo kernel disponible para el sistema operativo. Por lo tanto, las aplicaciones de 32 bits pueden beneficiarse de ejecutarse en Windows x64 incluso si no se recompilan para x86-64.
  • Tanto las aplicaciones de 32 como de 64 bits, si no están vinculadas con la opción "aceptar 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 de acceso aleatorio (RAM) física. [ 123 ]
  • Modelo de datos LLP64 : en C/C++, los tipos "int" y "long" tienen  un ancho de 32 bits, "long long" tiene un ancho de 64  bits, mientras que los punteros y los tipos derivados de punteros tienen un ancho de 64  bits.
  • Los controladores de dispositivos en modo kernel deben ser de 64 bits; no es posible ejecutar programas ejecutables de 32 bits en modo kernel dentro de un sistema operativo de 64 bits. Los controladores de dispositivos en modo usuario pueden ser de 32 o 64 bits.
  • Las aplicaciones de Windows de 16 bits (Win16) y DOS no se ejecutarán en versiones x86-64 de Windows debido a la eliminación del subsistema de máquina virtual DOS (NTVDM), que dependía de la capacidad de usar el modo virtual 8086. No se puede acceder al modo virtual 8086 mientras se ejecuta en modo largo.
  • Implementación completa de la función de protección de página NX (No Execute). Esta función también está implementada en las versiones recientes de Windows de 32 bits cuando se inician en modo PAE.
  • En lugar del descriptor de segmento FS en las versiones x86 de la familia Windows NT , se utiliza el descriptor de segmento GS para apuntar a dos estructuras definidas por el sistema operativo: el Bloque de Información de Hilos (NT_TIB) en modo usuario y la Región de Control del Procesador (KPCR) en modo kernel. Así, por ejemplo, en modo usuario GS:0es la dirección del primer miembro del Bloque de Información de Hilos. Mantener esta convención facilitó la adaptación a x86-64, pero obligó a AMD a conservar la función de los segmentos FS y GS en modo largo, aunque el direccionamiento segmentado en sí mismo no se utiliza realmente en ningún sistema operativo moderno. [ 119 ]
  • Los primeros informes afirmaban que el planificador del sistema operativo no guardaba ni restauraba el estado de la máquina FPU x87 entre cambios de contexto de subprocesos. El comportamiento observado demuestra que esto no es así: el estado x87 se guarda y restaura, excepto para los subprocesos que solo se ejecutan en modo kernel (una limitación que también existe en la versión de 32 bits). La documentación más reciente disponible de Microsoft indica que las instrucciones x87/ MMX / 3DNow! pueden utilizarse en modo largo, pero que están obsoletas y pueden causar problemas de compatibilidad en el futuro. [ 122 ] (3DNow! ya no está disponible en procesadores AMD, con la excepción de las instrucciones PREFETCHy , [ 124 ] que también son compatibles con procesadores Intel a partir de Broadwell ) .PREFETCHW
  • Algunos componentes como Jet Database Engine y Data Access Objects no se portarán a arquitecturas de 64 bits como x86-64 e IA-64. [ 125 ] [ 126 ] [ 127 ]
  • Microsoft Visual Studio puede compilar aplicaciones nativas para la arquitectura x86-64, que solo se ejecuta en Microsoft Windows de 64 bits, o para la arquitectura IA-32 , que se ejecuta como una aplicación de 32 bits en Microsoft Windows de 32 bits o en Microsoft Windows de 64 bits en modo de emulación WoW64 . Las aplicaciones administradas se pueden compilar en modo IA-32, x86-64 o AnyCPU. El software creado en los dos primeros modos se comporta como su código nativo IA-32 o x86-64, respectivamente; sin embargo, al usar el modo AnyCPU, las aplicaciones en versiones de 32 bits de Microsoft Windows se ejecutan como aplicaciones de 32 bits, mientras que se ejecutan como aplicaciones de 64 bits en ediciones de 64 bits de Microsoft Windows.

consolas de videojuegos

La PlayStation 4 y la Xbox One utilizan unidades de procesamiento acelerado (APU) AMD personalizadas basadas en la microarquitectura Jaguar . [ 128 ] [ 129 ] Del mismo modo, la PlayStation 5 , Steam Deck y Xbox Series X/S utilizan APU AMD personalizadas basadas en la microarquitectura Zen 2. [ 130 ] [ 131 ] [ 132 ] El firmware y los juegos están escritos en código x86-64; no se utiliza código x86 de 32 bits heredado.

Convenciones de nomenclatura de la industria

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

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

Muchos sistemas operativos y productos, especialmente aquellos que introdujeron la compatibilidad con x86-64 antes de la entrada de Intel en el mercado, utilizan 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, hacen referencia tanto a AMD64 como a Intel 64 bajo el nombre de arquitectura "amd64".
    • Algunas distribuciones de Linux, como Debian , Ubuntu y Gentoo, hacen referencia tanto a AMD64 como a Intel 64 bajo el nombre de arquitectura "amd64".
    • Las versiones x64 de Microsoft Windows utilizan internamente la denominación AMD64 para designar diversos componentes que utilizan 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 denomina "AMD64", en contraste con "i386" en las versiones de 32 bits. [ 133 ]
    • El comando isalist de Solaris de Sun identifica tanto los sistemas basados ​​en AMD64 como los basados ​​en Intel 64 como "amd64".
    • Kit de desarrollo de Java (JDK): el nombre "amd64" se utiliza en los nombres de los directorios que contienen archivos x86-64.
  • x86_64
    • El kernel de Linux [ 134 ] 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 y Gentoo, 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 ]
    • A diferencia de la mayoría de los demás 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

x86-64/AMD64 fue desarrollado exclusivamente por AMD. Hasta abril de 2021, cuando expiraron las patentes pertinentes, AMD poseía patentes sobre técnicas utilizadas en AMD64; [ 135 ] [ 136 ] [ 137 ] esas patentes debían ser licenciadas a AMD para poder implementar AMD64. Intel celebró un acuerdo de licencia cruzada con AMD, licenciando a AMD sus patentes sobre técnicas x86 existentes y licenciando a AMD sus patentes sobre técnicas utilizadas en x86-64. [ 138 ] En 2009, AMD e Intel resolvieron varios litigios y desacuerdos sobre licencias cruzadas, extendiendo sus acuerdos de licencia cruzada. [ 139 ] [ 140 ] [ 141 ]

Véase también

Notas

  1. Se utilizan varios nombres para el conjunto de instrucciones. Antes del lanzamiento, se usaban x86-64 y x86_64, mientras que tras su lanzamiento AMD lo denominó AMD64. [ 1 ] Intel inicialmente usó el nombre EM64T antes de finalmente optar 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, en particular Sun Microsystems [ 5 ] (ahora Oracle Corporation ) y Microsoft , [ 6 ] usan x64. Lafamilia de sistemas operativos BSD y varias distribuciones de Linux [ 7 ] [ 8 ] usan 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 efectivamente los instaladores InstallShield y Microsoft ACME de 16 bits al sustituirlos silenciosamente por código de 32 bits. [ 12 ]
  1. The Register informó que las muestras del stepping G1 (0F49h) del Pentium 4 estarán disponibles el 17 de octubre y se enviarán en volumen el 14 de noviembre. [ 75 ] Sin embargo, el documento de Intel dice que las muestras estarán disponibles el 9 de septiembre, mientras que el 17 de octubre es la "fecha de primera disponibilidad del material posterior a la conversión", que Intel define como "la fecha proyectada en la que un cliente puede esperar recibir los materiales posteriores a la conversión. ... los clientes deben estar preparados para recibir los materiales posteriores a la conversión en esta fecha". [ 76 ]
  2. 0F47h ​​debutó en la revisión B0 del Pentium D el 21 de octubre, [ 72 ] [ 73 ] pero 0F48h, que también admite LAHF/SAHF, se lanzó el 10 de octubre en el Xeon de doble núcleo . [ 74 ] [ a ]

Referencias

  1. «Preguntas frecuentes sobre Debian AMD64» . WikiDebian . Archivado desde el original el 26 de septiembre de 2019 . Consultado el 3 de mayo de 2012 .
  2. 1 2 3 "Modelo de código x86-64" . Apple. Archivado del original el 2 de junio de 2012. Recuperado el 23 de noviembre de 2012 .
  3. 1 2 3 Manual de comandos generales de Darwin y macOSarch(1)  
  4. 1 2 3 Kevin Van Vechten (9 de agosto de 2006). "Re: Informe de error de Intel XNU" . Lista de correo Darwin-dev . Apple Computer . Archivado del original el 1 de febrero de 2020. Recuperado el 5 de octubre de 2006. El kernel y las herramientas para desarrolladores han estandarizado "x86_64" para el nombre de la arquitectura Mach-O .
  5. 1 2 "Solaris 10 en AMD Opteron" . Oracle. Archivado del original el 25 de julio de 2017. Recuperado el 9 de diciembre de 2010 .
  6. 1 2 "Microsoft 64-Bit Computing" . Microsoft. Archivado del original el 12 de diciembre de 2010. Recuperado el 9 de diciembre de 2010 .
  7. "AMD64 Port" . Debian. Archivado del original el 26 de septiembre de 2019. Recuperado el 23 de noviembre de 2012 .
  8. "Proyecto Gentoo/AMD64" . Proyecto Gentoo. Archivado del original el 3 de junio de 2013. Recuperado el 27 de mayo de 2013 .
  9. "Detalles de implementación de WOW64" . Archivado del original el 13 de abril de 2018. Consultado el 24 de enero de 2016 .
  10. "Clase ProcessorArchitecture" . Archivado del original el 3 de junio de 2017. Recuperado el 24 de enero de 2016 .
  11. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 AMD Corporation (diciembre de 2016). "Volumen 2: Programación del sistema" ( PDF) . Manual del programador de la arquitectura AMD64 . AMD Corporation. Archivado (PDF) del original el 13 de julio de 2018. Recuperado el 25 de marzo de 2017 .
  12. Raymond Chen (31 de octubre de 2013). «Si no existe una capa de emulación de 16 bits en Windows de 64 bits, ¿cómo es posible que se permita la ejecución de ciertos instaladores de 16 bits?» . Archivado del original el 14 de julio de 2021. Consultado el 14 de julio de 2021 .
  13. "Desmitificando el rendimiento de IBM WebSphere Application Server de 64 bits" (PDF) . IBM Corporation. 6 de septiembre de 2007. pág. 14. Archivado (PDF) del original el 25 de enero de 2022. Recuperado 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 el máximo rendimiento del hardware nativo en las plataformas POWER y x86-64. A diferencia de algunas arquitecturas de procesadores 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 características de 64 bits pueden ejecutarse con el máximo rendimiento en la versión de 32 bits de WebSphere que se ejecuta en las plataformas de 64 bits mencionadas anteriormente. 
  14. "Intel y AMD forman un grupo asesor del ecosistema x86 para acelerar la innovación para desarrolladores y clientes" . Intel Corporation . 15 de octubre de 2024. Consultado el 11 de junio de 2026 .
  15. "AMD revela nuevas tecnologías en el Foro de Microprocesadores" (Comunicado de prensa). AMD. 5 de octubre de 1999. Archivado del original el 8 de marzo de 2012. Consultado el 9 de noviembre de 2010 .
  16. "AMD publica la especificación arquitectónica x86-64; permite la migración impulsada por el mercado a la computación de 64 bits" (Comunicado de prensa). AMD. 10 de agosto de 2000. Archivado del original el 8 de marzo de 2012. Consultado el 9 de noviembre de 2010 .
  17. Manual del programador de la arquitectura AMD64 (PDF) . pág. 1. 
  18. ^ Mauerer, W. (2010). Arquitectura de kernel de Linux profesional. John Wiley e hijos.
  19. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, Volumen 3A: Guía de programación del sistema, Parte 1" (PDF) . págs. 4–7 . Archivado (PDF) del original el 16 de mayo de 2011. Recuperado el 10 de julio de 2019 .  
  20. 1 2 "Guía del desarrollador de BIOS y kernel (BKDG) para procesadores AMD de la familia 10h" (PDF) . pág. 24. Archivado (PDF) del original el 18 de abril de 2016. Recuperado el 27 de febrero de 2016. El espacio de direcciones físicas se aumentó a 48 bits. 
  21. "Mitos y realidades sobre Linux de 64 bits" (PDF) . 2 de marzo de 2008. pág. 7. Archivado del original (PDF) el 10 de octubre de 2010. Consultado el 30 de mayo de 2010. El espacio de direcciones físicas se incrementó a 48 bits . 
  22. Shanley, Tom (1998). Arquitectura de sistemas Pentium Pro y Pentium II . Serie Arquitectura de sistemas PC (Segunda edición). Addison-Wesley. pág . 445. ISBN   0-201-30973-4.
  23. Microsoft Corporation. "¿Qué son PAE, NX y SSE2 y por qué mi PC necesita ser compatible con ellos para ejecutar Windows 8 ?" . Archivado del original el 11 de abril de 2013. Consultado el 19 de marzo de 2013 . 
  24. 1 2 3 4 "Límites de memoria para versiones de Windows" . MSDN . Microsoft . 16 de noviembre de 2013. Archivado del original el 6 de enero de 2014. Consultado el 20 de enero de 2014 .
  25. "Paginación de 5 niveles y EPT de 5 niveles" (PDF) . Intel. Mayo de 2017. Archivado (PDF) del original el 5 de diciembre de 2018. Recuperado el 17 de junio de 2017 .
  26. ↑ Patente estadounidense 9858198 , Larry Seiler, "Sistema de páginas de 64 KB que admite operaciones de páginas de 4 KB", publicada el 29 de diciembre de 2016, emitida el 2 de enero de 2018, asignada a Intel Corp. 
  27. "Placas base de la serie Opteron 6100" . Supermicro Corporation. Archivado del original el 3 de junio de 2010. Consultado el 22 de junio de 2010 .
  28. "Supermicro XeonSolutions" . Supermicro Corporation. Archivado del original el 27 de mayo de 2010. Consultado el 20 de junio de 2010 .
  29. "Placas base de la serie Opteron 8000" . Supermicro Corporation. Archivado del original el 27 de mayo de 2010. Consultado el 20 de junio de 2010 .
  30. "Matriz de productos Tyan" . MiTEC International Corporation. Archivado del original el 6 de junio de 2010. Recuperado el 21 de junio de 2010 .
  31. 1 2 "De los archivos de AMI: AMIBIOS 8 y la transición a EFI" . Megatendencias estadounidenses . 8 de septiembre de 2017. Archivado del original el 25 de octubre de 2021. Recuperado el 25 de octubre de 2021 .
  32. "¿Intel continúa con el proyecto Yamhill?" . Neowin . Archivado del original el 5 de junio de 2022 . Consultado el 5 de junio de 2022 .
  33. "Craig Barrett confirma extensiones de direcciones de 64 bits para Xeon y Prescott". The Inquirer. 17 de febrero de 2004. Archivado del original el 7 de octubre de 2012. Consultado el 20 de agosto de 2017 .
  34. ""Un resumen de la informática de 64 bits", de internetnews.com . Archivado del original el 25 de septiembre de 2012. Consultado el 18 de septiembre de 2006 .
  35. Lapedus, Mark (6 de febrero de 2004). "Intel presentará su línea de procesadores de 64 bits 'CT' en el IDF" . EDN . AspenCore Media. Archivado del original el 25 de mayo de 2021. Recuperado el 25 de mayo de 2021 .
  36. ↑ " Arquitectura Intel 64" . Intel . Archivado del original el 29 de junio de 2011. Recuperado el 29 de junio de 2007 . 
  37. "Pentium 4 HT 620(N0)" . cpu-world.com . Archivado del original el 8 de diciembre de 2017. Consultado el 23 de abril de 2018 .
  38. "VIA lanzará una nueva arquitectura de procesador en el primer trimestre de 2008" (se requiere suscripción) . DigiTimes . 25 de julio de 2007. Archivado del original el 3 de diciembre de 2008. Consultado el 25 de julio de 2007 .
  39. Stokes, Jon (23 de enero de 2008). "Isaías revelado: la nueva arquitectura de bajo consumo de VIA" . Ars Technica. Archivado del original el 27 de enero de 2008. Recuperado el 24 de enero de 2008 .
  40. "VIA lanza la familia de procesadores VIA Nano" (Comunicado de prensa). VIA . 29 de mayo de 2008. Archivado del original el 3 de febrero de 2019. Consultado el 25 de mayo de 2017 .
  41. "Introducción a la arquitectura VIA Isaiah" (PDF) . VIA . 23 de enero de 2008. Archivado del original (PDF) el 7 de septiembre de 2008. Consultado el 31 de julio de 2013 .
  42. Weimer, Florian (10 de julio de 2020). "Nuevos niveles de microarquitectura x86-64" . llvm-dev (Lista de correo). Archivado del original el 14 de abril de 2021. Recuperado el 11 de marzo de 2021 .
  43. Weimer, Florian (5 de enero de 2021). "Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level" . Blog de desarrolladores de Red Hat . Archivado del original el 20 de febrero de 2022. Consultado el 22 de marzo de 2022 .
  44. "Información del sistema de bajo nivel de la interfaz binaria de la aplicación System V" . Repositorio psABI x86-64 . 29 de enero de 2021. Archivado del original el 2 de febrero de 2021. Recuperado el 11 de marzo de 2021 a través de GitLab .
  45. "GNU C Library NEWS -- historial de cambios visibles para el usuario" . 1 de febrero de 2021. Consultado el 28 de mayo de 2025 .
  46. Wasson, Scott (23 de marzo de 2005). "Computación de 64 bits en teoría y práctica" . The Tech Report . Archivado del original el 12 de marzo de 2011. Recuperado el 22 de marzo de 2011 .
  47. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2 (2A, 2B y 2C): Referencia del conjunto de instrucciones, A-Z" (PDF) . Intel. Septiembre de 2013. págs. 4-397 . Archivado (PDF) del original el 20 de octubre de 2013. Consultado el 21 de enero de 2014 . 
  48. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2 (2A, 2B y 2C): Referencia del conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2013. págs. 4–400 . Archivado (PDF) del original el 20 de octubre de 2013. Consultado el 21 de enero de 2014 . 
  49. "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de propósito general y del sistema" (PDF) . AMD. Mayo de 2018. pág. 419. Archivado (PDF) del original el 20 de agosto de 2018. Consultado el 2 de agosto de 2018 . 
  50. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2 (2A, 2B y 2C): Referencia del conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2014. págs. 4–412 . Archivado (PDF) del original el 13 de enero de 2015. Consultado el 28 de diciembre de 2014 . 
  51. Andy Lutomirski (23 de abril de 2015). "(PATCH) x86_64, asm: Solución alternativa para el problema del atributo descriptor SS de AMD SYSRET" . x86@kernel.org (Lista de correo).
  52. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2" (PDF) . Intel. Julio de 2025. pág. 1442, ver la asignación de SS.Selector. 
  53. "Manual del programador de la arquitectura AMD64, Volumen 2: Programación del sistema" . AMD. Julio de 2025. pág. 237, "Selectores SYSRET CS y SS". 
  54. AMD, Manual del programador de la arquitectura AMD64, volumen 2 , número de pedido 24593, revisión 3.43, junio de 2025, sección 11.4.4.3 en la página 355
  55. CVE, CVE-2006-1056 , problema de seguridad relacionado conFXSAVEel manejo de punteros de excepción x87 en AMD64.
  56. "Migración entre proveedores" (PDF) . AMD. 2009. pág. 7. Archivado del original (PDF) el 11 de diciembre de 2009. Consultado el 2 de junio de 2025 . 
  57. 1 2 Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 3B (PDF) . Intel. Sección 24.31.1 en la página 452. Número de pedido 253669-087. Archivado (PDF) del original el 16 de mayo de 2025.
  58. Manual del programador de la arquitectura AMD64, volumen 2: Programación del sistema (PDF) . AMD. Marzo de 2024. Sección 8.2.17, página 257. Publicación n.º 24593, revisión 3.42. Archivado (PDF) del original el 5 de abril de 2025.
  59. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 1 (PDF) . Intel. Marzo de 2025. Sección 14.9, página 379. Número de pedido: 253665-087US. Archivado (PDF) del original el 4 de abril de 2025.
  60. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 3B (PDF) . Intel. Diciembre de 2024. Capítulo 24.15, página 426. Número de pedido 253669-086US. Archivado (PDF) del original el 11 de enero de 2025.
  61. Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de propósito general y del sistema (PDF) . AMD. Marzo de 2024. Véase la descripción de la instrucción en la página 283. Número de pedido 24594, revisión 3.36. Archivado (PDF) del original el 29 de diciembre de 2024.PREFETCHW
  62. Hadi Brais (14 de mayo de 2018). "La importancia de la instrucción LFENCE de x86" . Archivado del original el 10 de junio de 2023.
  63. Greg Kroah-Hartman (8 de febrero de 2021). "(PARCHE 5.4 55/65) x86/apic: Agregar serialización adicional para MSR que no se serializan" . linux-kernel@vger.kernel.org (Lista de correo).
  64. "git commit: x86/barrier: No serializar los accesos MSR en AMD" . Repositorio Git del kernel de Linux . 13 de noviembre de 2023.
  65. "PPR para procesadores AMD Family 19h Modelo 61h, Revisión B1" . AMD. pág. 116. Documento n.° 56713, rev. 3.05, 8 de marzo de 2023. Archivado del original el 25 de abril de 2023. 
  66. "Migración en vivo con la tecnología de migración extendida AMD-V™" (PDF) . developer.amd.com . Archivado (PDF) del original el 6 de diciembre de 2022. Consultado el 30 de junio de 2022 .
  67. Maged M. Michael. "Implementaciones prácticas de LL/SC/VL sin bloqueo ni espera utilizando CAS de 64 bits" (PDF) . IBM. Archivado del original (PDF) el 2 de mayo de 2013. Consultado el 21 de enero de 2014 .
  68. darwou (20 de agosto de 2004). "¿Por qué el espacio de direcciones virtuales es de 4 GB?" . The Old New Thing . Microsoft. Archivado del original el 26 de marzo de 2017. Recuperado el 25 de marzo de 2017 .
  69. 1 2 3 "Requisitos del sistema: Windows 8.1" . Archivado del original el 28 de abril de 2014. Recuperado el 27 de abril de 2014. Para instalar un sistema operativo de 64 bits en un PC de 64 bits, su procesador debe ser compatible con CMPXCHG16b, PrefetchW y LAHF/SAHF.
  70. Petkov, Borislav (10 de agosto de 2009). "Re: [ PATCH v2 ] x86: borrar incorrectamente forzado X86_FEATURE_LAHF_LM" ​​. Lista de correo del kernel de Linux . Archivado del original el 11 de enero de 2023 . Recuperado el 30 de junio de 2022 .
  71. "Guía de revisión para procesadores AMD Athlon 64 y AMD Opteron" (PDF) . AMD. Archivado (PDF) del original el 24 de agosto de 2009. Consultado el 18 de julio de 2009 .
  72. "Notificación de cambio de producto 105224 - 01" (PDF) . Intel. Archivado del original (PDF) el 17 de noviembre de 2005.
  73. "Actualización de especificaciones del procesador Intel® Pentium® D de la serie 800 y del procesador Intel® Pentium® Extreme Edition 840" (PDF) . Archivado (PDF) del original el 18 de mayo de 2021. Consultado el 30 de junio de 2022 .
  74. "Intel Xeon 2.8 GHz - NE80551KG0724MM / BX80551KG2800HA" . CPU-World . Archivado del original el 28 de junio de 2020. Consultado el 30 de junio de 2022 .
  75. Smith, Tony (23 de agosto de 2005). "Intel ajusta EM64T para una compatibilidad total con AMD64" . The Register . Archivado del original el 30 de junio de 2022. Consultado el 30 de junio de 2022 .
  76. "Notificación de cambio de producto 105271 – 00" (PDF) . Intel. Archivado del original (PDF) el 17 de noviembre de 2005.
  77. "Notificación de cambio de producto 104101 – 00" (PDF) . Intel. Archivado del original (PDF) el 16 de julio de 2004.
  78. "Hoja de datos del procesador Intel® Xeon™ MP de 64 bits con hasta 8 MB de caché L3" (PDF) . Archivado (PDF) del original el 17 de noviembre de 2022. Consultado el 17 de noviembre de 2022 .
  79. "Justin Boggs en Microsoft PDC 2008" . pág. 5. Archivado del original el 17 de noviembre de 2022. Recuperado el 17 de noviembre de 2022 . 
  80. Waldecker, Brian. "Procesadores multinúcleo AMD Opteron" (PDF) . pág. 13. Archivado (PDF) del original el 13 de diciembre de 2022. Recuperado el 17 de noviembre de 2022 . 
  81. "Hoja de datos del procesador Intel® Xeon® Serie 7500, Volumen 2" (PDF) . Archivado (PDF) del original el 17 de noviembre de 2022. Recuperado el 17 de noviembre de 2022 .
  82. "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32" . Septiembre de 2014. págs. 2-21 . Archivado del original el 14 de mayo de 2019. La arquitectura Intel 64 aumenta el espacio de direcciones lineales para software a 64 bits y admite un espacio de direcciones físicas de hasta 46 bits. 
  83. Logan, Tom (14 de noviembre de 2011). "Análisis del Intel Core i7-3960X" . Archivado del original el 28 de marzo de 2016. Consultado el 1 de julio de 2022 .
  84. Ye, Huaisheng. "Introducción a la paginación de 5 niveles en procesadores Intel Xeon Scalable de tercera generación con Linux" (PDF) . Lenovo. Archivado (PDF) del original el 26 de mayo de 2022. Recuperado el 1 de julio de 2022 .
  85. Kennedy, Patrick (10 de noviembre de 2022). "AMD EPYC Genoa supera a Intel Xeon de forma impresionante" . ServeTheHome . pág. 2. Archivado del original el 17 de noviembre de 2022. Recuperado el 17 de noviembre de 2022 . 
  86. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2 (PDF) . Intel. Diciembre de 2024. Véanse las entradas e instrucciones en las páginas 227 y 229 (nota al pie 1). Número de pedido: 325383-086US. Archivado (PDF) del original el 2 de enero de 2025.BSFBSR
  87. "Cómo la eliminación de la segmentación en el modo largo de AMD64 afectó negativamente a VMware" . Pagetable.com. 9 de noviembre de 2006. Archivado del original el 18 de julio de 2011. Consultado el 2 de mayo de 2010 .
  88. "VMware y la tecnología de virtualización de CPU" (PDF) . VMware. Archivado (PDF) del original el 17 de julio de 2011. Recuperado el 8 de septiembre de 2010 .
  89. Jim Mattson (15 de septiembre de 2022). " [ PARCHE 2/5 ] KVM: svm: No permitir EFER.LMSLE en hardware que no lo admita" . kvm (Lista de correo) . Consultado el 8 de enero de 2026 .
  90. "Estadísticas | TOP500 Sitios de supercomputadoras" . Top500.org. Archivado del original el 19 de marzo de 2014. Recuperado el 22 de marzo de 2014 .
  91. "Generador de sublistas | TOP500 Sitios de supercomputadoras" . Top500.org . Archivado del original el 7 de diciembre de 2018. Recuperado el 6 de diciembre de 2018 .
  92. "Manual de referencia de la arquitectura del conjunto de instrucciones del coprocesador Intel® Xeon Phi™" (PDF) . Intel. 7 de septiembre de 2012. Sección B.2 Limitaciones del modo de 64 bits del coprocesador Intel Xeon Phi. Archivado (PDF) del original el 21 de mayo de 2014. Consultado el 21 de mayo de 2014 .
  93. "Intel impulsa la supercomputadora más rápida del mundo y revela tecnologías de computación de alto rendimiento nuevas y futuras" . Archivado del original el 22 de junio de 2013. Consultado el 21 de junio de 2013 .
  94. "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 ..." Archivado del original el 4 de diciembre de 2008. Recuperado el 3 de mayo de 2009 .
  95. "Port para AMD64" . Archivado del original el 18 de mayo de 2010. Recuperado el 3 de mayo de 2009 .
  96. "DragonFlyBSD: GoogleSoC2008" . Archivado del original el 27 de abril de 2009. Consultado el 3 de mayo de 2009 .
  97. "Summer of Code admitió estudiantes" . Archivado del original el 4 de septiembre de 2010. Consultado el 3 de mayo de 2009 .
  98. "DragonFlyBSD: release24" . Archivado del original el 23 de septiembre de 2009. Consultado el 3 de mayo de 2009 .
  99. "Tutorial para entrar en modo protegido y modo largo desde DOS" . Archivado del original el 22 de febrero de 2017. Consultado el 6 de julio de 2008 .
  100. Andi Kleen (26 de junio de 2001). "Portando Linux a x86-64" . Archivado del original el 10 de septiembre de 2010. Estado: El kernel, el compilador y la cadena de herramientas funcionan. El kernel arranca y funciona en el simulador y se utiliza para portar el espacio de usuario y ejecutar programas.
  101. Andi Kleen. "Página de Andi Kleen" . Archivado del original el 7 de diciembre de 2009. Recuperado el 21 de agosto de 2009. Este fue el documento original que describía la adaptación del kernel de Linux x86-64 cuando x86-64 solo estaba disponible en simuladores.
  102. "Preguntas frecuentes sobre Arch64" . 23 de abril de 2012. Archivado del original el 14 de mayo de 2012. Consultado el 11 de mayo de 2012. Puede usar los paquetes multilib o un entorno chroot i686.
  103. 1 2 Thorsten Leemhuis (13 de septiembre de 2011). "Kernel Log: x32 ABI sortea las desventajas de 64 bits" . www.h-online.com. Archivado del original el 28 de octubre de 2011. Recuperado el 1 de noviembre de 2011 .
  104. 1 2 "x32 - una ABI nativa de 32 bits para x86-64" . linuxplumbersconf.org. Archivado del original el 5 de mayo de 2012. Recuperado el 1 de noviembre de 2011 .
  105. 1 2 "x32-abi" . Google Sites. Archivado del original el 30 de octubre de 2011. Recuperado el 1 de noviembre de 2011 .
  106. "AMD64 Port" . debian.org. Archivado del original el 26 de septiembre de 2019. Consultado el 29 de octubre de 2011 .
  107. "Paginación de 5 niveles" . kernel.org . Consultado el 7 de febrero de 2024 .
  108. "Apple – Notas de la versión 2.4 de Xcode para Mac OS X: Herramientas del compilador" . Apple Inc. 11 de abril de 2007. Archivado del original el 22 de abril de 2009. Consultado el 19 de noviembre de 2012 .
  109. "Apple – Mac OS X Leopard – Tecnología - 64 bits" . Apple Inc. Archivado del original el 12 de enero de 2009. Consultado el 19 de noviembre de 2012 .
  110. "Mac OS X v10.6: Macs que usan el kernel de 64 bits" . Apple Inc. Archivado del original el 31 de agosto de 2009. Consultado el 29 de noviembre de 2012 .
  111. John Siracusa. "Mac OS X 10.6 Snow Leopard: la reseña de Ars Technica" . Ars Technica LLC. Archivado del original el 9 de octubre de 2009. Consultado el 20 de junio de 2010 .
  112. "Tecnología Mac OS X" . Apple Inc. Archivado del original el 28 de marzo de 2011. Consultado el 19 de noviembre de 2012 .
  113. Schmid, J; Thomases, K; Ramey, J; Czekalla, U; Mathieu, B; Abhiram, R (10 de septiembre de 2019). "Así que no tenemos una solución para Catalina... todavía" . Blog de CodeWeavers . Archivado del original el 29 de septiembre de 2021. Recuperado el 29 de septiembre de 2021 .
  114. Thomases, Ken (11 de diciembre de 2019). "win32 en macOS" . WineHQ . Archivado del original el 11 de noviembre de 2020. Recuperado el 29 de septiembre de 2021 .
  115. "Microsoft eleva 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 de Microsoft (Comunicado de prensa). 25 de abril de 2005. Consultado el 29 de enero de 2024 .
  116. "Descripción de las versiones basadas en x64 de Windows Server 2003 y de Windows XP Professional x64 Edition" . Soporte técnico de Microsoft . Archivado del original el 20 de abril de 2016. Consultado el 14 de agosto de 2016 .
  117. "Paquete de herramientas de administración de Windows Server 2003 SP1" . Centro de descargas de Microsoft . Archivado del original el 27 de agosto de 2016. Consultado el 14 de agosto de 2016 .
  118. 1 2 "/LARGEADDRESSAWARE (Manejar direcciones grandes)" . Documentación de Visual Studio 2022 – Referencia del enlazador MSVC – Opciones del enlazador MSVC . Microsoft. Archivado del original el 21 de diciembre de 2022. Recuperado el 21 de diciembre de 2022. La opción /LARGEADDRESSAWARE le indica al enlazador que la aplicación puede manejar direcciones mayores a 2 gigabytes. 
  119. 1 2 3 Matt Pietrek (mayo de 2006). "Todo lo que necesitas saber para empezar a programar sistemas Windows de 64 bits" . Microsoft . Consultado el 18 de abril de 2023 .
  120. Chris St. Amand (enero de 2006). "Making the Move to x64" . Microsoft . Consultado el 18 de abril de 2023 .
  121. "Detrás del límite de direccionamiento de memoria virtual de 44 bits de Windows x86-64" . Archivado del original el 23 de diciembre de 2008. Consultado el 2 de julio de 2009 .
  122. 1 2 "Programación de 64 bits para desarrolladores de juegos" . Consultado el 18 de abril de 2023 .
  123. "Límites de memoria para versiones de Windows y Windows Server" . Microsoft . Consultado el 18 de abril de 2023 .
  124. Kingsley-Hughes, Adrian (23 de agosto de 2010). "AMD se despide del conjunto de instrucciones 3DNow!" . ZDNet . Archivado del original el 8 de enero de 2023. Consultado el 8 de enero de 2023 .
  125. "Directrices generales para la portabilidad" . Guía de programación para Windows de 64 bits. Microsoft Docs . Consultado el 18 de abril de 2023 .
  126. "Historial de controladores para Microsoft SQL Server" . Microsoft Docs . Consultado el 18 de abril de 2023 .
  127. "El proveedor Microsoft OLE DB para Jet y el controlador Jet ODBC solo están disponibles en versiones de 32 bits" . Office Access. Microsoft Docs . KB957570 . Consultado el 18 de abril de 2023 .
  128. Anand Lal Shimpi (21 de mayo de 2013). "Xbox One: Análisis de hardware y comparación con PlayStation 4" . Anandtech. Archivado del original el 7 de junio de 2013. Consultado el 22 de mayo de 2013 .  
  129. "Prueba de especificaciones técnicas: Xbox One vs. PlayStation 4" . Game Informer. 21 de mayo de 2013. Archivado del original el 7 de junio de 2013. Consultado el 22 de mayo de 2013 .  
  130. «Qué esperar del lanzamiento de la 'PlayStation 5' de Sony en noviembre» . The Indian Express . 31 de agosto de 2020. Archivado del original el 19 de septiembre de 2020. Consultado el 14 de septiembre de 2020 .
  131. Cutress, Dr. Ian. "Hot Chips 2020 Blog en vivo: Arquitectura del sistema Microsoft Xbox Series X (18:00 PT)" . Anandtech.com . Archivado del original el 17 de septiembre de 2020. Consultado el 14 de septiembre de 2020 .
  132. Hollister, Sean (12 de noviembre de 2021). "Steam Deck: Cinco cosas importantes que aprendimos de la cumbre de desarrolladores de Valve" . The Verge . Archivado del original el 7 de febrero de 2022. Recuperado el 12 de noviembre de 2021 .
  133. "Campos de arquitectura del procesador" . Archivado del original el 28 de abril de 2015. Recuperado el 4 de septiembre de 2013 .
  134. "Un archivo de ejemplo del código fuente del kernel de Linux 3.7.8 que muestra el uso del término x86_64" . Archivado del original el 23 de septiembre de 2005. Recuperado el 17 de febrero de 2013 .
  135. US 6877084 
  136. US 6889312 
  137. US 6732258 
  138. "Acuerdo de licencia cruzada de patentes entre AMD e Intel" . 1 de enero de 2001. Archivado del original el 21 de junio de 2007. Consultado el 23 de agosto de 2009 .
  139. "Acuerdo de conciliación entre AMD e Intel" . Archivado del original el 7 de julio de 2017. Consultado el 18 de septiembre de 2017 .
  140. Stephen Shankland y Jonathan E. Skillings (12 de noviembre de 2009). «Intel pagará a AMD 1250 millones de dólares en un acuerdo antimonopolio» . CNET. Archivado del original el 8 de noviembre de 2012. Consultado el 24 de abril de 2012 .
  141. Smith, Ryan (12 de noviembre de 2009). "AMD e Intel resuelven sus diferencias: AMD se queda sin fábricas propias" . AnandTech . Archivado del original el 13 de mayo de 2010.
  • Guías para desarrolladores, manuales y documentos ISA de AMD
  • Arquitectura Intel 64
  • x86-64: Ampliación de la arquitectura x86 a 64 bits : charla técnica del arquitecto de AMD64 ( archivo de vídeo ) y segunda charla del mismo ponente ( archivo de vídeo ).
  • Grupo Asesor del Ecosistema x86 , un grupo conjunto entre AMD e Intel.
  • "Protección antivirus mejorada" de AMD
  • Intel optimiza EM64T para una compatibilidad total con AMD64.
  • Analista: Intel realizó ingeniería inversa del AMD64
  • Primer informe sobre las diferencias entre Intel IA32e y AMD64
  • Portación a sistemas GNU/Linux de 64 bits , por Andreas Jaeger en la Cumbre GCC 2003; proporciona una visión general de muchos aspectos prácticos para la transición de 32 a 64 bits.
  • Red de software de Intel: "64 bits"
  • Tutoriales de TurboIRC.COM, incluyendo ejemplos de cómo entrar en modo protegido y modo largo de forma directa desde DOS.
  • Siete pasos para migrar un programa a un sistema de 64 bits.
  • Límites de memoria para las versiones de Windows
Obtenido de " https://en.wikipedia.org/w/index.php?title=X86-64&oldid=1362917326#AMD64 "