Anchos de bits de arquitectura de computadora |
---|
Poco |
Solicitud |
Precisión binaria de coma flotante |
Precisión de coma flotante decimal |
|
En la arquitectura de la computadora, los enteros de 64 bits, las direcciones de memoria u otras unidades de datos son aquellos que tienen un ancho de 64 bits (8 octetos ). Además, las arquitecturas de unidad central de procesamiento (CPU) y unidad lógica aritmética (ALU) de 64 bits son aquellas que se basan en registros de procesador, buses de direcciones o buses de datos de ese tamaño. Las microcomputadoras de 64 bits son computadoras en las que los microprocesadores de 64 bits son la norma. Desde la perspectiva del software, la computación de 64 bits significa el uso de código de máquina con direcciones de memoria virtual de 64 bits. Sin embargo, no todos los conjuntos de instrucciones de 64 bits admiten direcciones de memoria virtual completas de 64 bits; x86-64 y ARMv8, por ejemplo, admiten solo 48 bits de dirección virtual, y los 16 bits restantes de la dirección virtual deben ser todos 0 o 1, y varios conjuntos de instrucciones de 64 bits admiten menos de 64 bits de memoria física Dirección.
El término 64 bits describe una generación de computadoras en las que los procesadores de 64 bits son la norma. 64 bits es un tamaño de palabra que define ciertas clases de arquitectura de computadora, buses, memoria y CPU y, por extensión, el software que se ejecuta en ellos. Las CPU de 64 bits se han utilizado en supercomputadoras desde la década de 1970 ( Cray-1, 1975) y en estaciones de trabajo y servidores con conjuntos de instrucciones reducidos (RISC) desde principios de la década de 1990, en particular MIPS R4000, R8000 y R10000, el equipo digital. Corporation (DEC) Alpha, Sun Microsystems UltraSPARC, IBM RS64 y POWER3 y microprocesadores POWER posteriores. En 2003, las CPU de 64 bits se introdujeron en el mercado principal de computadoras personales (antes de 32 bits ) en forma de procesadores x86-64 y el PowerPC G5, y se introdujeron en 2012 en la arquitectura ARM dirigida a teléfonos inteligentes y tabletas, primero vendido el 20 de septiembre de 2013 en el iPhone 5S con el sistema ARMv8-A Apple A7 en un chip (SoC).
Un registro de 64 bits puede contener 2 64 (más de 18 trillones o 1,8 × 10 19) valores diferentes. El rango de valores enteros que se pueden almacenar en 64 bits depende de la representación de enteros utilizada. Con las dos representaciones más comunes, el rango es de 0 a 18,446,744,073,709,551,615 (2 64 - 1) para la representación como un número binario ( sin signo ), y de −9,223,372,036,854,775,808 (−2 63) a 9,223,372,036,854,775,807 (2 63 - 1) para la representación como complemento a dos. Por lo tanto, un procesador con direcciones de memoria de 64 bits puede acceder directamente a 2 64 bytes (16 exbibytes o EiB) de memoria direccionable por bytes.
Sin más calificaciones, una arquitectura de computadora de 64 bits generalmente tiene registros de procesador de direcciones y números enteros que tienen 64 bits de ancho, lo que permite el soporte directo para tipos de datos y direcciones de 64 bits. Sin embargo, una CPU puede tener buses de datos externos o buses de direcciones con diferentes tamaños de los registros, incluso más grandes (el Pentium de 32 bits tenía un bus de datos de 64 bits, por ejemplo).
El término también puede referirse al tamaño de los tipos de datos de bajo nivel, como los números aritméticos de coma flotante de 64 bits.
Los registros del procesador se dividen típicamente en varios grupos: entero, punto flotante, instrucción única-datos múltiples ( SIMD ), control y, a menudo, registros especiales para aritmética de direcciones que pueden tener varios usos y nombres como dirección, índice o base. registros. Sin embargo, en los diseños modernos, estas funciones a menudo se realizan mediante registros enteros de propósito más general. En la mayoría de los procesadores, solo se pueden usar registros de números enteros o de direcciones para direccionar los datos en la memoria; los otros tipos de registros no pueden. Por lo tanto, el tamaño de estos registros normalmente limita la cantidad de memoria directamente direccionable, incluso si hay registros, como los registros de coma flotante, que son más anchos.
La mayoría de los procesadores de 32 y 64 bits de alto rendimiento (algunas excepciones notables son la arquitectura ARM más antigua o integrada (ARM) y las CPU de arquitectura MIPS de 32 bits (MIPS)) tienen hardware de punto flotante integrado, que a menudo, pero no siempre, se basa en en unidades de datos de 64 bits. Por ejemplo, aunque la arquitectura x86 / x87 tiene instrucciones capaces de cargar y almacenar valores de punto flotante de 64 bits (y 32 bits) en la memoria, el formato de registro y datos de punto flotante interno tiene 80 bits de ancho, mientras que el formato de uso general los registros tienen 32 bits de ancho. Por el contrario, la familia Alpha de 64 bits utiliza un formato de registro y datos de punto flotante de 64 bits y registros enteros de 64 bits.
Muchos conjuntos de instrucciones de computadora están diseñados para que un solo registro de números enteros pueda almacenar la dirección de memoria en cualquier lugar de la memoria física o virtual de la computadora. Por lo tanto, el número total de direcciones a la memoria a menudo está determinado por el ancho de estos registros. El IBM System / 360 de la década de 1960 fue una de las primeras computadoras de 32 bits; tenía registros enteros de 32 bits, aunque solo usaba los 24 bits de orden inferior de una palabra para las direcciones, lo que resultaba en un espacio de direcciones de 16 MiB ( 16 × 1024 2 bytes). Las superminicomputadoras de 32 bits, como el DEC VAX, se hicieron comunes en la década de 1970, y los microprocesadores de 32 bits, como la familia Motorola 68000 y los miembros de 32 bits de la familia x86, comenzando con Intel 80386, aparecieron a mediados de la década de 1970. 1980, convirtiendo a 32 bits en algo así como un consenso de facto como un tamaño de registro conveniente.
Un registro de direcciones de 32 bits significaba que se podían hacer referencia a 2 32 direcciones, o 4 GiB de memoria de acceso aleatorio (RAM). Cuando se idearon estas arquitecturas, 4 GiB de memoria estaban tan lejos de las cantidades típicas (4 MiB) en las instalaciones, que se consideró que esto era suficiente margen para el direccionamiento. Se consideró que 4,29 mil millones de direcciones tenían un tamaño apropiado para trabajar por otra razón importante: 4,29 mil millones de enteros son suficientes para asignar referencias únicas a la mayoría de las entidades en aplicaciones como bases de datos.
Algunas arquitecturas de supercomputadoras de las décadas de 1970 y 1980, como Cray-1, usaban registros de hasta 64 bits de ancho y admitían aritmética de enteros de 64 bits, aunque no admitían direccionamiento de 64 bits. A mediados de la década de 1980, el desarrollo de Intel i860 comenzó a culminar en una versión de 1989 (demasiado tarde para Windows NT); el i860 tenía registros enteros de 32 bits y direccionamiento de 32 bits, por lo que no era un procesador completamente de 64 bits, aunque su unidad gráfica admitía aritmética de enteros de 64 bits. Sin embargo, 32 bits siguieron siendo la norma hasta principios de la década de 1990, cuando las continuas reducciones en el costo de la memoria llevaron a instalaciones con cantidades de RAM cercanas a los 4 GiB, y el uso de espacios de memoria virtual que exceden el límite máximo de 4 GiB se volvió deseable para manejar ciertos tipos. de problemas. En respuesta, MIPS y DEC desarrollaron arquitecturas de microprocesador de 64 bits, inicialmente para estaciones de trabajo y servidores de alta gama. A mediados de la década de 1990, HAL Computer Systems, Sun Microsystems, IBM, Silicon Graphics y Hewlett Packard habían desarrollado arquitecturas de 64 bits para sus estaciones de trabajo y sistemas de servidor. Una excepción notable a esta tendencia fueron los mainframes de IBM, que luego utilizaron datos de 32 bits y tamaños de direcciones de 31 bits; los mainframes de IBM no incluían procesadores de 64 bits hasta 2000. Durante la década de 1990, se utilizaron varios microprocesadores de 64 bits de bajo costo en electrónica de consumo y aplicaciones integradas. En particular, la Nintendo 64 y la PlayStation 2 tenían microprocesadores de 64 bits antes de su introducción en las computadoras personales. Las impresoras de alta gama, los equipos de red y las computadoras industriales también usaban microprocesadores de 64 bits, como Quantum Effect Devices R5000. La computación de 64 bits comenzó a llegar al escritorio de la computadora personal a partir de 2003, cuando algunos modelos en las líneas Macintosh de Apple cambiaron a procesadores PowerPC 970 (denominados G5 por Apple), y Advanced Micro Devices (AMD) lanzó su primer 64- procesador de bits x86-64.
En principio, un microprocesador de 64 bits puede direccionar 16 EiB ( 16 × 1024 6 = 2 64 = 18,446,744,073,709,551,616 bytes, o aproximadamente 18,4 exabytes) de memoria. Sin embargo, no todos los conjuntos de instrucciones, y no todos los procesadores que implementan esos conjuntos de instrucciones, admiten un espacio de direcciones físico o virtual completo de 64 bits.
La arquitectura x86-64 (a partir de 2016) permite 48 bits para la memoria virtual y, para cualquier procesador dado, hasta 52 bits para la memoria física. Estos límites permiten tamaños de memoria de 256 TiB ( 256 × 1024 4 bytes) y 4 PiB ( 4 × 1024 5 bytes), respectivamente. Actualmente, una PC no puede contener 4 pebibytes de memoria (debido al tamaño físico de los chips de memoria), pero AMD imaginó servidores grandes, clústeres de memoria compartida y otros usos del espacio de direcciones físicas que podrían acercarse a esto en el futuro previsible. Por lo tanto, la dirección física de 52 bits proporciona un amplio espacio para la expansión sin incurrir en el costo de implementar direcciones físicas completas de 64 bits. De manera similar, el espacio de direcciones virtuales de 48 bits se diseñó para proporcionar 65.536 (2 16) veces el límite de 32 bits de 4 GiB ( 4 × 1024 3 bytes), lo que permite espacio para una expansión posterior y no implica la sobrecarga de la traducción completa de 64 bits. direcciones.
El Power ISA v3.0 permite 64 bits para una dirección efectiva, mapeados a una dirección segmentada con entre 65 y 78 bits permitidos, para memoria virtual y, para cualquier procesador dado, hasta 60 bits para memoria física.
Oracle SPARC Architecture 2015 permite 64 bits para la memoria virtual y, para cualquier procesador dado, entre 40 y 56 bits para la memoria física.
La arquitectura del sistema de memoria virtual ARM AArch64 permite 48 bits para la memoria virtual y, para cualquier procesador dado, de 32 a 48 bits para la memoria física.
La especificación DEC Alpha requiere un mínimo de 43 bits de espacio de direcciones de memoria virtual (8 TiB) para ser admitido, y el hardware debe verificar y detectar si los bits restantes no admitidos son cero (para admitir la compatibilidad en futuros procesadores). Alpha 21064 admitía 43 bits de espacio de direcciones de memoria virtual (8 TiB) y 34 bits de espacio de direcciones de memoria física (16 GiB). Alpha 21164 admitía 43 bits de espacio de direcciones de memoria virtual (8 TiB) y 40 bits de espacio de direcciones de memoria física (1 TiB). Alpha 21264 admitía 43 o 48 bits configurables por el usuario de espacio de direcciones de memoria virtual (8 TiB o 256 TiB) y 44 bits de espacio de direcciones de memoria física (16 TiB).
Un cambio de una arquitectura de 32 bits a una de 64 bits es una alteración fundamental, ya que la mayoría de los sistemas operativos deben modificarse ampliamente para aprovechar la nueva arquitectura, porque ese software tiene que administrar el hardware de direccionamiento de memoria real. También se debe portar otro software para usar las nuevas habilidades; El software anterior de 32 bits puede ser compatible ya sea en virtud de que el conjunto de instrucciones de 64 bits es un superconjunto del conjunto de instrucciones de 32 bits, de modo que los procesadores que admiten el conjunto de instrucciones de 64 bits también pueden ejecutar código para la instrucción de 32 bits. o mediante la emulación de software, o mediante la implementación real de un núcleo de procesador de 32 bits dentro del procesador de 64 bits, como con algunos procesadores Itanium de Intel, que incluían un núcleo de procesador IA-32 para ejecutar aplicaciones x86 de 32 bits. Los sistemas operativos para esas arquitecturas de 64 bits generalmente admiten aplicaciones de 32 y 64 bits.
Una excepción significativa a esto es el AS / 400, software para el cual se compila en una arquitectura de conjunto de instrucciones virtuales (ISA) denominada Interfaz de máquina independiente de la tecnología (TIMI); Luego, el código TIMI se traduce a código de máquina nativo mediante un software de bajo nivel antes de ejecutarse. El software de traducción es todo lo que debe reescribirse para mover el sistema operativo completo y todo el software a una nueva plataforma, como cuando IBM hizo la transición del conjunto de instrucciones nativas para AS / 400 del IMPI de 32/48 bits más antiguo al PowerPC de 64 bits más nuevo. -AS, con nombre en código Amazon. El conjunto de instrucciones IMPI era bastante diferente incluso de PowerPC de 32 bits, por lo que esta transición fue incluso mayor que mover un conjunto de instrucciones dado de 32 a 64 bits.
En hardware de 64 bits con arquitectura x86-64 (AMD64), la mayoría de los sistemas operativos y aplicaciones de 32 bits pueden ejecutarse sin problemas de compatibilidad. Si bien el espacio de direcciones más grande de las arquitecturas de 64 bits facilita el trabajo con grandes conjuntos de datos en aplicaciones como video digital, computación científica y grandes bases de datos, ha habido un debate considerable sobre si ellos o sus modos de compatibilidad de 32 bits serán más rápidos que sistemas de 32 bits de precio comparable para otras tareas.
Un programa Java compilado puede ejecutarse en una máquina virtual Java de 32 o 64 bits sin modificaciones. Las longitudes y precisión de todos los tipos incorporados, tales como char
, short
, int
, long
, float
, y double
, y los tipos que pueden ser utilizados como índices de matriz, son especificados por el estándar y no dependen de la arquitectura subyacente. Los programas Java que se ejecutan en una máquina virtual Java de 64 bits tienen acceso a un espacio de direcciones más grande.
La velocidad no es el único factor a considerar al comparar procesadores de 32 y 64 bits. Las aplicaciones como la multitarea, las pruebas de estrés y la agrupación en clústeres, para la informática de alto rendimiento (HPC), pueden ser más adecuadas para una arquitectura de 64 bits cuando se implementan correctamente. Por esta razón, los clústeres de 64 bits se han implementado ampliamente en grandes organizaciones, como IBM, HP y Microsoft.
Resumen:
Un error común es que las arquitecturas de 64 bits no son mejores que las arquitecturas de 32 bits, a menos que la computadora tenga más de 4 GiB de memoria de acceso aleatorio. Esto no es enteramente verdad:
int a, b, c, d, e; for (a = 0; a lt; 100; a++) { b = a; c = b; d = c; e = d; }
La principal desventaja de las arquitecturas de 64 bits es que, en relación con las arquitecturas de 32 bits, los mismos datos ocupan más espacio en la memoria (debido a punteros más largos y posiblemente otros tipos, y relleno de alineación). Esto aumenta los requisitos de memoria de un proceso determinado y puede tener implicaciones para el uso eficiente de la memoria caché del procesador. Mantener un modelo parcial de 32 bits es una forma de manejar esto y, en general, es razonablemente eficaz. Por ejemplo, el sistema operativo z / OS adopta este enfoque, requiriendo que el código del programa resida en espacios de direcciones de 31 bits (el bit de orden superior no se usa en el cálculo de direcciones en la plataforma de hardware subyacente) mientras que los objetos de datos pueden residir opcionalmente en 64 bits. regiones de bits. No todas estas aplicaciones requieren un gran espacio de direcciones o manipulan elementos de datos de 64 bits, por lo que estas aplicaciones no se benefician de estas características.
Los sistemas de 64 bits basados en x86 a veces carecen de equivalentes de software escrito para arquitecturas de 32 bits. El problema más grave en Microsoft Windows son los controladores de dispositivos incompatibles para hardware obsoleto. La mayor parte del software de aplicación de 32 bits puede ejecutarse en un sistema operativo de 64 bits en un modo de compatibilidad, también denominado modo de emulación, por ejemplo, la tecnología Microsoft WoW64 para IA-64 y AMD64. El entorno del controlador de modo nativo de Windows de 64 bits se ejecuta sobre NTDLL.DLL de 64 bits, que no puede llamar al código del subsistema Win32 de 32 bits (a menudo dispositivos cuya función de hardware real se emula en software de modo de usuario, como Winprinters). Debido a que los controladores de 64 bits para la mayoría de los dispositivos no estuvieron disponibles hasta principios de 2007 (Vista x64), se consideró un desafío usar una versión de 64 bits de Windows. Sin embargo, la tendencia se ha movido desde entonces hacia la computación de 64 bits, más aún a medida que los precios de la memoria cayeron y el uso de más de 4 GiB de RAM aumentó. La mayoría de los fabricantes comenzaron a proporcionar controladores de 32 y 64 bits para dispositivos nuevos, por lo que la falta de disponibilidad de controladores de 64 bits dejó de ser un problema. No se proporcionaron controladores de 64 bits para muchos dispositivos más antiguos, por lo que no se podrían utilizar en sistemas de 64 bits.
La compatibilidad de los controladores era un problema menor con los controladores de código abierto, ya que los de 32 bits podían modificarse para el uso de 64 bits. El soporte para hardware fabricado antes de principios de 2007 fue problemático para las plataformas de código abierto, debido al número relativamente pequeño de usuarios.
Las versiones de 64 bits de Windows no pueden ejecutar software de 16 bits. Sin embargo, la mayoría de las aplicaciones de 32 bits funcionarán bien. Los usuarios de 64 bits se ven obligados a instalar una máquina virtual de un sistema operativo de 16 o 32 bits para ejecutar aplicaciones de 16 bits.
Mac OS X 10.4 "Tiger" y Mac OS X 10.5 "Leopard" solo tenían un kernel de 32 bits, pero pueden ejecutar código en modo de usuario de 64 bits en procesadores de 64 bits. Mac OS X 10.6 "Snow Leopard" tenía núcleos de 32 y 64 bits y, en la mayoría de las Mac, usaba el núcleo de 32 bits incluso en procesadores de 64 bits. Esto permitió que esas Mac admitieran procesos de 64 bits sin dejar de admitir controladores de dispositivos de 32 bits; aunque no los controladores de 64 bits y las ventajas de rendimiento que pueden venir con ellos. Mac OS X 10.7 "Lion" se ejecutó con un kernel de 64 bits en más Mac, y OS X 10.8 "Mountain Lion" y las versiones posteriores de macOS solo tienen un kernel de 64 bits. En sistemas con procesadores de 64 bits, los kernels de macOS de 32 y 64 bits pueden ejecutar código en modo de usuario de 32 bits, y todas las versiones de macOS incluyen versiones de 32 bits de bibliotecas que usarían las aplicaciones de 32 bits, por lo que 32 El software de modo de usuario de -bit para macOS se ejecutará en esos sistemas.
Linux y la mayoría de los otros sistemas operativos similares a Unix, y las cadenas de herramientas C y C ++ para ellos, han admitido procesadores de 64 bits durante muchos años. Muchas aplicaciones y bibliotecas para esas plataformas son software de código abierto, escrito en C y C ++, de modo que si son seguras para 64 bits, pueden compilarse en versiones de 64 bits. Este modelo de distribución basado en fuentes, con énfasis en lanzamientos frecuentes, hace que la disponibilidad de software de aplicación para esos sistemas operativos sea un problema menor.
En los programas de 32 bits, los punteros y los tipos de datos, como los números enteros, generalmente tienen la misma longitud. Esto no es necesariamente cierto en las máquinas de 64 bits. La combinación de tipos de datos en lenguajes de programación como C y sus descendientes como C ++ y Objective-C puede, por tanto, funcionar en implementaciones de 32 bits pero no en implementaciones de 64 bits.
En muchos entornos de programación para lenguajes C y derivados de C en máquinas de 64 bits, las int
variables todavía tienen 32 bits de ancho, pero los enteros largos y los punteros tienen 64 bits de ancho. Estos se describen como que tienen un modelo de datos LP64, que es una abreviatura de "Long, Pointer, 64". Otros modelos son el modelo de datos ILP64 en el que los tres tipos de datos tienen 64 bits de ancho, e incluso el modelo SILP64, donde los enteros cortos también tienen 64 bits de ancho. Sin embargo, en la mayoría de los casos, las modificaciones necesarias son relativamente menores y sencillas, y muchos programas bien escritos pueden simplemente recompilarse para el nuevo entorno sin cambios. Otra alternativa es el modelo LLP64, que mantiene la compatibilidad con el código de 32 bits al dejar ambos y como 32 bits. LL se refiere al tipo de entero largo, que es de al menos 64 bits en todas las plataformas, incluidos los entornos de 32 bits. int
long
También hay sistemas con procesadores de 64 bits que utilizan un modelo de datos ILP32, con la adición de enteros largos de 64 bits; esto también se usa en muchas plataformas con procesadores de 32 bits. Este modelo reduce el tamaño del código y el tamaño de las estructuras de datos que contienen punteros, a costa de un espacio de direcciones mucho más pequeño, una buena opción para algunos sistemas integrados. Para conjuntos de instrucciones como x86 y ARM en los que la versión de 64 bits del conjunto de instrucciones tiene más registros que la versión de 32 bits, proporciona acceso a los registros adicionales sin penalización de espacio. Es común en máquinas RISC de 64 bits, explorado en x86 como x32 ABI y se ha utilizado recientemente en Apple Watch Series 4 y 5.
Modelo de datos | corto (entero) | En t | Entero largo) | largo largo | punteros, size_t | Sistemas operativos de muestra |
---|---|---|---|---|---|---|
ILP32 | dieciséis | 32 | 32 | 64 | 32 | ABI x32 y arm64ilp32 en sistemas Linux; MIPS N32 ABI. |
LLP64 | dieciséis | 32 | 32 | 64 | 64 | Microsoft Windows (x86-64 e IA-64) con Visual C ++ ; y MinGW |
LP64 | dieciséis | 32 | 64 | 64 | 64 | La mayoría de Unix y Unix-como sistemas, por ejemplo, Solaris, Linux, BSD, macOS. Windows al usar Cygwin ; z / OS |
ILP64 | dieciséis | 64 | 64 | 64 | 64 | Puerto de HAL Computer Systems de Solaris al SPARC64 |
SILP64 | 64 | 64 | 64 | 64 | 64 | UNICOS clásico (frente a UNICOS / mp, etc.) |
Hoy en día, muchas plataformas de 64 bits utilizan un modelo LP64 (incluidos Solaris, AIX, HP-UX, Linux, macOS, BSD e IBM z / OS). Microsoft Windows usa un modelo LLP64. La desventaja del modelo LP64 es que almacenar un long
en un int
puede truncar. Por otro lado, convertir un puntero en un long
"funcionará" en LP64. En el modelo LLP64, ocurre lo contrario. Estos no son problemas que afecten al código totalmente compatible con los estándares, pero el código a menudo se escribe con suposiciones implícitas sobre el ancho de los tipos de datos. El código C debería preferir ( u
) en intptr_t
lugar de long
convertir punteros en objetos enteros.
Un modelo de programación es una elección hecha para adaptarse a un compilador dado, y varios pueden coexistir en el mismo sistema operativo. Sin embargo, suele dominar el modelo de programación elegido como modelo principal para la interfaz de programación de aplicaciones (API) del sistema operativo.
Otra consideración es el modelo de datos utilizado para los controladores de dispositivos. Los controladores constituyen la mayor parte del código del sistema operativo en la mayoría de los sistemas operativos modernos (aunque es posible que muchos no se carguen cuando el sistema operativo se está ejecutando). Muchos controladores utilizan mucho los punteros para manipular los datos y, en algunos casos, tienen que cargar punteros de un cierto tamaño en el hardware que admiten para el acceso directo a la memoria (DMA). Por ejemplo, un controlador para un dispositivo PCI de 32 bits que solicita al dispositivo que envíe datos DMA a las áreas superiores de la memoria de una máquina de 64 bits no pudo satisfacer las solicitudes del sistema operativo para cargar datos desde el dispositivo a la memoria por encima de la barrera de los 4 gibibytes., porque los punteros para esas direcciones no encajarían en los registros DMA del dispositivo. Este problema se resuelve haciendo que el sistema operativo tenga en cuenta las restricciones de memoria del dispositivo al generar solicitudes a los controladores para DMA, o utilizando una unidad de administración de memoria de entrada-salida (IOMMU).
En mayo de 2018, las arquitecturas de 64 bits para las que se fabrican procesadores incluyen:
La mayoría de las arquitecturas de 64 bits que se derivan de la misma arquitectura de 32 bits pueden ejecutar código escrito para las versiones de 32 bits de forma nativa, sin penalización del rendimiento. Este tipo de soporte se denomina comúnmente soporte de dos arcos o, más generalmente, soporte de múltiples arcos.