Está en la página 1de 5

Manejo de la memoria.

Se quiere compartir memoria finita entre procesos sin que se den cuenta de que es compartida. Los
procesos van a creer que tienen toda la memoria disponible. Se va a separar la memoria del proceso o
memoria lógica de la memoria física.

Un proceso no genera direcciones físicas, sino que lógicas. La traducción de físicas a lógicas ocurre
durante toda la vida del proceso. Un primer proceso de traducción ocurre cuando se tiene una
memoria lógica, la cual a través de un chip puede acceder a un registro que contiene la memoria base
del proceso para así llegar a la física. Luego hay otro proceso que se encarga de chequear que la física
generada no esté fuera de los límites.

Requerimientos de un sistema de administración de memoria.

Reubicación: No queremos que un programa que pasa a ejecutarse y se convierta en proceso vaya
siempre en el mismo lugar de la memoria. Es deseable que un proceso pueda ubicarse en cualquier
lugar de la memoria debido a que si fueran fijas siempre debería tenerlas disponibles y de no ocurrir
eso no se podría colocar el proceso en memoria principal (ejemplo de la memoria como arreglo donde
solo podríamos poner el proceso en las direcciones del 0 al 10 y no en las que estén libres). En tiempo
de ejecución deberíamos ser capaz de resolver direcciones de memoria en cualquier lugar de la
memoria física. El programador no sabe dónde su programa será ubicado en memoria principal
cuando éste es cargado y ejecutado. Durante su ejecución, el proceso puede ser swapeado a disco y
vuelto a ser cargado en una ubicación distinta de memoria. Las referencias a memoria deben ser
traducidas a direcciones de memoria física.

Protección: Mi proceso usuario debería ser capaz de acceder a todas las direcciones de memoria
propias de ese proceso, pero no debería ser capaz de acceder a otras direcciones de otro proceso. Mis
direcciones son privadas. Los procesos no debieran ser capaces de referenciar direcciones de memoria
fuera de su espacio de direccionamiento (excepción: memoria compartida). Es imposible chequear
direcciones físicas en tiempo de compilación, por lo tanto, el chequeo se hace en tiempo de ejecución.
¿Qué pasa con memoria dinámica? Ya que el SO no puede anticipar todas las referencias a memoria
que un programa hará, es el hardware el que debe proveer los mecanismos de protección.

Compartición: Se debe permitir que los procesos compartan áreas de memoria. Sincronización. Es
mejor que compartan memoria a que cada proceso tenga una copia particular del dato.

Organización local (lógica): Los programas son organizados como módulos, por ejemplo: módulo de
datos, módulo de código, etc. Los módulos se pueden compilar independientemente uno de otros. Se
puede asignar distintos grados de protección a los diferentes módulos (read-only, execute-only). Los
módulos se pueden compartir entre procesos (visión virtual de los procesos). Segmentación.

Organización física: La memoria se organiza en niveles (por ejemplo: mem física, mem secundaria). El
movimiento de datos de un nivel a otro es responsabilidad del SO.
Particionamiento fijo

La memoria se divide en particiones del mismo tamaño. Si tamaño del proceso es menor o igual que el
tamaño de la partición, y existe una partición libre, entonces puede ser cargado en memoria. Se carga
todo el proceso. Si todas las particiones están ocupadas, el SO podría swapear a disco un proceso. Se
hace en tiempo de booteo.
Problemas:
 ¿Qué pasa si el proceso no cabe? Solo se da un trozo por proceso.
 Overlays: El trozo que falta sobrescribe al que ya está ocupado por el proceso.
 Particiones de distinto tamaño, pero fijas.
 Fragmentación interna: espacio dentro de la partición no usada por el proceso.

Particiones de igual tamaño: No importa dónde poner el proceso. Si la memoria está llena, swapear
alguno, ¿cuál? Algoritmos de reemplazo.

Particiones de varios tamaños: Podría asignar la partición más pequeña donde quepa el proceso (best-
fit). Si usamos una cola para cada partición se minimiza fragmentación interna. ¿Qué pasa si no hay
ningún proceso de un tamaño dado?

Ventajas:
• Método simple de implementar.
• Reubicación y protección sencillo.
• Mínimo overhead de software.

Desventajas:
• El número de particiones es fijo y determinado en tiempo de booteo lo cual limita el nivel de
multiprogramación.
• Procesos pequeños harán uso ineficiente del espacio.
• Siempre puede existir un proceso más grande que la partición más grande.

Particionamiento fijo de la memoria no es usado en SO modernos

Particionamiento dinámico

Toda la memoria comienza como una sola partición. No se hace en tiempo de booteo. Se crean
particiones del tamaño del proceso. Si existe suficiente memoria, se crea una partición del mismo
tamaño que la del proceso que se quiere cargar. El número y tamaño de las particiones varía.
Eventualmente la memoria se llena de espacios pequeños inútiles, por lo que se produce
fragmentación externa. Usar compactación (es caro y no conviene) para crear un único espacio
contiguo. No da los mismo donde se ubiquen los procesos, tiene consecuencias (elegir lo menos
malo).
Algoritmos de posicionamiento en particionamiento dinámico

• Best-fit: Usa el bloque de memoria más pequeño entre los suficientemente grandes para alojar al
proceso.

– Peor rendimiento
– El más lento
– Produce alta fragmentación externa
– Necesidad de compactar la memoria a menudo

• First-fit algorithm: Busca desde el comienzo el primer bloque que sirva

– El más veloz
– Generalmente es el que produce mejores resultados

• Next-fit: Busca desde la última posición el primer bloque que sirva

– Rendimiento marginalmente peor que First-fit

Tipos de direcciones

• Lógica: Referencia a una dirección de memoria independiente de la ubicación real en memoria


física. Se debe traducir en dirección física.
• Física: Dirección absoluta en memoria principal.
• Relativa: Dirección lógica expresada en términos relativos a otra dirección, requiere de un
pivote.

Segmentación

División en trozos de largo variable y no sufre de fragmentación interna, pero si de fragmentación


externa. Los segmentos de los procesos se ponen donde caigan. Los bits mas significativos me indican
el máximo de segmentos del proceso. El resto (offset) me da las direcciones posibles.

Paginación

Se divide el proceso en trozos finos de igual tamaño (paginas). La memoria también se divide en trozos
finos del mismo tamaño (marcos). Ya no se requiere de registros límites. Se requiere de un mecanismo
para mapear marcos con páginas. Tablas por proceso, paginas vs marco (estructura de datos). En vez
de un registro base, lo que se va a almacenar es la dirección de la tabla de páginas. Cada proceso tiene
su tabla de paginas y en un registro guardo la dirección de dicha tabla. Un proceso puede tener hasta
64 páginas y 1014 direcciones de memoria por página. Los bits significativos me dan el numero de
página, luego ubico el numero de marco y lo concateno al offset para obtener la memoria física.
Memoria Virtual

Estructuras de Hardware y Control

 Todas las referencias a memoria son direcciones lógicas y son mapeadas a direcciones físicas
en tiempo de ejecución. Recordar propiedad de Reubicación.
 Un proceso puede ser particionado en páginas o segmentos los cuales no necesariamente
están contiguos en memoria.
 No todas las páginas o segmentos de un proceso tienen que residir en memoria principal
durante su ejecución. No es eficiente que estén todas. No toda la imagen del proceso estará
cargada en memoria principal. En memoria voy a tener trozos de procesos no procesos
completos.

Ejecución de un programa

• El SO trae a memoria principal unos pocos trozos del programa.


• Este conjunto de páginas o segmentos (o en su defecto direcciones de memoria) es conocido como
conjunto residente (direcciones de memoria, trozos de proceso que están en memoria).
• Cuando el proceso intenta acceder a una dirección que no se encuentra en el conjunto residente, se
produce una falla de página (page-fault); el SO emite la interrupción apropiada.
• El SO pone al proceso en un estado bloqueado y emite un requerimiento para traer los trozos que
necesita.
– El SO emite un requerimiento de I/O a disco.
– Mientras tanto otro proceso de la cola de listo pasa a ejecución.
– Cuando el servicio de I/O está listo, el proceso vuelve a la cola de listos.

Cuando un proceso intenta acceder a una dirección que no se encuentra en el conjunto residente, se
bloquea, se trae la memoria invocada en un lugar libre y se repite la instrucción

Ventajas de este modelo

• Más procesos pueden residir en memoria


– Sólo se necesita una porción de cada uno.
– Con tantos procesos en memoria principal es muy probable que siempre exista un proceso en la cola
de listos.

• Un proceso puede ser más grande que toda la memoria principal disponible.

• Memoria real
– Memoria principal.

• Memoria virtual
– Visión lógica de la memoria
– Espacio en disco.
– Permite multiprogramación y libera al usuario de las restricciones de memoria real.
Principio de localidad

• Las referencias a líneas de código y datos en un proceso tienden a agruparse tanto espacial como
temporalmente
• Localidad espacial y temporal.
– Ej: si acceso a[i] en tiempo t es muy probable que acceda a[i+1] en t+1.
• Sólo un pedazo del proceso se necesita en un momento dado.
• Sería posible tomar decisiones inteligentes acerca de qué pedazo necesitaría en el futuro cercano.
• Esto indica que MV puede mejorar la eficiencia.
• Pero ¿qué pasaría si swapeo-out un pedazo del proceso justo antes de necesitarlo?
• Trashing: el SO pasa la mayor parte del tiempo en swap-in y swap-out en vez de ejecutar
instrucciones de los procesos.

MV con Paginación

• Cada proceso tiene su tabla de páginas.


• Cada entrada en la tabla contiene el número de marco en memoria principal donde dicha página fue
cargada.
• Se usa un bit de presencia (P) (o validez) para indicar si la página está en memoria o no.
• Se usa otro bit de modificación (M) (o suciedad) para indicar si la página ha sido modificada o no,
desde la última vez que se trajo a memoria principal.
• Si el bit M no ha sido seteado, entonces no es necesario escribir la página a disco (swap-out).
• Otros bits

También podría gustarte