¿Por qué los sistemas x86-64 tienen solo un espacio de direcciones virtuales de 48 bits?

97

En un libro leí lo siguiente:

Los procesadores de 32 bits tienen 2 ^ 32 direcciones posibles, mientras que los procesadores actuales de 64 bits tienen un espacio de direcciones de 48 bits

Mi expectativa era que si se trata de un procesador de 64 bits, el espacio de direcciones también debería ser 2 ^ 64.

Entonces me preguntaba cuál es la razón de esta limitación.

er4z0r
fuente
11
El libro debe haber estado hablando específicamente sobre la implementación actual de la arquitectura AMD64 (x86-64). Solo se utilizan los 48 bits de orden inferior. Sin embargo, esta no es una limitación de hardware: todos los 64 bits están disponibles.
Cody Gray
7
Siempre es una buena idea identificar el libro.
Henk Holterman
1
Supongo que las líneas de direcciones físicas no son gratuitas (necesita al menos 16 pines de CPU adicionales). Y todavía no conozco ningún hardware que pueda llenar un espacio de 48 bits con chips de RAM físicos en el mismo procesador. Cuando esto sea factible, estoy seguro de que AMD agregará los 16 pines que faltan :)
Torp
7
incluso, The 32-bit processors have 2^32 possible addressesno es necesariamente cierto, puede existir una CPU de 32 bits con solo 24 "pines" para direccionar la memoria. Por ejemplo, 68EC020 (versión 68020 más barata) es una cpu de 32 bits pero con 24 bits para direccionar la memoria.
ShinTakezou
21
Hay un problema muy real con el direccionamiento físico de 64 bits, el tamaño de la página de la memoria virtual es demasiado pequeño. Lo que genera directorios de páginas enormes y descargas de caché TLB extremadamente caras en cada cambio de contexto. Pasar de páginas de 4 KB a 4 MB es una opción pero muy incompatible con los sistemas operativos actuales.
Hans Passant

Respuestas:

134

Porque eso es todo lo que se necesita. 48 bits le dan un espacio de direcciones de 256 terabytes. Eso es mucho. No verá un sistema que necesite más que eso en el corto plazo.

Entonces, los fabricantes de CPU tomaron un atajo. Usan un conjunto de instrucciones que permite un espacio de direcciones completo de 64 bits, pero las CPU actuales solo usan los 48 bits inferiores. La alternativa era desperdiciar transistores para manejar un espacio de direcciones más grande que no sería necesario durante muchos años.

Entonces, una vez que nos acercamos al límite de 48 bits, solo es cuestión de liberar CPU que manejen el espacio de direcciones completo, pero no requerirá ningún cambio en el conjunto de instrucciones y no romperá la compatibilidad.

jalf
fuente
118
640kb es suficiente para cualquiera.
7
¿Sigues ejecutando un sistema 8088, bdares?
Joe
23
@bdares: Mala analogía. El conjunto de instrucciones del arco 8088/8086 tiene un límite de 640k integrado. Solo haciendo un nuevo ISA (386) fue posible romper la barrera. x86_64, por otro lado, admite todos los 64 bits en ISA. Es solo el hardware de la generación actual que no puede usarlos todos ...
R .. GitHub DEJA DE AYUDAR A ICE
16
@R. En realidad, la limitación en la CPU fue de un megabyte. El IBM PC designó una sección de eso para periféricos mapeados en memoria, BIOS, etc. Algunos otros diseños 8088/8086 (Zenith Z100, si la memoria sirve) designaron menos para periféricos y demás, y en consecuencia más para programas de aplicación.
Jerry Coffin
25
lwn.net/SubscriberLink/655437/9a48cd3e7a8cbe8a <- tres años después de esta respuesta, ya estamos alcanzando estos límites :) La máquina HP tendrá 320 TB de memoria y no pueden proporcionarla como un espacio de direcciones plano debido a los 48 -Limitación de direccionamiento de bits.
agam
18

Cualquier respuesta que se refiera al tamaño del bus y la memoria física está ligeramente equivocada, ya que la pregunta de OP era sobre el espacio de direcciones virtuales, no sobre el espacio de direcciones físicas . Por ejemplo, el límite supuestamente análogo en algunos 386 era un límite en la memoria física que podían usar, no el espacio de direcciones virtuales, que siempre era de 32 bits completos. En principio, podría utilizar 64 bits completos de espacio de direcciones virtuales incluso con solo unos pocos MB de memoria física; por supuesto, puede hacerlo mediante el intercambio o para tareas especializadas en las que desee mapear la misma página en la mayoría de las direcciones (por ejemplo, ciertas operaciones de datos dispersos).

Creo que la respuesta real es que AMD estaba siendo barata y esperaba que a nadie le importara ahora, pero no tengo referencias para citar.

R .. GitHub DEJA DE AYUDAR A ICE
fuente
14
"Ser barato" Supongo que te refieres a no agregar pines que nunca se usarán, no ocupar espacio en el chip para transistores que no se usarán y usar el espacio libre para hacer que las instrucciones existentes sean más rápidas. Si eso es barato, ¡estoy dentro!
Olof Forshell
El 80386 permite 2 * 4096 selectores que contienen cada uno hasta 4 GB de memoria (32 TB en total). El 80286 permitía 2 * 4096 selectores, cada uno con hasta 64 KB (1 GB).
Olof Forshell
Los trucos segmentados no lineales no cuentan como espacio de direcciones en mi libro. No hay forma de que el software portátil los utilice.
R .. GitHub DEJA DE AYUDAR A ICE
@R .. - Pensé que la definición de software portátil es que puede . :-) Por ejemplo, C ++ prohíbe comparar punteros en diferentes matrices para que puedan estar en segmentos separados de 4GB.
Bo Persson
Si su compilación en realidad genera grandes punteros y carga un registro de segmento para cada desreferencia de memoria, entonces sí. Pero en realidad eso es terriblemente lento, y en su lugar todos usaron modelos de memoria pequeña y __far(o peor aún, FAR/ far!) Punteros ...
R .. GitHub DEJA DE AYUDAR A ICE
10

Lea la sección de limitaciones del artículo de wikipedia :

Una PC no puede contener 4 petabytes de memoria (debido al tamaño de los chips de memoria actuales, por lo menos), 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, y el 52 La dirección física de bits proporciona un amplio espacio para la expansión sin incurrir en el costo de implementar direcciones físicas de 64 bits.

Es decir, no tiene sentido implementar el direccionamiento completo de 64 bits en este punto, porque no podemos construir un sistema que pueda utilizar un espacio de direcciones de este tipo en su totalidad, por lo que elegimos algo que sea práctico para los sistemas de hoy (y del mañana).

Damien_The_Unbeliever
fuente
¿De dónde viene el 4 en los 4 petabytes? Si hablamos de 64 líneas de direcciones, deberíamos terminar con el cuadrado del espacio de direcciones que es posible gracias a 32 líneas de direcciones, que son 4 gigabytes. Cuadre eso y deberíamos tener 16, no 4 petabytes. ¿Me estoy perdiendo de algo?
Olof Forshell
1
Viene del límite físico actual (52 bits); el punto es que no podemos poner suficiente RAM en una PC para admitir este rango restringido, y mucho menos lo que se requeriría para un espacio de direcciones completo de 64 bits.
Damien_The_Unbeliever
9

El registro nativo interno / ancho de operación no necesita reflejarse en el ancho del bus de dirección externa.

Supongamos que tiene un procesador de 64 bits que solo necesita acceder a 1 megabyte de RAM. Un bus de direcciones de 20 bits es todo lo que se necesita. ¿Por qué preocuparse por el costo y la complejidad del hardware de todos los pines adicionales que no utilizará?

El Motorola 68000 era así; 32 bits internamente, pero con un bus de direcciones de 23 bits (y un bus de datos de 16 bits). La CPU podía acceder a 16 megabytes de RAM, y para cargar el tipo de datos nativo (32 bits) se necesitaban dos accesos a la memoria (cada uno con 16 bits de datos).


fuente
1
pero 68000 se considera una cpu de "16/32 bits", no una cpu "completa" de 32 bits, por lo que se podría decir que todavía tiene un pie en el pasado de 16 bits; Elegí el 68020 como ejemplo, ya que su versión 68EC020 de bajo costo tiene 24 bits solo para direcciones, aunque el 68020 es una cpu "completa" de 32 bits ... ¡+1 para haber considerado esta maravillosa familia de procesadores!
ShinTakezou
@ShinTakezou: honestamente, ¿era el 80386SX una CPU de 16 bits (porque tenía un espacio de direcciones como el 80286) o era de 32 bits (porque tenía la arquitectura interna de un 80386DX)? Se podría decir lo mismo que tú, pero otro (este) dice "lo interno es lo que cuenta", y puedes citarme al respecto.
Olof Forshell
@Olof Creo que, en el contexto de la "memoria" (que es el mundo externo), lo externo es lo que cuenta, por lo que 68000 es una CPU de 16 bits (necesita 2 "pasos" para leer datos de 32 bits): D
ShinTakezou
@ShinTakezou: el contexto de la memoria, incluso los cachés, es siempre externo a la propia CPU, a pesar de que están sumamente acoplados en los procesadores modernos. El 8088 era internamente igual al 8086 aunque tenía ocho líneas de bus de datos hasta las dieciséis del 8086. No veo lo que aparentemente ve como obvio, que el 8088 debería clasificarse en el mismo grupo que el Z80, 8080, 8085, etc. La cuestión del ancho del bus de datos parece trivial en ese contexto
Olof Forshell
No soy un experto en este tema en absoluto, por lo que no tengo nada obvio para mí. Solo quería notar la necesidad de un corte más nítido con el pasado, donde uno podría pensar que el 68000 sigue siendo un procesador "antiguo", así que que podría parecer "natural" que su espacio de direcciones esté limitado a menos de 32 bits; mientras que el 68020 puede ser de 32 bits, por lo que la existencia del 68EC020 con su límite deja claro que es una elección que no se debe al "límite de eso ( o este) tiempo "pero a otra consideración (como hacerlo más barato si no hay una ventaja real en tener 64 pines), que es más o menos el argumento de esta respuesta.
ShinTakezou
7

Existe una razón más grave que simplemente guardar transistores en la ruta de dirección de la CPU: si aumenta el tamaño del espacio de direcciones, necesita aumentar el tamaño de la página, aumentar el tamaño de las tablas de página o tener una estructura de tabla de página más profunda (que hay más niveles de tablas de traducción). Todas estas cosas aumentan el costo de una falla de TLB, lo que perjudica el rendimiento.

Brendan
fuente
1
Intel propone un esquema de paginación de 5 niveles para extender de los actuales 48 bits a 57 bits. (Los mismos 9 bits por nivel / páginas 4k que las tablas de páginas x86-64 actuales). El uso de 10 u 11 bits por nivel habría requerido cambiar el hardware de paso de página, por lo que puede que este no sea el diseño óptimo para una memoria enorme, pero es una extensión sensata para una CPU de modo dual que también debe admitir el máximo rendimiento para 4 tablas de nivel en el formato actual.
Peter Cordes
Por supuesto, con páginas gigantes de 2M o 1G, son solo 4 o 3 niveles de tablas de página desde el nivel superior hasta una entrada de tabla de página enorme en lugar de un puntero de directorio de página.
Peter Cordes
6

Desde mi punto de vista, esto es el resultado del tamaño de la página. Cada página contiene como máximo 4096/8 = 512 entradas de la tabla de páginas. Y 2 ^ 9 = 512. Entonces 9 * 4 + 12 = 48.

linzuojian
fuente
4

Para responder a la pregunta original: no era necesario agregar más de 48 bits de PA.

Los servidores necesitan la máxima cantidad de memoria, así que intentemos profundizar más.

1) La configuración de servidor más grande (de uso común) es un sistema de 8 sockets. Un sistema 8S no es más que 8 CPU de servidor conectadas por una interconexión coherente de alta velocidad (o simplemente, un "bus" de alta velocidad) para formar un solo nodo. Hay clústeres más grandes pero son pocos y distantes entre sí, estamos hablando de configuraciones de uso común aquí. Tenga en cuenta que en los usos del mundo real, el sistema 2 Socket es uno de los servidores más utilizados, y el 8S generalmente se considera de muy alto nivel.

2) Los principales tipos de memoria utilizados por los servidores son la memoria DRAM regular direccionable por bytes (p. Ej., Memoria DDR3 / DDR4), IO mapeada en memoria - MMIO (como la memoria utilizada por una tarjeta adicional), así como el espacio de configuración utilizado para configurar los dispositivos que están presentes en el sistema. El primer tipo de memoria es la que suele ser la más grande (y por lo tanto necesita la mayor cantidad de bits de dirección). Algunos servidores de gama alta también utilizan una gran cantidad de MMIO, dependiendo de cuál sea la configuración real del sistema.

3) Suponga que cada CPU de servidor puede albergar 16 DIMM DDR4 en cada ranura. Con un tamaño máximo DDR4 DIMM de 256GB. (Dependiendo de la versión del servidor, esta cantidad de DIMM posibles por socket es en realidad menor que 16 DIMM, pero continúe leyendo por el bien del ejemplo).

Entonces, cada zócalo puede tener teóricamente 16 * 256GB = 4096GB = 4 TB. Para nuestro ejemplo de sistema 8S, el tamaño de la DRAM puede ser un máximo de 4 * 8 = 32 TB. Esto significa que el número máximo de bits necesarios para direccionar este espacio DRAM es 45 (= log2 32TB / log2 2).

No entraremos en detalles de los otros tipos de memoria (MMIO, MMCFG, etc.), pero el punto aquí es que el tipo de memoria más "exigente" para un sistema de 8 sockets con los tipos más grandes de DIMM DDR4 disponibles en la actualidad (256 GB DIMM) utilizan solo 45 bits.

Para un sistema operativo que admite 48 bits (WS16 por ejemplo), hay (48-45 =) 3 bits restantes. Lo que significa que si usamos los 45 bits inferiores únicamente para 32 TB de DRAM, todavía tenemos 2 ^ 3 veces de memoria direccionable que se puede usar para MMIO / MMCFG para un total de 256 TB de espacio direccionable.

Entonces, para resumir: 1) 48 bits de dirección física son muchos bits para admitir los sistemas más grandes de hoy que están "completamente cargados" con copiosas cantidades de DDR4 y también muchos otros dispositivos IO que exigen espacio MMIO. 256 TB para ser exactos.

Tenga en cuenta que este espacio de direcciones de 256 TB (= 48 bits de dirección física) NO incluye unidades de disco como unidades SATA porque NO forman parte del mapa de direcciones, solo incluyen la memoria que es direccionable por bytes y está expuesta al sistema operativo.

2) El hardware de la CPU puede optar por implementar 46, 48 o> 48 bits dependiendo de la generación del servidor. Pero otro factor importante es cuántos bits reconoce el sistema operativo. Hoy en día, WS16 admite direcciones físicas de 48 bits (= 256 TB).

Lo que esto significa para el usuario es que, aunque uno tiene una CPU de servidor grande y ultramoderna que puede admitir> 48 bits de direccionamiento, si ejecuta un sistema operativo que solo admite 48 bits de PA, solo puede aprovechar 256 TB .

3) En general, hay dos factores principales para aprovechar un mayor número de bits de dirección (= más capacidad de memoria).

a) ¿Cuántos bits admite su CPU HW? (Esto se puede determinar mediante la instrucción CPUID en las CPU Intel).

b) Qué versión del sistema operativo está ejecutando y cuántos bits de PA reconoce / admite.

El mínimo de (a, b) determinará en última instancia la cantidad de espacio direccionable que su sistema puede aprovechar.

He escrito esta respuesta sin analizar las otras respuestas en detalle. Además, no he profundizado en los matices de MMIO, MMCFG y la totalidad de la construcción del mapa de direcciones. Pero espero que esto ayude.

Gracias, Anand K Enamandram, arquitecto de plataforma de servidor Intel Corporation

Anand K Enamandram
fuente
Esta pregunta se refiere al tamaño del espacio de direcciones virtuales de 48 bits (lo que requiere que las direcciones virtuales sean canónicas). Desea más bits virtuales que bits físicos, por lo que un núcleo de la mitad alta puede mapear toda la memoria física en un solo espacio de direcciones (propio o espacio de usuario). Como usted dice, HW solo necesita implementar tantos bits PA como los controladores DRAM + MMIO puedan usar, y puede usar cualquier número hasta el límite de 52 bits en el formato de tabla de páginas x86-64. ( ¿Por qué en 64 bits la dirección virtual tiene 4 bits más cortos (48 bits de largo) en comparación con la dirección física (52 bits de largo)? )
Peter Cordes
1
El formato de tabla de página de 4 niveles también impone el límite de VA de 48 bits, hasta que HW + SW admita tablas de página PML5 para VA de 57 bits. De todos modos, esta es una respuesta útil, pero parece estar publicada con la pregunta incorrecta. No estoy seguro de si hay un lugar mejor para ello, así que supongo que podemos dejarlo aquí, con suerte con una edición para agregar un encabezado para decir algo sobre PA vs. VA.
Peter Cordes
2

Mucha gente tiene esta idea errónea. Pero te prometo que si lees esto con atención, después de leerlo, todos tus conceptos erróneos serán claros.

¡Decir que un procesador de 32 bits o 64 bits no significa que debería tener un bus de direcciones de 32 bits o un bus de direcciones de 64 bits, respectivamente! ... ¡Repito que NO!

El procesador de 32 bits significa que tiene ALU (Unidad Aritmética y Lógica) de 32 bits ... eso significa que puede operar en un operando binario de 32 bits (o simplemente decir un número binario que tiene 32 dígitos) y de manera similar, el procesador de 64 bits puede operar en un binario de 64 bits operando. Por lo tanto, un procesador de 32 bits o 64 bits NO significa que se puede instalar la cantidad máxima de memoria. Simplemente muestran cuán grande puede ser el operando ... (por analogía, puede pensar en una calculadora de 10 dígitos que puede calcular resultados de hasta 10 dígitos ... no puede darnos 11 dígitos o cualquier otro resultado más grande ... aunque es en decimal, pero estoy diciendo esta analogía para simplificar) ... pero lo que está diciendo es el espacio de direcciones que es el tamaño máximo de memoria (RAM) directamente interconectable. El carnero' El tamaño máximo posible está determinado por el tamaño del bus de direcciones y no es el tamaño del bus de datos o incluso la ALU en la que se define el tamaño del procesador (32/64 bits). Sí, si un procesador tiene un "bus de direcciones" de 32 bits, entonces puede direccionar 2 ^ 32 bytes = 4 GB de RAM (o para 64 bits será 2 ^ 64) ... pero decir que un procesador de 32 bits o 64 bits tiene nada relevante para este espacio de direcciones (espacio de direcciones = hasta qué punto puede acceder a la memoria o el tamaño máximo de RAM) y solo depende del tamaño de su ALU. Por supuesto, el bus de datos y el bus de direcciones pueden ser del mismo tamaño y luego puede parecer que el procesador de 32 bits significa que accederá a 2 ^ 32 bytes o 4 GB de memoria ... pero es solo una coincidencia y no será lo mismo para todos.... por ejemplo, Intel 8086 es un procesador de 16 bits (ya que tiene ALU de 16 bits), por lo que, como dice, debería haber accedido a 2 ^ 16 bytes = 64 KB de memoria, pero no es cierto. Puede acceder a hasta 1 MB de memoria por tener un bus de direcciones de 20 bits ... Puedes buscar en Google si tienes alguna duda :)

Creo que he dejado claro mi punto. Ahora, llegando a su pregunta ... ya que el procesador de 64 bits no significa que deba tener un bus de direcciones de 64 bits, por lo que no hay nada de malo en tener un bus de direcciones de 48 bits en un procesador de 64 bits. ... mantuvieron el espacio de direcciones más pequeño para que el diseño y la fabricación fueran baratos ... ya que nadie va a usar una memoria tan grande (2 ^ 64 bytes) ... donde 2 ^ 48 bytes es más que suficiente hoy en día.

hafiz031
fuente
Creo que dejó muy claro su punto, hay una cosa que no entiendo en lo que dijo sobre la CPU 8086 de 16 bits: ¿cómo puede una CPU de 16 bits manejar una dirección de 20 bits? ¿Lo maneja a través de una operación de 2 pasos? Incluso si el bus de direcciones tiene un ancho de 20 bits, una vez que llega a la CPU, el ancho del registro obviamente solo puede tomar 16 bits ... ¿Cómo lo hacen?
programadores el
2
Hmm ... operación de 2 pasos. El registro de segmento contiene solo los 16 bits superiores. Luego se multiplica por 10H para convertirlo en 20 bits y luego se agrega el desplazamiento.
hafiz031
1

No es cierto que solo se usen los 48 bits de orden bajo de un VA de 64 bits, al menos con Intel 64. Los 16 bits superiores se usan, más o menos.

La sección 3.3.7.1 Direccionamiento canónico en el Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32 dice:

una dirección canónica debe tener los bits 63 a 48 establecidos en ceros o unos (dependiendo de si el bit 47 es cero o uno)

Entonces, los bits 47 a 63 forman un superbit, ya sea todos 1 o todos 0. Si una dirección no está en forma canónica, la implementación debería fallar.

En AArch64, esto es diferente. De acuerdo con la descripción general del conjunto de instrucciones ARMv8 , es un VA de 49 bits.

El sistema de traducción de memoria AArch64 admite una dirección virtual de 49 bits (48 bits por tabla de traducción). Las direcciones virtuales se extienden por signo desde 49 bits y se almacenan dentro de un puntero de 64 bits. Opcionalmente, bajo el control de un registro del sistema, los 8 bits más significativos de un puntero de 64 bits pueden contener una "etiqueta" que se ignorará cuando se utilice como dirección de carga / almacenamiento o como destino de una rama indirecta.

Olsonista
fuente
1
Solo los 48 inferiores son significativos, pero el hardware comprueba que esté correctamente firmado y extendido a 64 bits. IDK por qué no especificaron la extensión cero; tal vez querían que fuera más conveniente verificar una dirección media alta o baja (simplemente verificando el bit de signo). O tal vez para evitar que el límite 2 ^ 48 sea especial, de modo que las direcciones cercanas a la parte superior puedan caber convenientemente en constantes extendidas de signo de 32 bits. Creo que lo último es más probable.
Peter Cordes
De todos modos, la verificación actual de HW para canónicos evita que el software use bits ignorados para punteros etiquetados que se romperán en HW futuros, por lo que es parte del mecanismo que hace posible extender el hardware futuro cuando sea necesario. (Lo que podría ser antes de lo esperado, gracias a que la memoria no volátil está conectada directamente al espacio de direcciones físico y virtual)
Peter Cordes
procfs en Linux en mi Core i5 dice que se asigna a 7ffd5ea41000-7ffd5ea62000. Este rango de direcciones tiene sentido de acuerdo con la regla 'canónica' anterior. Los bits 48-63 son 0, lo que la convierte en una dirección canónica correcta. Lo que es un poco extraño son algunas direcciones en la fuente de Linux. En include / asm / pgtable_64_types dice #define __VMALLOC_BASE _AC (0xff92000000000000, UL). Esta NO es una dirección canónica. Tal dirección comenzaría con 0xffff8. No se por que.
Olsonist
Sí, IIRC Linux usa la mitad baja del rango canónico para el espacio de usuario, y (en su mayoría) usa la mitad alta para asignaciones de solo kernel. Pero parte de la memoria del kernel se exporta al espacio de usuario, como la [vsyscall]página. (Eso puede ser exportar cosas como el PID actual, por lo que getpid()es puramente espacio de usuario. También gettimeofday()puede usar rdtsc en espacio de usuario + factores de escala exportados por el kernel. Aunque creo que algo de eso es [vdso], que está cerca de la parte superior de la mitad inferior.)
Peter Cordes
IDK lo que __VMALLOC_BASEhace. Es de suponer que no se usa directamente.
Peter Cordes
0

Una CPU se considera "N-bits" principalmente por el tamaño de su bus de datos y por gran parte de sus entidades (arquitectura interna) : registros, acumuladores, unidad aritmética-lógica (ALU), conjunto de instrucciones, etc. Por ejemplo: La vieja CPU Motorola 6800 (o Intel 8050) es una CPU de 8 bits. Tiene un bus de datos de 8 bits, una arquitectura interna de 8 bits y un bus de direcciones de 16 bits.


  • Aunque la CPU de N bits puede tener entidades distintas a las de tamaño N. Por ejemplo, las mejoras en el 6809 sobre el 6800 (ambos son CPU de 8 bits con un bus de datos de 8 bits). Entre las mejoras significativas introducidas en el 6809 se encuentran el uso de dos acumuladores de 8 bits (A y B, que se pueden combinar en un solo registro de 16 bits, D), dos registros de índice de 16 bits (X, Y) y dos Punteros de pila de 16 bits.
Amit G.
fuente
Ya hay una respuesta para este punto con Motorola 68000/68020 como ejemplo. Esta pregunta es realmente sobre x86-64 específicamente, no sobre CPU antiguas de 8/16 bits. En el caso de x86-64, uno de los factores principales es que las direcciones virtuales más amplias necesitarían una tabla de páginas más profunda, y ese factor no existía para los chips antiguos de los que está hablando.
Peter Cordes
El ancho del bus de datos no tiene que coincidir con el ancho de registro o ALU. Por ejemplo, P5 Pentium tiene un bus de datos de 64 bits (se garantiza que las cargas / tiendas alineadas de 64 bits sean atómicas), pero los registros / ALU son solo de 32 bits (excepto para la FPU integrada, y en el Pentium MMX posterior el SIMD ALUs.)
Peter Cordes
OP escribe: "Mi expectativa era que si se trata de un procesador de 64 bits, el espacio de direcciones también debería ser 2 ^ 64". ........ Escribes: "Esta pregunta es sobre x86-64 específicamente, no sobre CPU antiguas de 8/16 bits". ........ Creo que te perdiste la esencia de la pregunta OP. La pregunta de OP es el resultado de la suposición incorrecta de que una CPU de 64 bits debería tener un bus de direcciones de 64 bits. Sobre la ALU, escribí gran parte de sus entidades; No todos esos.
Amit G.
Deja de enviarme spam volviendo a publicar este comentario. Sí, por supuesto, el OP está mal por la razón que describe, pero estaba señalando que su respuesta parece que comete un error similar. Dice " y, en consecuencia, gran parte de sus entidades: registros y acumuladores, unidad lógica-aritmética (ALU) ... ", que suena como si estuviera diciendo que esas cosas coinciden con el ancho del bus de datos. La frase "una gran parte" implica que estás diciendo qué partes, no que solo sea cierto a veces para esas partes.
Peter Cordes