64 bits

64 bits , en informática , indica que en una arquitectura dada el formato estándar de una variable simple ( entero , puntero , identificador , etc.) es de 64 bits de longitud. Esto generalmente refleja el tamaño de los registros internos de la CPU utilizados para esa arquitectura.

El término "64 bits" se puede utilizar para describir el tamaño de:

Descripción

Implicaciones arquitectónicas

Los números (también pensados ​​como información) se pueden representar en 64 bits en código binario . Aunque una CPU puede ser internamente de 64 bits, su bus de datos externo o bus de direcciones puede ser de diferentes tamaños, más grandes o más pequeños, y el término también se usa a menudo para referirse al tamaño de estos buses. Por lo tanto, debe distinguirse entre paralelismo de bus externo e interno. Un bus externo de 8 bits no limita el sistema para operar con datos de 1 byte, solo significa que en cada ciclo de búsqueda y ejecución puede acceder a 8 bits de memoria. Por otro lado, el paralelismo del bus interno determina radicalmente las características de la arquitectura del sistema. El término también se puede usar para referirse al tamaño de los códigos de operación en el conjunto de instrucciones del procesador u otros datos. Sin embargo, en ausencia de más aclaraciones, una arquitectura descrita como "64 bits" generalmente tiene registros de procesador de 64 bits de ancho y maneja datos de este tamaño tanto interna como externamente.

Los registros, en un procesador, se dividen generalmente en tres grupos: entero, punto flotante y otros. En todos los procesadores de propósito general , solo los registros de números enteros son capaces de contener punteros (es decir, la dirección de algunos datos en la memoria ). Los otros registros no pueden contener punteros que se usen para leer o escribir en la memoria y, por lo tanto, no se pueden usar para eludir las restricciones impuestas por el tamaño de los registros de enteros.

Casi todos los procesadores de propósito general (con las importantes excepciones de la arquitectura ARM y la mayoría de las implementaciones de 32 bits de la arquitectura MIPS ) hoy en día tienen integrado el manejo de matemáticas de coma flotante, que pueden o no hacer uso de registros de coma flotante 64 bits para contener los valores a procesar. La arquitectura X86 , por ejemplo, contiene las instrucciones de coma flotante del coprocesador x87 , que utilizan 8 registros de 80 bits en una configuración de pila; las versiones posteriores y la arquitectura AMD (comenzando con Athlon XP ), también contienen instrucciones SSE que usan 16 registros de 128 bits. Por el contrario, la familia Alpha de 64 bits define 32 registros de punto flotante de 64 bits además de sus 32 registros de enteros de 64 bits.

Limitaciones de memoria

La mayoría de las CPU están diseñadas para que un solo registro entero pueda contener la dirección de cualquier dato dentro del espacio de direcciones de la memoria virtual . Por lo tanto, la cantidad total de direcciones en la memoria virtual, la totalidad de los datos que la computadora puede contener en el espacio de trabajo, está determinada por el tamaño de estos registros. Comenzando en la década de 1960 con el System 360 de IBM , continuando en la década de 1970 con (junto con muchas otras) la minicomputadora DEC VAX , y finalmente en la década de 1980 con el procesador Intel 80386 , se desarrolló un consenso de facto de que 32 bits era un buen tamaño . para registros Un registro de 32 bits le permite direccionar 2 32 direcciones o 4 gigabytes de memoria. En el momento en que se diseñaron estas arquitecturas, 4 gigabytes de memoria superaban tanto la cantidad de memoria normalmente instalada que se consideró suficiente. Otra razón importante es que 4 mil millones (aproximadamente) de direcciones son suficientes para asignar una sola referencia a muchos objetos físicamente contables en aplicaciones como bases de datos .

Con el tiempo y con la continua disminución de los costos de memoria (ver ley de Moore ), ya a principios de los noventa , comenzaron a aparecer máquinas con cantidades de RAM cercanas a los 4 gigabytes, y se empezó a considerar el uso de un espacio de memoria virtual superior a los 4 gigabytes. necesarias para manejar ciertos tipos de problemas. En respuesta, varias empresas comenzaron a implementar nuevas familias de chips con arquitectura de 64 bits, inicialmente para supercomputadoras y máquinas de alta gama ( estaciones de trabajo y servidores ). La tecnología de 64 bits también ha llegado gradualmente a las PC normales, con PowerMac (2003) e iMac (2004) de Apple, ambos con procesadores de 64 bits (Apple los llama G5 ) , y la arquitectura AMD " AMD64 " (que Intel reintrodujo con poca éxito bajo el nombre de " EM64T ") que se extiende a las PC de gama alta . La llegada de las arquitecturas de 64 bits aumenta la cantidad de memoria direccionable hasta los 264 bytes, equivalente a 16 exbibytes . Una cantidad enorme, como lo eran 4 gigas hace unas décadas.

32 frente a 64 bits

Pasar de una arquitectura de 32 bits a una de 64 bits implica un cambio profundo, ya que la mayoría de los sistemas operativos tienen que modificarse mucho para aprovechar la nueva arquitectura. Incluso los otros programas deben ser " portados " primero para aprovechar las nuevas características; Los programas más antiguos generalmente son compatibles a través de un modo de compatibilidad de hardware (es decir, donde el procesador también admite el antiguo conjunto de instrucciones de 32 bits), a través de la emulación de software , o incluso a través de la implementación central de un procesador de 32 bits, todo el chip del procesador interno (como en Los procesadores Itanium de Intel, que incluyen un núcleo x86 ). Una excepción significativa es el AS/400 , cuyo software se ejecuta en una ISA (Arquitectura de conjunto de instrucciones) virtual, llamada TIMI (Interfaz de máquina independiente de tecnología) que se traduce, mediante una capa de software de bajo nivel, en código de máquina nativo antes de la ejecución. Esta capa es todo lo que necesita ser reescrito para llevar todo el sistema operativo y todos los programas a una nueva plataforma, como cuando IBM migró la línea de los antiguos procesadores "IMPI" de 32/48 bits a los PowerPC de 64 bits (IMPI no no tiene nada que ver con PowerPC de 32 bits , por lo que fue una transición más desafiante que cambiar de un conjunto de instrucciones de 32 bits a la versión de 64 bits). Otra excepción notable es z/Architecture de IBM, que ejecuta sin problemas aplicaciones con diferentes tipos de direccionamiento (24, 32 y 64 bits) al mismo tiempo.

Si bien las arquitecturas de 64 bits facilitan indiscutiblemente el trabajo con grandes cantidades de datos, como video digital , procesamiento científico y grandes bases de datos , se ha debatido mucho sobre cuánto más compatibles son ellos o sus modos de 32 bits. , en otros tipos de trabajos, en comparación con sistemas de 32 bits de precio similar.

En teoría, algunos programas pueden ser más rápidos en el modo de 32 bits. En ciertas arquitecturas, las instrucciones de 64 bits ocupan más espacio que las de 32 bits, por lo que es posible que ciertos programas de 32 bits puedan ingresar a la memoria caché de CPU muy rápida donde los de 64 bits no pueden. En otras palabras, utilizar 64 bits para realizar operaciones que podrían gestionarse a 32 implica un desperdicio innecesario de recursos (memoria central, caché, etc.). Sin embargo, en aplicaciones como la ciencia, los datos procesados ​​a menudo usan bloques de 64 bits de forma natural y, por lo tanto, serán más rápidos en una arquitectura de 64 bits, ya que la CPU está diseñada para trabajar directamente con este tamaño en lugar de restringir los programas para realizar varios pasos. para obtener el mismo resultado. Estas evaluaciones también se complican por el hecho de que durante la definición de las nuevas arquitecturas, los diseñadores del conjunto de instrucciones aprovecharon para realizar cambios que llenan los vacíos del antiguo, agregando nuevas funciones destinadas a mejorar el rendimiento (como, por ejemplo, , ejemplo, los registros adicionales en la arquitectura AMD64).

Pros y contras

Una idea errónea común es que las arquitecturas de 64 bits no son mejores que las arquitecturas de 32 bits a menos que tenga más de 4 gigabytes de memoria. Esto no es enteramente verdad:

La principal desventaja de las arquitecturas de 64 bits sobre las de 32 bits es que los mismos datos ocupan un poco más de espacio en la memoria (debido a punteros más grandes, otros tipos de datos y alineaciones ( los compiladores generalmente insertan bytes no utilizados) para alinear la dirección de datos a alguna potencia de 2, a menudo igual a la cantidad de bits de la arquitectura.) Esto aumenta las demandas de memoria del programa y puede tener implicaciones para el uso eficiente de la memoria caché (lo cual tiene) El mantenimiento parcial de un modelo de datos de 32 bits generalmente es razonablemente eficiente De hecho, el sistema operativo z/OS muy orientado al rendimiento utiliza este enfoque y obliga al código ejecutable a residir en cualquier cantidad de espacios de direcciones de 32 bits, mientras que los datos pueden residir opcionalmente en regiones de 64 bits.

Modelos de datos de 64 bits

La conversión de aplicaciones escritas en lenguajes de alto nivel de 32 a 64 bits presenta diversos grados de dificultad. Un problema recurrente es que el autor del programa ha asumido que un puntero (una variable que contiene una dirección de memoria) tiene el mismo tamaño que una variable de algún otro tipo y que, por lo tanto, es posible mover valores entre dos tipos sin perder información. Esta suposición es cierta en unas 32 (y unas 16) máquinas, pero falla en arquitecturas 64. El lenguaje C y su descendiente C ++ hacen que sea particularmente fácil cometer este tipo de error.

Para evitar este problema, en C y C ++, el operador sizeof()puede usarse para determinar el tamaño de varios tipos de datos, en caso de que sea necesario tomar decisiones sobre estos durante la ejecución. Además, los archivos limits.h (estándar C99) y climits (estándar C ++) brindan más información útil; sizeof () simplemente devuelve el tamaño en bytes, que a veces no es suficiente, porque el tamaño de bytes tampoco está bien definido en C y C ++. Debe tener cuidado y usar el tipo ptrdiff_t(en el archivo de encabezado <stddef.h>) al hacer aritmética de punteros ; demasiado código usa tipos "int" y "largo" en su lugar (erróneamente).

Ni C ni C++ definen la longitud en bits de un puntero, int o long.

En muchos entornos de programación en sistemas de 32 bits, las variables de puntero, "int" y "long" tienen una longitud de 32 bits.

En muchos entornos de programación de 64 bits, las variables "int" siguen siendo de 32 bits, pero los punteros "long" y cambian a 64. Esto se describe como tener un modelo de datos LP64 . Otra alternativa es el modelo ILP64 donde el tipo "int" también cambia a 64 bits. Sin embargo, en la mayoría de los casos, los cambios necesarios para migrar el código a 64 bits son relativamente sencillos y muchos programas bien escritos se pueden volver a compilar sin cambios. Otra alternativa es el modelo LLP64 que mantiene la compatibilidad con el código de 32 bits al mantener los tipos "int" y "long" en 32 bits. El tipo "largo largo" ("LL") es de al menos 64 bits en todas las plataformas, incluidas las de 32 bits.

Tenga en cuenta que el modelo de programación es una elección basada en el compilador, y más de uno puede coexistir para el mismo sistema operativo. Sin embargo, generalmente prevalece el modelo utilizado por las API del sistema operativo .

Otra consideración se refiere al modelo de datos utilizado para los controladores . Los controladores forman la mayor parte del código que se encuentra en los sistemas operativos modernos (aunque es posible que muchos no se ejecuten mientras se ejecuta el sistema operativo). Muchos controladores utilizan mucho los punteros y, en algunos casos, tienen que cargar punteros de un tamaño preciso en los registros del hardware de gestión de DMA . Por ejemplo, un controlador para un dispositivo PCI de 32 bits que requiere que este último cargue datos en la memoria en una dirección más allá de la barrera de los 4 gigabytes no podría completar la operación porque el puntero es demasiado grande para caber en los registros del dispositivo. El problema se resuelve haciendo que el sistema operativo tenga en cuenta las restricciones del dispositivo al generar solicitudes de DMA.

Difusión

Ya en 2006, las CPU de 64 bits eran comunes en los servidores y también se estaban extendiendo en el campo de las computadoras personales (anteriormente de 32 bits ), con las arquitecturas AMD64 , EM64T y PowerPC 970 . En los años siguientes, esta difusión se vio acelerada por la necesidad cada vez más apremiante de superar el límite de 4 gigabytes de memoria central que impone la tecnología de 32 bits.

Más allá de 64 bits

64 bits parece suficiente para la mayoría de los usos. Sin embargo, se puede mencionar que IBM System / 370 usaba números de coma flotante de 128 bits , y que muchos procesadores modernos ahora también los admiten. El System / 370 es notable, sin embargo, ya que también usaba números decimales de longitud variable hasta un máximo de 16 bytes (es decir, 128 bits).

OS/400 lleva años utilizando punteros de 128 bits . Las aplicaciones están diseñadas para ejecutarse en una máquina virtual y luego se convierten al conjunto de instrucciones nativas una vez instaladas. El hardware original era un sistema CISC de 48 bits similar al System /370 . El hardware actual es un PowerPC de 64 bits . Cualquier transición futura de 128 bits sería sencilla.

Historia

arquitecturas de 64 bits

Las arquitecturas de 64 bits incluyen (2005):

Artículos relacionados

Enlaces externos