Tema 7: Gestión de memoria

Anuncio
Sistemas operativos
Tema 7: Gestión de memoria
La memoria principal
►
La memoria es el componente central en la arquitectura de un
computador.
ƒ A menudo, el único dispositivo de almacenamiento al que la CPU puede
acceder directamente.
ƒ Un vector de palabras, cada una con su propia dirección física.
La CPU lee instrucciones y lee o modifica datos de la memoria durante
cada ciclo de instrucción.
► Las operaciones de E/S con DMA (acceso directo a memoria)
escriben/leen datos en memoria.
►
CPU
Caché
MP
DMA
Gestión de memoria
►
Asignar y liberar espacio en memoria según se necesite.
ƒ La política empleada repercute en la utilización de la CPU y los
tiempos de respuesta del sistema.
ƒ Reubicación: vinculación del espacio de direcciones lógicas de cada
proceso con direcciones físicas concretas.
►
Seguir la pista de qué partes de la memoria están siendo
usadas y por qué procesos.
ƒ Protección: impedir accesos (accidentales o malintencionados) a la
memoria propia de otros procesos o del SO.
ƒ Compartición: permitir el acceso de varios procesos a zonas de
memoria comunes.
► Comunicación
entre procesos, mismo código para varias instancias de
un mismo programa, etc.
Sobre la reubicación
►
Reubicación estática en tiempo de compilación.
►
Reubicación estática durante la carga.
►
Reubicación dinámica.
ƒ Dirección lógica = dirección física.
ƒ El compilador genera código máquina con direcciones absolutas.
ƒ Dirección lógica = dirección física.
ƒ El código máquina contiene direcciones relativas al comienzo del
programa (código reubicable), que se vinculan a direcciones físicas
al comenzar su ejecución.
ƒ Dirección lógica ≠ dirección física.
ƒ Código reubicable.
ƒ Las direcciones físicas se calculan en tiempo de ejecución, por
medio de un soporte hardware especializado (unidad de gestión de
memoria, MMU).
Sobre la protección
► En
general, la ubicación de un proceso en
memoria no se conoce de antemano, y no es
posible anticipar todas sus referencias a memoria.
ƒ Muchas las referencias se calculan dinámicamente (e.g.
a raíz de instrucciones malloc).
► La
protección requiere mecanismos que actúen en
tiempo de ejecución.
ƒ La solución prácticamente universal es proveerla por
hardware, en la propia MMU.
Técnicas de gestión de memoria
► Monitor
residente.
► Asignación contigua con particiones
múltiples.
ƒ Particiones estáticas.
ƒ Particiones dinámicas.
► Asignación
no contigua.
ƒ Paginación.
ƒ Segmentación.
ƒ Segmentación paginada.
Monitor residente
Monitor residente
► Se
divide la memoria en dos zonas: monitor
residente (SO) y espacio de usuario.
► Con reubicación estática:
Registro barrera
CPU
Dir. física
≥
NO
TRAP
SO
SÍ
Espacio de
usuario
Monitor residente
► Con
reubicación dinámica:
Registro barrera
CPU
Dir. lógica
+
SO
Dir. física
Espacio de
usuario
Intercambio (swapping)
► Forma
de conseguir multiprogramación, utilizando
almacenamiento secundario de apoyo.
SO
1
P1
Espacio de
usuario
P2
2
Intercambio
► Tiempos
de cambio de contexto muy elevados.
ƒ Mejoran solapando la carga o descarga de un proceso
con la ejecución de otro.
► Buffers
► Cuidado
del SO, e intercambio dentro de la memoria principal.
con las operaciones de E/S por DMA.
ƒ Podrían iniciarse sobre la memoria de un proceso y
terminar sobre la de otro.
ƒ Soluciones:
► No
descargar procesos con E/S pendiente.
► Realizar la E/S sobre buffers del SO.
Asignación contigua
con particiones múltiples
Sistemas de particiones múltiples
► Objetivo:
soporte más eficiente a la
multiprogramación.
► Se divide el espacio de usuario en un conjunto de
regiones o particiones.
ƒ Cada región alberga un proceso.
► Dos
variantes:
ƒ Multiprogramación con número fijo de tareas (MFT):
particiones estáticas.
ƒ Multiprogramación con número variable de tareas
(MVT): particiones dinámicas.
Con reubicación estática
Lím. inferior
Dir. física
CPU
P2
Lím. superior
SO
P1
≥
NO
TRAP
SÍ
≤
NO
SÍ
P2
TRAP
P3
►
Los límites se actualizan en los cambios de contexto, con la
información del bloque de control del proceso en cuestión.
Con reubicación dinámica
Tamaño
Dir. lógica
CPU
P2
≤
NO
SÍ
Dir. base
+
SO
P1
Dir. física
P2
TRAP
P3
►
El tamaño y la dirección base se actualizan en los cambios
de contexto.
MFT
► Las
particiones de la memoria son fijas, definidas
a priori.
► Asignación de procesos a particiones:
ƒ Una cola de procesos por partición.
► Estrategia
best-fit: cada proceso se asigna a la partición más
pequeña que puede albergarlo.
► Posibilidad de particiones vacías aún habiendo procesos
preparados que cabrían en ellas.
ƒ Una única cola.
best-fit-only.
► Estrategia best-fit-available: los procesos entran en la partición
► Estrategia
más pequeña en que caben de entre las disponibles.
Ejemplo
SO
2KB
7KB 3KB 2KB 5KB
6KB
12KB
2KB
►
►
►
El proceso de 5KB entra
en la partición de 6KB.
El proceso de 2KB entra
en una partición de 2KB.
Best-fit-only:
ƒ
ƒ
►
El proceso de 3KB espera.
Con exploración de la cola,
el proceso de 7KB entra en
la partición de 12KB.
Best-fit-available:
ƒ El proceso de 3KB entra
en la partición de 12KB.
Más sobre MFT
► Utilizando
intercambio, se puede aumentar el
grado de multiprogramación más allá del número
de particiones.
ƒ Los procesos pueden residir en particiones distintas
durante su ejecución sólo con reubicación dinámica.
► ¿Qué
hacer si un proceso solicita más memoria,
excediendo el tamaño de la partición asignada?
ƒ
ƒ
No conceder más memoria y abortar la ejecución.
Encolar el proceso en espera de una partición
suficientemente grande.
► Exige
reubicación dinámica.
Fragmentación
Aprovechamiento subóptimo de la memoria.
► Fragmentación interna: memoria asignada que no se utiliza.
► Fragmentación externa: memoria desocupada que no puede
aprovecharse para dar cabida a nuevos procesos.
►
SO
6KB 6KB
►
10KB 7KB
FI 3KB
4KB 3KB
4KB
4KB
FI 1KB
FE 8KB
En MFT no habría fragmentación si las particiones coincidieran con el
tamaño de los procesos.
MVT
►
El tamaño y número de las particiones de la memoria varía
dinámicamente.
ƒ
ƒ
Mayor flexibilidad que MFT.
Elimina la fragmentación interna: a cada proceso se le asigna
únicamente la memoria que va a utilizar.
SO
SO
SO
SO
SO
SO
P1
P1
P1
P1
P1
P2
P2
P3
P4
P3
P3
Hardware y software para MVT
►
Mismo hardware que en MFT.
ƒ Predominantemente, reubicación dinámica.
►
El SO mantiene una lista de huecos, y asigna memoria
según una determinada estrategia:
ƒ First-fit: selecciona el primer hueco suficientemente grande.
ƒ Best-fit: selecciona el hueco más pequeño de tamaño suficiente.
► Hay
que explorar toda la lista, salvo que esté ordenada por tamaño.
► Tiende a generar huecos pequeños, cuyo rastreo es comparativamente
costoso.
ƒ Worst-fit: selecciona el hueco más grande.
► Hay
que explorar toda la lista, salvo que esté ordenada por tamaño.
► Pretende crear huecos grandes.
Compactación
►
La fragmentación externa en MVT puede ser grande, y en
general aumenta con el tiempo.
ƒ Caso extremo: un hueco desperdiciado entre cada dos procesos.
►
El problema se alivia con compactación, desplazando
procesos en un sentido y huecos en otro.
ƒ
ƒ
ƒ
El desplazamiento obliga a detener la computación.
Se necesita reubicación dinámica.
¿Cuándo compactar?
► Cuando
un proceso no pueda alojarse en memoria.
► De modo preventivo, cuando se exceda un determinado nivel de
fragmentación.
► Cuando se realice algún intercambio.
Paginación
Paginación
►
►
►
El espacio lógico de los
procesos se divide en
páginas de tamaño fijo.
La memoria se divide en
marcos, del mismo tamaño
que las páginas.
Las páginas se asignan a
marcos, posiblemente de
manera no contigua.
P1
Pág. 1
Pág. 3
Pág. 2
Pág. 1
Pág. 2
P2
Pág. 2
Pág. 1
Pág. 2
Pág. 3
Pág. 1
Hardware de paginación
Las direcciones lógicas se descomponen en número de página (p) y
desplazamiento dentro de la misma (d).
► La MMU vincula números de página a marcos concretos de la memoria
física.
►
CPU
Dir. lógica
p
d
Dir. física
m
d
MP
SÍ
PTBR
V
m
Tabla de páginas
V=1
NO
TRAP
Observaciones
► El
tamaño de páginas y marcos es potencia de 2.
► Igual número de bits para p y para m: los
procesos no pueden direccionar más memoria que
la que hay.
► Hay una tabla de páginas para cada proceso.
► Cuando hay pocas páginas, las tablas pueden
alojarse en registros de la CPU. Lo habitual, sin
embargo, es almacenarlas en la propia memoria.
ƒ En memoria, cada entrada de la tabla ha de ocupar un
número entero de palabras.
Puntos fuertes
►
No hay fragmentación externa, y la asignación de memoria
es trivial.
ƒ Cualquier marco libre es igualmente bueno.
►
La fragmentación interna se reduce a la última página de
cada proceso.
ƒ Mejor aprovechamiento de la memoria cuanto más pequeñas sean
las páginas.
► Caso
peor: (1 página - 1 palabra) × número de procesos.
► En media: (½ página) × número de procesos.
►
Se facilita la compartición: varios procesos pueden acceder
a un mismo marco.
ƒ El código compartido debe ser reentrante (i.e. no debe
automodificarse).
Puntos débiles
►
Si las tablas de páginas se alojan en memoria, se duplica el
tiempo de acceso efectivo a la misma.
ƒ Solución: una caché especial para entradas de las tablas de páginas
(Translation Lookaside Buffer, TLB).
►
Las tablas de páginas pueden ocupar un espacio
considerable.
ƒ Ejemplo: memoria de 4GB, páginas de 4KB y 4 bytes por entrada
Æ tablas de 4MB por proceso.
ƒ Parece recomendable un tamaño de páginas grande, para que las
tablas tengan pocas entradas.
► Compromiso
ƒ Soluciones:
► Paginación
con la fragmentación interna.
multinivel.
► Tabla de páginas invertida.
Paginación en 2 niveles
Dir. lógica
CPU
p1
Dir. física
p2
d
m2
d
MP
PTBR
V
V
m2
m1
TP Interna
TP Externa
►
A menudo, los procesos no utilizan todas las páginas del espacio lógico.
ƒ Las páginas no utilizadas se pueden condensar en entradas de la TPE con V=0.
ƒ Ejemplo (continúa):
►
►
►
►
Memoria de 4GB y páginas de 4KB
4 bytes por entrada en TPE y TPI
10 bits para p1 y 10 para p2
Procesos de 12 MB
16KB en tablas por proceso
Observaciones
► El
número de bits de p2 se ajusta para aprovechar
al máximo el marco de cada TPI.
► Si las tablas de páginas se alojan en memoria, se
triplica el tiempo de acceso efectivo a la misma.
► Se pueden compartir TPIs.
► La idea es generalizable a más de 2 niveles.
Tabla de páginas invertida
►
Una única tabla, en memoria, con tantas entradas como marcos.
ƒ Cada entrada indica qué página de qué proceso se aloja en el marco
correspondiente.
Dir. lógica
CPU
P
p
Dir. física
d
i
d
P
buscar
Si no se encuentra
nada, TRAP
i
P
MP
p
Tantos accesos a memoria como entradas se recorren en la búsqueda.
ƒ Una tabla hash limita la búsqueda a un número reducido de entradas.
► Se dificulta la compartición.
►
Segmentación
Segmentación
► El
espacio lógico de un proceso se concibe como
un conjunto de segmentos de tamaño variable.
ƒ Funciones, variables, pila, etc.
► Similar
a la MVT, sólo que los distintos segmentos
de un proceso no tienen por qué estar contiguos
en memoria.
Hardware de segmentación
►
Las direcciones lógicas se descomponen en número de
segmento (s) y desplazamiento dentro del mismo (d).
Tabla de segmentos
long
CPU
s
Dir. lógica
STBR
base
d
MP
≤
NO
TRAP
SÍ
+
Observaciones
► Los
campos long y d tienen igual número de bits.
► El campo base tiene tantos bits como las
direcciones de memoria física.
► No se necesita bit de validez.
ƒ La protección la proporciona el campo long.
► Hay
una tabla de segmentos para cada proceso.
► Nuevamente, las tablas suelen almacenarse en
memoria, con cada entrada ocupando un número
entero de palabras.
Puntos fuertes
► Se
divide el espacio lógico en partes
semánticamente definidas.
ƒ Optimiza la protección y la compartición.
► No
hay fragmentación interna.
Puntos débiles
► Se
duplica el tiempo de acceso efectivo a la
memoria.
ƒ Solución: una caché especial para entradas de las tablas
de segmentos.
► Las
tablas de segmentos pueden ocupar un
espacio considerable.
► Hay fragmentación externa.
ƒ Política de asignación first-fit, best-fit o worst-fit.
ƒ Compactación.
ƒ Reducir el tamaño medio de los segmentos aumentaría
el espacio consumido en tablas.
Segmentación paginada
Segmentación paginada
► Combinación
de segmentación y paginación.
ƒ Los segmentos se dividen en páginas y se
meten en marcos.
► Se
mantiene la visión natural del espacio
lógico de los procesos.
► Se trivializa la asignación (cualquier marco
es igualmente bueno), y se elimina la
fragmentación externa.
Hardware de segmentación paginada
►
El desplazamiento dentro del segmento se descompone en un número
de página (p) y un desplazamiento dentro de ésta (d’).
Tabla de segmentos
long
STBR
base
m
CPU
s
Dir. lógica
d
MP
≤
NO
TRAP
SÍ
p
d’
m
d’
Observaciones
► Una
tabla de segmentos por proceso, y una tabla
de páginas por segmento.
► Se introduce fragmentación interna, en la última
página de cada segmento.
► Con todas las tablas en memoria, se triplica el
tiempo efectivo de acceso a la misma.
► En comparación con la segmentación, aumenta el
espacio consumido en tablas.
► La
paginación segmentada (paginación
segmentando la tabla de páginas) tiene poco
sentido práctico, y apenas se usa.
Memoria virtual
Memoria virtual
Conjunto de técnicas que permiten ejecutar procesos que no se
encuentran completamente cargados en memoria.
► Principio de cercanías: las referencias a memoria tienden a agruparse.
►
ƒ Ejecución de instrucciones en secuencia, acceso a tablas, bucles, etc.
Direcciones accedidas
localidad(t1)
►
t1
t
Muchos programas contienen código para opciones poco utilizadas,
que no hay por qué tener siempre en memoria.
Memoria virtual
►
Las partes de un proceso que no se estén utilizando en un
momento dado pueden guardarse en almacenamiento
secundario (típicamente, en un disco duro).
ƒ Se cargan y descargan partes según sea necesario.
►
Cada proceso ocupa menos memoria Æ se puede
incrementar el grado de multiprogramación y el
aprovechamiento de la CPU.
ƒ En teoría, para ejecutar un proceso llega con tener en memoria la
siguiente instrucción y los datos que ésta vaya a utilizar.
ƒ En la práctica, se intenta aproximar la localidad del proceso.
ƒ Conjunto residente: parte del espacio lógico de un proceso que se
encuentra en la memoria principal.
Memoria virtual
► Los
procesos no están limitados por el tamaño de
la memoria principal.
ƒ Antes, para ejecutar procesos muy grandes se recurría a
la programación de superposiciones (overlays).
► Esta
técnica ha quedado relegada a sistemas empotrados y/o
de tiempo real.
► Al
no tener que cargar o intercambiar procesos
enteros, se reduce la carga de E/S.
Inconvenientes
► Complejidad
elevada:
ƒ ¿Cómo repartir la memoria entre los procesos?
ƒ ¿Cuántos procesos pueden residir en memoria
simultáneamente?
ƒ ¿Qué partes de los procesos cargar o
descargar?
► Rendimiento:
ƒ Los accesos a disco son un cuello de botella.
Esquemas de memoria virtual
► Se
puede implementar memoria virtual con
cualquier esquema de reubicación dinámica
y asignación no contigua.
ƒ Más fácil con esquemas que paginan la
memoria.
ƒ Los algoritmos se complican con segmentos de
tamaño variable.
► El
esquema más frecuente es la
paginación bajo demanda.
Paginación bajo
demanda
Paginación bajo demanda
► Paginación
+ paginador perezoso.
ƒ No se carga una página en memoria hasta que una
instrucción necesita acceder a ella.
Proceso
MP
Disco
A
B
A
C
D
A
C
E
D
Memoria
virtual paginada
E
B
C
Soporte hardware
► La
traducción de direcciones lógicas sigue el
mismo esquema que la paginación…
ƒ … sólo que puede haber más bits en el campo p
de la dirección lógica.
► Las
páginas en memoria y las que están en
disco se distinguen con el bit de validez:
ƒ 1 Æ página válida y cargada en memoria.
ƒ 0 Æ página inválida o válida pero no cargada.
Soporte hardware
Proceso
A
B
C
D
E
Tabla de páginas
MP
Disco
1 1
0 1 3
A
0 0 0 0 -
A
C
D
B
C
E
0 -
Al encontrar V=0, el SO comprueba si se trata de un acceso inválido o
un fallo de página en la rutina de atención a la TRAP.
► A menudo, las entradas con V=0 contienen la dirección de disco donde
se almacena la página correspondiente.
►
Tamaño de la tabla de páginas
►
Con memoria virtual, la tabla de páginas puede volverse
extremadamente grande.
ƒ Ejemplo: memoria virtual de 64GB, páginas de 4KB y 4 bytes por
entrada Æ tablas de 64MB (en memoria real) por proceso.
►
Posibles soluciones:
ƒ Paginación multinivel:
► Sólo
tiene que estar siempre en memoria la tabla de páginas externa.
► Las tablas de páginas internas pueden alojarse en disco mientras no se
utilizan.
ƒ Segmentación paginada:
► Sólo
tiene que estar siempre en memoria la tabla de segmentos.
► Las tablas de páginas de cada segmento pueden alojarse en disco
mientras no se utilizan.
ƒ Tabla de páginas invertida:
► El
SO debe mantener tablas con información sobre las páginas que no
están en memoria.
El fallo de página
►
Ante un fallo de página, hay que localizar la página
solicitada en el disco, cargarla en memoria y reiniciar la
instrucción.
ƒ Es un proceso de duración potencialmente muy larga y variable,
principalmente por las operaciones de E/S.
►
El repertorio de instrucciones puede plantear ciertos
desafíos, por la dificultad de deshacer los efectos de una
instrucción parcialmente ejecutada.
ƒ MOV (R1)+,DIR: copiar en DIR el contenido de la posición de
memoria apuntada por R1, e incrementar R1.
► Si
ocurre un fallo de página al intentar acceder a DIR, hay que
devolver R1 a su valor anterior.
Rendimiento
► tac:
►
►
►
tiempo de acceso sin memoria virtual (en paginación,
doble del tiempo de acceso a una palabra de la memoria).
p: probabilidad de fallo de página.
tfp: tiempo medio de atención a un fallo de página.
Tiempo de acceso efectivo medio:
tef=(1-p)×tac+p×(tfp+tac)
►
Para tac=1μs y tfp=10ms, una degradación
inferior al 10% requiere p<10-5.
ƒ Un fallo de página cada 100000 referencias.
Soporte software
► En
la rutina de atención al fallo de página
interviene una cantidad de software considerable:
ƒ Reemplazo: si no hay marcos libres cuando se produce
un fallo de página, hay que desalojar alguna de las que
residen en memoria principal.
ƒ Gestión del conjunto residente: decidir cuántos marcos
se asignan a cada proceso.
ƒ Control de carga: decidir cuántos procesos se pueden
mantener en memoria simultáneamente.
Reemplazo
Reemplazo
► Se
trata de seleccionar una página víctima para
descargar de la memoria, de entre un conjunto de
candidatas.
ƒ Pueden ser páginas del mismo proceso (reemplazo
local) o de cualquiera (reemplazo global).
► Los
distintos algoritmos se evalúan sobre cadenas
de referencias, fijando el número de marcos
disponibles.
ƒ Intuitivamente, a mayor número de marcos, menor
número de fallos de página.
Algoritmo FIFO
►
FIFO (First In, First Out): se reemplaza la página que lleva
más tiempo en memoria.
ƒ Ejemplo: con 3 marcos disponibles, la cadena de referencias
(5,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,5,0,1) produce 15 fallos de
página.
5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1
M0
5 5 5 2 2 2 2 4 4 4 0 0 0 0 0 0 0 5 5 5
M1
- 0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0
M2
- - 1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1
Algoritmo FIFO
► Ventaja:
muy fácil de implementar.
► Inconvenientes:
ƒ El instante de carga no es una medida de uso:
la página sacrificada podría volver a necesitarse
pronto.
ƒ Anomalía de Belady: existen cadenas de
referencias tales que con m marcos se producen
menos fallos de página que con m+1.
La anomalía de Belady
►
►
►
Con 3 marcos, la cadena
(1,2,3,4,1,2,5,1,2,3,4,5)
produce 9 fallos de página.
Con 4 marcos, en cambio,
produce 10.
Los algoritmos que no
exhiben este
comportamiento se
denominan algoritmos de
pila.
1 2 3 4 1 2 5 1 2 3 4 5
M0
1 1 1 4 4 4 5 5 5 5 5 5
M1
- 2 2 2 1 1 1 1 1 3 3 3
M2
- - 3 1 1 2 2 2 2 2 4 4
1 2 3 4 1 2 5 1 2 3 4 5
M0
1 1 1 1 1 1 5 5 5 5 4 4
M1
- 2 2 2 2 2 2 1 1 1 1 5
M2
- - 3 3 3 3 3 3 2 2 2 2
M3
- - - 4 4 4 4 4 4 3 3 3
Algoritmo óptimo
►
Idealmente, se debería reemplazar la página que tardará
más tiempo en referenciarse.
ƒ
ƒ
El objetivo es retardar el fallo de página todo cuanto sea posible.
En el mismo ejemplo de antes se producen 9 fallos de página.
5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1
M0
5 5 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 5 5 5
M1
- 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
M2
- - 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
Algoritmo óptimo
► El
algoritmo óptimo garantiza la tasa de fallos de
página más baja posible para un número de
marcos dado.
► Sin embargo, es difícilmente implementable,
porque requiere conocer cadenas de referencias
futuras.
► Se utiliza como patrón para la evaluación de otros
algoritmos.
Algoritmo LRU
►
LRU (Least Recently Used): se reemplaza la página que
lleva más tiempo sin referenciarse.
ƒ Por el principio de cercanías, se toma el pasado reciente como una
aproximación del futuro inmediato.
ƒ En el ejemplo se producen 12 fallos de página.
5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1
M0
5 5 5 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1
M1
- 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0
M2
- - 1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 5 5 5
Algoritmo LRU
► LRU
es un algoritmo de pila, que suele dar una
buena aproximación del algoritmo óptimo.
► Inconveniente: implementaciones costosas.
ƒ Contador de referencias a página:
► En
cada referencia, el valor del contador se copia en la entrada
correspondiente de la tabla de páginas.
► Se reemplaza siempre la página cuya entrada en la tabla tiene
el valor más pequeño.
► El desbordamiento provoca transitorios de rendimiento muy
pobre Æ aumentar el número de bits del contador.
ƒ Pila de referencias:
► En
cada referencia se extrae la página correspondiente de la
pila y se pone en la cima.
► Se reemplaza siempre la página que está en la base de la pila.
Algoritmo de la 2ª oportunidad
► Aproximación
de LRU por medio de 1 solo bit.
ƒ Cada vez que se referencia una página, se pone R=1 en
la entrada correspondiente de la tabla de páginas.
► 2ª
oportunidad = FIFO + bit R.
ƒ Al recorrer la cola, se examina el bit R:
► Si
R=0, se reemplaza la página.
► Si R=1, se pone R=0 y se pasa la página al final de la cola.
► Si
R=1 en todas las páginas, el algoritmo de la 2ª
oportunidad degenera en FIFO.
ƒ Aún así, el rendimiento suele ser considerablemente
mejor.
Dirty bit
►
Se puede añadir un bit M (dirty bit), que se activa cuando
se modifica el contenido de la página correspondiente.
ƒ
►
Para valores iguales del bit R, es mejor sacrificar una página con
M=0 porque no hay que escribirla en disco.
Algoritmo de la 2ª oportunidad mejorado:
1. Con FIFO como base, se selecciona para reemplazo la primera
página que tenga R=0 y M=0.
2. Si no existe tal página, se busca la primera página con R=0 y
M=1.
•
Durante la búsqueda, se pone R=0 en todas las entradas que se
recorren y se envían al final de la cola.
3. Si aún no se ha encontrado víctima, se repiten los pasos 1 y 2.
Gestión del conjunto
residente y control de carga
Gestión del conjunto residente y
control de carga
► ¿Cuántos
marcos asignar a un proceso?
ƒ El mínimo lo determina el repertorio de instrucciones.
► E.g.
ADD /DIR1,/DIR2,/DIR3 puede necesitar 4 marcos:
1 para la propia instrucción, 1 para cada sumando y 1 para el
resultado.
ƒ El máximo lo fija el tamaño de la memoria principal.
ƒ Políticas de asignación:
► Fija:
la asignación se decide en el momento de la carga.
ƒ Requiere reemplazo local.
► Variable:
la asignación se decide dinámicamente.
ƒ Reemplazo local o global.
► ¿Cuántos
procesos mantener simultáneamente en
memoria?
Hiperpaginación (thrashing)
Si un proceso no dispone de marcos suficientes para su localidad, pasa
más tiempo en fallo de página que ejecutándose Æ hiperpaginación.
► Con asignación fija, la hiperpaginación afecta a procesos aislados.
► Con asignación variable y reemplazo global, se produce a nivel de
sistema cuando la suma de las localidades de todos los procesos no
cabe en la memoria.
►
Utilización de la CPU
ƒ En ese caso, la utilización de la CPU cae drásticamente.
hiperpaginación
Grado de multiprogramación
ƒ Hay que suspender procesos, descargando su conjunto residente.
Modelo del conjunto de trabajo
define el conjunto de trabajo (working set, WS)
de un proceso como el conjunto de páginas en sus
últimas Δ referencias a memoria.
► Se
2 0 1 3 4 3 2 3 5 1 6 6 1 1 1 5 5 6 6 5 5
Δ
WS={0,1,2,3,4}
Δ
WS={5,6}
ƒ WS una aproximación de la localidad del proceso.
ƒ Se puede aproximar con interrupciones periódicas, a
partir de los bits R de la tabla de páginas.
Modelo del conjunto de trabajo
► Gestión
del conjunto residente:
ƒ Supervisar el conjunto de trabajo de cada proceso y
asignar un número suficiente de marcos.
ƒ Descargar las páginas que dejen de pertenecer al
conjunto de trabajo.
► Control
de carga:
ƒ Si la demanda total de marcos (Σ WSi) supera el
número de marcos de la memoria, se suspenden
procesos.
ƒ En caso contrario, se pueden cargar procesos nuevos.
Frecuencia de fallos de página
► Solución
más directa a la hiperpaginación.
► En vez de supervisar el conjunto de trabajo, se
observa la frecuencia de fallos de página (FFP)
de cada proceso.
► Gestión del conjunto residente:
ƒ Si la FFP excede un umbral superior, se asignan más
marcos al proceso.
ƒ Si la FFP se reduce por debajo de un umbral inferior, se
le quitan marcos al proceso.
► Control
global.
de carga: ídem, sólo que a partir de la FFP
Fin
Descargar