Uploaded by Jaime Berdejo

SO-tema3

advertisement
Tema 3. Gestión de Memoria
3.1. Gestión de memoria principal
3.2. Memoria virtual: Organización
3.3. Memoria virtual: Gestión
3.4. Gestión de memoria en Linux
Tema 3: Gestión de Memoria
1
Objetivos
Distinguir entre dirección relativa o lógica y dirección física o
real y entre espacio de direcciones lógico y físico
●Conocer las distintas formas en las que el sistema operativo
puede organizar y gestionar la memoria física
●Saber en qué consiste y para qué se utiliza el intercambio
(swapping)
●Entender qué es la Memoria Virtual y por qué se utiliza
●Conocer los mecanismos de paginación, segmentación y
segmentación paginada en un sistema con memoria virtual
●Comprender qué es la propiedad de localidad y su relación con
el comportamiento de un programa en ejecución
●Conocer la teoría del conjunto de trabajo y el problema de la
hiperpaginación
●Saber cómo gestiona Linux la memoria de un proceso
●
Tema 3: Gestión de Memoria
2
Jerarquía de Memoria
Dos principios sobre memoria:
Menor cantidad, acceso más rápido
●
Mayor cantidad, menor coste por byte
●
Así, los elementos frecuentemente accedidos se ponen en
memoria rápida, cara y pequeña; el resto, en memoria
lenta, grande y barata.
CPU
Caché
Memoria
Memoria
Registros
Hardware
Principal
Auxiliar
Bus de memoria
Tema 3: Gestión de Memoria
Bus de E/S
3
Conceptos sobre Cachés
Caché - copia que puede ser accedida más rápidamente
que el original
●Idea: hacer los casos frecuentes eficientes, los caminos
infrecuentes no importan tanto
●Acierto de caché: item en la caché
●Fallo de caché: item no en caché; hay que realizar la
operación completa
●Tiempo de Acceso Efectivo (TAE) =
Probabilidad_acierto * coste_acierto + Probabilidad_fallo *
coste_fallo
●Funciona porque los programas no son aleatorios,
explotan la localidad -> principio de localidad
●
Tema 3: Gestión de Memoria
4
Espacio de direcciones lógico y
espacio de direcciones físico
Espacio de direcciones
lógico: conjunto de direcciones
lógicas o virtuales generadas por
un programa
Espacio de direcciones
físico: conjunto de direcciones
físicas correspondientes a las
direcciones lógicas en un instante
dado
Fichero Ejecutable
0
4
....
96
100
104
108
112
116
120
124
128
132
136
Cabecera
LOAD R1, #1000
LOAD R2, #2000
LOAD R3, /1500
LOAD R4, [R1]
STORE R4, [R2]
INC R1
INC R2
DEC R3
JNZ /12
.................
Carretero, p.165
Tema 3: Gestión de Memoria
5
Mapa de memoria de un proceso
formato típico de un
ejecutable
0
Cabecera
1000
Fichero Ejecutable
Número mágico
Contador de programa inicial
....................
Tabla de secciones
0
Código
Código
Secciones
4000
5000
Datos con valor inicial
Datos con valor inicial
................
8000
Mapa de memoria
“0”
5000
Datos sin valor inicial
Tabla de símbolos
Figura (Carretero, p.179)
Imagen de proceso =
mapa + PCB
Argumentos del programa
Tema 3: Gestión de Memoria
Pila
6
Objetivos generales de la gestión de
memoria
Organización: ¿cómo está dividida la memoria?
¿un proceso o varios procesos?
Gestión: Dado un esquema de organización,
¿qué estrategias se deben seguir para obtener
un rendimiento óptimo?
» Estrategias de asignación: Contigua, No contigua
» Estrategias de sustitución o reemplazo
» Estrategias de búsqueda o recuperación
Protección
» El SO de los procesos de usuario
» Los procesos de usuario entre ellos
Tema 3: Gestión de Memoria
7
Gestor de memoria
La parte del S.O que administra la memoria entre los
distintos procesos se denomina gestor de memoria.
Funciones del gestor de memoria:
Llevar el registro de las partes de la memoria ocupada y
partes libres.
b) Saber que proceso ocupa cada parte utilizada.
c) Asignar la memoria a los nuevos procesos (asignación).
Sino hay espacio libre estrategia de sustitución.
d) Administrar el intercambio memoria-disco, disco-memoria
e) Librar el espacio de los procesos que finalizan.
f)
En memoria virtual estrategias de búsqueda
Conclusión: El rendimiento del sistema se ve afectado por el
rendimiento de la gestión de memoria.
a)
Tema 3: Gestión de Memoria
8
Asignación contigua y no contigua
Podemos clasificar las organizaciones de memoria como:
●Contiguas - La asignación de almacenamiento para un
programa se hace en un único bloque de posiciones
continuas de memoria -> Particiones fijas y Particiones
variables
●No contiguas - Permiten dividir el programa en bloques o
segmentos que se pueden colocar en zonas no
necesariamente continuas de memoria principal ->
Paginación, Segmentación y Segmentación paginada
Tema 3: Gestión de Memoria
9
Intercambio (Swapping)
Intercambiar procesos entre memoria y un
almacenamiento auxiliar
●El almacenamiento auxiliar debe ser un disco rápido
con espacio para albergar las imágenes de memoria
de los procesos de usuario
●El factor principal en el tiempo de intercambio es el
tiempo de transferencia
●El intercambiador tiene las siguientes
responsabilidades:
●
» Seleccionar procesos para retirarlos de MP
» Seleccionar procesos para incorporarlos a MP
» Gestionar y asignar el espacio de intercambio
Tema 3: Gestión de Memoria
10
3.2. Memoria virtual: Organización
Concepto de Memoria Virtual
»El tamaño del programa, los datos y la pila puede
exceder la cantidad de memoria física disponible
para él.
»Se usa un almacenamiento a dos niveles:
– Memoria Principal -> partes del proceso
necesarias en un momento dado
●
– Memoria Secundaria -> espacio de
direcciones completo del proceso
Tema 3: Gestión de Memoria
11
Concepto de memoria virtual (y II)
» Es necesario:
– saber qué se encuentra en memoria principal
– una política de movimiento entre MP y MS
●
Además, la memoria virtual
» resuelve el problema del crecimiento dinámico
de los procesos
» permite aumentar el grado de
multiprogramación
Tema 3: Gestión de Memoria
12
Unidad de Gestión de Memoria
La MMU (Memory Management Unit) es un dispositivo
hardware que traduce direcciones virtuales a
direcciones físicas. Este dispositivo está gestionado
por el SO (suministra la información necesaria que
●
cambia cuando se hace un cambio de contexto)
En el esquema MMU más simple, el valor del registro
base se añade a cada dirección generada por el
proceso de usuario al mismo tiempo que es enviado a
memoria
●El programa de usuario trata sólo con direcciones
lógicas, nunca con direcciones reales
●
Tema 3: Gestión de Memoria
13
Unidad de Gestión de Memoria (y II)
Además de la
traducción, el MMU
deberá:
- detectar si la
dirección aludida se
encuentra o no en
MP
- generar una
excepción si no se
encuentra en MP
●
Tarjeta del procesador
CPU
dirección
virtual
Memoria
Controlador
de disco
MMU
dirección
física
Tema 3: Gestión de Memoria
BUS
14
Ejemplo de MMU: El MIPS
R2000/3000
CP0
Registros gestión excepcion
MMU
Dirección
Virtual
CPU
Registros
ALU
Dirección
Física
Búfer de Traducción
Adelantada (TLB)
Tema 3: Gestión de Memoria
MMU
Indice
Aleatorio
15
Buffer de traducción anticipada o
adelantada
•
•
Toda referencia a la memoria virtual puede causar dos
accesos a memoria física: uno para buscar la entrada la
tabla de páginas apropiada y otro para buscar los datos
solicitados.
Para solventar el problema de duplicar el acceso a
memoria: La mayoría de esquemas de la memoria virtual
utilizan una cache especial de alta velocidad para las
entradas de la tabla de página, denominada buffer de
traducción anticipada. Esta cache funciona de forma
similar a la memoria cache general y contiene aquellas
entradas de la tabla de páginas que han sido usadas de
forma más reciente.
Tema 3: Gestión de Memoria
16
Paginación




El espacio de direcciones físicas de un proceso
puede ser no contiguo
La memoria física se divide en bloques de
tamaño fijo, denominados marcos de página. El
tamaño es potencia de dos, de 0.5 a 8 Kb
El espacio lógico de un proceso se divide en
bloques del mismo tamaño, denominados
páginas
Los marcos de páginas contendrán páginas de
los procesos
Tema 3: Gestión de Memoria
17
Paginación (y II)
●
●
Las direcciones lógicas, que son las que
genera la CPU se dividen en número de
página (p) y desplazamiento dentro de la
página (d)
Las direcciones físicas se dividen en número
de marco (m, dirección base del marco donde
está almacenada la página) y desplazamiento
(d)
Tema 3: Gestión de Memoria
18
Paginación (y III)
El mecanismo de paginación cumple dos funciones:

llevar a cabo la transformación de una dirección virtual a
física

transferir, cuando haga falta, páginas de MS a MP, y de
MP a MS cuando ya no sean necesarias
Donde p es el número de
f
página, d es el
desplazamiento, p es el
número de página que se
utiliza como índice en la
tabla páginas. La tabla de
p
páginas contiene el
número de marco en
memoria física f
Tema 3: Gestión de Memoria
19
Paginación (y IV)
Cuando la CPU genere una dirección lógica será
necesario traducirla a la dirección física
correspondiente, la tabla de páginas mantiene
información necesaria para realizar dicha
traducción. Existe una tabla de páginas por
proceso
●Tabla de ubicación en disco (una por proceso)
ubicación de cada página en el almacenamiento
secundario
●Tabla de marcos de página, usada por el S.O. y
contiene información sobre cada marco de página
●
Tema 3: Gestión de Memoria
20
Contenido de la tabla de páginas
Una entrada por cada página del proceso:
➔
➔
➔
➔
Número de marco (dirección base del marco) en el
que está almacenada la página si está en MP
Bit de presencia o bit válido (para indicar si la página
se encuentra presente o no en MP)
Bit de modificación
Modo de acceso autorizado a la página (bits de
protección: leer, modificar, escribir)
Nº de página
del espacio de
direcciones virtual
del proceso
nº marco
46
presencia
01
Tema 3: Gestión de Memoria
modificación protección
1
0
21
Ejemplo: contenido de la tabla de páginas
Memoria
secundaria
Pag1
Pag2
Pag3
Pag4
Pag5
Pag6
Pag7
Pag8
Pag9
Pag10
Pag11
pag12
T.P.
Nº de Bit de
Marco presencia
1
...
1 8
-
0
...
3
1
1
...
2
2
1
...
3
-
0
...
-
0
...
4
6
1
...
3
0
...
6
-
0
...
7
5
1
...
-
-
...
8
10
1
...
5
6
7
8
9
10
11
Pagina
1
2
4
Num.
Num.
Marco
12
Tema 3: Gestión de Memoria
5
9
10
Memoria
Física
Pag3
Pag4
Pag10
Pag7
Pag1
Pag12
22
Esquema de traducción
Dirección virtual
N. pagina
RBTP
DESPLAZAMIENTO
N. de marco
presencia
modificación pro.
Presencia
=1
no
FALTA DE PAGINA
si (excepción)
¿Acceso autorizado?
no
m
1
TABLA DE PAGINAS
Tabla de Ubicación en Disco
si
excepción
violación de privilegios
¿Actualizar bit de
modificación?
(si/no)
m
DESPLAZAMIENTO
Dirección real
Dir. TUD
Tema 3: Gestión de Memoria
23
Falta de página
1. Bloquear proceso
2. Encontrar la ubicación en disco de la página
solicitada (tabla de ubicación en disco)
3. Encontrar un marco libre. Si no hubiera, se
puede optar por desplazar una página de MP
4. Cargar la página desde disco al marco de MP
5. Actualizar tablas (bit presencia=1, nº marco, ...)
6. Desbloquear proceso
7. Reiniciar la instrucción que originó la falta de
página
Tema 3: Gestión de Memoria
24
Implementación de la Tabla de Páginas



La tabla de páginas se mantiene en memoria
principal
El registro base de la tabla de páginas (RBTP)
apunta a la tabla de páginas (suele almacenarse
en el PCB del proceso)
En este esquema:
 cada acceso a una instrucción o dato requiere dos
accesos a memoria: uno a la tabla de páginas y
otro a memoria → resuelto con TLB (búfer de
traducción anticipada)
 un problema adicional viene determinado por el
tamaño de la tabla de páginas
Tema 3: Gestión de Memoria
25
Tamaño de la Tabla de Páginas
●
●
●
●
●
Ejemplo:
» Dirección virtual: 32 bits.
» Tamaño de página = 4 Kbytes (212 bytes).
tamaño del campo desplazamiento = 12 bits
tamaño número de página virtual = 20 bits
Nº de páginas virtuales = 220 = ¡1,048,576!
Solución para reducir el tamaño de la TP:
» Paginación multinivel
Tema 3: Gestión de Memoria
26
Paginación multinivel


Esta solución opta por “paginar las tablas de
páginas”
La partición de la tabla de páginas permite al
SO dejar particiones no usadas sin cargar hasta
que el proceso las necesita. Aquellas porciones
del espacio de direcciones que no se usan no
necesitan tener tabla de página
Tema 3: Gestión de Memoria
27
Paginación a dos niveles


Lo que hacemos es dividir la tabla de páginas en
partes del tamaño de una página.
La dirección lógica se divide en:
 número de página (n bits):
 un número de página p1 (=k)
 desplazamiento de página p2 (=n-k)


desplazamiento de página d (m bits)
Así una dirección lógica es de la forma:
p1
p2
Tema 3: Gestión de Memoria
d
28
Esquema de paginación a dos niveles
p1 p2
d
...
...
...
...
...
Tabla de páginas
de primer nivel Tablas de páginas
de segundo nivel
Tema 3: Gestión de Memoria
...
Memoria
física
29
Esquema de paginación a dos niveles
Tema 3: Gestión de Memoria
Ejemplo: Esquema de paginación a
dos niveles
Memoria
secundaria
Pag1
Pag2
Pag3
Pag4
Pag5
Pag6
Pag7
Pag8
Pag9
Pag10
Pag11
pag12
Memoria
Física
Tablas de pag.
2º Nivel
Tabla de pag.
1º Nivel
1
2
3
1
8
2
-
3
1
4
Pag 1 de la TP
1 -
--
2 -
7
3 6
2
3
2
3
Num. de
pag de la
TP
1
4
5
Pag 2 de la TP
6
4 -
7
1 2 5
8
Pag 3 de la TP
3 4 10
Tema 3: Gestión de Memoria
Pag3
Pag4
Pag1_TP
Pag10
Pag7
Pag3_TP
Pag1
9
10 Pag12
Num.
Marco
31
Páginas compartidas
Memoria
Una copia de
código de solo
lectura (reentrante)
compartido entre
varios procesos.
Ej. editores,
compiladores,
sistemas de
ventanas
●
ed 1
ed 2
ed 3
data 1
Proceso P1
ed 1
ed 2
ed 3
data 2
Proceso P2
3
4
6
1
Tabla de
páginas
para P1
3
4
6
7
Tabla de
páginas
para P2
Tema 3: Gestión de Memoria
ed 1
ed 2
ed 3
data 3
Proceso P3
3
4
6
2
Tabla de
páginas
para P3
0 data 1
1 data 3
2 ed 1
3 ed 2
4
5
ed 3
6
7 data 2
8
9
32
Segmentación
Esquema de organización
de memoria que soporta
mejor la visión de memoria
del usuario: un programa
es una colección de
unidades lógicas segmentos-, p. ej.
procedimientos, funciones,
pila, tabla de símbolos,
matrices, etc.
●
S1
S2
S3
S1
S4
S3
S4
S2
Espacio de
usuario
Memoria
física
Tema 3: Gestión de Memoria
33
Segmentación
A diferencia de la paginación la segmentación no es
transparente al usuario, la división del programa en
segmentos ha de realizarla el programador y el compilador.
Características de los segmentos:




Tamaño variable
Definidos por el usuario
Formados en tiempo de traducción
Individualmente reubicables (comienzan en la dirección 0), cada
segmento es un espacio de direcciones independiente.
Se realiza una asignación dinámica de memoria principal
usando cualquiera de los algoritmos para particiones
variables: primer, mejor y peor ajuste.
Tema 3: Gestión de Memoria
34
Tabla de Segmentos
Una dirección lógica es una tupla:
<número_de_segmento, desplazamiento>
●La Tabla de Segmentos aplica direcciones
bidimensionales definidas por el usuario en
direcciones físicas de una dimensión. Cada
entrada de la tabla tiene los siguientes elementos
(aparte de presencia, modificación y protección):
» base - dirección física donde reside el inicio
del segmento en memoria.
» tamaño - longitud del segmento.
●
Tema 3: Gestión de Memoria
35
Implementación de la Tabla de
Segmentos
La tabla de segmentos se mantiene en memoria
principal
●El Registro Base de la Tabla de Segmentos
(RBTS) apunta a la tabla de segmentos (suele
almacenarse en el PCB del proceso)
●El Registro Longitud de la Tabla de Segmentos
(STLR) indica el número de segmentos del
proceso; el nº de segmento s, generado en una
dirección lógica, es legal si s < STLR (suele
almacenarse en el PCB del proceso)
●
Tema 3: Gestión de Memoria
36
Esquema de traducción
Dirección virtual
N. Segmento
RBTS
D. base
S’
d>t
d
si
tamaño
t
presencia
no
Presencia
=1
Excepción
acceso indebido
modif.
pro.
1
TABLA DE SEGMENTOS
Tabla de Ubicación en Disco
si
no
FALTA DE
SEGMENTO
¿Acceso autorizado?
no
si
Excepción
violación de privilegios
¿Actualizar bit de
modificación?
(si/no)
S’ + d
Dirección real
Dir. TUD
Tema 3: Gestión de Memoria
37
Segmentación Paginada
La variabilidad del tamaño de los segmentos y el
requisito de memoria contigua dentro de un
segmento, complica la gestión de MP y MS
●Por otro lado, la paginación simplifica la gestión
pero complica más los temas de compartición y
protección
●Algunos sistemas combinan ambos enfoques,
obteniendo la mayoría de las ventajas de la
segmentación y eliminando los problemas de una
gestión de memoria compleja
●
Tema 3: Gestión de Memoria
38
Segmentación Paginada (II)
Cada segmento es dividido en un nº de páginas, del
tamaño de los marcos de MP. Si un segmento tiene
longitud inferior a una pág., el segmento ocupará 1 pág.

Segmentos con tamaño múltiplo del tamaño de la pág.
No todas las pág. de un segmento deben estar en MP.

Las pág. contiguas no tienen que ser continuas en MP.

Protección segmento comprobara el límite (que no
sobrepase el tamaño del segmento) y el tipo de acceso.

La traducción consume 3 accesos a memoria: uno a la
Tabla de segmentos, otro a la Tabla de páginas (de
cada segmento) y otro a MF.

Para cada proceso el SO debe mantener: 1 Tabla de
Tema 3: Gestión de Memoria
segmentos y 1 tabla
de páginas por cada segmento.39
Esquema de traducción
s p
d
+
d’ dirección
virtual
+
si
m
d<t
si
s’ t
m
Tabla de Páginas
del segmento s
RBTS
¿presente?
Tabla de
Segmentos
d’
dirección
física
s’ : dirección base de la Tabla de
Páginas del segmento s
Tema 3: Gestión de Memoria
40
Memoria Virtual: Gestión
●
●
Gestión de Memoria Virtual con paginación
Criterios de clasificación respecto a:
» Políticas de asignación: Fija o Variable
» Políticas de búsqueda (recuperación):
– Paginación por demanda
– Paginación anticipada (!= prepaginación)
» Políticas de sustitución (reemplazo):
– Sustitución local
– Sustitución global
Tema 3: Gestión de Memoria
41
Políticas de asignación:
Fija o Variable
Fija
●
●
Nº fijo de marcos de MP disponibles. Este nº se decide
en el momento de la carga inicial de proceso (creación)
Siempre que se produzca un fallo de página (FP) del
proceso en ejecución, la página que se necesita
reemplazá una de las páginas del proceso.
Variable
●
●
●
El nº de marcos por proceso que puede variar a lo largo
de la vida del mismo.
Un proceso con alta tasa de FP se le asignaran marcos
de página adicionales para reducir este tasa de fallos.
Un proceso con baja tasa de FP se reducirán los
marcos
Tema 3: Gestión de Memoria
42
Políticas de búsqueda:
por demanda y anticipada
Por demanda
●
●
Página se trae a memoria sólo cuando se hace
referencia a una posición en dicha página.
Inicialmente hay muchos FP, cuando se traigan más
páginas a la memoria por el principio de proximidad
ayudara a las futuras referencias: se reduce nº de FP.
Adelantada
●
●
Se traen a MP también otras páginas, diferentes de la
que ha causado el FP. Si las páginas de un proceso se
encuentran almacenadas en la MS de forma contigua,
es mucho más eficiente traer a la memoria un nº de
páginas contiguas, en lugar de traerlas una a una a lo
largo de un periodo de tiempo más amplio.
Ineficiente si la mayoría de las páginas que se han
traído no se referencian
Tema 3: Gestiónadeposteriori
Memoria
43
Políticas de sustitución:
local o global
Local
●
Selecciona la pagina a sustituir entre las páginas
residentes del proceso que ha generado el FP.
Global
●
Se consideran todas las páginas en la MP que no se
encuentren bloqueadas como candidatos para el
reemplazo, independientemente de a qué proceso
pertenezca cada página en particular.
Tema 3: Gestión de Memoria
44
Gestión de la Memoria Virtual
Independientemente de la política de
sustitución utilizada, existen ciertos criterios que
siempre deben cumplirse:
●
» Páginas “limpias” frente a “sucias”
– se pretende minimizar el coste de transferencia
» Páginas compartidas
– se pretende reducir el nº de faltas de página
» Páginas especiales
– algunos marcos pueden estar bloqueados (ejemplo:
buferes de E/S mientras se realiza una transferencia)
Tema 3: Gestión de Memoria
45
Influencia del tamaño de página
●
●
●
●
Cuanto más pequeñas
» Aumento del tamaño de las tablas de páginas
» Aumento del nº de transferencia MP->Disco
» Reducen la fragmentación interna
Cuanto más grandes
» Grandes cantidades de información que no
serán usadas están ocupando MP
» Aumenta la fragmentación interna
Búsqueda de un equilibrio
Los tamaños de página siempre son potencia de 2
Tema 3: Gestión de Memoria
46
Algoritmos de sustitución
●
●
➔
➔
➔
➔
Podemos tener las siguientes combinaciones
» asignación fija y sustitución local
» asignación variable y sustitución local
» asignación variable y sustitución global
Veremos distintos algoritmos:
Optimo: sustituye la página que no se va a referenciar en
un futuro o la que se referencie más tarde
FIFO: sustituye la página más antigua
LRU: sustituye la página que fue objeto de la referencia
más antigua
Algoritmo del reloj
Tema 3: Gestión de Memoria
47
Algoritmo del reloj
Cada página tiene asociado un bit de referencia R (lo pone
a 1 el hardware)
●
Los marcos de página se representan por una lista circular
y un puntero a la página visitada hace más tiempo
3
●
Selección de una página:
●
página 4
1. Consultar marco actual
ref.=1
2. ¿Es R=0?
– No: R=0; ir al siguiente
marco y volver al paso 1
– Si: seleccionar para
sustituir e incrementar posición
Tema 3: Gestión de Memoria
página 3
página 1
ref.=1
2
0
ref.=1
página 2
ref.=1
1
48
Comparación
Conclusión: Influye más la cantidad de MP
disponible que el algoritmo de sustitución usado
nº faltas
de pág.
FIFO
RELOJ
LRU
OPTIMO
nº marcos asignados
Tema 3: Gestión de Memoria
49
Comportamiento de los programas


Viene definido por la secuencia de referencias a
página que realiza el proceso
Importante para maximizar el rendimiento del
sistema de memoria virtual (TLB, alg.
sustitución, ...)
Tiempo
Tema 3: Gestión de Memoria
50
Propiedad de localidad
●
●
Prop. Localidad: pequeño grupo de páginas, no
necesariamente adyacentes que son
referenciadas durante un periodo de tiempo.
Distintos tipos
» Temporal: Una posición de memoria referenciada
recientemente tiene una probabilidad alta de ser
referenciada en un futuro próximo (ciclos, rutinas,
variables globales, ...)
» Espacial: Si cierta posición de memoria ha sido
referenciada es altamente probable que las
adyacentes también lo sean (array, ejecución
secuencial, ...)
Tema 3: Gestión de Memoria
51
Conjunto de Trabajo
●
Observaciones:
» Mientras el conjunto de páginas necesarias puedan
residir en MP, el nº de FP no crece mucho
» Si eliminamos de MP páginas de ese conjunto, la
activación de paginación crece mucho
●
Conjunto de trabajo (Working Set) de un proceso es el
conjunto de páginas que son referenciadas
frecuentemente en un determinado intervalo de tiempo
WS(t,z) = páginas referenciadas en el intervalo
de tiempo t - z y t
Tema 3: Gestión de Memoria
52
Conjunto de Trabajo: propiedades
●
Propiedades
» Los conjuntos de trabajo son transitorios
» No se puede predecir el tamaño futuro de un
conjunto de trabajo
» Difieren unos de otros sustancialmente
nºpág.
ws1
ws2
ws3
tiempo
Tema 3: Gestión de Memoria
53
Teoría del Conjunto de Trabajo
●
●
Un proceso sólo puede ejecutarse si su
conjunto de trabajo está en memoria principal
Una página no puede retirarse de memoria
principal si está dentro del conjunto de trabajo
del proceso en ejecución
Tema 3: Gestión de Memoria
54
Hiperpaginación
Si un proceso no tiene
“suficientes” páginas, la tasa
de faltas es alta
●
»bajo uso de la CPU
»el SO incrementa el grado de
multiprogramación
»más faltas de páginas
●
Hiperpaginación = el
sistema operativo está
ocupado en resolver faltas
de página
Tema 3: Gestión de Memoria
Conducta
esperada
Conducta
real
Grado de
multiprogramación
55
Hiperpaginación (y II)
●
Formas de evitar la hiperpaginación:
»Asegurar que cada proceso existente tenga
asignado un espacio en relación a su
comportamiento -> Algoritmos de asignación
variables
»Actuar directamente sobre el grado de
multiprogramación -> Algoritmos de regulación
de carga
Tema 3: Gestión de Memoria
56
Algoritmo basado en
el modelo del WS
En cada referencia, determina el conjunto de trabajo:
páginas referenciadas en el intervalo (t - x, t] y sólo esas
páginas son mantenidas en MP
No se usa A
●
– En la figura se representan
las páginas del proceso que
están en MP
– Proceso de 5 páginas
–x=4
– En t=0 WS = {A, D, E}, A
se referenció en t=0, D en
t=-1 y E en t=-2
No se usa E
desde hace 4
Conjunto
de trabajo
desde hace 4
C, C, D, B, C, E, C, E, A, D
A A A A - - - - - A A
- - - - B B BB - - - CCC C C CC C C C
D DDD D D D- - -
D
E E - - - - EE E E E
*
*
* 57 *
*
Tema 3: Gestión de Memoria
Algoritmo FFP
(Frecuencia de Falta de Página)
●
Idea: para ajustar el conjunto de páginas de un proceso,
usa los intervalos de tiempo entre dos faltas de página
consecutivas:
»Si intervalo de tiempo grande, mayor que Y, todas las páginas no
referenciadas en dicho intervalo son retiradas de MP
»En otro caso, la nueva página es simplemente incluida en el conjunto
de páginas residentes
●
Formalmente:
tc = instante de tº de la actual falta de página
tc-1= instante de tº de la anterior falta de página
Z = conjunto de páginas referenciadas en un intervalo de tº
R = conjunto de páginas residentes en MP
R(tc,Y) =
si tc - tc-1 > Y
Z(tc-1 ,tc)
R(tc-1 ,Y) + Z(tc) en otro caso
Tema 3: Gestión de Memoria
58
Ejemplo del algoritmo FFP
Se garantiza que el conjunto de páginas residentes crece
cuando las faltas de página son frecuentes y decrece cuando
no lo son
se reduce WS
●
– En la figura se representan
las páginas del proceso que
están en MP
– Proceso de 5 páginas
–Y=2
– La página A se referenció
en t=-1 y E en t=-2
– D se referencia en t=0
D, C, C, D, B, C, E, C, E, A, D
A A A A - - - - - A A
- - - - B B B B B - - CCC C C C C C C C
D DDD D D D D D - D
E E E E - - E E E E E
* *
*59 *
*
*
Tema 3: Gestión de Memoria
3.4 Gestión de memoria en Linux
●
●
●
Gestión de memoria a bajo nivel.
El espacio de direcciones de proceso.
La caché de páginas y la escritura de
páginas a disco.
Tema 3: Gestión de Memoria
60
Gestión de memoria a bajo nivel
●
La página física es la unidad básica de gestión de
memoria: struct_page
struct page {
unsigned long flags; // PG_dirty (modificada), PG_locked
atomic_t _count; // nº de referencias a la página
struct address_space *mapping;
void *virtual; //dirección de la pagina en memoria virtual
…
}
Struct page sirve para gestionar todas las
páginas físicas, si una página está libre o
asignada (y quien la esta usando).
Tema 3: Gestión de Memoria
61
Gestión de memoria a bajo nivel
●
Una página puede ser utilizada por:
● La caché de páginas. El campo mapping apunta al
objeto representado por addres_space.
● Datos privados.
● Una proyección de la tabla de páginas de un
proceso.
● El espacio de direcciones de un proceso.
● Los datos del kernel alojados dinámicamente.
● El código del kernel.
Tema 3: Gestión de Memoria
62
Gestión de memoria a bajo nivel
●
Interfaces para la asignación de memoria en páginas.
struct page * alloc_pages(gfp_t gfp_mask, unsigned int order)
La función asigna 2^order páginas físicas contiguas y
devuelve un puntero a la struct page de la primera
página, y si falla devuelve NULL.
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
Esta función asigna 2^order páginas físicas contiguas y
devuelve la dirección lógica de la primera página.
Tema 3: Gestión de Memoria
63
Gestión de memoria a bajo nivel
●
Interfaces para la liberación de memoria en páginas.
void __free_pages(struct page *page, unsigned int order)
void free_pages(unsigned long addr, unsigned int order)
Las funciones liberan 2^order páginas a partir de la
estructura página o de la página que coincide con la
dirección lógica.
Tema 3: Gestión de Memoria
64
Gestión de memoria a bajo nivel
●
Interfaces para la asignación/liberación de memoria en
bytes.
void * kmalloc(size_t size, gfp_t flags) //solicitar memoria al kernel
void kfree(const void *ptr) //liberar bloque de memoria
●
Las funciones son similares a las que proporciona C en
espacio de usuario malloc() y free().
Tema 3: Gestión de Memoria
65
Ejemplo de código kernel
●
Asignación/liberación de memoria en páginas.
unsigned long page;
page = __get_free_pages(GFP_KERNEL, 3);
/* ‘page’ is now the address of the first of eight (2^3) contiguous
pages ... */
free_pages(page, 3);
/* our pages are now freed and we should no longer access the
address stored in ‘page’
*/
Tema 3: Gestión de Memoria
66
Ejemplo de código kernel
●
Asignación/liberación de memoria en bytes.
struct example *p;
p = kmalloc(sizeof(struct example), GFP_KERNEL);
if (!p)
/* handle error ... */
kfree(p);
Tema 3: Gestión de Memoria
67
Gestión de memoria a bajo nivel
●
●
Zonas de memoria. El tipo gfp_t permite especificar el
tipo de memoria que se solicita mediante tres
categorías de flags:
● Modificadores de acción (como va a asignar el
kernel la memoria solicitada) (GFP_WAIT, GFP_IO)
● Modificadores de zona (especifican de que zona
asignar la memoria) (GFP_DMA)
● Tipos (especificación más abstracta).
Ejemplos de solicitud de tipos de memoria:
●
●
GFP_KERNEL indica una solicitud de memoria para kernel.
GFP_USER permite solicitar memoria para el espacio de
usuario de un proceso.
Tema 3: Gestión de Memoria
68
Caché de bloques. Organización.
●
●
La asignación y liberación de estructuras de datos es
una de las operaciones más comunes en un kernel de
SO. Para agilizar esta solicitud/liberación de memoria
Linux usa el nivel de bloques (slab layer).
El nivel de bloques actua como un nivel de caché de
estructuras genérico.
●
●
●
Existe una caché para cada tipo de estructura distinta:
pej. task_struct caché o inode caché.
Cada caché contiene multiples bloques constituidos por
una o más páginas físicas contiguas.
Cada bloque aloja estructuras del tipo correspondiente a
la caché.
Tema 3: Gestión de Memoria
69
Caché de bloques. Funcionamiento.
●
●
Cada bloque puede estar en uno de tres estados: lleno,
parcial o vacío. Esto permite reducir la fragmentación
de los bloques.
Cuando el kernel solicita una nueva estructura:
● La solicitud se satisface desde un bloque parcial si
existe alguno.
● Si no, se satisface a partir de un bloque vacío.
● Si no existe un bloque vacío para ese tipo de
estructura, se crea uno nuevo y la solicitud se
satisface en este nuevo bloque.
Tema 3: Gestión de Memoria
70
Espacio de direcciones de proceso
●
●
●
●
Espacio de direcciones de proceso es el espacio de
direcciones de los procesos ejecutándose en modo
usuario. Linux utiliza memoria virtual (VM).
A cada proceso se le asigna un espacio de memoria
plano de 32 o 64 bits único. No obstante se puede
compartir el espacio de memoria (CLONE_VM para
hebras).
El proceso solo tiene permiso para acceder a
determinados intervalos de direcciones de memoria,
denominados áreas de memoria.
El proceso mediante llamadas al kernel puede
dinámicamente añadir y eliminar áreas de memoria
a/de su espacio de direcciones.
Tema 3: Gestión de Memoria
71
Espacio de direcciones de proceso
¿Qué puede contener un área de memoria?
● Un mapa de memoria de la sección de código (text
section).
● Un mapa de memoria de la sección de variables
globales inicializadas (data section).
● Un mapa de memoria con una proyección de la
página cero para variables globales no inicializadas
(bss section)
● Un mapa de memoria con una proyección de la
página cero para la pila de espacio de usuario.
Tema 3: Gestión de Memoria
72
Espacio de direcciones de proceso
●
El descriptor de memoria representa en Linux el
espacio de direcciones de proceso.
struct mm_struct {
struct vm_area_struct *mmap; /*Lista de áreas de memoria (VMAs)*/
struct rb_root mm_rb;
concreto */
/* árbol red-black de VMAs, para buscar un elemento
struct list_head mmlist; /* Lista con todas las mm_struct: espacios de
direcciones */
atomic_t mm_users; /* Número de procesos utilizando este espacio de
direcciones */
atomic_t mm_count; /* Contador que se activa con la primera referencia al
espacio de direcciones y se desactiva cuando mm_users vale 0 */
Tema 3: Gestión de Memoria
73
Espacio de direcciones de proceso
/*(cont. struct mm_struct) Límites de las secciones principales */
unsigned long start_code; /* start address of code */
unsigned long end_code; /* final address of code */
unsigned long start_data; /* start address of data */
unsigned long end_data; /* final address of data */
unsigned long start_brk; /* start address of heap */
unsigned long brk; /* final address of heap */
unsigned long start_stack; /* start address of stack */
unsigned long arg_start; /* start of arguments */
unsigned long arg_end; /* end of arguments */
unsigned long env_start; /* start of environment */
unsigned long env_end; /* end of environment */
/* Información relacionada con páginas */
pgd_t *pgd; /* page global directory */
unsigned long rss; /* pages allocated */
unsigned long total_vm; /* total number of pages */
}
Tema 3: Gestión de Memoria
74
Espacio de direcciones de proceso
¿Cómo se asigna un descriptor de memoria?
● Copia del descriptor de memoria al ejecutar fork().
● Compartición del descriptor de memoria mediante el
flag CLONE_VM de la llamada clone().
¿Cómo se libera un descriptor de memoria?
●
El núcleo decrementa el contador mm_users incluido
en mm_struct. Si este contador llega a 0 se
decrementa el contador de uso mm_count. Si este
contador llega a valer 0 se libera la mm_struct en la
caché.
Tema 3: Gestión de Memoria
75
Espacio de direcciones de proceso
Un área de memoria (struct vm_area_struct) describe
un intervalo contiguo del espacio de direcciones.
struct vm_area_struct {
struct mm_struct *vm_mm; /* apunta a struct mm_struct asociada
que representa el espacio de direcciones */
unsigned long vm_start; /* VMA start, inclusive */ //direc. inicial
unsigned long vm_end; /* VMA end , exclusive */ //última direc.
unsigned long vm_flags; /* flags */ //especifica comportamiento
//VM_READ,VM_WRITE,VM_EXEC,VM_SHARED
struct vm_operations_struct *vm_ops; /* associated ops */
struct vm_area_struct *vm_next; /* list of VMA’s */
struct rb_node vm_rb; /* VMA’s node in the tree */
};
Tema 3: Gestión de Memoria
76
Ejemplo de espacio de direcciones
Utilizando el archivo /proc/<pid>/maps podemos ver las
VMAs de un determinado proceso.
El formato del archivo es:
start-end permission offset major:minor inode file
start-end.Dirección de comienzo y final de la VMA en el espacio de
direcciones del proceso.
permission. Describe los permisos de acceso al conjunto de páginas del
VMA. {r,w,x,-}{p|s}
offset. Si la VMA proyecta un archivo indica el offset en el archivo, si no
vale 0.
major:minor. Se corresponden con los números major,minor del dispositivo
en donde reside el archivo.
inode: Almacena el número de inodo del archivo.
file: El nombre del archivo.
Tema 3: Gestión de Memoria
77
Ejemplo de espacio de direcciones
int main(int argc, char *argv[])
{
while (1);
return 0;
}
aleon@aleon-laptop:~$ cat /proc/2263/maps
00400000-00401000 r-xp 00000000 08:06 5771454
00601000-00602000 rw-p 00001000 08:06 5771454
7f06e683a000-7f06e69b7000 r-xp 00000000 08:05 1332123
7f06e6bb6000-7f06e6bba000 r--p 0017c000 08:05 1332123
7f06e6bba000-7f06e6bbb000 rw-p 00180000 08:05 1332123
7f06e6bc0000-7f06e6be0000 r-xp 00000000 08:05 1332125
7f06e6ddf000-7f06e6de0000 r--p 0001f000 08:05 1332125
7f06e6de0000-7f06e6de1000 rw-p 00020000 08:05 1332125
7fffd3dc3000-7fffd3dd8000 rw-p 00000000 00:00 0
Tema 3: Gestión de Memoria
secciones de código, datos
solo lectura (constantes) y
datos (variables globales)
/home/aleon/vmareas
/home/aleon/vmareas
/lib/libc-2.11.1.so
/lib/libc-2.11.1.so
/lib/libc-2.11.1.so biblio
/lib/ld-2.11.1.so
/lib/ld-2.11.1.so
/lib/ld-2.11.1.so
[stack]
pila
78
Espacio de direcciones de proceso
¿Cómo se crea un intervalo de direcciones?
●
do_mmap() permite:
●
●
Expandir un VMA ya existente (porque el intervalo que
se añade es adyacente a uno ya existente y tiene los
mismos permisos)
Crear una nueva VMA que represente el nuevo intervalo
de direcciones
unsigned long do_mmap(struct file *file, unsigned long addr,
unsigned long len, unsigned long prot,
unsigned long flag, unsigned long offset)
Tema 3: Gestión de Memoria
79
Espacio de direcciones de proceso
¿Cómo se elimina un intervalo de direcciones?
●
do_munmap() permite eliminar un intervalo de direcciones.
El parámetro mm especifica el espacio de direcciones del
que se va a eliminar el intervalo de memoria que comienza
en "start" y tiene una longitud de "len" bytes.
int do_munmap(struct mm_struct *mm, unsigned long start,
size_t len)
Tema 3: Gestión de Memoria
80
Espacio de direcciones de proceso
●
Las direcciones virtuales deben convertirse a
direcciones físicas mediante tablas de páginas. En
linux tenemos 3 niveles de tablas de páginas.
●
●
●
La tabla de páginas de más alto nivel es el directorio global de
páginas (del inglés page global directory, PGD), que consta de
un array de tipo "pgd_t".
Las entradas del PGD apuntan a entradas de la tabla de
páginas de segundo nivel (page middle directory, PMD), que
es un array de tipo "pmd_t".
Las entradas del PMD apuntan a entradas en la PTE. El
último nivel es la tabla de páginas y contiene entradas de
tabla de páginas del tipo "pte_t" que apuntan a páginas
físicas: struct_page.
Tema 3: Gestión de Memoria
81
Tablas de páginas multinivel de Linux
Tema 3: Gestión de Memoria
82
Caché de páginas. Conceptos.
●
●
●
●
●
La caché de páginas está constituida por páginas
físicas de RAM, y los contenidos de éstas se
corresponden con bloques físicos de disco.
El tamaño de la caché de páginas es dinámico.
El dispositivo sobre el que se realiza la técnica de
caché se denomina almacén de respaldo (backing
store).
Lectura/Escritura de datos de/a disco.
Fuentes de datos para la caché: archivos regulares, de
dispositivos y archivos proyectados en memoria.
Tema 3: Gestión de Memoria
83
Caché de páginas. Conceptos.
●
Lectura de datos: Comprueba si datos están en cache.
●
●
●
Acierto de caché (cache hit) se leen directamente.
Fallo de caché (no se encuentran en cache) (cache miss), el kernel
tiene que planificar operaciones de para leer los datos del disco.
Escritura de datos, existen dos estrategias.
●
●
write-through cache: la escritura actualiza la cache de memoria y
el archivo en disco. Ventaja: mantener coherente la cache.
write-back: la escritura se realiza en la caché y el almacén de
respaldo no se actualiza. Las páginas escritas en la caché se
marcan como sucias (se activa el flag PG_dirty en la struct_page) y
se añaden a una lista (dirty list). Periodicamente, las páginas de la
lista se escriben en disco (proceso writeback), sincronizando la
copia de disco con la de la caché. Tras la escritura se desactiva el
flag PG_dirty de la página.
Tema 3: Gestión de Memoria
84
Desalojo de la caché de páginas.
●
●
●
●
Proceso por el cual se eliminan datos de la caché junto
con la estrategia para decidir cuáles datos eliminar.
Linux selecciona páginas limpias (no marcadas
PG_dirty) y las reemplaza con otro contenido.
Si no existen suficientes páginas limpias en la caché, el
kernel fuerza un proceso de escritura a disco para
hacer disponibles más páginas limpias.
Ahora queda por decidir que páginas limpias
seleccionar para eliminar (selección de víctima).
Tema 3: Gestión de Memoria
85
Selección de víctima.
●
●
Least Recently Used (LRU). Requiere mantener
información de cuando se accede a cada página y
seleccionar las páginas con el tiempo más antiguo. El
problema es el acceso a archivos una sola vez.
Linux soluciona el problema usando dos listas pseudoLRU: active list e inactive list.
● Las páginas de la active list no pueden ser
seleccionadas como víctimas y se añaden páginas
accedidas solamente si residen en la inactive list. Se
añaden al final.
● Las páginas de la inactive list pueden ser
seleccionadas como víctimas.
Tema 3: Gestión de Memoria
86
Caché de páginas. Operaciones.
●
●
●
●
Una página puede contener varios bloques de disco
posiblemente no contiguos (depende del método de
asignación de bloques a archivos).
La caché de páginas de Linux usa una estructura para
gestionar entradas de la caché y operaciones de E/S
de páginas: address_space.
Lectura/escritura de páginas de/en caché. Escritura
usando campo PG_dirty
Hebras de escritura retardada. Realizan escritura en
memoria de las páginas “sucias”
Tema 3: Gestión de Memoria
87
Download