jueves, 23 de mayo de 2013

UNIDAD 5. GESTIÓN DE LA MEMORIA

GESTIÓN DE LA MEMORIA


Gestión de la memoria

Antecedentes

La memoria física es un conjunto de celdas
referenciables por medio de una dirección lineal
(p.ej. de la 00000h a la FFFFFh)
Para que un programa se ejecute, su código y
sus datos necesitan estar cargados en memoria
(al menos en parte)
En un sistema multitarea, la memoria ha de
repartirse entre los diferentes procesos


Gestión de la memoria

Antecedentes (2)

Las rutinas del sistema operativo también
deberán residir en memoria, en todo o en
parte
Puede ser que la memoria principal no tenga
capacidad suficiente para todos los procesos
en ejecución

Gestión de la memoria

Objetivo principal

Conseguir que varios procesos puedan ejecutarse de
forma concurrente,
evitando los conflictos de uso
protegiendo al sistema operativo
aprovechando eficazmente el espacio disponible:
Minimizar la memoria desaprovechada
Evitar fragmentación
Memoria ocupada por varias copias de un mismo objeto
Memoria ocupada por las estructuras de datos necesarias para la
operación del gestor de memoria
Carga parcial de programas
sin perjudicar el rendimiento:
Complejidad temporal
Tiempo de acceso a memoria

Gestión de la memoria

Objetivo principal (2)

Un gestor de memoria ideal debería por tanto,
minimizar la memoria desaprovechada
tener una complejidad temporal mínima
y presentar un recargo por acceso a memoria mínimo
además de proporcionar una buena protección y una
compartición flexible

Ciclo de vida de un programa





Conversión de direcciones:

reubicación

El compilador traduce direcciones de memoria
simbólicas a direcciones binarias.
Si las direcciones binarias son absolutas, el
programa sólo se puede ejecutar en una zona
fija de la memoria: NO ES REUBICABLE.
Ej.: los programas con formato .COM de MSDOS

Conversión de direcciones:

reubicación (2)

Nos interesa que el compilador no genere
direcciones definitivas, sino direcciones
provisionales, reubicables.
Cuando se sepa dónde van a residir el código y
los datos, se convertirán a direcciones
absolutas.
¿ En qué momento (etapa) se realiza esta
reubicación ?
Carga (enlazador o cargador) à Reubicación estática
Ejecución (hardware) à Reubicación dinámica


Reubicación dinámica:

direcciones lógicas/direcciones físicas
Dirección física: la que llega al chip de
memoria
Dirección lógica o virtual: la generada por
la CPU
El dispositivo que traduce direcciones
virtuales a físicas se llama unidad de
manejo de memoria (MMU, en inglés)
El espacio de direcciones lógicas y el
espacio de direcciones físicas no tienen por
qué coincidir
Ejemplo: registro base

Carga dinámica

Proceso se ejecute
Código + Datos à Memoria física
Consecuencia:
Tamaño de un proceso limitado al tamaño de la
memoria física
Carga dinámica
postergar la carga en memoria de un módulo hasta
que el programa llame a alguna rutina del mismo

Enlace dinámico

Similar a la carga dinámica, pero efectuando el enlace
en tiempo de ejecución: bibliotecas dinámicas (DLL)
La DLL se carga en memoria cuando algún proceso
llama a una de sus rutinas. Las llamadas a sus
funciones se efectúan a través de una tabla de punteros.
Si varios procesos emplean la biblioteca dinámica, sólo
se mantiene una copia de ella en memoria.
Ejemplos de enlace dinámico:
UNIX: shared libraries (shlib)
Windows: dynamic load libraries (dll)

Recubrimientos (overlays)

Muchos programas no necesitan todo el
código al mismo tiempo, sino que se
ejecutan por fases (ej. un compilador)
El programa se descompone en módulos
separados (recubrimientos), que se
cargan en un área de memoria al efecto
Si se carga un recubrimiento, borra al que
se encontraba ya cargado
El programa de usuario es responsable de
cargar recubrimientos según se necesiten






No hay comentarios:

Publicar un comentario en la entrada