Está en la página 1de 25

Sistemas de Operación

Gestión de Memoria

Prof. Homer Garcia


AGENDA
1. Gestión de Memoria - Concepto
2. Espacio de Direcciones ➔ Abstracción
Concepto
Registros base y límite
Swapping
3. Administración de memoria
Bitmaps – Listas Enlazadas
4. Memoria Virtual
La historia
Gestión de memoria
• Procesos comparten la CPU ➔ También comparten
la memoria física ➔ Veremos algunos de los
mecanismos del SO para hacer esto

• Proceso ➔ necesita algo de memoria para almacenar


su código y sus variables

• Mas de un proceso en la memoria al mismo tiempo ➔


SO debe administrar la memoria (recurso) ➔
Evitando que los procesos dañen la memoria de los
demás y garantizando que cada proceso tenga
suficiente memoria (ni demasiado, ni muy poco)
Gestión de memoria
• Exponer la memoria física a los Procesos
tiene desventajas:
• Puede dañar el SO ➔ Procesos con
accesos indebidos a memoria ➔ Se
requiere Protección
• Díficil tener varios procesos en
ejecución concurrentemente
(Multiprogramación) ➔ Requiere
Reubicación
• Varios Procesos en memoria al mismo
tiempo sin que interfieran entre si ➔ Hay
que asegurar Protección y
Reubicación
Gestión de memoria
• Se tiene una Jerarquía de Memoria
• Cache (rápida y costosa)
• Principal (media) ➔ RAM
• Disco (lenta y barata)
• Gestión de memoria ➔ usar esta jerarquía para crear
una abstracción de memoria de fácil acceso
• SO ➔ Administrador eficiente de memoria
• Llevar el registro de cuáles partes de la memoria están en
uso
• Asignar memoria a los procesos cuando la necesiten
• Desasignarla cuando terminen o se intercambien a disco
Espacio de direcciones
• Se crea la abstracción para el manejo de la
memoria ➔ Espacio de Direcciones
• ¿Qué es? ➔ Conjunto de Direcciones que
puede usar un Proceso para direccionar la
memoria
• Cada Proceso tiene su propio espacio de
direcciones lógicas
• Independiente a las de los otros procesos
(excepciones donde los procesos pueden
compartir parte de sus espacios de
direcciones)
Registros Base y Limite
• Uno de los primeros mecanismos utilizados para
proteger el SO y para proteger los procesos
entre sí fue la creación de particiones
• Forma de relocalización dinámica ➔ Asocia
espacio de direcciones de cada proceso sobre una
parte distinta de memoria física ➔ usada hasta el
Intel 8088
• Base ➔ contiene la dirección física donde
comienza el programa
• Límite ➔ contiene la longitud del programa
Registros Base y Limite

• Proceso hace referencia a memoria (obtener instrucción, leer o


escribir dato) ➔ HW del CPU chequea si la dirección < Límite ➔ Si
es asi, suma la Base a la dirección generada por el proceso (lógica) ➔
de lo contrario, genera un fallo y aborta el acceso
• La comparación y la adición tienen que ser hechas para cada
instrucción
Registros Base y Limite

Se suma 16384 a JMP 28 ➔Hardware suma 16384 a 28 ➔


Resultando en JMP 16412
¿Cómo correr a la vez, más procesos de los que
pueden ubicarse en memoria?
• En la práctica ➔ No pueden mantenerse todos los
Procesos en memoria ➔ Muchos y muy grandes
• Dos aproximaciones para tratar la sobrecarga de
memoria
• Swapping ➔ Traer el proceso completo a
memoria desde disco, correrlo por un momento
y regresarlo a disco
• Memoria Virtual ➔ Permitir al proceso correr a
pesar de que en memoria principal solo está
una parte de el y la otra parte está en disco
Swapping

Cuando el swapping crea varios huecos en la memoria, es


posible combinarlos todos en uno grande desplazando los
procesos lo más hacia abajo que sea posible ➔
compactación de memoria ➔ Toma mucho tiempo
Procesos pueden crecer cuando se ejecutan
• Cantidad de memoria a asignar cuando el proceso se
crea o se intercambia ➔ Aspecto importante
• Si los procesos se crearan con un tamaño fijo que nunca
cambia ➔ SO asigna exactamente lo necesario
• Si crecen cuando se ejecutan:
• Stack (direcciones de retorno y variables locales)
• Segmento de datos (variables las cuales se le asigna
memoria dinamicamente ➔ Heap)
• Parece buena idea para reducir sobrecarga de memoria
➔ Asignar memoria extra para ambos
• No obstante al intercambiar a disco solo se intercambia
la memoria en uso ➔ Desperdicio traer huecos al disco
Dos maneras de asignar espacio para crecer

(a) Procesos con un segmento de datos en crecimiento


(b) Procesos con dos segmentos de crecimiento ➔ Pila en crecimiento
hacia abajo y segmento de datos en crecimiento hacia arriba
Administración de Memoria Libre
• Dos técnicas para llevar el registro del uso
de la memoria

• Bitmaps ➔ Mapa de bits


• Linked lists ➔ Listas enlazadas o libres
Bitmaps

Una parte de la memoria con


cinco procesos y tres huecos

• Memoria se divide en unidades de asignación (UA) tan pequeñas como unas


cuantas palabras y tan grandes como varios kilobytes
• Para cada UA ➔ un bit en el mapa de bits ➔ 0 si está libre y 1 si está ocupada
• UA muy pequeña ➔ mayor será el mapa de bits
• Ej. UA = 4 bytes ➔ 32 bits de memoria sólo requerirán 1 bit del mapa
• UA grande ➔ mapa de bits pequeño ➔ podría desperdiciar una cantidad
considerable de memoria en la última unidad del proceso ➔ Fragmentación
interna
Bitmaps
• Ventaja ➔ Forma compacta de mantener el
registro de la memoria, que sólo depende del
tamaño de la memoria y el tamaño de la unidad
de asignación

• Desventaja ➔ para asignar memoria a un


proceso de k UA, el administrador de memoria
debe buscar en el mapa, hasta encontrar una
serie de k bits consecutivos con el valor 0 ➔
Operación Lenta
Listas enlazadas

Cada entrada en la lista ➔ Un hueco (H) o un Proceso (P), la dirección en la que


inicia, la longitud y un apuntador a la siguiente entrada
Lista ordenada por dirección ➔ ventaja cuando termina un proceso o se
intercambia ➔ el trabajo de actualizar la lista es simple
Listas enlazadas – Desasignar memoria

• Cuatro combinaciones de los vecinos para el proceso X en


terminación
• Para este proceso de mezclar huecos (compactar) puede ser
más conveniente tener una lista doblemente enlazada
Listas enlazadas – Asignar memoria
• Procesos y huecos están en una lista ordenada por
dirección ➔ existen varios algoritmos para asignar
memoria cuando el proceso es creado o intercambiado
desde disco
• Algoritmos:
• Primer ajuste (First fit): el administrador de memoria
explora la lista hasta encontrar un hueco que sea lo
suficientemente grande ➔ Rápido, busca lo menos
• Siguiente ajuste (Next fit): Funciona como anterior, pero
lleva registro de dónde descubre un hueco adecuado ➔ La
siguiente vez que es llamado, empieza desde el lugar en el
que se quedó la última vez, en lugar de empezar siempre
desde el principio ➔ rendimiento ligeramente menor que el
del primer ajuste
Listas enlazadas – Asignar memoria
• Algoritmos:
• Mejor ajuste (Best fit): busca en toda la lista, de principio a
fin y toma el hueco más pequeño que sea adecuado ➔ más
lento que el del primer ajuste, ya que debe buscar en toda
la lista ➔ También provoca más desperdicio de memoria
que los anteriores, debido a que tiende a llenar la memoria
con huecos pequeños e inutilizables
• Peor ajuste (Worst fit): tomar siempre el hueco más grande
disponible ➔ no es buena idea
Listas enlazadas – Asignar memoria

Ej. asignar memoria a proceso de 16 MB


Listas enlazadas – Asignar memoria
Los cuatro algoritmos pueden ser acelerados ➔ con
listas separadas para los procesos y los huecos ➔
dedicándose solo a inspeccionar los huecos, no los
procesos

Si lista de huecos se ordena por tamaño ➔ Los algoritmos


del primer ajuste y del mejor ajuste son igual de
rápidos, y se hace innecesario usar el del siguiente ajuste

Surge otro algoritmo de asignación ➔ ajuste rápido


(Quick fit), que mantiene listas separadas para algunos
de los tamaños más comunes solicitados ➔ Muy rápido
Listas enlazadas – Asignar memoria
El precio inevitable que se paga por esta aceleración en la
asignación es la complejidad y desaceleración al
desasignar la memoria ➔ ya que un segmento liberado
debe eliminarse de la lista de procesos e insertarse en la lista
de huecos

Desventaja de los esquemas que se ordenan por el tamaño


del hueco ➔ Cuando un proceso termina o es intercambiado,
buscar en sus vecinos para una posible fusión es un
trabajo costoso (tiempo procesamiento)

Si no se realiza la fusión ➔ la memoria se fragmentará


rápidamente ➔ gran número de pequeños huecos en los que
no cabrá ningún proceso
Memoria Virtual - La historia
• Registros base y límite ➔ usados para crear la abstracción
de espacio de direcciones ➔ Protección y reubicación
• Surgió otro problema ➔ Administración del
agrandamiento del software ➔ Tamaño de las memorias
se incrementa con cierta rapidez, pero el del software
aumenta con una mucha mayor
• Necesidad de:
• Ejecutar programas grandes que no caben en la memoria
• Ejecutar varios programas al mismo tiempo, algunos
de los cuales caben en memoria ➔ pero que en forma
colectiva exceden su tamaño ➔ Sobrecarga de
memoria
Memoria Virtual - La historia
• Para ello el Swapping completo es demasiado lento (Ej. rata
de transferencia de un disco SATA de 100 Mbytes/seg ➔ 10
seg para hacer un swap out a 1 Gbyte de programa)

• Overlays ➔ Programador dividía el programa en varias


módulos ➔ En cada módulo, al margen de la lógica propia del
programa ➔ Instrucciones de E/S para cargar en memoria
principal aquellos módulos cuyas instrucciones deban
ejecutarse o cuyos datos vayan a ser referenciados en el futuro
inmediato

Lo díficil ➔ la división del programa de forma manual por parte


del programador

También podría gustarte