¿Cuál es el tamaño de palabra de una RAM en una máquina (procesador) de 32/64 bits?

¿Cuál es el tamaño de palabra de una RAM en una máquina (procesador) de 32/64 bits?

¿Cuál es el tamaño de palabra de una RAM en una máquina (procesador) de 32/64 bits?

Esta pregunta me está volviendo loco. ¿Cuál es exactamente el tamaño de la palabra que guarda los datos en la propia RAM en máquinas de 64 bits como los microprocesadores Intel Core i5?

Además, ¿el tamaño de palabra que contiene los datos cambia de 32 bits a 64 bits?

Respuesta1

Tradicionalmente, una "palabra" en las arquitecturas informáticas era generalmente la unidad de memoria direccionable más pequeña. Y tradicionalmente, este ha sido el mismo que el tamaño de registro de uso general de la máquina.

Sin embargo, desde que se popularizó el direccionamiento de bytes, el concepto se ha diluido. (Probablemente podamos darle crédito a IBM System/360 y al PDP-11 en el lado de la minicomputadora por esto).

En términos de direccionamiento de memoria definido por la arquitectura de la CPU, es decir, cómo los programadores ven la máquina, el concepto de "palabra" no existe en x86/x64, a menos que lo considere sinónimo de bytes. Cada byte de memoria tiene su propia dirección, y la dirección de un byte es también la dirección de cualquier región más grande que comience en ese byte (que se extiende a direcciones con números más altos). Por supuesto, podemos mover uno, dos, cuatro u (en x64) ocho bytes a la vez entre el registro y la RAM (o mucho más, de memoria a memoria, con las instrucciones REP), pero la dirección que afirmamos sigue siendo la de un byte. Podemos hacer aritmética con palabras de todos esos tamaños. (Y otros.)

Si piensa en términos de registros, normalmente se supone que el "tamaño de palabra" de una máquina es el mismo que el de sus registros de propósito general. Esto sería 32 bits en x86, 64 bits en x64. En la mayoría de las arquitecturas, el tamaño del GPR es el tamaño del número entero más grande en el que la CPU puede realizar aritmética simple con una sola instrucción.

¡Ahora introduzcamos más confusión...!

En términos de la plataforma (placa base, módulos y chips de RAM, etc.), en todas las máquinas que utilizan CPU y conjuntos de chips "básicos" de Intel y AMD, la RAM se direcciona en fragmentos de 64 bits; supongo que se podrían llamar palabras. Esto se podía ver muy claramente en procesadores anteriores que tenían pines separados para dirección y datos: ¡el pin de dirección menos significativo se llama A3, no A0! Los bits de dirección física A0, A1 y A2 nunca salen del procesador. Pero los programadores nunca ven esas direcciones.

Y finalmente, está el concepto de "línea de caché". Una línea de caché es una porción de RAM físicamente contigua que ocupa una entrada en la caché L1/L2/L3. Las líneas de caché en el mundo Intel/AMD tienen 64 bytes de ancho desde hace algún tiempo. Entonces, cuando accedes a una dirección de memoria que no está actualmente en tu caché, la CPU buscaochode esos trozos de RAM de 8 bytes. Para decirlo de otra manera, las direcciones que se almacenan en la caché omiten los seis bits de orden inferior. Entonces tal vez una palabraen el caché¡En realidad son 64 bytes o 512 bits! (Pero el acceso a la memoria que pasa por alto el caché aún puede leer o escribir solo 8 bytes a la vez; en rangos de direcciones físicas que son decodificados por dispositivos de E/S mapeados en memoria, los bytes individuales pueden ser direccionables; esto depende del bus. Y por supuesto Por supuesto, no podemos hacer aritmética con enteros de 512 bits).

En los entornos de programación derivados de Microsoft C, una "palabra" es de 16 bits; lo ha sido desde mucho antes de Microsoft, y el nombre y la definición del tipo de datos se han trasladado a los entornos de 32 y 64 bits por compatibilidad. Una "palabra doble" (o DWORD o LONG, para "palabra larga", término común en el VAX) es de 32 bits. Los enteros de 64 bits se denominan "palabras cuádruples" en la arquitectura, pero normalmente tienen nombres más específicos en C, como UINT64 (entero de 64 bits, sin signo).

Entonces, depende de dónde te encuentres en el sistema y de lo que estés viendo. Por lo general, hoy en día no pensamos en el "tamaño de palabra", sino en el "tamaño GPR".

Respuesta2

No estoy familiarizado con los detalles sangrientos de cómo funciona la RAM con las CPU Intel en estos días debido a cosas más nuevas como la coherencia de la caché y NUMA, pero desde el punto de vista de la RAM, creo que todavía son bytes de 8 bits, aunque la RAM ahora se organiza comúnmente en canales donde se puede acceder a varias ranuras a la vez. Por lo tanto, tomar 4 bytes (suponiendo 4 ranuras) a la vez llevará la misma cantidad de tiempo que tomar 1 byte en un sistema de este tipo. Aún así, la RAM acepta una dirección del controlador de memoria como entrada y le devuelve 8 bits como salida AFAIK.

El tamaño de la "palabra" puede significar cosas diferentes. Recuerdo haber encontrado este término por primera vez estudiando el lenguaje ensamblador 68000: en el texto que estaba leyendo, "byte" significaba 8 bits y "palabra" significaba 16 bits, y "alineado con palabras" significaba una dirección que se encontraba en un límite de 16 bits. Sé que el término "palabra" se usaba antes de la introducción del 68000 (¿1980?) y puede haber sido sinónimo de "byte" en épocas anteriores.

Los datos "nativos" con los que la CPU "prefiere" tratar coinciden con el "bitness" de su arquitectura y el modo en el que se está ejecutando. Una CPU de 32 bits (o una CPU de 64 bits que no está en "modo largo") tiene 32 Registros de bits, un montón de instrucciones para cargar valores de la RAM (4 bytes) en esos registros y otras cosas. Pero con Intel, un registro de 32 bits como EAX también se puede abordar como dos registros AH (los 16 bits superiores de EAX) y AL (los 16 bits inferiores) y hay innumerables instrucciones MOV que cargan cosas de la RAM a EAX. AH, AL, y de ahí de vuelta a la RAM. Soy demasiado vago para mirar la guía de referencia del programador de Intel en este momento, pero creo que hay instrucciones para cargar bytes individuales en los 8 bits superiores o inferiores de AH o AL. (Sé que MIPS tiene instrucciones como esa). Pero creo que hay más instrucciones que funcionan con los 32 bits, y si quieres trabajar con menos bits, pierdes eficiencia porque primero tienes que mover cosas a registros temporales y demás.

Entonces, en Intel y en la mayoría de las demás CPU de uso general fabricadas desde la era de los 16 bits, eres realmente flexible en la forma de abordar la memoria. Sin embargo, es probable que las instrucciones estén más optimizadas para funcionar en el "bitness" de la arquitectura.

información relacionada