¿Es necesario el chip MMU (Unidad de administración de memoria) para que un procesador tenga soporte de memoria virtual?
¿Es posible emular la funcionalidad MMU en el software? (Soy consciente de que probablemente tendrá un gran impacto en el rendimiento).
Respuestas:
Cualquier emulador de sistema que emule un sistema que contenga una MMU emula efectivamente una MMU en el software, por lo que la respuesta a su pregunta como se indica es "sí". Sin embargo , la memoria virtual requiere alguna forma de imponer el control de acceso a la memoria, o al menos la traducción de direcciones, por lo que necesita una emulación completa del software de la CPU que ejecuta el software que se está controlando, o necesita asistencia de hardware.
Por lo tanto, podría construir un sistema sin MMU, conectar QEMU a él, agregar las piezas que faltan para que la memoria virtual sea realmente útil ( por ejemplo , agregar soporte para el intercambio en el sistema host) y ejecutar un sistema operativo que requiera MMU en QEMU, con toda la protección que esperarías en el sistema operativo invitado (salvo errores de QEMU).
Un ejemplo real y antiguo de una "emulación" sin MMU utilizada para proporcionar memoria virtual es la máquina Z , que era capaz de paginar e intercambiar su código y datos, en sistemas de 8 bits a finales de los setenta y principios de los ochenta . Esto funcionó emulando un procesador virtual en el procesador real subyacente; de esa manera, el intérprete mantiene el control total sobre el diseño de la memoria que el programa en ejecución "ve".
En la práctica, generalmente se considera que se requiere una MMU para el soporte de memoria virtual, al menos a nivel del sistema operativo. Como se indica kernel sin MMU? , es posible construir el kernel de Linux para que pueda ejecutarse en sistemas sin una MMU, pero la configuración resultante es muy inusual y solo apropiada para casos de uso muy específicos (sin un software hostil en particular). Es posible que no admita muchos escenarios que requieren memoria virtual (intercambio,
mmap
...).fuente
Depende exactamente de lo que llames memoria virtual. Un modelo interesante es el antiguo modelo Win16 (mejor conocido por el antiguo Windows 3.x, no Windows NT). En ese modelo, tenía
GlobalLock
yGlobalUnlock
,LocalLock
yLocalUnlock
funciones. Se trataba de una forma de gestión cooperativa y manual de la memoria virtual. Como esto se hizo en software (de aplicación), no requirió una MMU. Y la memoria era virtual en el sentido de que la memoria desbloqueada podía cambiarse al disco.Sin embargo, en el modelo Win16 no hay protección entre diferentes procesos. Si otro proceso dejara datos en la memoria, podría sobrescribirlos. Esta no es una restricción fundamental. Con los SSD rápidos en estos días, puede eliminar por completo un proceso que no se ejecuta de la memoria y hacerlo en un tiempo razonable.
fuente
No es necesario tener una MMU de hardware, si tiene un software que pueda intercambiar procesos hacia y desde la memoria física.
Este era el modo de operación de los primeros sistemas operativos multitarea. Solo un proceso reside en la memoria en un momento dado, se intercambia en su totalidad cuando caduca su segmento de tiempo (puede ver que esto se vuelve problemático con procesos grandes). El contenido de la memoria visto por el proceso actualmente en ejecución no es el mismo que el visto por cualquier otro proceso, y cada uno tiene su propia vista del espacio de direcciones.
Algún soporte de hardware es útil: una noción de un área de memoria "protegida" para uso propio del sistema operativo (por ejemplo, todas las direcciones con MSB configuradas son accesibles solo en modo supervisor) y un valor de "interrupción" que indica la dirección más alta en uso, pero administración de memoria el hardware no es un requisito absoluto para la memoria virtual; es solo una forma particularmente efectiva de lograrlo.
fuente
Las máquinas comerciales originales para hacer VM no tenían MMU: tenían VM incorporada en el procesador. Mi opinión actual es que las MMU son solo una idea de último momento para colocar la VM en la parte superior de los procesadores que no son VM. VM se desarrolló en la Universidad de Manchester, y los diseñadores de Burroughs estaban convencidos de que deberían incluirlo, aunque eran muy innovadores en ese momento.
Los Burroughs B5000 (ahora máquinas Unisys MCP) usaron descriptores de memoria que imponen los límites de la memoria: salgan de un límite y su programa será abandonado (respetar los límites es la base de una sociedad agradable, pero algunos abusan del privilegio, por lo que los límites deben aplicarse).
Los descriptores contienen una dirección de memoria, longitud de bloque y tipo de datos, pero también el importante bit P o bit de presencia. El bit p indica que el bloque está en la memoria. Un p-bit de cero significa que el bloque está en almacenamiento masivo y la dirección es la dirección de almacenamiento, ya sea en el programa original (código o datos) o en VM (datos desplegados).
Estas máquinas implementaron un modelo de memoria jerárquica. Las MMU parecen compensar las deficiencias de la memoria plana, ya que necesitan asignar objetos de usuario a la memoria plana. JK Iliffe también diseñó máquinas ICL con este modelo:
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
La diferencia entre estas máquinas y la mayoría de las actuales es que abordan la arquitectura completa del sistema, no solo una arquitectura de CPU.
Por lo tanto, parece que no solo no son necesarias las MMU, sino que los sistemas están mejor sin ellas.
fuente
Translation_lookaside_buffer
Y luego, lea acerca de la memoria virtual, y para qué es realmente. El gran espacio virtual de direcciones no es la idea principal. La idea principal es el almacenamiento en caché / almacenamiento en búfer, en muchos niveles.
Está lejos de ser simple, pero esta caché de memoria TLB es una pieza importante de hardware sobre la que se basa el subsistema mm del kernel (de lo contrario, VM estaría en gran parte sobrecargada).
VM =
memoria virtual O máquina virtual. Muy diferente, muy conectado.
Entonces la respuesta es no, no es necesario un chip MMU (una unidad separada fuera de la CPU, en la placa base).
Sí, es necesario algo de MMU de hardware (en la CPU) para pensar en una máquina virtual útil. (Comenzó con esta segmentación 8086 , para la plataforma x86)
fuente