Si el espacio de direcciones virtuales puede ser mayor que el espacio de direcciones físicas, ¿cómo se almacenan las asignaciones de direcciones en la memoria?

14

Digamos que estamos trabajando con un sistema que tiene 40 bits de dirección física. El espacio total de direcciones físicas (suponiendo que la memoria direccionable por bytes) es bytes, o 1 TiB. Y si las direcciones virtuales tienen 48 bits de longitud, eso significa que hay más direcciones disponibles para la memoria virtual que ubicaciones en la memoria física.240

Esto tiene sentido para mí, porque las direcciones "en exceso" también podrían referirse a ubicaciones de disco duro. Sin embargo, lo que no entiendo es cómo se produce la traducción entre direcciones virtuales y físicas. Supongo que hay un mapeo almacenado en algún lugar que vincula las ubicaciones de VAS a las ubicaciones físicas. Si hay más ubicaciones de direcciones virtuales que ubicaciones físicas, ¿cómo pueden almacenarse todas estas asignaciones en la memoria? Como mínimo, necesitaría 48 bits para almacenar cada dirección virtual, y luego otros 40 para almacenar la ubicación física a la que se asigna. Obviamente, no puede almacenar una asignación 1: 1 de cada dirección virtual a su contraparte física, ya que asignar cada ubicación requeriría más memoria que la memoria física en sí.

¿Qué es exactamente lo que me estoy perdiendo aquí?

Brad Power
fuente
No puede hacer eso incluso con una pequeña cantidad de memoria y espacio de direcciones. Si tuviera direcciones físicas de 16 bits y direcciones virtuales de 16 bits, ¡todavía no podría almacenar todas las asignaciones 1: 1!
user253751
2
El problema es más complejo incluso de lo que piensas. Las computadoras rara vez tienen TB de memoria, por lo que la memoria física es MUCHO menor que el espacio de direcciones virtuales. Peor otra vez: ¡Cada proceso tiene su espacio de direcciones virtuales completamente separado!
Mooing Duck
Además de las ubicaciones del disco duro, solo tiene bits / espacio de sobra para desperdiciar. Por ejemplo, puede tener una gran región debajo de la pila sin asignar para evitar desbordamientos no detectados. Puedes aleatorizar lo que cargas y evitar otra clase de ataques . Desea indicar con un solo bit si la dirección pertenece al kernel o al usuario; siga adelante aunque esté desperdiciando la mitad del espacio. Si bien la mayoría de los libros de texto se concentran en el aspecto de paginación de la memoria virtual, hay mucho más.
Maciej Piechotka
(También tenga en cuenta que las direcciones pueden tener alias, lo que a veces es útil, por lo que VA A y dirección B se refieren al mismo PA P aunque A! = B.)
Maciej Piechotka

Respuestas:

26

El truco para hacer que esto funcione es la "paginación". Cuando trae datos de un disco duro a la memoria física, no solo trae unos pocos bytes. Traes una página entera. 4k bytes es un tamaño de página muy común.

Si solo necesita hacer un seguimiento de las páginas, no de cada byte individual, la asignación se vuelve mucho más barata. Si tiene un espacio de direcciones de 48 bits y páginas de 4096 bytes, solo necesita rastrear cuál de las 2 ^ 36 páginas (aproximadamente 69 mil millones de páginas). Eso es mucho más fácil! El registro de dónde se encuentran todas las páginas se conoce como "tabla de páginas".

Si realmente necesita 1-256 TiB de memoria, entonces renunciar a unos pocos gigabytes para almacenar esta tabla de páginas no es gran cosa. Sin embargo, en la práctica, haremos cosas como usar tablas de páginas de varios niveles , lo que nos permite ser un poco más eficientes, manteniendo páginas solo para regiones del espacio de direcciones que realmente estamos usando.

Cort Ammon - Restablece a Monica
fuente
66
Un archivo de página es un término de Windows para un archivo físico en disco que contiene el contenido de los marcos de página físicos que se reclamaron por falta de memoria, cuyo contenido debe mantenerse. Si no me equivoco, la estructura de datos que asigna direcciones de página virtuales a direcciones de página físicas debería llamarse tabla de páginas .
Restablece a Monica - ζ--
@hexafraction Creo que tienes razón. He hecho el cambio.
Cort Ammon - Restablece a Mónica el
2
Cuando la memoria real es grande, otra forma de reducir la memoria necesaria para las tablas de páginas es permitir páginas más grandes. x86 tiene una opción para mezclar 4 páginas KiB con 2/4 páginas MiB.
Nate Eldredge