X86-64

x86-64 (tamén coñecido como x64, x86_64, AMD64, ou Intel 64) é unha extensión de 64 bits do conxunto de instrucións x86. Foi anunciado en 1999 e dispoñible na familia AMD Opteron no 2003. Presenta dous novos modos operativos: o modo de 64 bits e modo de compatibilidade, xunto cun novo mecanismo de paxinado en catro-niveis.
No modo de 64 bits, x86-64 soporta bastante máis cantidade de memoria virtual e de memoria física en comparación cos seus predecesores de 32 bits, permitindo que os programas utilicen máis memoria para o almacenamento de datos. A arquitectura expande o número de rexistros de propósito xeral de 8 a 16, todos de propósito plenamente xeral, e amplían a súa anchura a 64 bits.
A aritmética de punto flotante é compatible a través de instrucións SSE2 obrigatorias en modo de 64 bits. Aínda que os rexistros FPU e MMX x87 aínda aínda están dispoñibles, son xeralmente substituídos por un conxunto de dezaseis rexistros vectoriais de 128 bits (rexistros de XMM). Cada un destes rexistros vectoriais poden almacenar un ou dous números de punto flotante de doble precisión, ata catro números de punto flotante de precisión simple ou varios formatos enteiros.
En modo de 64 bits, as instrucións son modificadas para soportar operandos e modos de direccionamento de 64 bits.
A arquitectura x86-64 define un modo de compatibilidade que permite que as aplicacións de usuario de 16 e de 32 bits se executen sen ser modificadas xunto coas aplicacións de 64 bits, sempre que o sistema operativo de 64 bits as soporte. Dado que os conxuntos de instrucións x86-32 completos seguen implementados no hardware sen necesidade de emulación, estes executábeis máis antigos poden executarse con pouca ou ningunha penalización de rendemento, mentres que as aplicacións máis novas ou modificadas poden aproveitarse das novas características do deseño do procesador para lograr melloras de rendemento. Ademais, os procesadores compatibles con x86-64 seguen acendéndose en modo real para manter a retrocompatibilidade con versións anteriores do procesador 8086 orixinal, como ocorreu cos procesadores x86 desde a introdución do modo protexido co 80286.
A especificación orixinal, creada por AMD e publicada en 2000, foi implementada por AMD, Intel, e VIA. A microarquitectura AMD K8, nos procesadores Opteron e Athlon 64, foi a primeira en aplicala. Esta foi a primeira aportación á arquitectura x86 deseñada por unha compañía que non fora Intel. Intel viuse obrigada a seguir o exemplo e presentou unha familia NetBurst modificada, que era compatible por software coas especificacións de AMD. VIA Technologies introduciu x86-64 na súa arquitectura VIA Isaiah co VIA Nano.
A arquitectura x86-64 foi rapidamente adoptada por ordenadores de sobremesa e portátiles personais e por servidores, os cales eran xeralmente configurados para 16 GiB (gibibytes) de memoria ou máis. Reemplazou eficazmente a descontinuada arquitectura Itanium (anteriormente IA-64), a cal pretendía, orixinalmente, substituír a arquitectura x86. x86-64 e Itanium non son compatibles no nivel do conxunto de instrucións nativo e os sistemas operativos e as aplicacións compiladas para unha arquitectura non se poden executar na outra de forma nativa. AMD64
Historia
AMD64 (tamén referida por AMD na súa literatura e documentación como "tecnoloxía AMD de 64 bits" e "arquitectura AMD x86-64") foi creado como unha alternativa radicalmente diferente á arquitectura IA-64 deseñada por Intel e Hewlett-Packard, que era incompatible con versións anteriores do IA-32, a versión de 32 bits da arquitectura x86. AMD anunciou AMD64 orixinalmente en 1999, cunha especificación completa dispoñible en agosto do 2000. Como AMD nunca foi convidada a contribuír á arquitectura IA-64 e calquera tipo de licenza parecía improbable, AMD situou dende o principio a arquitectura AMD64 como unha forma evolutiva de engadir capacidades de computación de 64 bits á arquitectura x86 existente, ao mesmo tempo que soportaba o código x86 de 32 bits herdado, en oposición ao enfoque de Intel de crear unha arquitectura de 64 bits completamente nova e incompatible con x86 con IA-64.
O primeiro procesador baseado en AMD64, o Opteron, foi lanzado en abril do 2003.
Implementacións
Os procesadores de AMD que implementan a arquitectura AMD64 inclúen Opteron, Athlon 64, Athlon 64 X2, Athlon 64 FX, Athlon II (seguido de "X2", "X3", ou "X4" para indicar o número de núcleos e os modelos XLT), Turion 64, Turion 64 X2, Sempron (modelos "Palermo" E6 stepping e todos os modelos "Manila"), Phenom (seguido de "X3" ou "X4" para indicar o número de núcleos), Phenom II (seguido de "X2", "X3", "X4" ou "X6" para indicar o número de núcleos), FX, Fusion/APU e Ryzen/Epyc.
Características da arquitectura
A característica principal que define AMD64 é a dispoñibilidade de rexistros de propósito xeral de 64 bits 64 (por exemplo, rax), aritmética de enteiros e operacións lóxicas de 64 bits, e enderezos virtuais de 64 bits. Os deseñadores tomaron a oportunidade de facer tamén outras melloras.
Os cambios notábeis nas extensións de 64 bits inclúen:
Capacidade de enteiros de 64-bit
Todos os rexistros de propósito xeral (GPR) expandíronse de 32 bits a 64 bits, e todas as operacións aritméticas e lóxicas, as operacións de memoria a rexistro e de rexistro a memoria, etc. , poden operar directamente en enteiros de 64 bits. As insercións e extraccións na pila teñen un tamaño predeterminado de 8 bytes, e os punteiros ocupan 8 bytes.
Rexistros adicionais
Ademais de aumentar o tamaño dos rexistros de propósito xeral, o número de rexistros de propósito xeral nomeados aumenta en oito (por exemplo eax, ebx, ecx, edx, esi, edi, esp, ebp) eb x86 a 16 (por exemplo rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, r8, r9, r10, r11, r12, r13, r14, r15). Polo tanto, é posible manter máis variables locais nos rexistros en lugar de na pila e permitir que os rexistros conteñan constantes ás que se accede con frecuencia; os argumentos para subrutinas pequenas e rápidas tamén se poden pasar nos rexistros en maior medida.
Aínda así, AMD64 ten menos rexistros que a maioría de conxuntos de instrucións RISC (por exemplo Power ISA ten 32 GPR; os ARM de 64 bits, o RISC-V I, o SPARC, o Alpha, o MIPS, e o PA-RISC teñen 31) ou máquinas de tipo VLIW como o IA-64 (que ten 128). Non obstante, unha implementación de AMD64 pode ter moitos máis rexistros internos que o número de rexistros arquitectónicos expostos polo conxunto de instrucións (renombrado de rexistros) (Por exemplo, os núcleos AMD Zen teñen 168 rexistros internos físicos de coma flotante de 64 bits e 160 rexistros internos físicos de coma flotante de 128 bits. )
Rexistros XMM (SSE) adicionais
Do mesmo xeito, o número de rexistros XMM de 128 bits (usados para instrucións SIMD de transmisión) tamén se incrementou de 8 a 16.
A pila de rexistros FPU x87 tradicional non está incluída na extensión do tamaño do ficheiro de rexistros no modo de 64 bits, en comparación cos rexistros XMM usados ​​por SSE2, que si se ampliaron. A pila de rexistros x87 non é un simple ficheiro de rexistros, aínda que permite o acceso directo a rexistros individuais mediante operacións de intercambio de baixo custo.
Espazo de enderezos virtuais máis grande
A arquitectura AMD64 define un formato de enderezos virtuais de 64 bits, dos cales os 48 bits de orde inferior úsanse nas implementacións actuais. Isto permite ata 256 TiB (248 bytes) de espazo de enderezos virtuais. A definición da arquitectura permite que este límite se aumente en futuras implementacións ata os 64 bits completos, ampliando o espazo de enderezos virtuais a 16 EiB (264 bytes). Isto compárase con có 4GiB (232 bytes) para o x86.
Isto significa que se pode operar con ficheiros moi grandes mapeando todo o ficheiro no espazo de enderezos do proceso (o que adoita ser moito máis rápido que traballar con chamadas de lectura/escritura de ficheiros), en lugar de ter que mapear rexións do ficheiro dentro e fóra do espazo de enderezos.
Maior espazo de enderezos físicos
A implementación orixinal da arquitectura AMD64 implementaba enderezos físicos de 40 bits e, polo tanto, podía direccionar ata 1 TiB (240 bytes) de RAM. As implementacións actuais da arquitectura AMD64 (a partir da microarquitectura AMD 10h) amplíano a enderezos físicos de 48 bits e, polo tanto, poden direccionar ata 256 TiBs (248 bytes) de RAM. A arquitectura permite estender isto a 52 bits no futuro (limitado polo formato de entrada da táboa de páxinas); isto permitiría o direccionamento de ata 4 PiB de RAM. En comparación, os procesadores x86 de 32 bits están limitados a 64 GiB de RAM no modo de extensión de enderezos físicos (PAE) ou 4 GiB de RAM sen o modo PAE.
Maior espazo de enderezos físicos no modo herdado
Cando funciona no modo herdado a arquitectura AMD64 admite o modo de extensión de enderezos físicos (PAE), do mesmo xeito que a maioría dos procesadores x86 actuais, pero AMD64 estende o PAE de 36 bits a un límite arquitectónico de 52 bits de enderezo físico. Polo tanto, calquera implementación permite o mesmo límite de enderezos físicos que no modo longo.
Acceso relativo a datos do punteiro de instrución
Agora as instrucións poden facer referencia a datos relativos ao punteiro de instrución (rexistro RIP). Isto fai que o código independente da posición, como o que se usa miúdo en bibliotecas compartidas e no código cargado en tempo de execución, sexa máis eficiente.
Instrucións SSE
A arquitectura orixinal de AMD64 adoptou as instrucións SSE e SSE2 de Intel como principais. Estes conxuntos de instrucións proporcionan un suplemento vectorial á FPU escalar x87, para os tipos de datos de precisión simple e dobre. SSE2 tamén ofrece operacións vectoriais enteiras, para tipos de datos que van dende os 8 bits ata os 64 bits de precisión. Isto fai que as capacidades vectoriais da arquitectura estean á par das dos procesadores x86 máis avanzados da súa época. Estas instrucións tamén se poden usar en modo de 32 bits. A proliferación de procesadores de 64 bits fixo que estas capacidades vectoriais sexan omnipresentes nos ordenadores domésticos, o que permite a mellora dos estándares das aplicacións de 32 bits. A edición de 32 bits de Windows 8, por exemplo, require a presenza de instrucións SSE2. As instrucións SSE3 e os conxuntos de instrucións posteriores de Streaming SIMD Extensions non son características estándar da arquitectura.
Bit de non execución
O bit de non execución ou bit NX (bit 63 of the page table entry) permite que o sistema operativo especifique que páxinas do espazo de enderezos virtuais poden conter código executable e cales non. AUn intento de executar código dunha páxina etiquetada como "sen execución" resultará nunha violación de acceso á memoria, similar a un intento de escribir nunha páxina de só lectura. Isto debería dificultar que o código malicioso tome o control do sistema mediante ataques de "sobrecarga do búfer" ou "búfer non comprobado". Unha característica similar está dispoñible nos procesadores x86 desde o 80286 como atributo dos descritores de segmento; non obstante, isto só funciona nun segmento enteiro á vez.
O direccionamento segmentado considerouse durante moito tempo un modo de operación obsoleto e todos os sistemas operativos de PC actuais o ignoran, configurando todos os segmentos nun enderezo base de cero e (na súa implementación de 32 bits) un tamaño de 4 GiB. AMD foi o primeiro provedor da familia x86 en implementar a non execución no modo de direccionamento lineal. A funcionalidade tamén está dispoñible no modo herdado en procesadores AMD64 e en procesadores Intel x86 recentes cando se usa PAE.
Eliminación de funcionalidades antigas
Algunhas funcionalidades de "programación do sistema" da arquitectura x86 non se usaban ou usábanse moi pouco nos sistemas operativos modernos e non están dispoñibles en AMD64 en modo longo (64 bits e compatibilidade) ou existen só de forma limitada. Estas inclúen o direccionamento segmentado (aínda que os segmentos FS e GS se conservan de forma vestixial para o seu uso como punteiros extrabase ás estruturas do sistema operativo), o mecanismo de conmutación de estado da tarefa e o modo virtual 8086. Estas funcionalidades seguen totalmente implementadas no "modo herdado", o que permite a estes procesadores executar sistemas operativos de 32 bits e 16 bits sen modificacións. Algunhas instrucións que resultaron ser pouco útiles non son compatibles no modo de 64 bits, incluíndo gardar/restaurar rexistros de segmento na pila, gardar/restaurar todos os rexistros (PUSHA/POPA), aritmética decimal, instrucións BOUND e INTO e saltos e chamadas "lonxe" con operandos inmediatos.
Detalles do espazo de enderezos virtuais
Enderezos de forma canónica
Aínda que os enderezos virtuais teñen unha anchura de 64 bits no modo de 64 bits, as implementacións actuais (e todos os chips que se sabe que están en fase de planificación) non permiten usar todo o espazo de enderezos virtuais de 264 bytes (16 EiB). Isto sería aproximadamente catro mil millóns de veces o tamaño do espazo de enderezos virtuais en máquinas de 32 bits. A maioría dos sistemas operativos e aplicacións non necesitarán un espazo de enderezos tan grande no futuro previsible, polo que implementar enderezos virtuais tan amplos simplemente aumentaría a complexidade e o custo da tradución de enderezos sen ningún beneficio real. Polo tanto, AMD decidiu que, nas primeiras implementacións da arquitectura, só se usarían os 48 bits menos significativos dun enderezo virtual na tradución de enderezos (consulta na táboa de páxinas).
Ademais, a especificación de AMD require que os 16 bits máis significativos de calquera enderezo virtual (os bits do 48 ao 63) sexan copias do bit 47 (dun xeito semellante á extensión de signo). Se este requisito non se cumpre, o procesador xerará unha excepción. Os enderezos que cumpren con esta regra denomínanse de "forma canónica". Os enderezos de forma canónica van de 0 a 00007FFF'FFFFFFFF e de FFFF8000'00000000 a FFFFFFFF'FFFFFFFF, para un total de 256 TiB de espazo de enderezos virtuais utilizables. Isto segue sendo 65. 536 veces maior que o espazo de enderezos virtual de 4 GiB das máquinas de 32 bits.
Esta característica facilita a posterior escalabilidade a un verdadeiro enderezo de 64 bits. Moitos sistemas operativos (incluíndo, entre outros, a familia Windows NT) toman a metade máis alta do espazo de enderezos (denominada espazo do núcleo) para si mesmos e deixan a metade con enderezos máis baixos (espazo de usuario) para código de aplicación, pilas de modo de usuario, montóns e outras rexións de datos. O deseño de "enderezo canónico" garante que cada implementación compatible con AMD64 teña, en efecto, dúas metades de memoria: a metade inferior comeza en 00000000'00000000 e "crece cara arriba" a medida que hai máis bits de enderezo virtual dispoñibles, mentres que a metade superior se "acopla" á parte superior do espazo de enderezos e crece cara abaixo. Ademais, aplicar a "forma canónica" dos enderezos comprobando os bits de enderezo non utilizados impide o seu uso polo sistema operativo en punteiros etiquetados como bandeiras, marcadores de privilexios, etc. , xa que tal uso podería volverse problemático cando a arquitectura se estende para implementar máis bits de enderezo virtual.
As primeiras versións de Windows para x64 nin sequera usaban os 256 TiB completos; foron restrinxidos a tan só 8 TiB de espazo de usuario e 8 TiB de espazo de kernel. Windows non admitiu o espazo de enderezos completo de 48 bits ata Windows 8. 1, o cal foi lanzado en outubro de 2013.
Estrutura da táboa de páxinas
O modo de direccionamento de 64 bits ("modo longo") é un superconxunto das Extensións de Enderezo Físico (PAE); debido a isto, os tamaños das páxinas poden ser de 4 KiB (212 bytes) ou de 2 MiB (221 bytes). O modo longo tamén admite tamaños de páxina de 1 GiB (230 bytes). En lugar do sistema de táboas de páxinas de tres niveis que usan os sistemas en modo PAE, os sistemas que se executan en modo longo usan catro niveis de táboa de páxinas: a táboa de punteiros de directorio de páxinas de PAE amplíase de catro entradas a 512 e engádese unha táboa adicional de mapa de páxinas de nivel 4 (PML4), que contén 512 entradas en implementacións de 48 bits. Unha xerarquía de mapeo completa de páxinas de 4 KiB para todo o espazo de 48 bits necesitaría algo máis de 512 GiB de memoria (aproximadamente o 0, 195 % do espazo virtual de 256 TiB). Intel implementou un esquema cunha táboa de páxinas de 5 niveis, que permite que os procesadores Intel de 64 bits admitan enderezos de 57 bits e, á súa vez, un espazo de enderezos virtual de 128 PiB. Outras extensións poden permitir un espazo de enderezos virtual completo de 64 bits e memoria física con descritores de táboa de páxinas de 12 bits e desprazamentos de memoria de 16 ou de 21 bits para tamaños de asignación de páxinas de 64 KiB e 2 MiB; a entrada da táboa de páxinas ampliaríase a 128 bits para admitir indicadores de hardware adicionais para o tamaño da páxina e o tamaño do espazo de enderezos virtual.
Límites do sistema operativo
O sistema operativo tamén pode limitar o espazo de enderezos virtuais. Os detalles, se procede, danse na sección "compatibilidade e características do sistema operativo".
Detalles do espazo de enderezos físicos
Os procesadores AMD64 actuais admiten un espazo de enderezos físicos de ata 248 bytes de RAM, ou 256 TiB. Non obstante, a partir de 2020, non se coñecían placas base x86-64 que admitisen 256 TiB de RAM. O sistema operativo pode impoñer límites adicionais á cantidade de RAM que se pode usar ou admitir. Os detalles sobre este punto ofrécense na sección "Compatibilidade e características do sistema operativo" deste artigo.
Modos operativos
A arquitectura ten dous modos principais de operación: modo longo e modo herdado.
Modo longo
O modo longo é o modo de funcionamento principal previsto da arquitectura; é unha combinación do modo nativo de 64 bits do procesador e un modo de compatibilidade combinado de 32 bits e 16 bits. É usado polos sistemas operativos de 64 bits. Nun sistema operativo de 64 bits, os programas de 64 bits execútanse en modo de 64 bits, e as aplicacións en modo protexido de 32 bits e 16 bits (que non precisan usar nin o modo real nin o modo virtual 8086 para executarse en ningún momento) execútanse en modo de compatibilidade. Os programas en modo real e os programas que usan o modo virtual 8086 nalgún momento non se poden executar en modo longo a menos que eses modos sexan emulados por software. Non obstante, estes programas pódense iniciar desde un sistema operativo que se execute en modo longo en procesadores compatibles con VT-x ou AMD-V creando un procesador virtual que se execute no modo desexado.
Dado que o conxunto de instrucións básico é o mesmo, case non hai penalización no rendemento ao executar código x86 en modo protexido. Isto é diferente do IA-64 de Intel, onde as diferenzas no conxunto de instrucións subxacente implican que a execución de código de 32 bits deba facerse en emulación de x86 (facendo que o proceso sexa máis lento) ou cun coprocesador x86 dedicado. Con todo, na plataforma x86-64, moitas aplicacións x86 poderían beneficiarse dunha recompilación de 64 bits, debido aos rexistros adicionais no código de 64 bits e á compatibilidade garantida con FPU baseada en SSE2, que un compilador pode usar para a optimización. Non obstante, as aplicacións que manexan de forma habitual enteiros de máis de 32 bits, como os algoritmos criptográficos, necesitarán unha reescritura do código que manexa os grandes enteiros para aproveitar os rexistros de 64 bits.
Modo herdado
O modo herdado é o modo no que se atopa o procesador cando non está en modo longo. Neste modo, o procesador actúa como un procesador x86 antigo e só se pode executar código de 16 e 32 bits. O modo herdado permite un enderezamento virtual máximo de 32 bits, o que limita o espazo de enderezos virtuais a 4 GiB. Os programas de 64 bits non se poden executar desde o modo herdado.
Modo protexido
O modo protexido convértese nun submodo do modo herdado. É o submodo no que operan os sistemas operativos de 32 bits e os sistemas operativos de modo protexido de 16 bits cando se executan nunha CPU x86-64.
Modo real
O modo real é o modo de funcionamento inicial cando se inicializa o procesador e é un submodo do modo herdado. É retrocompatible cos procesadores orixinais Intel 8086 e Intel 8088. Hoxe en día, o modo real úsano principalmente os cargadores de arranque do sistema operativo, que son necesarios pola arquitectura para configurar os detalles da memoria virtual antes de pasar a modos superiores. Este modo tamén o usa calquera sistema operativo que precise comunicarse co firmware do sistema cunha interface tradicional de estilo BIOS. Intel 64
Intel 64 é a implementación de Intel de x86-64, empregada e implementada en varios procesadores fabricados por Intel.
Historia
Historicamente, AMD desenvolveu e produciu procesadores con conxuntos de instrucións que seguían o patrón dos deseños orixinais de Intel, pero con x86-64, os papeis invertíronse: Intel atopouse na posición de adoptar o ISA que AMD creou como unha extensión da propia liña de procesadores x86 de Intel.
O proxecto de Intel orixinalmente recibiu o nome en clave Yamhill (polo río Yamhill no val de Willamette de Oregón). Despois de varios anos negando a súa existencia, Intel anunciou na IDF (Intel Developer Forum) de febreiro de 2004 que o proxecto estaba realmente en marcha. O presidente de Intel daquela época, Craig Barrett, admitiu que este era un dos seus segredos peor gardados.
O nome de Intel para este conxunto de instrucións cambiou varias veces. O nome utilizado na IDF era CT (presumibelmente para Clackamas Technology, outro nome en clave dun río de Oregón); En cuestión de semanas comezaron a referirse a el como IA-32e (para as extensións IA-32) e en marzo de 2004 deron a coñecer o nome "oficial" EM64T (Extended Memory 64 Technology). A finais de 2006, Intel comezou a usar o nome Intel 64 para a súa implementación, en paralelo ao uso que facía AMD do nome AMD64.
O primeiro procesador en implementar Intel 64 foi o procesador multisocket Xeon co código en clave Nocona, en xuño de 2004. En contraste, os chips Prescott iniciais (febreiro de 2004) non habilitaban esta característica. Posteriormente, Intel comezou a vender Pentium 4 compatibles con Intel 64 usando a revisión E0 do núcleo Prescott, que se venderon no mercado OEM como Pentium 4, modelo F. A revisión E0 tamén engade eXecute Disable (XD) (o nome de Intel para o bit NX) a Intel 64, a Intel 64, e foi incluído no entón actual Xeon, co nome en clave Irwindale. O lanzamento oficial de Intel do Intel 64 (co nome EM64T naquel momento) nos procesadores de escritorio convencionais foi o Prescott-2M con paso N0. O primeiro procesador móbil de Intel que implementaba Intel 64 é a versión Merom do procesador Core 2 procesador, o cal foi lanzado o 27 de xullo de 2006. Ningunha das CPU portátiles anteriores de Intel (Core Duo, Pentium M, Celeron M, Móbil Pentium 4) implementaba Intel 64.
Implementacións
Os procesadores de Intel que implementan a arquitectura Intel64 inclúen os Pentium 4 da serie F/5x1, 506 e 516, os modelos Celeron D 3x1, 3x6, 355, 347, 352, 360, e 365 e todos os Celeron posteriores, todos os modelos de Xeon desde "Nocona", todos os modelos de procesadores Pentium Dueal-Core desde o "Merom-2M", os Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 e N2800, todas as versións dos procesadores Pentium D, Pentium Extreme Edition, Core 2, Core i9, Core i7, Core i5, e Core i3, e os procesadores Xeon Phi da serie 7200.
X86S
X86S foi unha simplificación de x86-64 proposta por primeira vez por Intel en maio de 2023. A nova arquitectura eliminaría a compatibilidade con sistemas operativos de 16 e 32 bits, aínda que os programas de 32 bits seguirían executándose nun sistema operativo de 64 bits. Unha CPU compatible xa non tería o modo herdado, e arrancaría directamente no modo longo de 64 bits. Habería un xeito de cambiar á paxinación de 5 niveis sen pasar polo modo non paxinado. Algunhas características específicas eliminadas incluían: Portas de segmentación
Anel 0 de 32 bits
VT-x xa non emulará esta funcionalidade
Aneis 1 e 2
Acceso ao porto de E/S do anel 3 (IN/OUT); ver E/S mapeada por portos
Porto de E/S de cadea (INS/OUTS)
Modo real (incluíndo o modo real enorme), modo protexido de 16 bits, VM86
Modo de direccionamento de 16 bits
VT-x xa non proporcionará modo sen restricións
Compatibilidade con 8259; o único APIC compatible sería X2APIC
Algúns bits de modo do sistema operativo non utilizados
IPI de inicio (SIPI) de 16 e 32 bits
O borrador da especificación recibiu varias actualizacións, chegando á versión 1. 2 en xuño de 2024. Finalmente foi abandonada en decembro de 2024, tras a formación do Grupo Asesor do Ecosistema x86 do Ecosistema x86 por parte de Intel e AMD.
Extensións de rendemento avanzadas
Advanced Performance Extensions é unha proposta de Intel de 2023 para novas instrucións e 16 rexistros adicionais de propósito xeral. Implementación x86-64 de VIA
Tecnoloxías de VIA presentou a súa primeira implementación da arquitectura x86-64 en 2008 despois de cinco anos de desenvolvemento por parte da súa división de CPU, Centaur Tecnology. Co nome en clave "Isaiah", a arquitectura de 64 bits foi presentada o 24 de xaneiro de 2008, e lanzada o 29 de maio baixo a marca VIA Nano.
O procesador admite unha serie de extensións x86 específicas de VIA deseñadas para aumentar a eficiencia en dispositivos de baixo consumo. Espérase que a arquitectura Isaiah sexa o dobre de rápida en rendemento con enteiros e catro veces máis rápida en rendemento con números de coma flotante que o VIA Esther da xeración anterior a unha velocidade de reloxo equivalente. Tamén se espera que o consumo de enerxía estea á par das CPU VIA da xeración anterior, cunha potencia de deseño térmico que oscila desde os 5 W e os 25 W. Ao ser un deseño completamente novo, a arquitectura Isaiah foi construída con soporte para características como o conxunto de instrucións x86-64 e a virtualización x86, que non estaban dispoñibles nos seus predecesores (a liña VIA C7) mantendo as súas extensións de cifrado. Niveis da microarquitectura
En 2020, a través dunha colaboración entre AMD, Intel, Red Hat, e SUSE, tres niveis de microarquitectura (ou niveis de características) enriba da liña base x86-64 foron definidas: x86-64-v2, x86-64-v3 e x86-64-v4. Estes niveis definen características específicas ás que os programadores poden dirixirse para proporcionar optimizacións en tempo de compilación. As características expostas por cada nivel son as seguintes: Os niveis de funcionalidades da microarquitectura x86-64 tamén se poden atopar como AMD64-v1, AMD64-v2. . ou AMD64_v1. . en configuracións onde se usa a nomenclatura "AMD64". Estes úsanse como sinónimos da nomenclatura x86-64-vX e, polo tanto, son funcionalmente idénticos. Algúns exemplos disto inclúen a documentación da linguaxe Go e a distribución Fedora Linux. Todos os niveis inclúen as funcionalidades que se atopan nos niveis anteriores. As extensións do conxunto de instrucións que non se ocupan da computación de propósito xeral, incluíndo AES-NI e RDRAND, están excluídas dos requisitos de nivel. Na maioría das distribucións Linux x86-64 recentes, todos os niveis de funcionalidades x86-64 compatibles cunha CPU pódense verificar usando o comando: /lib64/ld-linux-x86-64. so. 2 --help (dispoñible desde glibc 2. 33). O resultado será visible ao final da saída do comando: Aquí a CPU non admite o nivel de funcionalidade x86-64-v4, pero x86-64-v3 e x86-64-v2 si, o que significa que esta CPU non admite AVX512 requirido no nivel v4. Diferenzas entre AMD64 e Intel 64
Aínda que son case idénticos, existen algunhas diferenzas entre os dous conxuntos de instrucións na semántica dalgunhas instrucións (ou situacións) de máquina que se usan raramente, que se empregan principalmente para a programación de sistemas. A menos que se indique o contrario a través da configuración -march os compiladores xeralmente producen executables (é dicir, código máquina) que evitan calquera diferenza, polo menos para programas de aplicación comúns. Polo tanto, isto é de interese principalmente para os desenvolvedores de compiladores, sistemas operativos e similares, que deben xestionar instrucións de sistema individuais e especiais.
Implementacións recentes
Intel 64 só permite SYSCALL/SYSRET en modo de 64 bits (non en modo de compatibilidade), e permite SYSENTER/SYSEXIT en ambos os modos. AMD64 carece de SYSENTER/SYSEXIT en ambos submodos do modo longo. Ao volver a un enderezo non canónico usando SYSRET, os procesadores AMD64 executan o xestor de fallos de protección xeral no nivel de privilexio 3, mentres que nos procesadores Intel 64 execútase no nivel de privilexio 0.
A instrución SYSRET cargará un conxunto de valores fixos na parte oculta do rexistro de segmento SS (enderezo base, límite, atributos) en Intel 64, pero deixará a parte oculta de SS sen cambios en AMD64.
En Intel 64, a instrución SYSRET establece incondicionalmente o nivel de privilexio (RPL) do rexistro de segmento SS en 3 (xa que a instrución provoca un retorno ao nivel de privilexio 3). En AMD64, o RPL establécese nos bits correspondentes no STAR MSR (rexistro específico do modelo), é dicir, os bits 49 e 48.
AMD64 require un formato de actualización de microcódigo e MSR de control diferentes, mentres que Intel 64 implementa a actualización do microcódigo sen cambios desde os seus procesadores de só 32 bits.
Intel 64 carece dalgúns MSR que se consideran arquitectónicos en AMD64. Estes inclúen SYSCFG, TOP_MEM e TOP_MEM2.
Intel 64 carece da capacidade de gardar e restaurar unha versión reducida (e, polo tanto, máis rápida) do estado de coma flotante (que implica as instrucións FXSAVE e FXRSTOR).
No modo de 64 bits, as ramas próximas co prefixo 66H (anulación do tamaño do operando) compórtanse de forma diferente. Intel 64 ignora este prefixo: a instrución ten un desprazamento estendido de signo de 32 bits e o punteiro da instrución non está truncado. AMD64 usa un campo de desprazamento de 16 bits na instrución e borra os 48 bits superiores do punteiro da instrución.
En Intel 64 mais non en AMD64, o prefixo REX. W pódese utilizar coas instrucións do punteiro afastado (LFS, LGS, LSS, JMP FAR, CALL FAR) para aumentar o tamaño do seu argumento de punteiro afastado a 80 bits (desprazamento de 64 bits + segmento de 16 bits).
Cando se executa a instrución MOVSXD cun operando de orixe de memoria e un tamaño de operando de 16 bits, accederase ao operando de memoria cunha lectura de 16 bits en Intel 64, pero cunha lectura de 32 bits en AMD64.
Cando se usa a instrución PUSH cun rexistro de segmento e un tamaño de operando de 32 bits en modo herdado/compatibilidade, AMD64 estenderá o rexistro a cero de 2 a 4 bytes e enviará ese valor de 4 bytes á pila. Intel 64 tamén decrementará o punteiro da pila en 4, pero só escribirá 2 bytes, deixando un oco de 2 bytes sen escribir.
Cando se usa a instrución POP cun rexistro de segmento e un tamaño de operando de 32 ou 64 bits, AMD64 realizará unha lectura de memoria da pila tan ancha como o tamaño do operando, mentres que Intel 64 realizará unha lectura de memoria de 16 bits (pero igualmente incrementará o punteiro da pila segundo o tamaño do operando. )
As instrucións FCOMI/FCOMIP/FUCOMI/FUCOMIP (comparacións de punto flotante x87) borrarán os bits OF, SF e AF de EFLAGS en Intel 64, pero deixarán estes bits de sinalización sen modificar en AMD64.
Para as instrucións VMASKMOVPS/VMASKMOVPD/VPMASKMOVD/VPMASKMOVQ (movemento á/desde memoria con máscara AVX/AVX2), Intel 64 garante arquitectonicamente que as instrucións non causarán fallos de memoria (por exemplo, fallos de páxina e fallos de segmentación) para ningún carril con máscara de cero, mentres que AMD64 non ofrece tal garantía.
Se a instrución RDRAND non consegue obter un número aleatorio (como indica EFLAGS. CF 0), Intel garante arquitectonicamente que o rexistro destino estará configurado en 0, porén AMD64 non o fai.
Para as instrucións VPINSRD e VPEXTRD (inserción/extracción de carril vectorial AVX) fóra do modo de 64 bits, AMD64 require que as instrucións estean codificadas con VEX. W
0, mentres que Intel 64 tamén acepta codificacións con VEX. W
1. (No modo de 64 bits, tanto AMD64 como Intel 64 requiren VEX. W 0).
Cando a comprobación de aliñamento está activada (EFLAGS. AC 1), as instrucións AVX con operandos de memoria de 128 bits ou 256 bits desalineados e as instrucións SSE4. 2 PCMP*STR* con operandos de memoria de 128 bits desalineados causarán excepcións #AC (comprobación de aliñamento) en AMD64 pero non en Intel 64.
O código de operación 0F 0D /r co campo Mod do byte ModR/M posto a 11b é un NOP reservado en Intel 64, pero causará #UD (excepción de código de operación non válido) en AMD64.
As garantías de ordenación proporcionadas por algunhas instrucións de ordenación de memoria como LFENCE e MFENCE difiren entre Intel 64 e AMD64:
LFENCE serializa por despacho (o que permite que se use como unha valla de especulación) en Intel 64, pero non está asegurada arquitectonicamente a serialización por despacho en AMD64.
MFENCE é unha instrución de serialización completa (incluíndo a serialización de busca de instrucións) en AMD64 pero non en Intel 64.
As instrucións MOV a CR8 e INVPCID serializan en AMD64 pero non en Intel 64.
A instrución LMSW serializa en Intel 64 pero non en AMD64.
WRMSR ao ICR (Rexistro de Comandos de Interrupción; MSR 830h) x2APIC úsase habitualmente para producir un IPI (interrupción entre procesadores): nas CPU Intel 64 tal IPI pódese reordenar antes dun almacén de memoria máis antigo, pero non nas AMD64.
Nos procesadores AMD64 recentes (Zen 4 e posteriores), o WRMSR para os MSR FS_BASE, GS_BASE e KernelGSBase non se serializa. Nos procesadores Intel 64, así como nos procesadores AMD64 máis antigos, o WRMSR para estes MSR se serializa.
Implementacións máis antigas
Os procesadores AMD64 anteriores á revisión F (que se distingue polo cambio de memoria DDR a DDR2 e os novos sockets AM2, F e S1) de 2006 carecían da instrución CMPXCHG16B, que é unha extensión da instrución CMPXCHG8B presente na maioría dos procesadores posteriores ao 80486. De xeito similar a CMPXCHG8B, CMPXCHG16B permite operacións atómicas en octa-palabras (valores de 128 bits). Isto é útil para algoritmos paralelos que utilizan comparación e intercambio en datos maiores que o tamaño dun punteiro, común nos algoritmos sen bloqueo e espera. Sen CMPXCHG16B, débense usar solucións alternativas, como unha sección crítica ou enfoques alternativos sen bloqueo. A súa ausencia tamén impide que Windows de 64 bits anterior a Windows 8. 1 teña un espazo de enderezos en modo de usuario maior que 8 TiB. A versión de 64 bits de Windows 8. 1 require a instrución.
As primeiras CPU AMD64 e Intel 64 carecían de instrucións LAHF e SAHF en modo de 64 bits. AMD introduciu estas instrucións (tamén en modo de 64 bits) cos seus procesadores de 90 nm (revisión D), comezando con Athlon 64 en outubro de 2004. Intel introduciu as instrucións en outubro de 2005 coa versión 0F47h ​​e revisións posteriores de NetBurst. A versión de 64 bits de Windows 8. 1 require esta funcionalidade.
As primeiras CPU Intel con Intel 64 tamén carecen do bit NX da arquitectura AMD64. Engadiuse no Pentium 4 stepping E0 (0F41h) en outubro de 2004. Esta funcionalidade é necesaria para todas as versións de Windows 8.
As primeiras implementacións de Intel 64 tiñan un enderezamento físico de memoria de 36 bits (64 GiB), mentres que as implementacións orixinais de AMD64 tiñan un enderezamento físico de 40 bits (1 TiB). Intel empregou o enderezo físico de 40 bits por primeira vez en Xeon MP (Potomac), lanzado o 29 de marzo de 2005. A diferenza non é unha diferenza nos ISA visibles polo usuario. En 2007, Opteron, baseado en AMD 10h foi o primeiro en proporcionar un espazo de enderezos físicos de 48 bits (256 TiB). O enderezo físico de Intel 64 ampliouse a 44 bits (16 TiB) en Nehalem-EX en 2010 e a 46 bits (64 TiB) en Sandy Bridge E en 2011. Cos procesadores Xeon Scalable de terceira xeración de Ice Lake, Intel aumentou o enderezo virtual a 57 bits (128 PiB) e o físico a 52 bits (4 PiB) en 2021, o que fixo necesaria unha paxinación de 5 niveis. Ao ano seguinte, AMD64 engadiu o mesmo na cuarta xeración de EPYC (Genoa). As CPU que non son de servidor conservan espazos de enderezos máis pequenos durante máis tempo.
En todos os procesadores AMD64, as instrucións BSF e BSR, cando se lles dá un valor de orixe de 0, deixan o seu rexistro de destino sen modificar. Na maioría dos casos pasa igual nos procesadores Intel 64, agás nalgunhas CPU Intel 64 máis antigas, nas que executar estas instrucións cun tamaño de operando de 32 bits borrará os 32 bits superiores do seu rexistro de destino, mesmo cun valor de orixe de 0 (cos 32 bits inferiores sen cambios).
Os procesadores AMD64 desde Opteron Rev. E e Athlon 64 Rev. D reintroduciron soporte limitado para a segmentación, a través do bit Long Mode Segment Limit Enable (LMSLE), para facilitar a virtualización de invitados de 64 bits. O soporte LMLSE eliminouse no procesador Zen 3.
En todos os procesadores Intel 64, CLFLUSH ordénase con respecto a SFENCE; este tamén é o caso nos procesadores AMD64 máis novos (Zen 1 e posteriores). Nos procesadores AMD64 máis antigos, impoñer a orde na instrución CLFLUSH requiría MFENCE. Adopción
Nos supercomputadores rexistrados por TOP500, a aparición de extensións de 64 bits para a arquitectura x86 permitiu que os procesadores x86 de 64 bits de AMD e Intel substituísen a maioría das arquitecturas de procesadores RISC utilizadas anteriormente nestes sistemas (incluíndo PA-RISC, SPARC, Alpha e outras), así como o x86 de 32 bits, aínda que a propia Intel intentou inicialmente sen éxito substituír o x86 por unha nova arquitectura de 64 bits incompatible no procesador Itanium.
Dende 2023, un supercomputador baseado en HPE EPYC chamado Frontier ocupa o primeiro posto. O primeiro supercomputador baseado en ARM apareceu na lista en 2018 e, nos últimos anos, os coprocesadores de arquitectura sen CPU (GPGPU) tamén xogaron un papel importante no rendemento. Os coprocesadores Xeon Phi "Knights Corner" de Intel, que implementan un subconxunto de x86-64 con algunhas extensións vectoriais, tamén se usan, xunto cos procesadores x86-64, no supercomputador Tianhe-2. Compatibilidade cos sistemas operativos e características
Os seguintes sistema operativos e versións admiten a arquitectura x86-64 en modo longo.
BSD
DragonFly BSD
O traballo preliminar de infraestrutura comezou en febreiro de 2004 para un porto x86-64. O desenvolvemento comezou de novo en xullo de 2007 e continuou durante Google Summer of Code 2008 e SoC 2009. A primeira versión oficial que contiña soporte para x86-64 foi a versión 2. 4.
FreeBSD
FreeBSD engadiu soporte para x86-64 por primeira vez baixo o nome "amd64" como unha arquitectura experimental na versión 5. 1-RELEASE en xuño de 2003. Incluíuse como arquitectura de distribución estándar a partir da versión 5. 2-RELEASE en xaneiro de 2004. Desde entón, FreeBSD designouna como plataforma de nivel 1. A versión 6. 0-RELEASE eliminou algunhas peculiaridades coa execución de executábeis x86 en amd64, e a maioría dos controladores funcionan igual que na arquitectura x86. Actualmente está a traballarse para integrar máis completamente a interface binaria de aplicacións x86 (ABI), do mesmo xeito que funciona actualmente a compatibilidade con ABI de 32 bits de Linux.
NetBSD
O soporte da arquitectura x86-64 comprometeuse por primeira vez á árbore de código fonte de NetBSD o 19 de xuño de 2001. A partir de NetBSD 2. 0, lanzado o 9 de decembro de 2004, NetBSD/amd64 é un porto totalmente integrado e compatible. O código de 32 bits aínda é compatible no modo de 64 bits, cunha capa de compatibilidade do núcleo netbsd-32 para chamadas ao sistema de 32 bits. O bit NX úsase para proporcionar unha pila e un montón non executables con granularidade por páxina (a granularidade do segmento úsase en x86 de 32 bits).
OpenBSD
OpenBSD admite AMD64 desde OpenBSD 3. 5, lanzado o 1 de maio de 2004. A implementación completa na árbore da compatibilidade con AMD64 conseguiuse antes do lanzamento inicial do hardware porque AMD prestara varias máquinas para o hackathon do proxecto ese ano. Os desenvolvedores de OpenBSD adoptaron a plataforma debido á súa compatibilidade co bit NX, o que permitiu unha implementación sinxela da función W^X.
O código para o porto AMD64 de OpenBSD tamén se executa en procesadores Intel 64, que conteñen un uso clonado das extensións AMD64, pero como Intel omitiu o bit NX da táboa de páxinas nos primeiros procesadores Intel 64, non hai capacidade W^X nesas CPU Intel; os procesadores Intel 64 posteriores engadiron o bit NX co nome "bit XD". O multipricesamento simétrico (SMP) funciona no porto AMD64 de OpenBSD, a partir da versión 3. 6 o 1 de novembro de 2004.
DOS
É posible entrar no modo longo en DOS sen un extensor de DOS, pero o usuario debe volver ao modo real para chamar as interrupcións da BIOS ou do DOS.
Tamén pode ser posible entrar no modo longo cun extensor de DOS similar a DOS/4GW, pero é máis complexo xa que x86-64 carece de modo virtual 8086. O propio DOS non é consciente diso e non se deberían esperar beneficios a menos que se execute DOS nunha emulación cun backend de controlador de virtualización axeitado, por exemplo: a interface de almacenamento masivo.
Linux
Linux foi o primeiro núcleo de sistema operativo en executar a arquitectura x86-64 en modo longo, comezando coa versión 2. 4 en 2001 (antes da dispoñibilidade do hardware). Linux tamén ofrece compatibilidade con versións anteriores para executar executábeis de 32 bits. Isto permite que os programas sexan recompilados en modo longo, mantendo o uso de programas de 32 bits. As distribucións actuais de Linux inclúen núcleos e zonas de usuario nativas de x86-64. Algunhas, como Arch Linux, SUSE, Mandriva e Debian, permiten aos usuarios instalar un conxunto de compoñentes e bibliotecas de 32 bits ao instalar desde un medio de distribución de 64 bits, o que permite que a maioría das aplicacións de 32 bits existentes se executen xunto co sistema operativo de 64 bits.
A ABI x32 (Interface Binaria de Aplicacións), introducida en Linux 3. 4, permite que os programas compilados para a ABI x32 se executen no modo de 64 bits de x86-64 usando só punteiros e campos de datos de 32 bits. Aínda que isto limita o programa a un espazo de enderezos virtual de 4 GiB, tamén reduce a pegada de memoria do programa e, nalgúns casos, pode permitir que se execute máis rápido.
Linux de 64 bits permite ata 128 TiB de espazo de enderezos virtual para procesos individuais e pode dirixir aproximadamente 64 TiB de memoria física, suxeito ás limitacións do procesador e do sistema, ou ata 128 PiB (virtuais) e 4 PiB (físicos) coa paxinación de 5 niveis habilitada.
macOS
Mac OS X 10. 4. 7 e versións posteriores de Mac OS X 10. 4 executan ferramentas de liña de comandos de 64 bits usando as bibliotecas POSIX e matemáticas en máquinas baseadas en Intel de 64 bits, do mesmo xeito que todas as versións de Mac OS X 10. 4 e 10. 5 as executan en máquinas PowerPC de 64 bits. Ningunha outra biblioteca ou framework funciona con aplicacións de 64 bits en Mac OS X 10. 4. O kernel e todas as extensións do kernel son só de 32 bits.
Mac OS X 10. 5 admite aplicacións GUI de 64 bits usando Cocoa, Quartz, OpenGL, e X11 en máquinas baseadas en Intel de 64 bits, así como en máquinas PowerPC de 64 bits. Todas as bibliotecas e frameworks que non son GUI tamén admiten aplicacións de 64 bits nesas plataformas. O kernel e todas as extensións do kernel son só de 32 bits.
Mac OS X 10. 6 é a primeira versión de macOS que apoia un 64-mordeu kernel. compatible cun kernel de 64 bits. Non obstante, non todos os ordenadores de 64 bits poden executar o kernel de 64 bits, e non todos os ordenadores de 64 bits que poden executalo o farán por defecto. O kernel de 64 bits, como o de 32 bits, admite aplicacións de 32 bits; ambos os kernels tamén admiten aplicacións de 64 bits. As aplicacións de 32 bits teñen un límite de espazo de enderezos virtual de 4 GiB en calquera dos kernels. O kernel de 64 bits non admite extensións de kernel de 32 bits, e o kernel de 32 bits non admite extensións de kernel de 64 bits.
OS X 10. 8 só inclúe o kernel de 64 bits, pero continúa a admitir aplicacións de 32 bits; con todo, non admite extensións de kernel de 32 bits. macOS 10. 15 inclúe só o kernel de 64 bits e xa non admite aplicacións de 32 bits. Esta eliminación da compatibilidade presentou un problema para Wine (e a versión comercial CrossOver), xa que aínda necesita poder executar aplicacións de Windows de 32 bits. A solución, denominada wine32on64, foi engadir thunks que activan e desactivan a CPU do modo de compatibilidade de 32 bits na aplicación nominalmente de 64 bits.
macOS usa o formato binario universal para empaquetar versións de 32 e 64 bits do código da aplicación e da biblioteca nun único ficheiro; a versión máis axeitada selecciónase automaticamente no momento da carga. En Mac OS X 10. 6, o formato binario universal tamén se usa para o kernel e para aquelas extensións do kernel que admiten kernels de 32 e 64 bits.
Solaris
Solaris 10 e versións posteriores admiten a arquitectura x86-64.
Para Solaris 10, igual que coa arquitectura SPARC, só hai unha imaxe do sistema operativo, que contén un kernel de 32 bits e un de 64 bits; esta está etiquetada como imaxe de DVD-ROM "x64/x86". O comportamento predeterminado é arrincar un kernel de 64 bits, o que permite executar tanto executables de 64 bits como executables de 32 bits novos ou existentes. Tamén se pode seleccionar manualmente un kernel de 32 bits, nese caso só se executarán executables de 32 bits. O comando isainfo pódese usar para determinar se un sistema está a executar un kernel de 64 bits.
Para Solaris 11, só se proporciona o kernel de 64 bits. Non obstante, o kernel de 64 bits admite executables, bibliotecas e chamadas ao sistema de 32 e 64 bits.
Windows
As edicións x64 do cliente e servidor de Microsoft Windows (Windows XP Professional x64 Edition e Windows Server 2003 x64 Edition) lanzáronse en marzo de 2005. Internamente, en realidade son a mesma compilación (5. 2. 3790. 1830 SP1), xa que comparten a mesma base de código fonte e os binarios do sistema operativo, polo que mesmo as actualizacións do sistema se lanzan en paquetes unificados, de xeito moi semellante ás edicións de Windows 2000 Professional e Server para x86. Windows Vista, que tamén ten moitas edicións diferentes, lanzouse en xaneiro de 2007. Windows 7 lanzouse en xullo de 2009. Windows Server 2008 R2 só se vendeu en edicións x64 e Itanium; as versións posteriores de Windows Server só ofrecen unha edición x64.
As versións de Windows para x64 anteriores a Windows 8. 1 e Windows Server 2012 R2 ofrecen o seguinte: 8 TiB de espazo de enderezos virtuais por proceso, accesible tanto desde o modo de usuario como desde o modo de kernel, denominado espazo de enderezos do modo de usuario. Un programa x64 pode usar todo isto, suxeito aos límites de almacenamento de respaldo no sistema e sempre que estea vinculado coa opción "recoñecemento de enderezos grandes", que está presente por defecto. Isto supón un aumento de 4096 veces con respecto ao espazo de enderezos virtuais predeterminado de 2 GiB en modo de usuario que ofrece Windows de 32 bits.
8 TiB de espazo de enderezos virtuais en modo de kernel para o sistema operativo. Do mesmo xeito que co espazo de enderezos do modo de usuario, isto supón un aumento de 4096 veces con respecto ás versións de Windows de 32 bits. O aumento de espazo beneficia principalmente á caché do sistema de ficheiros e aos "montóns" do modo de kernel (grupo non paxinado e grupo paxinado). Windows só usa un total de 16 TiB dos 256 TiB implementados polos procesadores porque os primeiros procesadores AMD64 carecían dunha instrución CMPXCHG16B.
En Windows 8. 1 e Windows Server 2012 R2, os espazos de enderezos virtuais tanto no modo de usuario como no modo de kernel ampliáronse a 128 TiB. Estas versións de Windows non se instalarán en procesadores que carezan da instrución CMPXCHG16B.
As características adicionais seguintes aplican a todas as versións x64 de Windows: Capacidade para executar aplicacións de 32 bits existentes (programas. exe) e bibliotecas de ligazón dinámica (. dlls) usando WoW64 se WoW64 é compatible con esa versión. Ademais, un programa de 32 bits, se estivo vinculado coa opción "recoñecemento de enderezos grandes", pode usar ata 4 GiB de espazo de enderezos virtuais en Windows de 64 bits, en lugar dos 2 GiB predeterminados (3 GiB opcionais coa opción de arranque /3GB e a opción de ligazón "recoñecemento de enderezos grandes") que ofrece Windows de 32 bits. A diferenza do uso da opción de arranque /3GB en x86, isto non reduce o espazo de enderezos virtuais en modo kernel dispoñible para o sistema operativo. Polo tanto, as aplicacións de 32 bits poden beneficiarse da súa execución en Windows x64 mesmo se non se recompilan para x86-64.
Tanto as aplicacións de 32 como as de 64 bits, se non están vinculadas coa opción "recoñecemento de enderezos grandes", están limitadas a 2 GiB de espazo de enderezos virtuais.
Capacidade para usar ata 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) ou 24 TiB (Windows Server 2016/2019) de memoria de acceso aleatorio (RAM) física.
Modelo de datos LLP64: en C/C++, os tipos "int" e "long" teñen 32 bits de ancho, e o "long long" ten 64 bits, mentres que os punteiros e os tipos derivados dos punteiros teñen 64 bits de ancho.
Os controladores de dispositivos do modo kernel deben ser versións de 64 bits; non hai forma de executar executábeis do modo kernel de 32 bits dentro do sistema operativo de 64 bits. Os controladores de dispositivos do modo usuario poden ser de 32 ou 64 bits.
As aplicacións de Windows (Win16) e DOS de 16 bits non se executarán en versións x86-64 de Windows debido á eliminación do subsistema de máquina virtual DOS (NTVDM), que dependía da capacidade de usar o modo virtual 8086. Non se pode entrar no modo virtual 8086 mentres se executa en modo longo.
Implementación completa da función de protección de páxina NX (Sen execución). Isto tamén se implementa en versións recentes de Windows de 32 bits cando se inician en modo PAE.
En lugar do descritor de segmento FS nas versións x86 da familia Windows NT o descritor de segmento GS úsase para apuntar a dúas estruturas definidas polo sistema operativo: o Bloque de información de fíos (NT_TIB ou Thread Information Block) no modo de usuario e a Rexión de control do procesador (KPCR ou Processor Control Region) no modo de kernel. Así, por exemplo, no modo de usuario, GS: 0 é o enderezo do primeiro membro do Bloque de información de fíos. Manter esta convención facilitou o porto x86-64, pero obrigou a AMD a manter a función dos segmentos FS e GS en modo longo, aínda que o enderezamento segmentado per se non é realmente utilizado por ningún sistema operativo moderno.
Os primeiros informes afirmaban que o programador do sistema operativo non gardaba nin restauraba o estado da máquina FPU x87 a través dos cambios de contexto dos fíos. O comportamento observado mostra que este non é o caso: o estado x87 gárdase e restaurase, excepto para os fíos só en modo kernel (unha limitación que tamén existe na versión de 32 bits). A documentación máis recente dispoñible de Microsoft afirma que as instrucións x87/MMX/3DNow! poden usarse en modo longo, pero que están obsoletas e poden causar problemas de compatibilidade no futuro. ((3DNow! xa non está dispoñible nos procesadores AMD, coa excepción das instrucións PREFETCH e PREFETCHW, que tamén son compatibles cos procesadores Intel a partir de Broadwell. )
Algúns compoñentes como Data Access Objects e Jet Database Engine non se portarán a arquitecturas de 64 bits como x86-64 e IA-64.
Microsoft Visual Studio pode compilar aplicacións nativas para dirixirse á arquitectura x86-64, que só se pode executar en Microsoft Windows de 64 bits, ou á arquitectura IA-32, que se pode executar como unha aplicación de 32 bits en Microsoft Windows de 32 bits ou Microsoft Windows de 64 bits no modo de emulación WoW64. As aplicacións xestionadas pódense compilar nos modos IA-32, x86-64 ou AnyCPU. O software creado nos dous primeiros modos compórtase como as súas contrapartes de código nativo IA-32 ou x86-64 respectivamente; Non obstante, ao usar o modo AnyCPU, as aplicacións nas versións de 32 bits de Microsoft Windows execútanse como aplicacións de 32 bits, mentres que nas edicións de 64 bits de Microsoft Windows se executan como aplicacións de 64 bits. Consolas de videoxogos
A PlayStation 4 e a Xbox One utilizan procesadores AMD x86-64 baseados na microarquitectura Jaguar. O firmware e os xogos están escritos en código x86-64; non se utiliza código x86 herdado. A PlayStation 5 e Xbox Series X/S usan procesadores AMD x86-64 baseados na microarquitectura Zen 2. Steam Deck usa unha unidade de procesamento acelerada (APU) AMD x86-64 personalizada baseada na microarquitectura Zen 2. Convencións de nomenclatura na industria
Dado que AMD64 e Intel 64 son substancialmente similares, moitos produtos de software e hardware usan un termo neutro do provedor para indicar a súa compatibilidade con ambas implementacións. A designación orixinal de AMD para esta arquitectura de procesador, "x86-64", aínda se usa para este propósito, do mesmo xeito que a variante "x86_64". Outras empresas, como Microsoft e Sun Microsystems/Oracle Corporation, empregan a contracción "x64" no material de mercadotecnia.
O termo IA-64 refírese ao procesador Itanium e non se debe confundir con x86-64, xa que é un conxunto de instrucións completamente diferente.
Moitos sistemas operativos e produtos, especialmente aqueles que introduciron a compatibilidade con x86-64 antes da entrada de Intel no mercado, empregan o termo "AMD64" ou "amd64" para referirse tanto a AMD64 como a Intel 64. amd64
A maioría dos sistemas BSD como FreeBSD, MidnightBSD, NetBSD e OpenBSD refírense tanto a AMD64 como a Intel 64 co nome de arquitectura "amd64".
Algunhas distribucións de Linux como Debian, Ubuntu e Gentoo Linux refírense tanto a AMD64 como a Intel 64 co nome de arquitectura "amd64".
As versións x64 de Microsoft Windows usan o alcume AMD64 internamente para designar varios compoñentes que usan ou son compatibles con esta arquitectura. Por exemplo, á variable de ambiente PROCESSOR_ARCHITECTURE asígnaselle o valor "AMD64" en oposición a "x86" nas versións de 32 bits, e o directorio do sistema nun CD-ROM de instalación de Windows x64 Edition chámase "AMD64", en contraste con "i386" nas versións de 32 bits.
O comando isalist de Solaris de Sun identifica tanto os sistemas de 64 bits baseados en AMD64 como os de Intel como "amd64".
Kit de Desenvolvemento de Java (JDK): o nome "amd64" úsase nos nomes de directorios que conteñen ficheiros x86-64.
x86_64
O kernel de Linux e a GNU Compiler Collection refírense á arquitectura de 64 bits como "x86_64".
Algunhas distribucións de Linux, como Fedora, openSUSE, Arch Linux e Gentoo Linux refírense a esta arquitectura de 64 bits como "x86_64".
Apple macOS refírese á arquitectura de 64 bits como "x86-64" ou "x86_64", como se ve no comando arch da Terminal e na súa documentación para desenvolvedores.
Rompendo coa maioría dos outros sistemas BSD, DragonFly BSD refírese á arquitectura de 64 bits como "x86_64".
Haiku refírese á arquitectura de 64 bits como "x86_64". Licenzas
x86-64/AMD64 foi desenvolvido exclusivamente por AMD. Ata abril de 2021, cando expiraron as patentes relevantes, AMD posuía patentes sobre as técnicas empregadas en AMD64; esas patentes tiñan que ser licenciadas por AMD para poder implementar AMD64. Intel asinou un acordo de licenza cruzada con AMD, licenciándolle a AMD as súas patentes sobre as técnicas x86 existentes e licenciando AMD as súas patentes sobre as técnicas empregadas en x86-64. En 2009, AMD e Intel resolveron varias demandas e desacordos sobre licenzas cruzadas, ampliando os seus acordos de licenza cruzada.