memory - recomendada - memoria virtual sistemas operativos
¿Por qué necesitamos memoria virtual? (3)
El objetivo principal de la memoria virtual es la multitarea y la ejecución de programas de gran tamaño. Sería genial usar memoria física, porque sería mucho más rápido, pero la memoria RAM es mucho más costosa que la ROM.
¡Buena suerte!
Entonces, entiendo que cada proceso tiene su propio espacio de memoria virtual que va de 0x0 a 0xFF .... F. Estas direcciones virtuales corresponden a las direcciones en la memoria física (RAM). ¿Por qué es útil este nivel de abstracción? ¿Por qué no usar las direcciones directas?
Entiendo por qué la búsqueda es beneficiosa, pero no la memoria virtual.
Hay muchas razones para hacer esto:
Si tiene un binario compilado, cada función tiene una dirección fija en la memoria y las instrucciones de ensamblaje para llamar a las funciones tienen esa dirección codificada. Si la memoria virtual no existiera, dos programas no podrían cargarse en la memoria y ejecutarse al mismo tiempo, ya que posiblemente necesitarían tener diferentes funciones en la misma dirección física.
Si dos o más programas se ejecutan al mismo tiempo (o están cambiando de contexto entre ellos) y usan direcciones directas, un error de memoria en un programa (por ejemplo, leer un puntero malo) podría destruir la memoria utilizada por el otro proceso, eliminando múltiples programas debido a un solo bloqueo.
En una nota similar, hay un problema de seguridad donde un proceso podría leer datos confidenciales en otro programa al adivinar en qué dirección física estaría ubicado y simplemente leerlo directamente.
Si intenta combatir los dos problemas anteriores desplazando toda la memoria de un proceso al cambiar a un segundo proceso, incurrirá en un golpe de rendimiento masivo porque es posible que tenga que sacar toda la memoria.
Dependiendo del hardware, algunas direcciones de memoria pueden estar reservadas para dispositivos físicos (por ejemplo, RAM de video, dispositivos externos, etc.) Si los programas se compilan sin saber que esas direcciones son significativas, podrían romper físicamente los dispositivos enchufados al leer y escribiendo en su memoria. Peor aún, si esa memoria es de solo lectura o de solo escritura, el programa podría escribir bits en una dirección esperando que permanezcan allí y luego volver a leer los valores diferentes.
¡Espero que esto ayude!
Respuesta corta: El código del programa y los datos necesarios para la ejecución de un proceso deben residir en la memoria principal a ser ejecutada, pero la memoria principal puede no ser lo suficientemente grande para acomodar las necesidades de todo un proceso.
Dos propuestas
(1) Usar una memoria principal muy grande para aliviar cualquier necesidad de asignación de almacenamiento: no es factible debido a un costo muy elevado.
(2) Memoria virtual: permite la ejecución de procesos que pueden no estar totalmente en la memoria mediante la asignación de almacenamiento automático bajo pedido. El término memoria virtual se refiere a la abstracción de la separación de la memoria LÓGICA - memoria tal como se ve en el proceso - de la memoria FÍSICA - memoria vista por el procesador. Debido a esta separación, el programador necesita conocer únicamente el espacio de memoria lógica mientras el sistema operativo mantiene dos o más niveles de espacio de memoria física.
Más:
Los primeros programadores de computadoras dividieron los programas en secciones que se transfirieron a la memoria principal durante un período de tiempo de procesamiento. A medida que los lenguajes de nivel superior se hicieron populares, la eficiencia de los programas complejos sufrió por los sistemas de superposición pobres. El problema de la asignación de almacenamiento se volvió más complejo.
Surgieron dos teorías para resolver el problema de la gestión ineficiente de la memoria: asignación estática y dinámica . La asignación estática supone que se puede predecir la disponibilidad de recursos de memoria y la cadena de referencia de memoria de un programa. La asignación dinámica depende de que el uso de la memoria aumente y disminuya con las necesidades reales del programa, no de predecir las necesidades de memoria.
Los objetivos del programa y los avances de la máquina en los años 60 hicieron difíciles, si no imposibles, las predicciones requeridas para la asignación estática. Por lo tanto, la solución de asignación dinámica fue generalmente aceptada, pero las opiniones sobre la implementación aún estaban divididas.
Un grupo creía que el programador debería seguir siendo responsable de la asignación de almacenamiento, lo que se lograría mediante llamadas al sistema para asignar o desasignar la memoria. El segundo grupo admitió la asignación automática de almacenamiento realizada por el sistema operativo, debido a la creciente complejidad de la asignación de almacenamiento y la importancia emergente de la multiprogramación.
En 1961, dos grupos propusieron una tienda de memoria de un nivel. Una propuesta requería una memoria principal muy grande para aliviar cualquier necesidad de asignación de almacenamiento. Esta solución no fue posible debido a un costo muy alto. La segunda propuesta se conoce como memoria virtual.
cne / modules / vm / green / defn.html