<aside> 💡 Cuando hablamos de memoria principal nos referimos a cómo administrar la memoria que tenemos, mientras que memoria virtual se refiere a cómo administrar la memoria considerando al disco como una extensión de la memoria real.
</aside>
La memoria es un recurso limitado y al tener programas más grandes se requiere más memoria, por lo tanto la memoria se tiene que manejar de manera eficiente evitando desperdiciarla.
Los distintos tipos de administración de memoria que se tratan en la unidad son
Los dos primeros tipos tienen el requerimiento contigüidad.
Este es el primer tipo de administración de memoria, donde un único programa se carga asignándole toda la memoria que no ocupa el sistema operativo.
Al principio, la computación se ejecutaba en modo monoprogramación. Esto significa que se cargaba un programa y se ejecutaba hasta llegar a su fin. Una vez terminado, se cargaba otro programa. Si se graficara esto, se vería reflejada la memoria donde una parte está ocupada por el sistema operativo y todo el resto está disponible. En la monoprogramación, ese espacio disponible se asigna al proceso cargado en memoria.
Como la monoprogramación es muy ineficiente con respecto al uso de recursos, específicamente con el CPU, se inventó la multiprogramación, donde la idea es que un proceso se pone a ejecutar y cuando ese proceso solicita una operación E/S, entra otro proceso en ejecución con el objetivo de mantener siempre en funcionamiento al CPU.
Para poder implementar multiprogramación había que dividir la memoria en distintos espacios llamados particiones, y cuando un proceso se cargaba en memoria, se tenía que cargar en una partición.
Tanto en la monoprogramación, la cual tiene un tipo de administración de memoria llamada administración de memoria simple y contigua, como en la multiprogramación que tiene administración de memoria particionada, era necesario que el programa cuando se cargue a memoria se lo cargue por completo, no existía la posibilidad de que se cargue solo una parte del programa y a medida que se necesita se carga el resto. Si un proceso era más grande que el espacio disponible, entonces no se podía ejecutar directamente. Otro requerimiento era que el programa se cargue de manera contigua.
Los primeros esquemas de administración de memoria eran administración de memoria simple (cuando se cargaban en un solo procesador) y administración de memoria contigua. La evolución de estos sistemas fue la partición de memoria.
En todos los casos mencionados siempre se tenía que implementar un mecanismo de protección que impida que un proceso invada memoria del sistema operativo. Por lo cual el hardware debería proveer esos mecanismos de protección. Realiza lo siguiente:
La CPU al ejecutar instrucciones, al ir a buscar la instrucción junto a sus operandos, genera direcciones de memoria. Entonces un componente de la CPU, llamado Memory Management Unit (MMU), Unidad de manejo de memoria, es responsable, entre otras cosas, de verificar si los accesos a memoria son correctos o no, para lo cual el MMU tiene internamente algunos registros, uno es el registro base y otro es el registro límite , en el gráfico dice base + limit ****(también lo podemos considerar base + tamaño del programa). En el registro base vamos a tener almacenado la dirección de memoria en la que comienza el programa y en el registro límite vamos a tener la dirección de memoria donde termina el programa, por eso se dice que es el registro base más el tamaño del programa.