stringtranslate.com

Computación de 64 bits

Volcado hexadecimal de la tabla de secciones en un archivo ejecutable portátil de 64 bits . Una palabra de 64 bits se puede expresar como una secuencia de 16 dígitos hexadecimales .

En arquitectura informática , los números enteros de 64 bits , las direcciones de memoria u otras unidades de datos [a] son ​​aquellos que tienen 64 bits de ancho. Asimismo, las unidades centrales de procesamiento (CPU) y las unidades aritmético-lógicas (ALU) de 64 bits son aquellas que se basan en registros de procesador , buses de direcciones o buses de datos de ese tamaño. Un ordenador que utiliza un procesador de este tipo es un ordenador de 64 bits.

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 de 64 bits completas; x86-64 y AArch64, por ejemplo, admiten solo 48 bits de dirección virtual, y los 16 bits restantes de la dirección virtual deben ser todos ceros (000...) o todos unos (111...), y varios conjuntos de instrucciones de 64 bits admiten menos de 64 bits de dirección de memoria física.

El término 64 bits también describe una generación de computadoras en la 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 ellas. 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 basados ​​en computadoras de conjunto de instrucciones reducido (RISC) desde principios de la década de 1990. En 2003, las CPU de 64 bits se introdujeron en el mercado de PC convencional en forma de procesadores x86-64 y PowerPC G5 .

Un registro de 64 bits puede contener cualquiera de 2 64 (más de 18 quintillones o 1,8 × 10 19 ) valores diferentes. El rango de valores enteros que se pueden almacenar en 64 bits depende de la representación entera utilizada. Con las dos representaciones más comunes, el rango es de 0 a 18.446.744.073.709.551.615 (igual a 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 exabytes o EB) de memoria direccionable por bytes .

Sin más precisiones, una arquitectura informática de 64 bits suele tener registros de direcciones y números enteros de 64 bits de ancho, lo que permite un soporte directo para direcciones y tipos de datos de 64 bits. Sin embargo, una CPU puede tener buses de datos externos o buses de direcciones con tamaños diferentes a los de los registros, incluso más grandes (el Pentium de 32 bits tenía un bus de datos de 64 bits, por ejemplo). [1]

Implicaciones arquitectónicas

Los registros de procesador se dividen típicamente en varios grupos: registros de enteros , de coma flotante , de instrucción única, de datos múltiples (SIMD), de control y, a menudo, registros especiales para aritmética de direcciones que pueden tener varios usos y nombres, como registros de dirección , de índice o de base . Sin embargo, en los diseños modernos, estas funciones suelen ser realizadas por registros de enteros de propósito más general . En la mayoría de los procesadores, solo se pueden usar registros de enteros o de dirección para direccionar 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 las CPU de arquitectura ARM (ARM) más antiguas o integradas y las CPU de arquitectura MIPS (MIPS) de 32 bits ) tienen hardware de punto flotante integrado, que a menudo, pero no siempre, se basa 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 interno de datos y registros de punto flotante tiene 80 bits de ancho, mientras que los registros de propósito general tienen 32 bits de ancho. Por el contrario, la familia Alpha de 64 bits utiliza un formato de datos y registros de punto flotante de 64 bits y registros enteros de 64 bits.

Historia

Muchos conjuntos de instrucciones de ordenador están diseñados para que un único registro entero pueda almacenar la dirección de memoria en cualquier ubicación de la memoria física o virtual del ordenador . Por lo tanto, el número total de direcciones de memoria suele estar determinado por el ancho de estos registros. El IBM System/360 de la década de 1960 fue uno de los primeros ordenadores de 32 bits; tenía registros enteros de 32 bits, aunque solo utilizaba los 24 bits de orden inferior de una palabra para las direcciones, lo que daba como resultado un espacio de direcciones de 16  MiB ( 16 × 1024 2 bytes ). Las superminicomputadoras de 32 bits , como la DEC VAX , se volvieron 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 a partir del Intel 80386 , aparecieron a mediados de la década de 1980, lo que convirtió a los 32 bits en una especie de consenso de facto como un tamaño de registro conveniente.

Un registro de direcciones de 32 bits significaba que se podían referenciar 2 direcciones de 32 bits , o 4  GB de memoria de acceso aleatorio (RAM). Cuando se idearon estas arquitecturas, 4 GB de memoria superaban con creces las cantidades típicas (4 MiB) en las instalaciones, por lo que se consideró que era suficiente margen para el direccionamiento. Se consideró que 4.290 millones de direcciones era un tamaño adecuado para trabajar por otra razón importante: 4.290 millones de números 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 los años 1970 y 1980, como la Cray-1 , [2] 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 los años 1980, comenzó el desarrollo del Intel i860 [3] que culminó con un lanzamiento en 1989; el i860 tenía registros de enteros de 32 bits y direccionamiento de 32 bits, por lo que no era un procesador totalmente de 64 bits, aunque su unidad gráfica admitía aritmética de enteros de 64 bits. [4] Sin embargo, los 32 bits siguieron siendo la norma hasta principios de los años 1990, cuando las continuas reducciones en el costo de la memoria llevaron a instalaciones con cantidades de RAM cercanas a los 4 GB, y el uso de espacios de memoria virtual que excedieran el techo de 4 GB se volvió deseable para manejar ciertos tipos de problemas. En respuesta, MIPS y DEC desarrollaron arquitecturas de microprocesadores 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 sistemas de estaciones de trabajo y servidores. Una notable excepción a esta tendencia fueron los mainframes de IBM, que entonces utilizaban tamaños de datos de 32 bits y direcciones de 31 bits; los mainframes de IBM no incluyeron procesadores de 64 bits hasta el año 2000. Durante la década de 1990, se utilizaron varios microprocesadores de 64 bits de bajo coste en la electrónica de consumo y en aplicaciones integradas. En particular, la Nintendo 64 [5] y la PlayStation 2 tenían microprocesadores de 64 bits antes de su introducción en los ordenadores personales. Las impresoras de alta gama, los equipos de red y los ordenadores industriales también utilizaban microprocesadores de 64 bits, como el Quantum Effect Devices R5000 . [6] La computación de 64 bits comenzó a llegar a los ordenadores de escritorio a partir de 2003, cuando algunos modelos de la línea Macintosh de Apple cambiaron a procesadores PowerPC 970 (denominados G5 por Apple) y Advanced Micro Devices (AMD) lanzó su primer procesador x86-64 de 64 bits . La memoria física acabó alcanzando los límites de 32 bits. En 2023, los ordenadores portátiles estaban equipados habitualmente con 16 GB y los servidores con hasta 64 GB de memoria, superando con creces la capacidad de direcciones de 4 GB de 32 bits.

Línea de tiempo de datos de 64 bits

1961
IBM entrega la supercomputadora IBM 7030 Stretch , que utiliza palabras de datos de 64 bits y palabras de instrucción de 32 o 64 bits.
1974
Control Data Corporation lanza la supercomputadora vectorial CDC Star-100 , que utiliza una arquitectura de palabra de 64 bits (los sistemas CDC anteriores se basaban en una arquitectura de 60 bits).
International Computers Limited lanza la serie ICL 2900 con números enteros en complemento a dos de 32 bits, 64 bits y 128 bits ; coma flotante de 64 bits y 128 bits; decimal empaquetado de 32 bits, 64 bits y 128 bits y un registro acumulador de 128 bits. La arquitectura ha sobrevivido a través de una sucesión de máquinas ICL y Fujitsu. La última es la Fujitsu Supernova, que emula el entorno original en procesadores Intel de 64 bits.
1976
Cray Research entrega la primera supercomputadora Cray-1 , que se basa en una arquitectura de palabra de 64 bits y formará la base para las posteriores supercomputadoras vectoriales Cray.
1983
Elxsi lanza el minisuperordenador paralelo Elxsi 6400. La arquitectura Elxsi tiene registros de datos de 64 bits pero un espacio de direcciones de 32 bits.
1989
Intel presenta el procesador Intel i860 de conjunto de instrucciones reducido (RISC). Comercializado como un "microprocesador de 64 bits", tenía esencialmente una arquitectura de 32 bits, mejorada con una unidad de gráficos 3D capaz de realizar operaciones con números enteros de 64 bits. [7]
1993
Atari presenta la consola de videojuegos Atari Jaguar , que incluye algunas rutas de datos de 64 bits de ancho en su arquitectura. [8]

Línea de tiempo de direcciones de 64 bits

1991
MIPS Computer Systems produce el primer microprocesador de 64 bits, el R4000 , que implementa la arquitectura MIPS III , la tercera revisión de su arquitectura MIPS . [9] La CPU se utiliza en estaciones de trabajo gráficas SGI a partir de IRIS Crimson . Kendall Square Research presenta su primera supercomputadora KSR1, basada en una arquitectura de procesador RISC de 64 bits propietaria que ejecuta OSF/1 .
1992
Digital Equipment Corporation (DEC) presenta la arquitectura Alpha pura de 64 bits que nació del proyecto PRISM . [10]
1994
Intel anuncia sus planes para la arquitectura IA-64 de 64 bits (desarrollada conjuntamente con Hewlett-Packard ) como sucesora de sus procesadores IA- 32 de 32 bits . Se prevé que su lanzamiento se realice entre 1998 y 1999.
1995
Sun lanza un procesador SPARC de 64 bits , el UltraSPARC . [11] HAL Computer Systems, propiedad de Fujitsu, lanza estaciones de trabajo basadas en una CPU de 64 bits, la SPARC64 de primera generación diseñada independientemente por HAL . IBM lanza los microprocesadores A10 y A30, los primeros procesadores PowerPC AS de 64 bits. [12] IBM también lanza una actualización del sistema AS/400 de 64 bits, que puede convertir el sistema operativo, la base de datos y las aplicaciones.
1996
Nintendo presenta la consola de videojuegos Nintendo 64 , construida en torno a una variante de bajo costo del MIPS R4000. HP lanza la primera implementación de su arquitectura PA-RISC 2.0 de 64 bits , el PA-8000 . [13]
1998
IBM lanza la línea POWER3 de procesadores PowerPC/ POWER de 64 bits . [14]
1999
Intel publica el conjunto de instrucciones para la arquitectura IA-64 . AMD revela públicamente su conjunto de extensiones de 64 bits para IA-32, llamadas x86-64 (posteriormente denominadas AMD64).
2000
IBM lanza su primer mainframe z/Architecture de 64 bits , el zSeries z900. z/Architecture es una versión de 64 bits de la arquitectura ESA/390 de 32 bits, un descendiente de la arquitectura System/360 de 32 bits .
2001
Intel lanza su línea de procesadores IA-64, tras reiterados retrasos en su comercialización. Ahora, con la marca Itanium y dirigidos a servidores de gama alta, las ventas no cumplen las expectativas.
2003
AMD presenta sus líneas de procesadores Opteron y Athlon 64 , basadas en su arquitectura AMD64 , que es la primera arquitectura de procesador de 64 bits basada en x86. Apple también comercializa la CPU PowerPC 970 "G5" de 64 bits producida por IBM. Intel mantiene que sus chips Itanium seguirán siendo sus únicos procesadores de 64 bits.
2004
Intel, en reacción al éxito de mercado de AMD, admite que ha estado desarrollando un clon de las extensiones AMD64 llamado IA-32e (posteriormente renombrado EM64T, y luego nuevamente renombrado como Intel 64). Intel distribuye versiones actualizadas de sus familias de procesadores Xeon y Pentium 4 que admiten el nuevo conjunto de instrucciones de 64 bits.
VIA Technologies anuncia el procesador Isaiah de 64 bits. [15]
2006
Sony, IBM y Toshiba comienzan a fabricar el procesador Cell de 64 bits para su uso en PlayStation 3 , servidores, estaciones de trabajo y otros dispositivos. Intel lanzó Core 2 Duo como el primer procesador x86-64 convencional para su línea de dispositivos móviles, de escritorio y estaciones de trabajo. Las líneas de procesadores de extensión de 64 bits anteriores no estaban ampliamente disponibles en el mercado minorista de consumo (la mayoría de los Pentium 4/D de 64 bits eran OEM), Pentium 4, Pentium D y Celeron de 64 bits no se fabricaron en masa hasta finales de 2006 debido a un problema de bajo rendimiento (la mayoría de las obleas de buen rendimiento estaban destinadas a servidores y mainframes, mientras que la línea de procesadores convencionales de 32 bits y 130 nm seguía siendo hasta 2006) y pronto se convirtieron en de gama baja después del debut de Core 2. AMD lanzó su primer procesador móvil de 64 bits y se fabricó en 90 nm.
2011
ARM Holdings anuncia ARMv8-A, la primera versión de 64 bits de la familia de arquitectura ARM . [16]
2012
ARM Holdings anunció sus núcleos Cortex-A53 y Cortex-A57, sus primeros núcleos basados ​​en su arquitectura de 64 bits, el 30 de octubre de 2012. [17] [18]
2013
Apple anuncia el iPhone 5S , con el primer procesador de 64 bits del mundo en un teléfono inteligente, que utiliza su sistema en chip basado en ARMv8-A A7 junto con el iPad Air y el iPad Mini 2 que son los primeros procesadores de 64 bits del mundo en una tableta.
2014
Google anuncia la tableta Nexus 9 , el primer dispositivo Android que funciona con el chip Tegra K1 de 64 bits.
2015
Apple anuncia el iPod Touch (6.ª generación) , el primer iPod Touch que utiliza el sistema en chip basado en ARMv8-A con procesador A8 de 64 bits junto con el Apple TV (4.ª generación), que es el primer procesador de 64 bits del mundo en un Apple TV.
2018
Apple anuncia el Apple Watch Series 4 , el primer Apple Watch que utiliza el sistema en chip basado en ARMv8-A con procesador S4 de 64 bits .
2020
Sinopsis anuncia ARCv3 ISA, la primera versión de 64 bits de ARC ISA . [19]

Cronología del sistema operativo de 64 bits

1985
Cray lanza UNICOS , la primera implementación de 64 bits del sistema operativo Unix . [20]
1993
DEC lanza el sistema operativo tipo Unix DEC OSF/1 AXP de 64 bits (posteriormente renombrado Tru64 UNIX) para sus sistemas basados ​​en la arquitectura Alpha .
1994
Silicon Graphics agrega soporte para el procesador R8000 al sistema operativo IRIX en la versión 6.0.
1995
DEC lanza OpenVMS 7.0, la primera versión completa de 64 bits de OpenVMS para Alpha. Se lanza la primera distribución Linux de 64 bits para la arquitectura Alpha. [21]
1996
Silicon Graphics agrega soporte para los procesadores R4x00 en modo de 64 bits al sistema operativo IRIX en la versión 6.2.
1998
Sun lanza Solaris 7, con soporte completo para UltraSPARC de 64 bits .
2000
IBM lanza z/OS , un sistema operativo de 64 bits descendiente de MVS , para los nuevos mainframes zSeries de 64 bits; Linux de 64 bits en z Systems sigue al lanzamiento de la CPU casi inmediatamente.
2001
Linux se convierte en el primer núcleo de sistema operativo que soporta completamente x86-64 (en un simulador, ya que aún no se habían lanzado procesadores x86-64). [22]
2001
Microsoft lanza Windows XP 64-Bit Edition para la arquitectura IA-64 de Itanium ; podía ejecutar aplicaciones de 32 bits a través de una capa de ejecución. [ cita requerida ]
2003
Apple lanza su sistema operativo Mac OS X 10.3 "Panther", que añade soporte para aritmética nativa de enteros de 64 bits en procesadores PowerPC 970. [23] Varias distribuciones de Linux se lanzan con soporte para AMD64 . FreeBSD se lanza con soporte para AMD64.
2005
El 4 de enero, Microsoft discontinúa Windows XP 64-Bit Edition, ya que no había PCs con procesadores IA-64 disponibles desde septiembre del año anterior, y anuncia que está desarrollando versiones x86-64 de Windows para reemplazarlo. [24] El 31 de enero, Sun lanza Solaris 10 con soporte para procesadores AMD64 y EM64T. El 29 de abril, Apple lanza Mac OS X 10.4 "Tiger", que proporciona soporte limitado para aplicaciones de línea de comandos de 64 bits en máquinas con procesadores PowerPC 970; versiones posteriores para Mac basadas en Intel admitían aplicaciones de línea de comandos de 64 bits en Mac con procesadores EM64T. El 30 de abril, Microsoft lanza Windows XP Professional x64 Edition y Windows Server 2003 x64 Edition para procesadores AMD64 y EM64T. [25]
2006
Microsoft lanza Windows Vista , que incluye una versión de 64 bits para procesadores AMD64/EM64T que conserva la compatibilidad con 32 bits. En la versión de 64 bits, todas las aplicaciones y componentes de Windows son de 64 bits, aunque muchos también tienen sus versiones de 32 bits incluidas para compatibilidad con complementos . [ cita requerida ]
2007
Apple lanza Mac OS X 10.5 "Leopard", que soporta completamente aplicaciones de 64 bits en máquinas con procesadores PowerPC 970 o EM64T. [ cita requerida ]
2009
Microsoft lanza Windows 7 , que, al igual que Windows Vista, incluye una versión completa de 64 bits para procesadores AMD64/Intel 64; la mayoría de las computadoras nuevas se cargan de manera predeterminada con una versión de 64 bits. Microsoft también lanza Windows Server 2008 R2 , que es el primer sistema operativo para servidores de solo 64 bits. Apple lanza Mac OS X 10.6 , "Snow Leopard", que se entrega con un núcleo de 64 bits para procesadores AMD64/Intel64, aunque solo ciertos modelos recientes de computadoras Apple ejecutarán el núcleo de 64 bits de manera predeterminada. La mayoría de las aplicaciones incluidas con Mac OS X 10.6 ahora también son de 64 bits. [23]
2011
Apple lanza Mac OS X 10.7 , "Lion", que ejecuta el núcleo de 64 bits de forma predeterminada en las máquinas compatibles. Las máquinas más antiguas que no pueden ejecutar el núcleo de 64 bits ejecutan el núcleo de 32 bits, pero, al igual que con las versiones anteriores, aún pueden ejecutar aplicaciones de 64 bits; Lion no es compatible con máquinas con procesadores de 32 bits. Casi todas las aplicaciones incluidas con Mac OS X 10.7 ahora también son de 64 bits, incluido iTunes. [ cita requerida ]
2012
Microsoft lanza Windows 8 , que admite UEFI Clase 3 ( UEFI sin CSM) y Arranque seguro . [26]
2013
Apple lanza iOS 7 , que, en máquinas con procesadores AArch64, tiene un núcleo de 64 bits que admite aplicaciones de 64 bits. [ cita requerida ]
2014
Google lanza Android Lollipop , la primera versión del sistema operativo Android con soporte para procesadores de 64 bits. [ cita requerida ]
2017
Apple lanza iOS 11 , compatible únicamente con máquinas con procesadores AArch64. Tiene un núcleo de 64 bits que solo admite aplicaciones de 64 bits. Las aplicaciones de 32 bits ya no son compatibles. [ cita requerida ]
2018
Apple lanza watchOS 5 , la primera versión de watchOS que incorpora soporte para 64 bits. [ cita requerida ]
2019
Apple lanza macOS 10.15 "Catalina", eliminando el soporte para aplicaciones Intel de 32 bits. [ cita requerida ]
2021
Microsoft lanzará Windows 11 el 5 de octubre, que solo es compatible con sistemas de 64 bits y deja de ser compatible con sistemas IA-32 y AArch32. [ cita requerida ]
2022
Google lanza el Pixel 7 , que deja de admitir aplicaciones de 32 bits. Apple lanza watchOS 9 , la primera versión de watchOS que se ejecuta exclusivamente en los modelos de Apple Watch con procesadores de 64 bits (incluidos Apple Watch Series 4 o más nuevos, Apple Watch SE (1.ª generación) o más nuevos y el recién presentado Apple Watch Ultra ), y deja de admitir Apple Watch Series 3 como el último modelo de Apple Watch con procesador de 32 bits. [ cita requerida ]
2024
Microsoft lanza Windows 11, versión 24H2 , cuyas versiones ARM de Windows dejan de ofrecer soporte para aplicaciones ARM de 32 bits.

Límites de los procesadores

En principio, un microprocesador de 64 bits puede direccionar 16 EB ( 16 × 1024 6 = 2 64 = 18 446 744 073 709 551 616 bytes ) 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ísicas o virtuales completo de 64 bits.

La arquitectura x86-64 (a partir de 2016 ) permite 48 bits para memoria virtual y, para cualquier procesador dado, hasta 52 bits para memoria física. [27] [28] Estos límites permiten tamaños de memoria de 256  TB ( 256 × 1024 4 bytes ) y 4  PB ( 4 × 1024 5 bytes ), respectivamente. Una PC actualmente no puede contener 4  petabytes 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 fue diseñado para proporcionar 65.536 (2 16 ) veces el límite de 32 bits de 4 GB ( 4 × 1024 3 bytes ), lo que deja lugar para una expansión posterior y no genera ninguna sobrecarga por traducir direcciones completas de 64 bits.

Power ISA v3.0 permite 64 bits para una dirección efectiva, asignada 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. [29]

La arquitectura Oracle SPARC 2015 permite 64 bits para memoria virtual y, para cualquier procesador dado, entre 40 y 56 bits para memoria física. [30]

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. [31]

La especificación DEC Alpha requiere que se admita un mínimo de 43 bits de espacio de dirección de memoria virtual (8 TB), y el hardware debe verificar y detectar si los bits restantes no admitidos son cero (para admitir la compatibilidad en procesadores futuros). Alpha 21064 admitía 43 bits de espacio de dirección de memoria virtual (8 TB) y 34 bits de espacio de dirección de memoria física (16 GB). Alpha 21164 admitía 43 bits de espacio de dirección de memoria virtual (8 TB) y 40 bits de espacio de dirección de memoria física (1 TB). Alpha 21264 admitía 43 o 48 bits de espacio de dirección de memoria virtual configurables por el usuario (8 TB o 256 TB) y 44 bits de espacio de dirección de memoria física (16 TB).

Aplicaciones de 64 bits

32 bits frente a 64 bits

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 gestionar el hardware de direccionamiento de memoria real. [32] También se debe portar otro software para utilizar las nuevas capacidades; el software de 32 bits más antiguo 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 el conjunto de instrucciones de 32 bits, o mediante emulación de software , o por 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 tanto de 32 bits como de 64 bits. [33]

Una excepción significativa a esto es el IBM AS/400 , cuyo software se compila en una arquitectura de conjunto de instrucciones virtuales (ISA) llamada Interfaz de máquina independiente de la tecnología (TIMI); el código TIMI se traduce luego a código de máquina nativo mediante 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 transfirió el conjunto de instrucciones nativo para AS/400 del antiguo IMPI de 32/48 bits al más nuevo PowerPC-AS de 64 bits , con nombre en código Amazon . El conjunto de instrucciones IMPI era bastante diferente incluso del PowerPC de 32 bits, por lo que esta transición fue incluso más importante 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 mayor espacio de direcciones de las arquitecturas de 64 bits facilita el trabajo con grandes conjuntos de datos en aplicaciones como video digital , computación científica y bases de datos de gran tamaño , ha habido un debate considerable sobre si estas arquitecturas o sus modos de compatibilidad de 32 bits serán más rápidos que los 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 la precisión de todos los tipos integrados, como char, short, int, long, floaty double, y los tipos que se pueden utilizar como índices de matriz, están especificadas 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. [34]

La velocidad no es el único factor que se debe tener en cuenta al comparar procesadores de 32 y 64 bits. Aplicaciones como multitarea, pruebas de estrés y agrupamiento (para computación de alto rendimiento , HPC) pueden ser más adecuadas para una arquitectura de 64 bits si se implementan de manera adecuada. Por este motivo, los clústeres de 64 bits se han implementado ampliamente en grandes organizaciones, como IBM, HP y Microsoft.

Resumen:

Pros y contras

Un error común es pensar que las arquitecturas de 64 bits no son mejores que las de 32 bits a menos que la computadora tenga más de 4 GB de memoria de acceso aleatorio . [35] Esto no es del todo cierto:

Ejemplo en C :
int a , b , c , d , e ; para ( a = 0 ; a < 100 ; a ++ ) { b = a ; c = b ; d = c ; e = d ; }                         
Este código primero crea 5 valores: a, b, c, d y e; y luego los coloca en un bucle. Durante el bucle, este código cambia el valor de b por el valor de a, el valor de c por el valor de b, el valor de d por el valor de c y el valor de e por el valor de d. Esto tiene el mismo efecto que cambiar todos los valores a a.
Si un procesador puede mantener sólo dos o tres valores o variables en registros, necesitaría mover algunos valores entre la memoria y los registros para poder procesar también las variables d y e; este es un proceso que requiere muchos ciclos de CPU. Un procesador que puede mantener todos los valores y variables en registros puede recorrerlos sin necesidad de mover datos entre registros y memoria en cada iteración. Este comportamiento se puede comparar fácilmente con la memoria virtual, aunque cualquier efecto depende del compilador.

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 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 utiliza en el cálculo de direcciones en la plataforma de hardware subyacente), mientras que los objetos de datos pueden residir opcionalmente en regiones de 64 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.

Disponibilidad del software

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ía 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, Microsoft WoW64 Technology para IA-64 y AMD64. El entorno del controlador Windows Native Mode [38] 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 estaban disponibles hasta principios de 2007 (Vista x64), usar una versión de 64 bits de Windows se consideró un desafío. Sin embargo, desde entonces la tendencia se ha movido hacia la computación de 64 bits, más aún a medida que bajaron los precios de la memoria y aumentó el uso de más de 4 GB de RAM. La mayoría de los fabricantes comenzaron a proporcionar controladores de 32 y 64 bits para los nuevos dispositivos, por lo que la falta de disponibilidad de controladores de 64 bits dejó de ser un problema. No se proporcionaban controladores de 64 bits para muchos dispositivos más antiguos, que en consecuencia no podían usarse en sistemas de 64 bits.

La compatibilidad de los controladores no era tan problemática con los controladores de código abierto, ya que los de 32 bits se podían modificar para su uso en 64 bits. La compatibilidad con el hardware fabricado antes de principios de 2007 era problemática para las plataformas de código abierto, [ cita requerida ] 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 o utilizar una de las alternativas para NTVDM . [39]

Mac OS X 10.4 "Tiger" y Mac OS X 10.5 "Leopard" tenían solo un núcleo de 32 bits, pero pueden ejecutar código de 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 Macs admitieran procesos de 64 bits y, al mismo tiempo, admitieran controladores de dispositivos de 32 bits; aunque no controladores de 64 bits y las ventajas de rendimiento que pueden venir con ellos. Mac OS X 10.7 "Lion" se ejecutaba con un núcleo de 64 bits en más Mac, y OS X 10.8 "Mountain Lion" y versiones posteriores de macOS solo tienen un núcleo de 64 bits. En sistemas con procesadores de 64 bits, tanto el kernel de macOS de 32 bits como el de 64 bits pueden ejecutar código de modo de usuario de 32 bits, y todas las versiones de macOS hasta macOS Mojave (10.14) incluyen versiones de 32 bits de bibliotecas que usarían las aplicaciones de 32 bits, por lo que el software de modo de usuario de 32 bits para macOS se ejecutará en esos sistemas. Apple ha eliminado las versiones de 32 bits de las bibliotecas en macOS Catalina (10.15).

Linux y la mayoría de los demás sistemas operativos tipo 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 compatibles con 64 bits, se pueden compilar en versiones de 64 bits. Este modelo de distribución basado en el código fuente, con énfasis en los lanzamientos frecuentes, hace que la disponibilidad de software de aplicación para esos sistemas operativos sea un problema menor.

Modelos de datos de 64 bits

En los programas de 32 bits, los punteros y los tipos de datos, como los números enteros, suelen tener la misma longitud. Esto no es necesariamente así en las máquinas de 64 bits. [40] [41] [42] Por lo tanto, la combinación de tipos de datos en lenguajes de programación como C y sus descendientes, como C++ y Objective-C, puede 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, intlas variables siguen teniendo 32 bits de ancho, pero los enteros largos y los punteros tienen 64 bits de ancho. Estos se describen como teniendo un modelo de datos LP64 , que es una abreviatura de "Long, Pointer, 64". [43] [44] Otros modelos son el modelo de datos ILP64 en el que los tres tipos de datos tienen 64 bits de ancho, [45] [44] e incluso el modelo SILP64 donde los enteros cortos también tienen 64 bits de ancho. [46] [47] Sin embargo, en la mayoría de los casos las modificaciones requeridas 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 código de 32 bits dejando tanto como como de 32 bits. [48] ​​[44] LL se refiere al tipo de entero largo , que tiene al menos 64 bits en todas las plataformas, incluidos los entornos de 32 bits.intlong

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 utiliza 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 la penalización de espacio. Es común en máquinas RISC de 64 bits, [ cita requerida ] explorado en x86 como x32 ABI , y recientemente se ha utilizado en Apple Watch Series 4 y 5. [49] [50]

Muchas plataformas de 64 bits utilizan actualmente un modelo LP64 (incluidos Solaris, AIX , HP-UX , Linux, macOS, BSD e IBM z/OS). Microsoft Windows utiliza un modelo LLP64 . La desventaja del modelo LP64 es que almacenar a longen an inttrunca. Por otro lado, convertir un puntero en a 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 suele escribirse con suposiciones implícitas sobre los anchos de los tipos de datos. El código C debería preferir ( u) intptr_ten lugar de longal convertir punteros en objetos enteros.

Un modelo de programación es una elección que se hace para adaptarse a un compilador determinado, y varios pueden coexistir en el mismo sistema operativo. Sin embargo, el modelo de programación elegido como modelo principal para la interfaz de programación de aplicaciones (API) del sistema operativo suele ser el que predomina.

Otra consideración es el modelo de datos utilizado para los controladores de dispositivos . Los controladores constituyen la mayoría del código del sistema operativo en la mayoría de los sistemas operativos modernos [ cita requerida ] (aunque muchos pueden no cargarse cuando el sistema operativo está en ejecución). Muchos controladores utilizan punteros en gran medida para manipular datos y, en algunos casos, tienen que cargar punteros de un tamaño determinado en el hardware que admiten para el acceso directo a memoria (DMA). Como ejemplo, un controlador para un dispositivo PCI de 32 bits que le pide al dispositivo que envíe datos por DMA a áreas superiores de la memoria de una máquina de 64 bits no podría satisfacer las solicitudes del sistema operativo para cargar datos desde el dispositivo a la memoria por encima de la barrera de los 4 gigabytes , 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 gestión de memoria de entrada-salida (IOMMU).

Arquitecturas actuales de 64 bits

A partir de agosto de 2023 , 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 ninguna pérdida de rendimiento. [ cita requerida ] Este tipo de soporte se denomina comúnmente soporte de dos arquitecturas o, de forma más general, soporte de múltiples arquitecturas .

Véase también

Notas

  1. ^ como números de punto flotante .

Referencias

  1. ^ Manual del usuario del procesador Pentium, volumen 1: Libro de datos del procesador Pentium (PDF) . Intel . 1993.
  2. ^ "Manual de referencia del hardware del sistema informático Cray-1" (PDF) . Cray Research . 1977 . Consultado el 8 de octubre de 2013 .
  3. ^ Grimes, Jack; Kohn, Les; Bharadhwaj, Rajeev (julio-agosto de 1989). "El procesador Intel i860 de 64 bits: una CPU de propósito general con capacidades gráficas 3D". IEEE Computer Graphics and Applications . 9 (4): 85–94. doi :10.1109/38.31467. S2CID  38831149 . Consultado el 19 de noviembre de 2010 .
  4. ^ "Manual de referencia del programador de la familia de procesadores i860" (PDF) . Intel . 1991 . Consultado el 12 de septiembre de 2019 .
  5. ^ "NEC ofrece dos microprocesadores RISC de 64 bits de alto rendimiento y costo" (nota de prensa). NEC . 1998-01-20 . Consultado el 2011-01-09 . Las versiones del procesador VR4300 se utilizan ampliamente en aplicaciones de automatización de oficina y de consumo, incluido el popular videojuego Nintendo 64™ e impresoras láser avanzadas como la recientemente anunciada y premiada familia de impresoras Hewlett-Packard LaserJet 4000.
  6. ^ Antecedentes técnicos del microprocesador MIPS R5000 (PDF) , MIPS Technologies, Inc , consultado el 19 de agosto de 2024
  7. ^ "Microprocesador i860 de 64 bits". Intel. 1989. Consultado el 30 de noviembre de 2010 .
  8. ^ "Historia de Atari Jaguar". Edad Atari .
  9. ^ Joe Heinrich (1994). Manual del usuario del microprocesador MIPS R4000 (2.ª edición). MIPS Technologies, Inc.
  10. ^ Richard L. Sites (1992). "Arquitectura Alpha AXP". Revista técnica digital . 4 (4). Digital Equipment Corporation.
  11. ^ Gwennap, Linley (3 de octubre de 1994). "UltraSparc libera el rendimiento de SPARC". Microprocessor Report . 8 (13). Recursos de MicroDesign.
  12. ^ Bishop, JW; et al. (julio de 1996). "Microprocesador RISC PowerPC AS A10 de 64 bits". Revista IBM de investigación y desarrollo . 40 (4). IBM Corporation: 495–505. doi :10.1147/rd.404.0495.
  13. ^ Gwennap, Linley (14 de noviembre de 1994). "PA-8000 combina complejidad y velocidad". Microprocessor Report . 8 (15). Recursos de MicroDesign.
  14. ^ FP O'Connell; SW White (noviembre de 2000). "POWER3: La próxima generación de procesadores PowerPC". IBM Journal of Research and Development . 44 (6). IBM Corporation: 873–884. doi :10.1147/rd.446.0873.
  15. ^ "VIA revela detalles del procesador de próxima generación Isaiah". VIA Technologies, Inc. Archivado desde el original el 11 de octubre de 2007. Consultado el 18 de julio de 2007 .
  16. ^ "ARMv8 Technology Preview" (PDF) . 31 de octubre de 2011. Archivado desde el original (PDF) el 11 de noviembre de 2011. Consultado el 15 de noviembre de 2012 .
  17. ^ "ARM lanza la serie Cortex-A50, los procesadores de 64 bits más eficientes energéticamente del mundo" (Nota de prensa). ARM Holdings . Consultado el 31 de octubre de 2012 .
  18. ^ "ARM Keynote: se lanzaron los procesadores ARM Cortex-A53 y ARM Cortex-A57 de 64 bits ARMv8". ARMdevices.net . 2012-10-31.
  19. ^ "Synopsys presenta el nuevo procesador IP ARC de 64 bits". Archivado desde el original el 31 de marzo de 2022.
  20. ^ Stefan Berka. «Sistema operativo Unicos». www.operating-system.org. Archivado desde el original el 26 de noviembre de 2010. Consultado el 19 de noviembre de 2010 .
  21. ^ Jon "maddog" Hall (1 de junio de 2000). "Mi vida y el software libre". Linux Journal .
  22. ^ Andi Kleen. Porting Linux to x86-64 (PDF) . Simposio Linux de Ottawa 2001. Estado: El núcleo, el compilador y la cadena de herramientas funcionan. El núcleo arranca y funciona en el simulador y se utiliza para portar el espacio de usuario y ejecutar programas.
  23. ^ por John Siracusa (septiembre de 2009). «Mac OS X 10.6 Snow Leopard: la reseña de Ars Technica». Ars Technica . p. 5. Archivado desde el original el 9 de octubre de 2009 . Consultado el 6 de septiembre de 2009 .
  24. ^ Joris Evers (5 de enero de 2005). «Microsoft rechaza Windows XP por Itanium». Computerworld. Archivado desde el original el 18 de junio de 2013. Consultado el 17 de octubre de 2017 .
  25. ^ "Microsoft aumenta el límite de velocidad con la disponibilidad de ediciones de 64 bits de Windows Server 2003 y Windows XP Professional" (Nota de prensa). Microsoft. 25 de abril de 2005. Consultado el 10 de septiembre de 2015 .
  26. ^ "UEFI_en_plataformas_Dell_BizClient" (PDF) .
  27. ^ "Manual del programador AMD64, volumen 2: Programación del sistema" (PDF) . Advanced Micro Devices. Diciembre de 2016. pág. 120.
  28. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, volumen 3A: Guía de programación del sistema, parte 1" (PDF) . Intel. Septiembre de 2016. pág. 4-2.
  29. ^ "Power ISA versión 3.0". IBM . 30 de noviembre de 2015. pág. 983.
  30. ^ "Arquitectura SPARC de Oracle 2015, borrador D1.0.9". Oracle . pág. 475.
  31. ^ "Manual de referencia de arquitectura ARM ARMv8, para el perfil de arquitectura ARMv8-A". págs. D4-1723, D4-1724, D4-1731.
  32. ^ Mashey, John (octubre de 2006). "El largo camino hacia los 64 bits". ACM Queue . 4 (8): 85–94. doi : 10.1145/1165754.1165766 .
  33. ^ "Windows 7: ¿64 bits frente a 32 bits?". Foros de W7. Archivado desde el original el 5 de abril de 2009. Consultado el 5 de abril de 2009 .
  34. ^ "Preguntas frecuentes sobre la máquina virtual Java HotSpot". Sun Microsystems, Inc. Archivado desde el original el 10 de mayo de 2007. Consultado el 3 de mayo de 2007 .
  35. ^ "Una descripción de las diferencias entre las versiones de 32 bits de Windows Vista y las versiones de 64 bits de Windows Vista" . Consultado el 14 de octubre de 2011 .
  36. ^ Mark Russinovich (21 de julio de 2008). "Superando los límites de Windows: memoria física" . Consultado el 9 de marzo de 2017 .
  37. ^ Chappell, Geoff (27 de enero de 2009). "Memoria con licencia en Windows Vista de 32 bits". geoffchappell.com . WP:SPS . Consultado el 9 de marzo de 2017 .
  38. ^ "Inside Native Applications". Technet.microsoft.com. 1 de noviembre de 2006. Archivado desde el original el 23 de octubre de 2010. Consultado el 19 de noviembre de 2010 .
  39. ^ Lincoln Spector (12 de agosto de 2013). "Ejecutar un programa antiguo en una PC nueva".
  40. ^ Peter Seebach (2006). "Explorando el desarrollo de 64 bits en POWER5: ¿Qué tan portable es realmente su código?". IBM .
  41. ^ Henry Spencer. "Los diez mandamientos para programadores de C".
  42. ^ "La historia de Thud and Blunder". Datacenterworks.com . Consultado el 19 de noviembre de 2010 .
  43. ^ "Modelos de datos ILP32 y LP64 y tamaños de tipos de datos". Guía de programación C/C++ de z/OS XL .
  44. ^ abc "Modelos de programación de 64 bits" . Consultado el 5 de junio de 2020 .
  45. ^ "Uso de la interfaz ILP64 frente a la interfaz LP64". Intel . Consultado el 24 de junio de 2020 .
  46. ^ ab "Cray C/C++ Reference Manual". Agosto de 1998. Tabla 9-1. Mapeo de tipos de datos de los sistemas de Cray Research. Archivado desde el original el 16 de octubre de 2013 . Consultado el 15 de octubre de 2013 .
  47. ^ ab "Manual de referencia de Cray C y C++ (8.7) S-2179" . Consultado el 24 de junio de 2020 .
  48. ^ "Modelos de datos abstractos: aplicaciones de Windows". 30 de mayo de 2018.
  49. ^ "Documento técnico de ILP32 para AArch64". ARM Limited. 9 de junio de 2015. Archivado desde el original el 30 de diciembre de 2018. Consultado el 9 de octubre de 2018 .
  50. ^ "Dispositivos Apple en 2018". Woachk, investigador de seguridad. 6 de octubre de 2018.

Enlaces externos