Memoria - La web de Sistemas Operativos (SOPA)

Anuncio
Contenidos
„
Sistemas Operativos
Tema 8. Gestión de memoria
„
„
„
„
„
Antecedentes
Técnicas básicas: recubrimientos,
intercambio
Gestión de memoria contigua
Segmentación
Paginación
Técnicas mixtas
© 1998-2008 José Miguel Santos – Alexis Quesada – Francisco Santana –
Belén Esteban
1
Gestión de la memoria
Antecedentes
„
„
„
2
Gestión de la memoria
Antecedentes (2)
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
„
„
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
3
Gestión de la memoria
Objetivo principal
„
Gestión de la memoria
Objetivo principal (2)
Conseguir que varios procesos puedan ejecutarse de
forma concurrente,
‰
‰
‰
‰
‰
„
Un gestor de memoria ideal debería por tanto,
‰
‰
‰
Minimizar la memoria desaprovechada
‰
‰
„
evitando los conflictos de uso
protegiendo al sistema operativo
aprovechando eficazmente el espacio disponible:
„
4
‰
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
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
Carga parcial de programas
sin perjudicar el rendimiento:
„
„
Complejidad temporal
Tiempo de acceso a memoria
5
6
Conversión de direcciones:
reubicación
Ciclo de vida de un programa
programa fuente
„
compilador
compilación
módulo objeto
otros objetos
y bibliotecas
„
enlazador
(linker)
programa ejecutable
bibliotecas
del sistema
bibliotecas
dinámicas
„
carga
cargador
programa y datos
binarios en memoria
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
ejecución
HARDWARE
7
Reubicación dinámica:
direcciones lógicas/direcciones físicas
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 ?
‰
‰
8
„
„
„
Carga (enlazador o cargador) Æ Reubicación estática
Ejecución (hardware) Æ Reubicación dinámica
„
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
9
Espacios de direcciones
Fichero fuente
(principal.cc)
#include<stream.h>
main()
{
int cont;
...
cont++
...
}
Fichero ejecutable
(principal)
cabecera
Memoria lógica del
proceso
10
Direcciones lógicas/direcciones
físicas
Dirección
lógica o
virtual
Memoria física
código
código
datos
inicializados
datos
inicializados
datos sin
inicializar
CPU
Memoria
Disco
MMU
Controlador
de
memoria
Controlador
de
disco
CPU
dir. lógica
1234
MR
Proceso
+
pila
80000
registro base
Dirección física
MMU
Espacio de direcciones
simbólicas
dir. física
81234
Espacio de direcciones lógicas/físicas
memoria
11
12
Carga dinámica
„
Proceso se ejecute
‰
„
„
Código + Datos Æ Memoria física
„
Consecuencia:
‰
„
Enlace dinámico
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
„
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)
13
Recubrimientos (overlays)
„
„
„
„
14
Recubrimientos (overlays) (2)
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
rutinas y
datos comunes
manejador de
recubrimientos
fase 1
fase 2
(disponible para
recubrimientos)
fase 3
15
Intercambio (swapping)
„
„
16
Intercambio (swapping) (2)
Objetivo: cuando un proceso queda bloqueado o en
espera, la memoria que ocupa podría desasignársele.
Intercambio: Cuando un proceso pierde la CPU, se
vuelca su imagen de la memoria al disco (swap out).
Cuando se decide reanudar el proceso, se recupera
su imagen del disco (swap in)
„
Problemas:
‰
‰
„
Mejoras:
‰
‰
sistema operativo
aumenta el tiempo de cambio de contexto
E/S que accede por DMA
varios procesos en memoria
intercambio un proceso mientras se ejecuta otro
P1
memoria
para usuarios
P2
17
18
Intercambio (swapping) (3)
„
Intercambio (swapping) (4)
¿Qué se necesita para llevarlo a cabo?
‰
‰
‰
‰
Proceso intercambiador (efectúa la mayoría de las funciones del
PMP)
Criterios para la elección de la víctima (política de swapping out)
Criterios para elegir los procesos que entran (política de
swapping in)
Espacio en disco donde almacenar las imágenes de los procesos
„
„
‰
„
Otras consideraciones:
‰
‰
‰
¿ Operaciones de E/S pendientes ?
Un proceso intercambiado, ¿ regresa al mismo
espacio de memoria que ocupó previamente ?
Versiones modificadas del intercambio estándar:
„
Area específica para el intercambio (área de swap)
Ficheros de intercambio
„
Unix
Microsoft Windows 3.1
Criterios para la gestión del espacio de intercambio (política de
gestión del área de swap)
19
Gestión de memoria contigua
20
Gestión de memoria contigua
„
„
‰
Caso trivial: una sola partición (sistema
operativo+área de usuario)
‰
Evolución: particiones múltiples
‰
particiones de tamaño fijo (MFT)
particiones de tamaño variable (MVT)
MFT
como mucho, utilizar un registro base para proteger al
S.O.
0
MVT
Memoria física
Memoria física
Memoria física
SO
SO
SO
Memoria física
Partición 1
SO
Partición 1
Registro base
Partición 2
Proceso
Partición 3
Partición 4
Partición 2
Partición 3
Partición 4
256K
21
Memoria contigua: estructuras de
datos
„
Memoria contigua: cómo reservar
espacio a un proceso
Mecanismos de gestión de la memoria contigua
‰
‰
‰
22
Tabla de descripción de particiones (TDP)
El S.O. gestionará una lista de huecos libres en
memoria y seleccionará qué procesos pueden
cargarse en memoria para ejecutarse
Primitivas internas de pedir y liberar memoria
„
POLÍTICAS DE UBICACIÓN
‰
El problema general se conoce como la gestión de
memoria dinámica
„
„
„
‰
‰
23
Primer hueco (first-fit)
Mejor hueco (best-fit)
Peor hueco (worst-fit)
las políticas de “primer hueco” y “mejor hueco” son
similares en rendimiento; y mejores que la de “peor
hueco”
Otras políticas: siguiente ajuste, buddies
24
Memoria contigua: protección
„
Memoria contigua: protección
Pareja de registros base y límite
5000
dir. lógica
1234
<
sí
Registrar los derechos de acceso en la propia
memoria
‰
80000
límite
CPU
„
base
+
dir. física
81234
A cada dirección se le añade un número de bits para
identificar al propietario
„
memoria
„
no
‰
excepción
‰
MMU
Problema: costoso
Mejora: asociar estos bits a bloques de memoria física
Comprobación: tiempo de ejecución
SO Æ Clave “maestra” única que le da acceso sin
restricciones a todos los bloques de memoria
25
Compartir zonas de memoria
„
Compartir zonas de memoria (2)
Confiar los objetos compartidos al SO
‰
‰
26
„
Forma de acceder a estos objetos: llamadas al
sistema
Inconvenientes:
„
„
Mantener múltiples copias de los objetos
compartidos
‰
SO grande y monolítico, lo que hace más difícil su
desarrollo, mantenimiento y verificación
No se podrían incorporar dinámicamente nuevos
objetos (sólo permite la inclusión de nuevos objetos
durante la generación del sistema)
‰
Redundancia Æ las modificaciones deben ser
propagadas a todas las copias restantes (SO
sería el encargado cada vez que se realice un
cambio de contexto)
Si se soporta intercambio, OJO, podrían existir
copias de los objetos compartidos en disco
27
Compartición
„
„
Compartición
„
Utilizar particiones de memoria compartidas
(comunes)
¿Protección?
‰
Registros base/límite: requeriría conjuntos separados
de pares de registros base/limite dedicados para
acceder a los espacio de memoria privado y
compartido
„
28
Implica la existencia de algún mecanismo que indique en
cada acceso que conjunto de registros emplear
Claves de protección: requeriría controlar los
bloques compartidos para que en los
conmutaciones de contexto se cambien las
claves de protección
‰
„
MVT => Permite que particiones adyacentes en
memoria física puedan solaparse
‰
29
Necesidad de llevar la cuenta de que bloques están
siendo compartidos y por quién
Compartición de datos y código (dos procesos)
30
La fragmentación de la memoria
„
Fragmentación: soluciones
„
Es el gran problema de la memoria contigua
‰
‰
Fragmentación interna (MFT)
Fragmentación externa (MVT)
„
„
Permitir que un proceso puede ubicarse en
zonas de memoria no necesariamente contiguas
Y si no se puede lo anterior Æ compactación
¿Es posible siempre?
‰
‰
Si la reubicación es estática y se efectúa durante el
ensamblado o la carga, no puede haber compactación
Esta sólo es posible si la reubicación es dinámica y se
efectúa en tiempo de ejecución
„
Sólo requiere mover el programa y los datos y modificar el
registro base para que refleje la nueva dirección base
31
Compactación
„
Segmentación
Estrategia a seguir
‰
Raras veces es implementado debido al gasto en que se
incurre al evaluar las opciones
„
Reubicar todas las particiones en un extremo de la
memoria
„
‰
„
Seleccionar una estrategia óptima de traslados
„
‰
32
Un programa se puede descomponer en varios
segmentos de memoria (código, datos, pila...)
Con el hardware adecuado, podemos ubicar esos
segmentos en zonas de memoria no contiguas.
El recargo por copia es generalmente más alto que el de un
traslado más selectivo
S1
T.seg.
Compactación + intercambio
„
S3
Copiar en disco los procesos que tienen que cambiar de lugar
S2
33
Segmentación (2)
34
Hardware de segmentación
Tabla de segmentos
„
„
„
El compilador tiene que generar código que
haga referencias a direcciones de memoria con
dos componentes: <segmento,desplazamiento>
El S.O. ubica cada segmento en un hueco
contiguo de memoria
El hardware se encarga de la reubicación
dinámica mediante una tabla de segmentos
(S)
límite
S
base
D
dir. lógica
dir. física
sí
<
+
D
no
Excepción:
dirección ilegal
35
36
Tabla de segmentos
„
„
Registros
‰
„
Tabla de segmentos
Proceso de traducción: dirección lógica (s,d)
‰
Problema: muchos segmentos
‰
Memoria
‰
‰
‰
Registro base de la tabla de segmentos (RBTS)
Registro de longitud de la tabla de segmentos (RLTS)
‰
„
„
Se comprueba que s<RLTS
Se calcula la dirección de la entrada de la tabla de segmentos
(RBTS+s) y se lee dicha entrada
Se coteja el desplazamiento con la longitud del segmento
Se calcula la dirección física del byte deseado como la suma de
la base del segmento y el desplazamiento
Proceso de traducción: requiere dos referencias a
memoria por cada dirección lógica
Solución: usar un conjunto de registros asociativos para
guardar las entradas de la tabla de segmentos que se
usaron mas recientemente
37
Segmentación: ventajas
„
„
„
„
38
Segmentación: inconvenientes
„
Atenúa el problema de la fragmentación
Permite definir protecciones selectivamente
Permite compartición de zonas de memoria
de forma eficaz
Todo ello sin añadir complejidad a los
algoritmos de gestión de espacio
„
„
„
El compilador/enlazador debe reconocer un
espacio segmentado (desventaja leve)
Necesita soporte del hardware
Incurre en un acceso adicional a memoria
(para la tabla de segmentos)
No soluciona del todo los problemas de las
técnicas de ubicación contigua
(fragmentación)
39
Paginación
„
„
„
„
„
40
Paginación/Ejemplo
Técnica que soluciona la fragmentación externa
La idea: Trocear la memoria disponible en páginas de
tamaño fijo (ej. 4Kb). Un programa puede residir en
varias páginas no contiguas
Las páginas disponibles en memoria se llaman marcos
de página (page frames).
Toda dirección lógica se descompone en dos partes:
número de página y desplazamiento.
La MMU se encarga de asociar el número de página
lógico con el marco de página asignado. Para ello
emplea una tabla de páginas.
41
42
Paginación: gestión del espacio
libre
Ejemplo de paginación
Ubicación de un proceso en memoria y creación de la tabla de páginas:
tamaño de página 4kbytes, tamaño de la memoria 48kbytes
Memoria física
0
4k
8k
12k
16k
20k
24k
28k
32k
36k
40k
44k
48k
m0
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
m11
10
La gestión del espacio libre consiste
simplemente en saber qué marcos están libres
El SO posee una tabla de marcos de páginas
(TMP)
3
‰
„
Memoria física
0
Proceso 1 (10k)
Pg0
Pg1
4k
8k
Pg2
12k
16k
S0
SO
Tabla de páginas
Proceso 1
Marco
P1-Pg1
20k
10k/4k=2.5 3 páginas
24k
28k
„
¿Implementación?
6
P1-Pg2
32k
36k
40k
44k
P1-Pg0
¡¡Fragmentación
interna!!
48k
48k/4k=12 marcos
44
43
Paginación/Marcos Libres
Paginación:
traducción de direcciones
Traducción de direcciones: direcciones de 16 bits y tamaño de página 4kbytes
16-12=4bits
Desplazamiento
dentro de la
página
Número de página
0010
000000000100
4k=212
12 bits
Dirección lógica:(8196)
Tabla de Páginas
Marco
1010
0011
0110
Marco de página
0110
000000000100
Dirección física: (24580)
45
Hardware de paginación
46
Estructura de la tabla de
páginas
Tabla de páginas
„
(P)
F
„
Depende del SO
Denominador común
‰
„
‰
CPU
P
dir. lógica
D
F
D
„
„
Contador de instrucciones, registros, info. de E/S, etc... Y
Puntero a la tabla de páginas
¿Qué ocurre en un cambio de contexto?
‰
‰
47
BCP
„
Memoria
física
dir. física
Una tabla de páginas para cada proceso
¿cómo localiza el SO la tabla de páginas de un
proceso?
Despachador cargará los registros con los valores del nuevo
proceso y
A partir de la tabla de páginas almacenada, cargará los valores
correctos de la tabla de páginas en “hardware” !!
48
Implementación en hardware de la
tabla de páginas
Implementación en hardware de la
tabla de páginas
„
„
Conjunto de registros dedicados
‰
‰
Ejemplo: Computador DEC PDP-11
„
„
la dirección consiste en 16 bits y el tamaño de
página es de 8k)
„
3 bits
Problema: tablas de páginas grandes
Solución
‰
‰
16 bits
Dirección
Esquema de registros
Mantener la tabla de páginas en memoria
Registro base de la tabla de páginas (RBTP)
que apunta a la TP
„
13 bits
La tabla de páginas consta por tanto de ocho
entradas que se mantienen en registros rápidos
„
Cambio de contexto: más rápido (sólo cambiar el
valor de este registro)
Gran inconveniente: tiempo de traducción
49
Paginación
Traducción de direcciones
50
Implementación en hardware de la
tabla de páginas
„
Solución: usar un TLB (translation lookahead
buffer)
‰
‰
‰
Pequeño cache especial en hardware
Cada registro consta de dos partes: clave y valor
Funcionamiento:
„
‰
Se presenta una clave y, si encuentra alguna
coincidencia, devuelve el valor correspondiente
Permite búsquedas rápidas pero el hardware es
costoso
51
TLB: cómo funciona
„
TLB: esquema general
Funcionamiento: acceso posición i
‰
‰
‰
Obtiene el número de página donde se encuentra i
Si está en TLB Æ Obtenemos el marco de página
donde se encuentra
sino, acceso a la tabla de páginas y actualizar TLB
„
„
52
Si TLB llena Æ Sustitución de una de las existentes
OJO, cambio de contexto
‰
Desalojar (borrar) el TLB
53
54
TLB: tasa de aciertos
„
Tasa de aciertos
‰
‰
‰
„
Tabla de páginas invertidas
„
porcentaje de las veces que un número de página
se encuentra en los registros asociativos
relacionada con el número de registros asociativos
16-512 => pueden obtenerse tasas de aciertos
entre 80 y 98%.
„
‰
‰
Ejemplos
‰
‰
Motorola 68030 => TLB de 22 entradas
Intel 80486 => TLB de 32 entradas
‰
Sus fabricantes dicen que tiene una tasa de aciertos del
98%
„
Problema: tamaño que puede llegar a ocupar
la tabla de páginas
Idea: usar una tabla de páginas invertida
Tiene una entrada por cada marco real de la
memoria
Cada entrada consiste en la página virtual
almacenada en dicho marco y el proceso al que
pertenece
Por tanto, sólo hay una tabla de páginas en el
sistema que contiene una entrada por cada marco
de página
55
Tabla de páginas invertida
56
Tabla de páginas invertida
„
Ventajas
„
Desventaja
‰
‰
‰
Reduce la cantidad de memoria necesaria
Tiempo de búsqueda en la tabla de páginas
invertida
Soluciones:
„
„
Tabla de dispersión (hash)
Registros asociativos (caché)
57
Paginación: inconvenientes
„
58
Paginación: protección
Pequeño inconveniente: fragmentación interna
‰
¿Tamaño de las páginas?
„
‰
‰
„
mejora fragmentación interna
Aumenta el tamaño de la tabla de página
„
Grande
‰
‰
„
„
Pequeño
‰
Peor desde el punto de vista de la fragmentación interna
Tamaño de las tablas de páginas menor
Tendencia en los últimos años
‰
‰
Las páginas pueden tener asignados bits de
protección (ej. lectura, escritura, ejecución)
Bit de validez/no validez
Indica si la página correspondiente está en el
espacio de direcciones lógico del proceso y por tanto
es válida
Aumentar a medida que los procesos, los conjuntos de datos y la
memoria principal se han vuelto más grandes
2-4 Kbytes
59
60
Paginación: bit de validez
Paginación: protección contra
accesos fuera de límites
„
Un proceso casi nunca utiliza todo su intervalo
de direcciones
‰
„
En estos casos sería un desperdicio crear una tabla
de páginas con entradas para todas las páginas del
intervalo de direcciones
Algunos sistemas: registro de longitud de la
tabla de páginas (RLTP)
‰
Indica el tamaño de la tabla de páginas y se coteja
con cada dirección lógica para asegurar que la
dirección esté en el intervalo válido para el proceso
61
Compartición de páginas
„
„
62
Compartición de páginas
Varios procesos podrían tener la misma
memoria física apuntada en sus respectivas
tablas de páginas
La compartición de código exige que el código
sea reentrante, es decir, no puede modificarse a
sí mismo
63
Paginación de varios niveles
„
„
64
Paginación de varios niveles
Sistemas modernos => espacio de
direcciones lógico muy grande (232 a 264)
Problema: tamaño de la tabla de páginas
‰
‰
Por ejemplo, si tamaño de página es de 4k, un
proceso podría requerir hasta 4 Mb de espacio
físico para la tabla de páginas
Solución: paginar la tabla de páginas, teniendo
varios niveles de páginas (ej. 80386)
65
66
Paginación de varios niveles:
80386
Esquema combinado
segmentado/paginado
„
„
La paginación y la segmentación pueden
combinarse (ej. MULTICS, 80386).
Motivación: aprovecharse de las ventajas que
ofrecen los esquemas por separado
‰
‰
Como máximo hay un total de :
2(n1+n2) páginas por proceso
2n2 entradas en cada tabla de páginas interior
2n1 entradas en la tabla de páginas exterior
2n1 tablas de páginas interiores
67
Esquema combinado
segmentado/paginado: 80386
69
Segmentación: flexibilidad y facilidad para la
organización lógica
Paginación: mejorar el problema de la fragmentación
68
Descargar