En la arquitectura x86, ¿por qué hay menos bits de espacio de direcciones virtuales que físicos?

11

Estaba leyendo este artículo sobre computación de 64 bits, y menciona:

Por ejemplo, la arquitectura AMD64 a partir de 2011 permitió 52 bits para la memoria física y 48 bits para la memoria virtual

Creo que tendría más sentido permitir más memoria virtual que memoria física, entonces, ¿por qué en realidad es al revés?

Pregunta adicional: ¿Qué significa "permitir" 52 o 48 bits en una arquitectura de 64 bits? ¿Para qué se usan los otros bits?

dougvk
fuente
Para x86, los bits VA no utilizados deben ser una extensión de signo del MSbit del VA. (ARM AArch64 ofrece la opción de permitir que el hardware ignore 8 MSbits para que se puedan usar convenientemente para las etiquetas. El procesador Azul Systems Vega, parte de un dispositivo Java, proporcionó 16 bits de VA para las etiquetas). En la tabla de páginas, los bits de PA reservados deben ser cero (principalmente para garantizar que el software no intente usarlos y romper la compatibilidad con el hardware posterior).
Paul A. Clayton

Respuestas:

11

Aquí hay una imagen de una tabla de páginas AMD64 (de la Guía del Programador de Arquitectura AMD, Vol. 2, Rev 3.23, 2013, página 132).

Tabla de páginas AMD64 Longmode

El tamaño "natural" de una página en la arquitectura AMD64 es 2 12 = 4096 bytes. (Hay modos en los que puede tener 2 páginas de 21 = 2Mbytes, pero las vamos a ignorar por ahora).

Cada entrada de tabla de página (PTE) (o, dependiendo del nivel llamado PDE, PDPE o PML4E) es de 64 bits = 2 3 bytes. Entonces hay 2 9 entradas por página. Entonces, 4 niveles de tabla de páginas le dan 4x9 + 12 = 48 bits de dirección virtual por proceso. Recorrer la tabla de páginas es costoso, por lo que no se expandirán a 5 o 6 niveles a menos que exista / hasta que exista una demanda del consumidor.

No estoy seguro de por qué decidieron un límite de dirección física de 52 bits. Esto puede extenderse hasta 63 bits en el futuro. A precios de octubre de 2013 (aproximadamente 1US $ / Gigabit para chips de 4Gbit) costaría más de 32,000,000.00 US $ construir una memoria de 2 52 bytes, por lo que pasará un tiempo antes de que haya una demanda significativa para aumentar el límite de dirección física. Hay todo tipo de razones por las que desea mantener las direcciones físicas lo más pequeñas posible: las etiquetas TLB y de caché deben contener direcciones físicas, por ejemplo.

No es necesariamente al revés que haya más memoria física que virtual. La memoria virtual es por proceso, mientras que la memoria física es compartida por todos los procesos. Por lo tanto, un servidor con direcciones virtuales de 48 bits y 2 52 bytes de memoria podría admitir 16 procesos simultáneos y aún así garantizar que no sea necesario intercambiar.

Lógica Errante
fuente
Vale la pena señalar que los arquitectos de computadoras han aprendido a exigir que los bits superiores sean utilizados por el hardware, generalmente por extensión de signo para adaptarse al uso común de direcciones negativas para el sistema operativo ("¿Para qué se usan los otros bits?"). Además, con el almacenamiento en caché de la entrada del directorio Ln, una tabla de 5 niveles no necesita recorrerse la mayor parte del tiempo. Los bits PTE 52:62 están reservados para el software, por lo que no se pueden usar para direcciones físicas sin romper la compatibilidad, limitando las páginas de 4KiB a 52 bits de PA. Además, Linus Torvalds se enfurece contra PAE (VA> PA parece simplificar el diseño del sistema operativo "tradicional").
Paul A. Clayton
"Esto puede extenderse hasta 63 bits en el futuro". Bueno, no, no sin cambiar la estructura de la tabla de páginas. Tal como están las cosas, los bits 52 a 62 del PxE están reservados para uso del sistema operativo. Y los sistemas operativos los están utilizando (Windows usa ese campo para un "índice de lista de conjuntos de trabajo"), por lo que los arquitectos de procesadores no tienen libertad para expandir el campo PFN en ellos. Por supuesto, sería posible tener una opción similar a PAE en el futuro que cambiaría la estructura de PT para permitir más bits de PFN, pero eso sería un cambio arquitectónico significativo.
Jamie Hanrahan
3

Algunos puntos a considerar, la RAM física es costosa. Claro, 16 GB es más barato ahora que 4 GB era solo hace unos años, pero 2 ^ 64 (16 exabytes) ridículamente grandes.

Entonces, las extensiones de AMD de x86 para x64 "permitieron" hasta 2 ^ 52 al limitar los registros . Esto hace dos cosas, reduce el costo de los procesadores y mejora el rendimiento. Más registros que no se utilizan significa que hay mucho espacio vacío que aún debe tenerse en cuenta durante las operaciones.

Y, en caso de que no seas matemático ... ¡La diferencia entre tres tamaños es enorme! No soy un gurú de las matemáticas, pero el número decimal de 52 bits es aproximadamente 0,02% de 64 bits. 48 bits es el 6% de 52. (¿alguien revisa mis matemáticas?)

En cuanto a por qué AMD permitió más RAM física que virtual, el artículo establece que es porque AMD estaba pensando en servidores. Los servidores necesitan grandes cantidades de RAM física. La RAM virtual es demasiado lenta para admitir las aplicaciones de servidor promedio para cientos o miles de empleados.

Mis propios pensamientos: hemos dejado el tiempo en que la RAM era pequeña, y los discos duros tenían que soportar RAM. El precio en RAM ha caído a un punto en el que la persona promedio puede poner RAM más que suficiente. Tome aplicaciones típicas, como Office, que requiere 1-2 GB de RAM. Mi computadora hace 7 años pudo manejar eso. Aunque con velocidades de lectura y escritura en el disco, espero nunca tener que recuperar un archivo de 7GB de la memoria virtual (usando la antigua filosofía PM * 2.5).

También puedo suponer que AMD quería dejar espacio para los registros que usan los registros físicos de RAM, como la RAM en las GPU integradas.

Austin T French
fuente