Tema 4
Gestión de memoria
Contenido
•
•
•
•
•
•
•
Requisitos de la gestión de memoria
Modelo de memoria de un proceso
Fases en la generación de un ejecutable
Ficheros proyectados en memoria
Servicios de gestión de memoria
Evolución de los sistemas de gestión de memoria
Memoria virtual
Sistemas operativos
1
Gestión de Memoria 2001
Requisitos de gestión de memoria
• S.O. multiplexa recursos entre procesos
– Cada proceso cree que tiene una máquina para él solo
– Gestión de procesos: Reparto de procesador
– Gestión de memoria: Reparto de memoria
• Propiedades deseables:
– Ofrecer a cada proceso un espacio lógico propio
– Proporcionar protección entre procesos
– Permitir que procesos compartan memoria
– Dar soporte a regiones del proceso
– Maximizar rendimiento del sistema
Sistemas operativos
2
Gestión de Memoria 2001
Funciones del gestor de memoria
•
•
•
•
•
•
Saber qué partes de la memoria están siendo utilizadas.
Cargar programas en MP para su ejecución.
Proporcionar memoria a los procesos cuando la soliciten.
Liberarla cuando se requiera.
Gestionar el intercambio (swapping).
Protección.
– Entre procesos.
– Entre el SO y los procesos
• Memoria compartida.
– Procesos que ejecutan el mismo código.
– Como mecanismo de comunicación.
Sistemas operativos
3
Gestión de Memoria 2001
Modelo de memoria de un proceso
• Un proceso está formado por una serie de regiones.
• Región: zona contigua del espacio de direcciones de un proceso
con las mismas propiedades.
• Tipos de regiones básicos:
– Texto: código
– Datos
– Pila
Sistemas operativos
4
Gestión de Memoria 2001
Programa ejemplo
int a; int b = 5;
void f(int c) {
int d;
Tipos de memoria
1.- Código
2.- Datos declarados
Globales
Con valor inicial
Sin valor inicial
Locales
Con valor inicial
Sin valor inicial
static e = 2;
b = d + 5;
.......
return;
}
main (int argc, char **argv) {
char *p;
p = (char *) malloc (1024)
f(b)
.......
free (p)
....
exit (0)
}
Sistemas operativos
5
Gestión de Memoria 2001
Programa ejemplo: Fichero ejecutable
int a; int b = 5;
void f(int c) {
int d;
static e = 2;
F ich e ro e je cu ta b le
b = d + 5;
.......
N º m á g ico
R e g is tro s
C a b e ce ra
return;
}
main (int argc, char **argv) {
C ó d ig o
char *p;
p = (char *) malloc (1024)
b = 5
e = 2
f(b)
.......
D a to s
Ta b la s y o tra
in fo rm a ció n
free (p)
....
exit (0)
}
Sistemas operativos
6
Gestión de Memoria 2001
Programa ejemplo: Exec
int a; int b = 5;
void f(int c) {
Im a g e n d e m e m o ria
int d;
static e = 2;
C ó d ig o
b = d + 5;
b = 5
e = 2
a = ?
.......
return;
D a to s co n Va lo r In ic.
D a to sin Va lo r In ic.
}
main (int argc, char **argv) {
char *p;
p = (char *) malloc (1024)
f(b)
.......
re to rn o m a in
p = ?
a rg c
a rg v
free (p)
....
exit (0)
B lo q u e d e
a ctiva ció n
d e m a in
P ila
E n to rn o
}
Sistemas operativos
7
Gestión de Memoria 2001
Programa ejemplo: malloc
int a; int b = 5;
void f(int c) {
Im a g e n d e m e m o ria
int d;
C ó d ig o
static e = 2;
b = 5
e = 2
a = ?
b = d + 5;
.......
return;
D a to s co n Va lo r In ic.
D a to sin Va lo r In ic.
M a llo c
1024
}
main (int argc, char **argv) {
char *p;
p = (char *) malloc (1024)
f(b)
.......
re to rn o m a in
p =
a rg c
a rg v
free (p)
....
exit (0)
B lo q u e d e
a ctiva ció n
d e m a in
P ila
E n to rn o
}
Sistemas operativos
8
Gestión de Memoria 2001
Programa ejemplo: Llamada a f
int a; int b = 5;
void f(int c) {
Im a g e n d e m e m o ria
int d;
C ó d ig o
static e = 2;
b = d + 5;
b = 5
e = 2
a = ?
.......
return;
D a to s co n Va lo r In ic.
D a to sin Va lo r In ic.
M a llo c
1024
}
main (int argc, char **argv) {
char *p;
p = (char *) malloc (1024)
re to rn o f
d = ?
c = 5
re to rn o m a in
p =
a rg c
a rg v
f(b)
.......
free (p)
....
exit (0)
B lo q u e d e
a ctiva ció n
d e m a in
P ila
E n to rn o
}
Sistemas operativos
B lo q u e d e
a ctiva ció n
de f
9
Gestión de Memoria 2001
Gestión de memoria en sistemas monoprogramados
• Modelo de memoria
0
SO
Usuario
Usuario
FFF...
Sistemas operativos
SO
10
Gestión de Memoria 2001
Gestión de memoria en sistemas monoprogramados II
• Overlays
0
Zona
común
Zona de
solapamiento
•Mod 1
•Mod 2
•Mod 3
SO
FFF...
Sistemas operativos
11
Gestión de Memoria 2001
Multiprogramación
•
Ventajas:
– Facilita la programación, dividiendo los programas en
procesos.
– Permite el servicio interactivo simultáneo a varios usuarios
de forma eficiente.
– Aprovecha los tiempos que los procesos pasan esperando a
que se completen sus operaciones de E/S.
– Aumenta el uso de la CPU.
•
Grado de multiprogramación: número de procesos en memoria.
Sistemas operativos
12
Gestión de Memoria 2001
Modelo de multiprogramación
• Un proceso gasta p % de tiempo por E/S.
• Si el grado de multiprogramación es n =>
– La probabilidad de que todos estén esperando es pn .
– Utilización de la CPU: 1 - pn.
• Este modelo es sólo una aproximación (supone que los n
procesos son independientes).
• En un sistema monoprocesador esto no es cierto (un proceso ha
de esperar cuando la CPU está ocupada).
• Este modelo puede proporcionar predicciones aproximadas
sobre el rendimiento de la CPU.
Sistemas operativos
13
Gestión de Memoria 2001
Modelo de multiprogramación II
20 % espera E/S
% utilización de CPU
100
80
50 % espera E/S
60
80 % espera E/S
40
20
0
0
1
2
3
4
5
6
7
8
9
10
11
Nivel de multiprogramación
Sistemas operativos
14
Gestión de Memoria 2001
Reubicación
• En un sistema multiprogramado es imposible conocer en tiempo
de compilación y montaje qué direcciones ocupará un proceso
en memoria => reubicación
• Solución: emplear direcciones lógicas
• Tres alternativas:
– Reubicación hardware
– Reubicación software
– Programa reubicable (no tiene direcciones absolutas)
Sistemas operativos
15
Gestión de Memoria 2001
Reubicación hardware
• Hardware encargado de traducción
• El S.O. se encarga de:
– Almacena por cada proceso su función de traducción
– Especifica al hardware qué función aplicar para cada proceso
M e m o ria
• Programa se carga en memoria sin modificar
• Para el ejemplo anterior:
P ro c e s a d o r
PC
H W tra du cció n
8
R . In stru cció n
1 0 00 0
1 5 00
11 5 0 0
+
L O A D R 3 , /1 50 0
Sistemas operativos
16
1 0 00 0
1 0 00 4
1 0 00 8
10012
10016
10020
10024
10028
10032
10036
..........
L O A D R 1 , # 10 0 0
L O A D R 2 , # 20 0 0
L O A D R 3 , /1 50 0
L O A D R 4 , [R 1 ]
S T O R E R 4 , [R 2 ]
IN C R 1
IN C R 2
DEC R 3
JN Z /1 2
.................
Gestión de Memoria 2001
Reubicación software
• Traducción de direcciones durante
carga del programa
• Programa en memoria distinto del
ejecutable
• Desventajas:
– No asegura protección
– No permite mover programa en
tiempo de ejecución
• Para el ejemplo anterior:
Sistemas operativos
17
M e m o ria
1 0 00 0
1 0 00 4
1 0 00 8
1 0 01 2
1 0 01 6
1 0 02 0
1 0 02 4
1 0 02 8
1 0 03 2
1 0 03 6
..........
L O A D R 1 , # 110 0 0
L O A D R 2 , # 12 0 0 0
L O A D R 3 , /11 50 0
L O A D R 4 , [R 1 ]
S T O R E R 4 , [R 2 ]
IN C R 1
IN C R 2
DEC R 3
JN Z /1 0 0 1 2
.................
Gestión de Memoria 2001
Protección
•
•
•
•
Monoprogramación: Protección del SO
Multiprogramación: Además procesos entre sí
Traducción debe crear espacios disjuntos
Necesario validar todas las direcciones que genera el programa
– La detección debe realizarla el hardware del procesador
– El tratamiento lo hace el SO (envía KILL al proceso)
Sistemas operativos
18
Gestión de Memoria 2001
Reubicación y protección
Memoria principal
Dirección
relativa
Registro base
Sumador
Dirección
absoluta
Espacio asignado
al proceso A
Comparador
Registro límite
Trap
Sistemas operativos
19
Gestión de Memoria 2001
Compartir memoria
• Direcciones lógicas de 2 o más procesos se corresponden con
misma dirección física
M a p a p ro c e so 1
• Bajo control del S.O.
M e m o ria
z o n a p riv a d a 1
• Beneficios:
z o n a p riv. 1 (P 1 )
– Procesos ejecutando
z o n a c o m p artid a
z o n a p riv. 1 (P 2 )
mismo programa
z o n a p riv a d a 2
comparten su código
z o n a c o m p artid a
– Mecanismo de
M a p a p ro c e so 2
z o n a p riv. 2 (P 2 )
comunicación entre
z o n a p riv a d a 1
z o n a p riv. 2 (P 1 )
procesos muy rápido
z o n a c o m p artid a
• Requiere asignación no
contigua:
z o n a p riv a d a 2
Sistemas operativos
20
Gestión de Memoria 2001
Maximizar rendimiento
• Reparto de memoria maximizando grado de multiprogramación
– Aprovechamiento de memoria óptimo e irrealizable:
M e m o ria
0
D ire cció n 5 0 d e l pro ce so 4
1
D ire cció n 1 0 d e l pro ce so 6
2
D ire cció n 9 5 d e l pro ce so 7
3
D ire cció n 5 6 d e l pro ce so 8
4
D ire cció n 0 d e l p ro ce so 12
5
D ire cció n 5 d e l p ro ce so 20
6
D ire cció n 0 d e l p ro ce so 1
.........................................
.........................................
N -1
D ire cció n 8 8 d e l pro ce so 9
N
D ire cció n 5 1 d e l pro ce so 4
– Paginación: solución factible con aprovechamiento aceptable
• Uso de memoria virtual para aumentar grado de multiprogramación
Sistemas operativos
21
Gestión de Memoria 2001
Fases en generación de ejecutable
• Aplicación: conjunto de módulos en lenguaje de alto nivel
• Procesado en dos fases: Compilación y Montaje
• Compilación:
– Resuelve referencias dentro cada módulo fuente
– Genera módulo objeto
M ó d u lo
M ó d u lo
• Montaje (o enlace):
– Resuelve referencias
entre módulos objeto
– Resuelve referencias a
símbolos de bibliotecas
– Genera fichero
ejecutable
fu e n te A
C o m p ila d o r
M ó d u lo
o b je to A
M ó d u lo
o b je to B
B iblio te c as
M o n ta d o r
F ich e ro
e je cu ta b le
• Carga en memoria
B iblio te c as
d e siste m a
C a rg a d o r d e l S O
C ó d ig o
e n m e m o ria
– Añade rutinas de
biblioteca
Sistemas operativos
fu e n te B
22
Gestión de Memoria 2001
Bibliotecas estáticas
• Biblioteca: colección de módulos objeto relacionados
• Bibliotecas del sistema o creadas por el usuario
• Bibliotecas Estáticas:
– Montaje: enlaza los módulos objeto del programa y de las bibliotecas
– Ejecutable autocontenido
• Desventajas del montaje estático:
–
–
–
–
Ejecutables grandes
Código de función de biblioteca repetido en muchos ejecutables
Múltiples copias en memoria del código de función de biblioteca
Actualización de biblioteca implica volver a montar
M a in
F u n ció n A
F u n ció n B
C ó d ig o
F u n ció n d e b ib lio te ca F 1
F u n ció n d e b ib lio te ca F 2
Sistemas operativos
23
Gestión de Memoria 2001
Bibliotecas dinámicas
• Carga y montaje de biblioteca en tiempo de ejecución
• Ejecutable contiene:
– Nombre de la biblioteca
– Rutina encargada de carga y montaje en tiempo de ejecución
ante primera referencia
• Ventajas del montaje dinámico:
– Menor tamaño ejecutables
– Código de rutinas de biblioteca sólo en fichero de biblioteca
– Procesos pueden compartir código de biblioteca
– Actualización automática de bibliotecas: Uso de versiones
Sistemas operativos
24
Gestión de Memoria 2001
Bibliotecas dinámicas
P ro g ra m a
P rin cip a l
C a ll X X
C ó d ig o
P se u d o X X
lla m a a l S .O .
Sistemas operativos
25
XX
Gestión de Memoria 2001
Bibliotecas dinámicas
• Proceso:
– El programa principal llama a la pseudo función XX
– Esta función contacta con el SO y le pide la función XX
– El SO comprueba que la función XX está definida en una
biblioteca dinámica.
– El SO operativo comprueba si XX ya está cargada en
memoria por algún proceso
• En caso negativo la carga
• En caso positivo comparte esa zona de memoria con este
proceso
– El SO devuelve un puntero a la Pseudo XX para que pase la
llamada a XX
Sistemas operativos
26
Gestión de Memoria 2001
Formato del ejecutable
• Distintos fabricantes usan diferentes formatos
– Ejemplo: Executable and Linkable Format (ELF)
• Estructura: Cabecera y conjunto de secciones
• Cabecera:
– Número mágico
– Punto de entrada del programa
– Tabla de secciones
Sistemas operativos
27
Gestión de Memoria 2001
Formato del ejecutable
F ic h e ro E je c u ta b le
0
C a b e c e ra
N ú m ero m ág ic o
C o n tad o r d e p ro g ram a in icial
....................
Ta b la d e seccio n es
100 0
C ó d ig o
D esp l.
C ó d ig o
Tam .
100 0
400 0
D ato s c o n v.i. 500 0
D ato s s in v.i. -----...................... ........
100 0
500
........
T. S ím b o lo s
100 0
800 0
500 0
S e c c io n e s
D ato s c o n valo r in icial
... ...... ...... .
800 0
Ta b la d e sím b o lo s
Sistemas operativos
28
Gestión de Memoria 2001
Secciones del ejecutable
• Variedad de tipos de secciones. Ejemplo:
– Tabla de símbolos para depuración
– Lista de bibliotecas dinámicas usadas
• Más relevantes en mapa de memoria del proceso:
– Código, Datos con valor inicial y Datos sin valor inicial
• Código (texto)
– Contiene código del programa
• Datos con valor inicial
– Variables globales inicializadas
• Datos sin valor inicial
– Variables globales no inicializadas
– Aparece en tabla de secciones pero no se almacena en ejecutable
• ¿Por qué no hay sección vinculada a variables locales?
Sistemas operativos
29
Gestión de Memoria 2001
Variables globales versus locales
• Variables globales
– Estáticas
– Se crean al iniciarse programa
– Existen durante ejecución del mismo
– Dirección fija en memoria y en ejecutable
• Variables locales y parámetros
– Dinámicas
– Se crean al invocar función
– Se destruyen al retornar
– La dirección se calcula en tiempo de ejecución
– Recursividad: varias instancias de una variable
Sistemas operativos
30
Gestión de Memoria 2001
Variables globales versus locales
• Ejemplo:
int x=8;
int y;
/* Variable global con valor inicial */
/* Variable global sin valor inicial */
f(){
int z;
.......
}
main(){
.......
}
Sistemas operativos
/* Variable local */
31
Gestión de Memoria 2001
Crear mapa de memoria desde ejecutable
• Código
– Compartida, RX, T. Fijo, Soporte en Ejecutable
• Datos con valor inicial
– Privada, RW, T. Fijo, Soporte en Ejecutable
• Datos sin valor inicial
– Privada, RW, T. Fijo, Sin Soporte (rellenar 0)
• Pila
– Privada, RW, T. Variable, Sin Soporte (rellenar 0)
– Crece hacia direcciones más bajas
– Pila inicial: argumentos del programa
Sistemas operativos
32
Gestión de Memoria 2001
Crear mapa desde ejecutable
Sistemas operativos
33
Gestión de Memoria 2001
Otras regiones del mapa creadas durante
ejecución
• Región de Heap
– Soporte de memoria dinámica (malloc en C)
– Privada, RW, T. Variable, Sin Soporte (rellenar 0)
– Crece hacia direcciones más altas
• Fichero proyectado
– Región asociada al fichero proyectado
– Compartida, T. Variable, Soporte en Fichero
– Protección especificada en proyección
• Memoria compartida
– Región asociada a la zona de memoria compartida
– Compartida, T. Variable, Sin Soporte (rellenar 0)
– Protección especificada en proyección
• Pilas de threads
– Cada pila de thread corresponde con una región
– Mismas características que pila del proceso
• Biblioteca dinámica
– Regiones asociadas al código y datos de la biblioteca
Sistemas operativos
34
Gestión de Memoria 2001
Mapa de memoria de un proceso hipotético
Sistemas operativos
35
Gestión de Memoria 2001
Servicios de gestión de memoria
• Gestor de memoria realiza funciones internas
• Ofrece pocos servicios directos a aplicaciones
• Servicios POSIX de gestión de memoria más usados:
– Uso de memoria compartida (shm_open)
– Proyección de ficheros y m. compartida (mmap)
– Bloqueo de páginas en memoria principal
– Asignación de memoria
• Ya han sido estudiados
• Presentamos ejemplos de proyección de ficheros
Sistemas operativos
36
Gestión de Memoria 2001
Ficheros proyectados en memoria
Memoria
principal
Imagen de memoria
de un proceso
Marcos de
página
Fichero
proyectado
en memoria
Fichero
Swap
Sistemas operativos
37
Gestión de Memoria 2001
Ficheros proyectados en memoria II
•
•
•
•
Una región del proceso recibe el fichero.
Fichero como extensión del swap.
Habrá páginas del fichero en memoria principal.
El proceso direcciona dentro del fichero (región) con las
instrucciones de acceso a memoria.
Sistemas operativos
38
Gestión de Memoria 2001
Ficheros proyectados: Servicios
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
• Establece una proyección entre el espacio de direcciones de un proceso y un
descriptor de fichero u objeto de memoria compartida.
– Devuelve la dirección de memoria donde se ha proyectado el fichero.
– addr dirección donde proyectar. Si NULL el SO elige una.
– len especifica el número de bytes a proyectar.
– prot el tipo de acceso (lectura, escritura o ejecución).
– flags especifica información sobre el manejo de los datos proyectados
(compartidos, privado, etc.).
– fildes representa el descriptor de fichero del fichero o descriptor del
objeto de memoria a proyectar.
– off desplazamiento dentro del fichero a partir del cual se realiza la
proyección.
void munmap(void *addr, size_t len);
• Desproyecta parte del espacio de direcciones de un proceso comenzando en la
dirección addr.
Sistemas operativos
39
Gestión de Memoria 2001
Ejemplo: copia de ficheros
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
main(int argc, char **argv)
{
int i, fdo, fdd;
char *org, *dst, *p, *q;
struct stat bstat;
/* Abre el fichero origen para lectura */
fdo=open(argv[1], O_RDONLY);
fdd=open(argv[2], O_CREAT|O_TRUNC|O_RDWR, 0640);
Sistemas operativos
40
Gestión de Memoria 2001
Ejemplo: copia de ficheros
/* Averigua la longitud del fichero origen */
fstat(fdo, &bstat)
/* Asigna tamaño al fichero destino */
ftruncate(fdd, bstat.st_size);
/* Se proyecta todo el fichero origen (ver "man mmap") */
org=mmap(NULL, bstat.st_size, PROT_READ, MAP_SHARED, fdo, 0);
/* Se proyecta todo el fichero destino (ver "man mmap" */
dst=mmap(NULL, bstat.st_size, PROT_WRITE, MAP_SHARED, fdd, 0);
if (org == MAP_FAILED || dst == MAP_FAILED)
perror("Error en mmap");
/* Se cierran los ficheros */
close(fdo);
close(fdd);
Sistemas operativos
41
Gestión de Memoria 2001
Ejemplo: copia de ficheros
/* Bucle de copia */
p=org; q=dst;
for (i=0; i<bstat.st_size; i++)
*q++= *p++;
/* Se eliminan las proyecciones */
munmap(org, bstat.st_size);
munmap(dst, bstat.st_size);
}
Sistemas operativos
42
Gestión de Memoria 2001
Ejemplo II
• Ejemplo: Cuántas veces aparece carácter en fichero
int main(int argc, char **argv) {
......................................
fd=open(argv[2], O_RDONLY)); /* Abre fichero */
fstat(fd, &bstat); /* Averigua long. fichero */
/* Se proyecta el fichero */
org=mmap((caddr_t) 0, bstat.st_size, PROT_READ,
MAP_SHARED, fd, 0));
close(fd); /* Se cierra el fichero */
Sistemas operativos
43
Gestión de Memoria 2001
Ejemplo II
/* Bucle de acceso */
p=org;
for (i=0; i<bstat.st_size; i++)
if (*p++==caracter) contador++;
/* Se elimina la proyeccion */
munmap(org, bstat.st_size);
printf("%d\n", contador);
}
Sistemas operativos
44
Gestión de Memoria 2001
Memoria compartida
Memoria
principal
Marcos de
página
Imagen de memoria
proceso A
Región de
memoria
compartida
Imagen de memoria
proceso B
Región de
memoria
compartida
SWAP
• La región puede proyectarse en cada proceso sobre direcciones virtuales diferentes.
Sistemas operativos
45
Gestión de Memoria 2001
Memoria compartida: Servicios
int shm_open(char *name, int oflag, mode_t mode);
– Crea un objeto de memoria a compartir entre procesos
int shm_unlink(const char *name);
– Borra una zona de memoria compartida.
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
– Establece una proyección entre el espacio de direcciones de un proceso y
un descriptor de fichero u objeto de memoria compartida.
void munmap(void *addr, size_t len);
– Desproyecta parte del espacio de direcciones de un proceso comenzando
en la dirección addr.
int close(int fd);
– Cierra el descriptor de objeto de memoria compartida
int ftruncate(int fd);
– Asigna espacio a un fichero u objeto de memoria compartida.
Sistemas operativos
46
Gestión de Memoria 2001
Memoria compartida: Ejemplo (I)
• Creación de un segmento de memoria compartida (proceso A):
char *buffer; /* buffer a compartir */
int shd;
/* se crea el objeto en un proceso */
shd = shm_open("BUFFER", O_CREAT|O_RDWR, 0777);
/* se asigna espacio al segmento */
ftruncate(shd, MAX_BUFFER * sizeof(char));
/* se proyecta */
buffer = (char *) mmap(NULL, MAX_BUFFER * sizeof(char),
PROT_READ | PROT_WRITE, MAP_SHARED, shd, 0);
Sistemas operativos
47
Gestión de Memoria 2001
Memoria compartida: Ejemplo (II)
• Acceso a un segmento de memoria compartida (proceso B):
char *buffer; /* buffer a compartir */
int shd;
/* se crea el objeto en un proceso */
/* debe existir */
shd = shm_open("BUFFER"", O_RDWR);
/* se proyecta */
buffer = (char *) mmap(NULL, MAX_BUFFER * sizeof(char),
PROT_READ | PROT_WRITE, MAP_SHARED, shd, 0);
Sistemas operativos
48
Gestión de Memoria 2001
Utilización de memoria asignada
• Se proyecta sobre la zona asignada una estructura
• Se utiliza la estructura mediante un manejador (puntero)
• Errores típicos de utilización:
– Utilizar el manejador (puntero) después de haber liberado la
memoria. Se utiliza una memoria que ya no está asignada
– No liberar la memoria una vez terminado su uso. El sistema
se puede quedar sin memoria
• Para memoria compartida
– Proyectar la misma estructura en todos los programas.
¿Compartir la definición de la estructura?
Sistemas operativos
49
Gestión de Memoria 2001
Utilización de memoria asignada
struct datos {
int a; char b; float c;
inte v[10];
}
main () {
struct datos *p;
/* Se reserva memoria y se proyecta la estructura de datos */
p = malloc (sizeof (struct datos));
/* se utiliza la memoria asignada a través de p */
p->a = 5;
p->b = 'a';
p->c = 2.5;
p-> v[3] = 25;
....
}
Sistemas operativos
50
Gestión de Memoria 2001
Reserva de memoria
• malloc: es una función de librería del lenguaje C
• UNIX
– El malloc se puede construir con el servicio brk
– tamaño = brk (addr)
• Coloca , si es posible, el fin del heap en la dirección addr
• Supone que aumenta o disminuye el heap del segmento de
datos
• Wn 32
– Un proceso puede crear varios heaps mediante:
HeapCreate
– Se puede asignar memoria a cada heap mediante:
HeapAlloc
Sistemas operativos
51
Gestión de Memoria 2001
Liberar memoria
• free: es una función de librería del lenguaje C
• UNIX
– El free se puede construir con el servicio brk
– tamaño = brk (addr)
• Coloca , si es posible, el fin del heap en la dirección addr
• Supone que aumenta o disminuye el heap del segmento de
datos
• Wn 32
– Un proceso puede crear destruir un heap mediante:
HeapDestroy
– Se puede liberar memoria de un heap mediante:
HeapFree
Sistemas operativos
52
Gestión de Memoria 2001
Bloquear páginas en marcos de memoria principal
• mlockall
– Bloquea todo el espacio de direcciones de un proceso en
memoria
– mlockall (MCL_CURRENT)
• Bloquea todas las páginas actuales del proceso
– mlockall (MCL_FUTURE)
• Bloquea todas las páginas del proceso, tanto las actuales como
las futuras
– El mandato está reservado al superusuario
• munlockall
– Desbloquea el espacio de direcciones del proceso
– El mandato está reservado al superusuario
Sistemas operativos
53
Gestión de Memoria 2001
Bloquear páginas en marcos de memoria principal
• int mlock (void *addr, int len);
– Bloquea todas las páginas que contengan posiciones contenidas
entre addr y addr + len
– Está reservado al superusuario
• int munlock (void *addr, int len);
– Restablece las páginas que contengan parte del espacio de
direcciones comprendido entre addr y addr + len
– Está reservado al superusuario
Sistemas operativos
54
Gestión de Memoria 2001
Evolución de gestión de memoria
• Muy ligada al desarrollo del hardware
– HW más sofisticado permite estrategias más efectivas
• Por simplicidad, sólo dos etapas:
– Asignación contigua
– Paginación
• ¿Cumplen estos esquemas los requisitos planteados?
Sistemas operativos
55
Gestión de Memoria 2001
Asignación contigua (1/2)
• Zona contigua de memoria contiene mapa del proceso
• Entre diversas alternativas, nos centramos en:
– Esquema basado en particiones dinámicas
• Hardware requerido: registros valla
– Registro límite
– Registro base
Sistemas operativos
56
Gestión de Memoria 2001
Asignación contigua (2/2)
• S.O. almacena en BCP valor de R. valla del proceso
• En cambio de proceso S.O. carga R. valla de BCP a procesador
• Fragmentación externa
– Quedan pequeños fragmentos no utilizables
• ¿Cumple requisitos?
– Espacios independientes: Mediante R. valla
– Protección: Mediante R. valla
– Compartir memoria: No posible
– Soporte de regiones: No hay
• Se reserva espacio para huecos
– Maximizar rendimiento
• Mal aprovechamiento (f. externa)
• No permite memoria virtual
Sistemas operativos
57
Gestión de Memoria 2001
Paginación (1/2)
•
•
•
•
•
Hardware más sofisticado
Unidad de asignación: Página
Mapa de memoria dividido en páginas
Memoria física dividida en marcos de página
Tabla de páginas (T.P.) por proceso:
– Relaciona cada página con el marco que la contiene
• MMU usa T.P. para traducir direcciones lógicas
• S.O. mantiene T.P. de procesos y notifica a MMU cuál debe usar
Sistemas operativos
58
Gestión de Memoria 2001
Paginación (2/2)
• Entrada de la T.P.
– Número de marco asociado
– Protección (RWX)
– Página presente (P) o ausente (A)
• Fragmentación interna
– Puede desperdiciarse parte de último marco asignado a proceso
• ¿Cumple requisitos?
–
–
–
–
Espacios independientes: Mediante T.P.
Protección: Mediante T.P.
Compartir memoria: Páginas asociadas a mismo marco
Soporte de regiones: se usa información de la T.P.
• Tipo de acceso no permitido: Protección
• Accesos a huecos: Página presente
• No se reserva espacio para huecos
– Maximizar rendimiento
• Buen aprovechamiento
• Permite memoria virtual
Sistemas operativos
59
Gestión de Memoria 2001
Memoria virtual
• Gestión automática de la parte de la jerarquía de memoria
formada por los dos niveles de memoria principal y de disco.
Mapa de memoria virtual
(direcciones generadas por el procesador)
Memoria principal
Procesador
Dirección
virtual
Sistemas operativos
Dirección física
Fallo página
MMU
60
Memoria
Secundaria
(Intercambio)
Gestión de Memoria 2001
Memoria virtual
• Jerarquía de memoria: Niveles de almacenamiento
• Procesos exhiben proximidad de referencias
• Memoria virtual
– Transferencias M. principal y M. secundaria (swap)
• Basada en paginación:
– Página no residente se marca ausente
– Se guarda dir. de bloque de swap que la contiene
• De M. secundaria a M. principal (por demanda):
– Acceso a pág. no residente: Fallo de página
– S.O. lee página de M. secundaria
• De M. principal a M. secundaria (por expulsión):
– No hay espacio en M. principal para traer página
– Se expulsa (reemplaza) una página residente
– S.O. escribe página expulsada a M. secundaria
• Beneficios:
– Aumento grado de multiprogramación
• ¡¡Cuidado con Hiperpaginación!!
– Ejecución de programas que no caben en M. ppal.
Sistemas operativos
61
Gestión de Memoria 2001
Gestión de espacio de swap
• Asignación de espacio de swap cuando se crea región
• Dos alternativas: Con y sin preasignación
• Creación de región con preasignación
– Se asigna espacio de swap
– Se copia en él contenido inicial desde soporte
– Páginas se traen por demanda desde swap
– En expulsión ya tiene espacio reservado
• Creación de región sin preasignación
– No se asigna espacio de swap
– Páginas se traen por demanda desde su soporte
– En expulsión se reserva espacio de swap (si pág. modificada)
• Sin preasignación más usada actualmente
• Región compartida con soporte no usa swap
Sistemas operativos
62
Gestión de Memoria 2001
Ejecución de programas
• Creación de regiones iniciales desde ejecutable
• No se asigna espacio en M. principal
• No se carga nada en M. principal
– Se traerá bajo demanda
• Se rellena cada entrada de T.P.:
– Protección: Depende de tipo de región
– Ausente
– Dir. en M. secundaria donde está almacenada
• Último valor depende del tipo de gestión de swap
Sistemas operativos
63
Gestión de Memoria 2001
Con preasignación de swap
• S.O. reserva espacio en swap para regiones
• Copia del soporte al swap:
– Código: De ejecutable
– Datos con v.i.: De ejecutable
– Datos sin v.i.: Rellenar a 0
– Pila: Argumentos del programa
• Entradas T.P referencian a bloques del swap
Sistemas operativos
64
Gestión de Memoria 2001
Sin preasignación de código
• Región de código: compartida con soporte
• No es necesario usar swap
– Se usa directamente ejecutable
Sistemas operativos
65
Gestión de Memoria 2001
Sin preasignación de swap
• Entradas T.P. referencian a bloques del soporte (si hay):
–
–
–
–
Código: Bloques del ejecutable
Datos con v.i.: Bloques del ejecutable
Datos sin v.i.: Valor que indica rellenar a 0
Pila: Bloque del swap con argumentos del programa
• Al expulsar por primera vez una página modificada se reserva
espacio de swap
– Excepto si compartida y con soporte -> se actualiza soporte
Sistemas operativos
66
Gestión de Memoria 2001
Ficheros proyectados en memoria
• Generalización de M. Virtual
– Entradas de T.P. referencian a fichero de usuario
• Programa solicita proyección de fichero en su mapa
• Forma alternativa de acceso al fichero:
– En vez de read y write
– Acceso directo a memoria
• Ventajas
– Menos llamadas al sistema
– Menos copias intermedias
– Más fácil programación
Sistemas operativos
67
Gestión de Memoria 2001
Ficheros proyectados en memoria
Sistemas operativos
68
Gestión de Memoria 2001
Memoria virtual II
• El proceso sólo ve direcciones virtuales.
• El mapa virtual de un proceso está soportado en memoria
secundaria (swap).
• No es necesario que todo el proceso esté cargado en memoria =>
– Más procesos en MP, uso más eficiente del procesador.
– Un proceso puede ser mayor que la MP.
– Arranque más rápido.
• Conjunto residente: parte del proceso cargado en MP.
Sistemas operativos
69
Gestión de Memoria 2001
Requisitos de la memoria virtual
• Soporte en almacenamiento secundario.
• Espacio virtual mayor que la memoria física => fallos en los
accesos a memoria.
• Cuando se produce un fallo de acceso => trap al SO.
• Hay que continuar o reiniciar la instrucción en la que se produjo
el fallo de acceso.
– MOV (R1), (R2) => tres fallos de página.
• Esquemas HW de memoria virtual:
– Paginación.
– Segmentación.
– Segmentación paginada.
Sistemas operativos
70
Gestión de Memoria 2001
Paginación I
MAPA VIRTUAL
(RESIDENTE EN DISCO)
2 p-1
2· 2p-1
3· 2 p
3·2 p-1
A
Proyección de página
virtual a memoria física
2· 2p
2p
0
2n-1
Páginas
Sistemas operativos
MEMORIA PRINCIPAL
0
2· 2 p
2p
2p-1
2·2 p-1
3·2 p
3· 2 p-1
A'
2m-1
Marcos de
página
n>m
71
Gestión de Memoria 2001
Mecanismo de traducción
n-1
p p-1
0
P a l a b ra e n
la P á g i n a
Página Virtual
Dirección Virtual
Traductor
m-1
Página Física
p p-1
0
P a l a b ra e n
la P á g i n a
Dirección Física
• Necesario una tabla de páginas.
Sistemas operativos
72
Gestión de Memoria 2001
Tabla de páginas I
• La información de traducción se organiza en tablas de páginas.
• La tabla de páginas está formada por entradas de tablas de
página (ETP).
• Cada entrada permite traducir una página virtual.
• Permite saber si una página:
– Está en MP => marco de página.
– Está en almacenamiento secundario => página en disco.
Sistemas operativos
73
Gestión de Memoria 2001
Tabla de páginas II
Tabla de
páginas
Memoria
secundaria
Presente
Memoria
principal
ETP
Si
No
• Si la página no se encuentra en MP => fallo de página (trap al SO).
Sistemas operativos
74
Gestión de Memoria 2001
Información de una ETP I
Otra información
Referenciada
Protección
Nº de marco/
bloque de disco
Válida
Presente/Ausente
Modificada
Sistemas operativos
75
Gestión de Memoria 2001
Información de una ETP II
• Otra información:
– Copy-on-write
– No paginada (fija en memoria física).
– Cache desactivada.
– Rellenar a ceros.
– Rellenar de fichero.
Sistemas operativos
76
Gestión de Memoria 2001
Paginación por demanda
• Los procesos residen en memoria secundaria y no se carga
inicialmente ninguna página en MP.
• El SO ha creado previamente la TP y las entradas están marcadas
como no presentes.
• A medida que se referencian direcciones se producen fallos de página
que trata el SO.
• Ventajas:
– Sólo se cargan en MP las páginas que se referencian.
– Acelera la carga de un proceso (no se cargan páginas que no se
referencian).
– Mejor uso de la MP.
• Esquema implementado en los SO actuales.
– UNIX.
– LINUX.
– Windows NT.
Sistemas operativos
77
Gestión de Memoria 2001
Manejo del fallo de página
• El HW genera un trap de fallo de página.
• Se salva el estado del proceso actual y se bifurca a la rutina de gestión del
fallo de página.
• El SO debe conocer qué página hace falta => el HW lo da en un registro.
• El SO comprueba si el acceso está permitido (búsqueda en la TP). Si no
está permitido se mata al proceso o se envía una señal.
• El SO busca un marco de página libre. Si no hay se ejecuta el algoritmo
de reemplazo.
• Si el marco de página esta sucio se escribe a disco y se lanza otro proceso.
• Cuando el marco de página queda libre se bloquea el marco en MP, se
manda leer y se lanza otro proceso.
• Cuando llega la interrupción de E/S de la lectura se actualiza la ETP
correspondiente y se marca el marco de página como normal.
• El proceso se marca como ejecutable.
• Se continua o se reinicia la instrucción que produjo el fallo.
Sistemas operativos
78
Gestión de Memoria 2001
Soporte de la imagen de memoria
• Regiones con soporte propio
• Regiones sin soporte propio => swap.
Memoria
secundaria
Espacio de direcciones
virtual de un proceso
Memoria principal
Pila
SWAP
Memoria
compartda
Fichero proyectado
en memoria
Fichero
Datos sin
valor inicial
Datos con
valor inicial
Fichero
Ejecutable
Texto
Espacio virtual no asignado
Sistemas operativos
79
Marcos asignados al
proceso
Gestión de Memoria 2001
Creación de la imagen a partir de un
fichero ejecutable
• Inicialmente ninguna página cargada en MP a excepción de la pila inicial.
ESPACIO DE
DIRECCIONES VIRTUAL
DEL PROCESO
FICHERO
EJECUTABLE
DISPOSITIVO
DE SWAP
MEMORIA
PRINCIPAL
página dent ro
DATOS
CÓDIGO
página
dentro/fuera
página
dentro/fuera
página
dentro/fuera
CÓD IGO
primer fallo
CÓDIGO
DATOS VALOR
INICIAL
DATOS SIN
VALOR INICIAL
DATOS VALOR
INI CI AL
DATOS SIN
VALOR INICIAL
PILA
primer fallo
rellenar con ceros
SIN
SOPORTE
primer fallo
rellenar con ceros
PILA
• Uso más eficiente de los recursos.
• Sólo se cargan las páginas que realmente se usan.
• Sólo se reserva espacio de swap cuando se necesita.
Sistemas operativos
80
Gestión de Memoria 2001
Ejecución de un programa en LINUX
• Ejemplo de código.
#include <math.h>
#include <stdio.h>
main()
{
double x = 30;
double res;
void *p;
p= sbrk(40000);
res = sin(x);
printf("res = %f \n", res);
}
•
Bibliotecas:
– libc.so
– libm.so
Sistemas operativos
81
Gestión de Memoria 2001
Ejecución de un programa en LINUX II
• Mandato strace
–
–
–
–
open("/lib/libm.so", O_RDONLY)
mmap() => se proyecta el código.
open("/lib/libc.so", O_RDONLY)
mmap() => se proyecta el código.
– Comienza a ejecutar el proceso
•
Fichero /proc/PID/maps
direccion
08048000-08049000
08049000-0804a000
0804a000-08054000
40000000-4000a000
4000a000-4000b000
40010000-40028000
40028000-40029000
40029000-400ba000
400ba000-400c2000
400c2000-400ce000
bfffc000-c0000000
Sistemas operativos
perms offset
dev nodo-i
r-xp 00000000 08:11 630795
rw-p 00000000 08:11 630795
rwxp 00000000 00:00 0
r-xp 00000000 08:01 30602
rw-p 00009000 08:01 30602
r-xp 00000000 08:01 30614
rw-p 00017000 08:01 30614
r-xp 00000000 08:01 30606
rw-p 00090000 08:01 30606
rw-p 00000000 00:00 0
rwxp ffffd000 00:00 0
82
Código
Datos sin VI
Datos dinámicos
ld.so
libm.so
libc.so
Pila
Gestión de Memoria 2001
Reemplazo de páginas
• Objetivo: reducir la tasa de fallos.
• Algoritmos:
– Óptimo.
– FIFO.
– NRU.
– Segunda oportunidad.
– Algoritmo del reloj.
– LRU.
•
•
Buffering de páginas.
Demonio de paginación.
– Se activa cuando se necesitan páginas.
– Objetivo: disponer de páginas libres.
Sistemas operativos
83
Gestión de Memoria 2001
Hiperpaginación
% Utilización de UCP
100 %
Limitado por el dispositivo
de paginación
% Utilización de UCP
100 %
Nivel de Multiprogramación
MEMORIA PEQUEÑA
Limitado por el dispositivo
de paginación
Nivel de Multiprogramación
MEMORIA GRANDE
• Solución: reducir el grado de multiprogramación, suspendiendo
uno o más procesos
Sistemas operativos
84
Gestión de Memoria 2001
Descargar

Sistemas Distribuidos