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.
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í?
fuente
Respuestas:
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.
fuente