La organización y administración de la “memoria principal ”, “memoria primaria” o “memoria real” de un sistema ha sido y es uno de los factores más importantes en el diseño de los S. O.
Los términos “memoria” y “almacenamiento” se consideran equivalentes.
Los programas y datos deben estar en el almacenamiento principal para:
* Poderlos ejecutar
* Referenciarlos directamente.
Se considera “almacenamiento secundario” o “almacenamiento auxiliar” al generalmente soportado en discos.
Los hechos demuestran que generalmente los programas crecen en requerimientos de memoria tan rápido como las memorias:
* “Ley de Parkinson parafraseada”: Los programas se desarrollan para ocupar toda la memoria disponible para ellos."
La parte del S. O. que administra la memoria se llama “administradormemoria”:
* Lleva un registro de las partes de memoria que se están utilizando y de aquellas que no.
* Asigna espacio en memoria a los procesos cuando estos la necesitan.
* Libera espacio de memoria asignada a procesos que han terminado
Si se encuentran varios programas de usuario:
¿ se concede a cada uno la misma cantidad de espacio o se divide el almacenamiento en porciones o “particiones” de diferente tamaño ?.
¿ se utilizará un esquema rígido de número y tamaño de particiones o un esquema dinámico y adaptable ?.
¿ se requerirá que los trabajos de los usuarios sean diseñados para funcionar en una partición específica o se permitirá que se ejecuten en cualquiera donde quepan ?.
¿ se requerirá o no que cada trabajo sea colocado en un bloque contiguo de memoria ?.
Administración del Almacenamiento.
¿ cuando el sistema lo pide específicamente o se intenta anticiparse a las peticiones ?.
¿ dónde se colocará el programa que se ejecutará a continuación ?:
¿ se prioriza el tiempo de carga o la optimización en el uso del almacenamiento ?.
¿ con qué criterio se desplazarán programas ?.
Jerarquía de Almacenamiento.
El almacenamiento principal es más costoso y menor que el secundario pero de acceso más rápido.
Los sistemas con varios niveles de almacenamiento requieren destinar recursos para administrar el movimiento de programas y datos entre niveles .

* Es más rápida y costosa que la memoria principal.
* Los programas en la memoria caché ejecutan mucho más rápido que en la memoria principal.
* Al utilizar memoria caché se espera que:
*La sobrecarga que supone el traspaso de programas de un nivel de memoria a otro sea mucho menor que la mejora en el rendimiento obtenida por la posibilidad de una ejecución mucho más rápida en la caché.
Se dividen en las siguientes categorías:
* Estrategias de búsqueda por demanda.
* Estrategias de búsqueda anticipada.
* Estrategias de colocación.
* Estrategias de reposición.
Se considera que la “búsqueda anticipada” puede producir un mejor rendimiento del sistema.
En la “asignación no contigua” un programa se divide en varios bloques o “segmentos” que pueden almacenarse en direcciones que no tienen que ser necesariamente adyacentes, por lo que es más compleja pero más eficiente que la asignación continua.
El tamaño de los programas está limitado por la cantidad de memoria principal, pero se puede superar este límite con técnicas de “recubrimientos”, con las siguientes características:
* Si una sección particular del programa ya no es necesaria, se carga otra sección desde el almacenamiento secundario ocupando las áreas de memoria liberadas por la sección que ya no se necesita.
* La administración manual por programa del recubrimiento es complicada y dificulta el desarrollo y el mantenimiento.
Multiprogramación de Partición Variable.
Los procesos ocupan tanto espacio como necesitan, pero obviamente no deben superar el espacio disponible de memoria.
No hay límites fijos de memoria, es decir que la partición de un trabajo es su propio tamaño.
Se consideran “esquemas de asignación contigua”, dado que un programa debe ocupar posiciones adyacentes de almacenamiento.
Los procesos que terminan dejan disponibles espacios de memoria principal llamados “agujeros”:
* Pueden ser usados por otros trabajos que cuando finalizan dejan otros “agujeros” menores.
* En sucesivos pasos los “agujeros” son cada vez más numerosos pero más pequeños, por lo que se genera un desperdicio de memoria principal. Combinación de agujeros (áreas libres).
Consiste en fusionar agujeros adyacentes para formar uno sencillo más grande.
Se puede hacer cuando un trabajo termina y el almacenamiento que libera tiene límites con otros agujeros.
Compresión o Compactación de Almacenamiento.
Puede ocurrir que los agujeros (áreas libres) separados distribuidos por todo el almacenamiento principal constituyan una cantidad importante de memoria:
* Podría ser suficiente (el total global disponible) para alojar a procesos encolados en espera de memoria.
* Podría no ser suficiente ningún área libre individual.

* Esta técnica se denomina “recogida de residuos”
* “Estrategia de mejor ajuste”:
*Un trabajo nuevo es colocado en el agujero en el cual quepa de forma más ajustada:
* Debe dejarse el menor espacio sin usar.
* “Estrategia de primer ajuste”:
* Un trabajo nuevo es colocado en el primer agujero disponible con tamaño suficiente para alojarlo.
* “Estrategia de peor ajuste”:
* Consiste en colocar un programa en el agujero en el que quepa de la peor manera, es decir en el más grande posible:
* El agujero restante es también grande para poder alojar a un nuevo programa relativamente grande.
Esta tecnología apareció en 1960 en la Universidad de Manchester (Inglaterra), en el sistema “Atlas”.
Los métodos más comunes de implementación son mediante:
* Técnicas de “segmentación”.
* Una combinación de ambas técnicas.
La evolución en las organizaciones de almacenamiento puede resumirse como sigue:
* Sistemas dedicados a un solo usuario.
* Sistemas de multiprogramación en memoria real:
* Multiprogramación en partición fija:
* Absoluta.
* Relocalizable (reubicable).
* Multiprogramación en partición variable.
* Multiprogramación en almacenamiento virtual:
* Paginación pura.
* Segmentación pura.
* Combinación paginación / segmentación.
Los mecanismos de “traducción dinámica de direcciones” (dat) convierten las direcciones virtuales en reales al ejecutarse el proceso.
Las direcciones contiguas dentro del espacio de direcciones virtuales de un proceso no tienen por qué ser contiguas dentro del almacenamiento real, a esto se denomina “contigüidad artificial.

* El compartimiento debe ser cuidadosamente controlado para evitar que un proceso modifique datos que otro proceso esta leyendo.
*Los programas se encuentran divididos en áreas separadas de “procedimiento” y “datos”.
*Los procedimientos no modificables se llaman “procedimientos puros reentrantes”.
*Los datos y procedimientos modificables no pueden ser compartidos.
*Los datos no modificables (ej.: tablas fijas) son compartibles.
* Se debe identificar cada página como compartible o no.
* Habrá marcos (celdas) de páginas compartidos por varios procesos.

* Reduce la cantidad de almacenamiento primario necesario para la ejecución eficaz de un grupo de procesos.
* Puede hacer posible que un sistema determinado mantenga una cantidad mayor de usuarios (procesos).
En los sistemas de “segmentación” un programa y sus datos pueden ocupar varios bloques separados de almacenamiento real.
Los bloques:
* No necesitan ser de igual tamaño.
* Los bloques separados no necesitan ser adyacentes.
* Deben estar compuestos de posiciones contiguas de almacenamiento.
Se complica la protección de bloques de memoria de un proceso de usuario.
Es más difícil limitar el rango de acceso de cualquier programa.
Un esquema posible de protección es el uso de claves de protección del almacenamiento.
* Las claves están bajo el control estricto del S. O.
* Un programa de usuario, a quien corresponde una cierta clave en la cpu, solo puede hacer referencia a los otros bloques del almacenamiento con igual clave de protección.
Un proceso solo puede ejecutarse si su segmento actual (como mínimo) está en el almacenamiento primario.
Los segmentos se transfieren del almacenamiento secundario al primario como unidades completas.
Un nuevo segmento puede ser colocado en una serie disponible de posiciones contiguas del almacenamiento primario de tamaño suficiente para alojar al segmento.
La traducción dinámica de direcciones utiliza una “tabla de mapa de segmentos”.