Sistemas operativos

Anuncio
Sistemas operativos
Tema 8: 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
1
1
0
-
1
3
0
-
0
-
0
-
0
-
0
-
MP
Disco
A
A
C
D
B
C
E
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