¿Es necesario el chip MMU (Unidad de administración de memoria) para que un procesador tenga soporte de memoria virtual?

14

¿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).

yoyo_fun
fuente
Cualquier computadora totalmente capaz puede emular cualquier otra computadora con un impacto de rendimiento suficiente. O emular cualquier hardware. La única pregunta es la magnitud del golpe de rendimiento.
Vality
Cada procesador de hoy necesita un TLB, por lo que tiene una unidad MM incorporada.
rastafile el

Respuestas:

22

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...).

Stephen Kitt
fuente
Entonces, ¿las aplicaciones de máquinas virtuales también tienen un componente de emulador MMU?
yoyo_fun
Sí, no necesariamente como un componente separado, pero tienen el soporte necesario en la emulación.
Stephen Kitt
77
@JenniferAnderson: algunas CPU modernas tienen características que permiten que el emulador descargue (parcialmente) la emulación de MMU a la propia MMU. Por ejemplo, un programa que se ejecuta dentro de un emulador usará varias páginas de memoria emuladas, estas páginas de memoria están, por supuesto, "anidadas" en las páginas de memoria utilizadas por el emulador. Las CPU Intel y AMD de gama alta más nuevas tienen soporte para tablas de páginas anidadas, lo que permite que el emulador exprese esta anidación dentro de la propia MMU, en lugar de tener que emularla (costosamente).
Jörg W Mittag
@ Jörg de hecho, gracias por la aclaración. Sin embargo, la mayoría de los hipervisores todavía incluyen algún nivel de emulación de software para que funcionen sin el soporte de hardware adicional. Me parpadeó el aspecto "¿Es posible" de la pregunta ;-).
Stephen Kitt
3
@ JenniferAnderson: Sí, esta funcionalidad se introdujo específicamente para la para-virtualización. (Tenga en cuenta que no es nada nuevo, la para-virtualización asistida por hardware ha existido en el mundo del mainframe desde principios de la década de 1960). Sin embargo, resulta que también se puede utilizar para otras aplicaciones interesantes, como acelerar la recolección de basura (ver el colector C4 en Zing JVM de Azul, por ejemplo). Sin embargo, tenga en cuenta que todo esto funciona en ambas direcciones: de la misma manera que extender MMU con soporte de virtualización no es más que una optimización de rendimiento y virtualización ...
Jörg W Mittag
7

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 GlobalLocky GlobalUnlock, LocalLocky LocalUnlockfunciones. 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.

MSalters
fuente
7

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.

Toby Speight
fuente
2
Sin embargo, eso no es realmente memoria virtual, es solo intercambio de procesos ... (¡Realmente necesitaríamos definir "memoria virtual" para una respuesta adecuada a esta pregunta!)
Stephen Kitt
Cada proceso tiene su propia vista del espacio de direcciones: editaré para aclarar la definición que estoy usando.
Toby Speight
Correcto, pero es el mismo mapeo uno a uno para todos los procesos. (Desde el punto de vista de los procesos, no hay mucha diferencia, así que no hay una discusión real allí ...)
Stephen Kitt
0

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.

usuario3717661
fuente
-1

La mayoría de los procesadores de escritorio, portátiles y servidores incluyen uno o más TLB en el hardware de administración de memoria, y casi siempre está presente en cualquier procesador que utilice memoria virtual paginada o segmentada .

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)

archivo de rasta
fuente