La traducción de direcciones virtuales es necesaria por varias razones:
-
Se puede abordar más RAM de las que hay disponibles. Por ejemplo, la CPU de mi computadora portátil puede ocupar 256 TB de memoria, mientras que solo tiene 8 Gb de memoria. Este espacio de direcciones adicional le permite al kernel asignar mucha más memoria de la que está disponible, y puede intercambiar páginas a disco por aplicaciones que no se están utilizando.
-
La traducción de direcciones virtuales evita la fragmentación de la memoria. Imagine un programa que la frecuencia asigna y desasigna objetos grandes, el tamaño de una página de memoria. Si las direcciones fueran físicas, el espacio de la memoria se fragmentaría rápidamente, sin grandes áreas de memoria libres. Sin embargo, el kernel puede volver a asignar las direcciones físicas y virtuales para que siempre haya una gran parte de la memoria libre, y si parte del espacio de direcciones está fragmentado, ¿y qué? Solo las páginas de la memoria que están en uso deben estar respaldadas por la memoria física, y hay un montón de espacio de direcciones para poner nuevas asignaciones.
-
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 desactivas el direccionamiento virtual, ellos y otros ataques se vuelven mucho más fáciles porque entonces conoces 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.