¿Es posible soportar múltiples procesos sin soporte para memoria virtual?

8

¿Es posible soportar múltiples procesos sin soporte para memoria virtual? Me gustaría saber más al respecto si es así.

Sen
fuente
¿Posiblemente fuera de tema? A menos que se trate solo de sistemas UNIX.
Maciej Piechotka

Respuestas:

10

Puede ejecutar un sistema operativo multiproceso incluso sin soporte de hardware (sin MMU ), con todos los punteros que representan una dirección física. Sin embargo, pierde varias características clave que generalmente se proporcionan a través de MMU:

  • Dado que un puntero siempre apunta a un lugar específico en la RAM, no puede tener intercambio (o solo de una manera muy limitada). Normalmente, la MMU genera una excepción cuando no puede encontrar una página física para una dirección virtual determinada, y el controlador de excepciones proporcionado por el sistema operativo recupera la página del intercambio.
  • Dado que un puntero se desreferencia sin verificación, cada proceso puede acceder a la memoria de otros procesos y a la memoria del núcleo. Normalmente, la MMU genera una excepción cuando no puede encontrar una página física para una dirección virtual determinada, y el controlador de excepciones proporcionado por el sistema operativo finaliza el proceso para intentar un acceso no válido.
  • Dado que el mismo puntero tiene el mismo significado en diferentes procesos, no puede implementar fácilmente fork . Normalmente, el efecto de forkes hacer una copia¹ de la memoria física del proceso y crear un nuevo mapa de memoria virtual desde las mismas direcciones virtuales a las nuevas direcciones físicas.

Hay sistemas operativos tipo Unix que funcionan en sistemas sin MMU.

¹ En las unidades modernas, esto generalmente se hace de manera perezosa (copia en escritura), lo que nuevamente depende de que MMU genere una excepción cuando no puede encontrar una página física.

Gilles 'SO- deja de ser malvado'
fuente
En el segundo punto "cuando no puede encontrar una página física para una dirección virtual determinada" debería ser algo así como "cuando se debe denegar el acceso a la página correspondiente a la dirección virtual dada". La página del kernel es probablemente residente.
Ruslan
@Ruslan Cuando una página no está asignada en un proceso, la MMU generalmente contiene información que no se asigna a una página física. Puede suceder que la MMU contenga la dirección de una página física a la que el proceso no tiene acceso, pero esa es la excepción en lugar de la regla, utilizada para la memoria del kernel si el kernel usa esta función de la MMU (que Linux tiene) .
Gilles 'SO- deja de ser malvado'
2

Ciertamente es posible con algunas restricciones, como la protección de la memoria, que sería un problema como ya se dijo. Por ejemplo, µClinux http://www.uclinux.org/ admite múltiples procesos sin implementar memoria virtual. Tenga en cuenta que algunas CPU, como al menos los dispositivos analógicos Blackfin, proporcionan una MPU (Unidad de protección de memoria) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Esto permite que la memoria virtual menos sistemas operativos aún permita que la memoria se particione.

jlliagre
fuente
0

Esto depende de cómo defina el proceso frente a los hilos en términos de memoria.

Una de las funciones de la memoria virtual es la partición. Si bien es posible ejecutar múltiples procesos sin ninguna partición, esto sería más como ejecutar múltiples hilos que procesos, compartiendo el mismo espacio de direcciones.

sybreon
fuente
Si y no. Es posible forzar la separación de la memoria sin memoria virtual. Algunos microcontroladores tienen protección de memoria de hardware pero no memoria virtual (vea la respuesta de jlliagre ). E incluso sin soporte de hardware, puede forzar la separación de la memoria a través del análisis estático (no es fácil, pero es factible).
Gilles 'SO- deja de ser malvado'