¿Cuál es la necesidad de traducir la dirección virtual a la dirección física?

Estos son los puntos que leí en la Unidad de Gestión de Memoria de la arquitectura ARM:

  1. Las direcciones virtuales (o direcciones lógicas) son direcciones proporcionadas por el sistema operativo a los procesos.
  2. Un espacio de direcciones virtuales por proceso
  3. Los programas utilizan direcciones virtuales. A medida que se ejecuta un programa, el hardware (con la ayuda del sistema operativo) convierte cada dirección virtual en una dirección física.
  4. La conversión de una dirección virtual a una dirección física se llama traducción de direcciones.
  5. Cuando la MMU está apagada, la virtual actúa como salida a la dirección física.

Después de leer el quinto punto, quiero entender por qué se requiere la traducción de direcciones. ¿Es porque el tamaño de la memoria virtual es más pequeño que la memoria física? ¿Y por qué/cuándo se apagaría la MMU?

Imagine dos procesos que tienen la misma dirección virtual para una de sus variables.
Parece que te estás perdiendo los conceptos básicos de la memoria virtual y el direccionamiento virtual. ¿Has leído y entendido el artículo de Wikipedia al respecto?
@PlasmaHH ¡Ah! ¿Por qué surge ese caso?
@TonyM Sí, leí antes de publicar (también de otros sitios web), pero como lo mencionaste, lo revisaré una vez más (tal vez me perdí algo de lo que estás diciendo).

Respuestas (1)

La traducción de direcciones virtuales es necesaria por varias razones:

  1. Se puede abordar más RAM de la que hay disponible. Por ejemplo, la CPU de mi computadora portátil puede manejar 256 TB de memoria, mientras que solo tiene 8 Gb de memoria. Este espacio de direcciones adicional permite que el núcleo asigne mucha más memoria de la que está disponible, y puede intercambiar páginas en el disco para aplicaciones que no se están utilizando.

  2. La traducción de direcciones virtuales evita la fragmentación de la memoria. Imagine un programa cuya frecuencia asigna y desasigna objetos grandes, del tamaño de una página de memoria. Si las direcciones fueran físicas, el espacio de memoria se fragmentaría rápidamente, sin grandes áreas de memoria libres. Sin embargo, el kernel puede reasignar las direcciones virtuales y físicas para que siempre haya una gran parte de la memoria libre, y si parte del espacio de direcciones está fragmentado, ¿qué pasa? Solo las páginas de memoria que están en uso deben estar respaldadas por memoria física, y hay mucho espacio de direcciones para colocar nuevas asignaciones.

  3. Las direcciones virtuales brindan mayor seguridad. ¿Recuerdas esos errores de CPU a principios de este año, Spectre y Meltdown? Se basan en conocer cierta información sobre el mapeo de direcciones virtuales para diferentes procesos y el kernel. Si desactiva el direccionamiento virtual, estos y otros ataques se vuelven mucho más fáciles porque entonces conoce las direcciones del kernel y otros procesos.

En cuanto a por qué apagaría la MMU, solo puedo suponer que se refiere al estado de la MMU durante el inicio del procesador, antes de que el núcleo haya configurado la tabla de páginas. No apagaría la MMU durante el funcionamiento normal de un sistema operativo.

Es un ARM, a menudo se ejecuta sin sistema operativo o con un sistema operativo RT que no se preocupa por la separación de la memoria.
Es cierto, sin embargo, si el ARM tiene una MMU, no es uno de los microcontroladores cortex M, por lo que no es descabellado ponerle un sistema operativo. Y si está usando uno sin un sistema operativo multitarea, entonces la MMU realmente no importa y probablemente no se use.
Eso no es del todo cierto. En (¿algunos?) ARM, la caché de datos no funcionará sin MMU habilitado.