GESTIÓN DE LA MEMORIA
Gestión de la memoria
Antecedentes
La memoria física es un conjunto de celdasreferenciables 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éndeberá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 deforma 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
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
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
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
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)
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
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