Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos: Lección 9: Gestión de Memoria: - Introducción y Conceptos Básicos
Sistemas Operativos: Lección 9: Gestión de Memoria: - Introducción y Conceptos Básicos
Lección 9:
Gestión de Memoria
Jesús Carretero Pérez
Alejandro Calderón Mateos
José Daniel García Sánchez
Francisco Javier García Blas
José Manuel Pérez Lobato
• Introducción y conceptos básicosMaría Gregoria Casares Andrés
Sistemas
Opera,vos
1
ADVERTENCIA
• Este
material
es
un
simple
guión
de
la
clase:
no
son
los
apuntes
de
la
asignatura.
Sistemas
Opera,vos
2
ObjeBvos
Sistemas
Opera,vos
3
Contenido
Sistemas
Opera,vos
4
ObjeBvos
del
Gestor
de
Memoria
• ObjeBvos:
– Ofrecer
a
cada
proceso
un
espacio
lógico
propio.
– Proporcionar
protección
entre
procesos.
– PermiBr
que
los
procesos
compartan
memoria.
– Dar
soporte
a
las
regiones
del
proceso.
– Maximizar
el
grado
de
mulBprogramación.
– Proporcionar
a
los
procesos
mapas
de
memoria
muy
grandes.
Sistemas
Opera,vos
5
Espacios
lógicos
independientes
Sistemas
Opera,vos
6
Sistemas
OperaBvos
monoprogramados
Sistema Operativo
Sistemas
Opera,vos
7
Reubicación
Sistemas
Opera,vos
8
Reubicación
• Dos
alternaBvas:
– Reubicación
hardware
– Reubicación
sodware
Sistemas
Opera,vos
9
Reubicación
hardware
Sistemas
Opera,vos
10
Reubicación
sodware
• Desventajas:
10028
10032
DEC R3
JNZ /10012
10036 .................
– No
asegura
protección
..........
Sistemas
Opera,vos
11
Protección
Sistemas
Opera,vos
12
ComparBción
de
memoria
Sistemas
Opera,vos
13
Problemas
de
la
comparBción
de
memoria
Sistemas
Opera,vos
14
Soporte
de
regiones
• S.O. debe guardar una tabla de regiones para cada proceso
Sistemas
Opera,vos
15
Maximización
del
rendimiento
grandes
Dirección 95 del proceso 7
3 Dirección 56 del proceso 8
• Compromiso:
Paginación
4 Dirección 0 del proceso 12
5 Dirección 5 del proceso 20
6 Dirección 0 del proceso 1
• Uso
de
memoria
virtual
para
.........................................
aumentar
grado
de
.........................................
mulBprogramación
N-1 Dirección 88 del proceso 9
N Dirección 51 del proceso 4
Sistemas
Opera,vos
16
Mapas
de
memoria
muy
grandes
Sistemas
Opera,vos
17
Contenido
Sistemas
Opera,vos
18
Fases
de
generación
de
un
ejecutable
Fichero
ejecutable
Sistemas
Opera,vos
19
Bibliotecas
de
objetos
Sistemas
Opera,vos
21
Bibliotecas
dinámicas:
Ventajas
e
inconvenientes
• Ventajas:
– Menor
tamaño
ejecutables
– Código
de
ruBnas
de
biblioteca
sólo
en
archivo
de
biblioteca
– Procesos
pueden
comparBr
código
de
biblioteca
– Actualización
automáBca
de
bibliotecas:
Uso
de
versiones
• Inconvenientes:
– Mayor
Bempo
de
ejecución
debido
a
carga
y
montaje
• Tolerable:
Compensa
el
resto
de
las
ventajas
– Ejecutable
no
autocontenido
• Uso
de
bibliotecas
dinámicas
es
transparente
– Mandatos
de
compilación
y
montaje
igual
que
con
estáBcas
Sistemas
Opera,vos
22
Uso
de
bibliotecas
dinámicas
Sistemas
Opera,vos
23
ComparBción
de
bibliotecas
dinámicas
Sistemas
Opera,vos
24
Contenido
Sistemas
Opera,vos
25
Formato
de
ejecutable
Sistemas
Opera,vos
26
Formato
de
ejecutable
Fichero Ejecutable
0 Número mágico Despl. Tam.
Contador de programa inicial Código 1000 4000
Cabecera
.................... Datos con v.i. 5000 1000
Tabla de secciones Datos sin v.i. ------ 500
1000 ...................... ........ ........
5000
Secciones Datos con valor inicial
................
8000
Tabla de símbolos
Sistemas
Opera,vos
27
Secciones
de
un
ejecutable
Sistemas
Opera,vos
28
Variables
globales
y
locales
• Variables
globales
– EstáBcas
– 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
Bempo
de
ejecución
– Recursividad:
varias
instancias
de
una
variable
Sistemas
Opera,vos
29
Mapa
de
memoria
de
un
proceso
Sistemas
Opera,vos
31
Creación
de
mapa
de
memoria
inicial
a
parBr
de
ejecutable
Sistemas
Opera,vos
32
Otras
regiones
Sistemas
Opera,vos
33
Otras
regiones
• Memoria
comparBda
– Región
asociada
a
la
zona
de
memoria
comparBda
– ComparBda,
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ísBcas
que
pila
del
proceso
• Carga
de
biblioteca
dinámica
– Se
crean
regiones
asociadas
al
código
y
datos
de
la
biblioteca
Sistemas
Opera,vos
34
CaracterísBcas
de
regiones
Sistemas
Opera,vos
35
Posible
mapa
de
memoria
de
un
proceso
Sistemas
Opera,vos
36
Operaciones
sobre
regiones
Sistemas
Opera,vos
37
Archivos
proyectados
en
memoria
Sistemas
Opera,vos
38
Contenido
Sistemas
Opera,vos
39
Servicios
de
gesBón
de
memoria
• Servicios:
– POSIX.
• GesBón
de
la
proyección
de
archivos:
mmap,
munmap.
• GesBón
de
bibliotecas
dinámicas:
dlopen,
dlsym,
dlclose.
– Win32
• GesBón
de
la
proyección
de
archivos:
CreateFileMapping,
MapViewOfFile,
UnmapViewOfFile.
• GesBón
de
bibliotecas
dinámicas:
LoadLibrary,
GetProcAddress,
FreeLibrary.
Sistemas
Opera,vos
40
Archivos
proyectados
en
memoria
Sistemas
Opera,vos
41
Proyección
en
memoria
Mapa de memoria
Código
Bloque N
Pila
Sistemas
Opera,vos
42
Proyección
en
POSIX
Sistemas
Opera,vos
43
Proyección
POSIX:
mmap
Sistemas
Opera,vos
44
Proyección
POSIX
desp len
Proceso
Sistemas
Opera,vos
45
Desproyección
en
POSIX
Sistemas
Opera,vos
46
Ejemplo:
Contar
el
número
de
blancos
en
un
fichero
#include
<sys/types.h>
#include
<sys/stat.h>
vec
=
mmap(NULL,
dstat.st_size,
PROT_READ,
MAP_SHARED,
fd,
0);
#include
<sys/mman.h>
close(fd);
#include
<fcntl.h>
c
=vec;
#include
<stdio.h>
for
(i=0;i<dstat.st_size;i++)
{
#include
<unistd.h>
if
(*c==‘
‘)
{
n++;
int
main()
{
}
int
fd;
c++;
struct
stat
dstat;
}
int
i,
n;
munmap(vec,
dstat.st_size);
char
c,
prin[(“n=%d,\n”,n);
char
*
vec;
return
0;
}
fd
=
open(“datos.txt”,O_RDONLY);
fstat(fd,
&dstat);
Sistemas
Opera,vos
47
Ejemplo:
Copia
de
un
fichero
#include
<sys/types.h>
#include
<sys/stat.h>
vec1=mmap(0,
dstat.st_size,
#include
<sys/mman.h>
PROT_READ,
MAP_SHARED,
fd1,0);
vec2=mmap(0,
dstat.st_size,
#include
<fcntl.h>
PROT_WRITE,
MAP_SHARED,
fd2,0);
#include
<stdio.h>
#include
<unistd.h>
close(fd1);
close(fd2);
int
main()
{
p=vec1;
q=vec2;
for
(i=0;i<dstat.st_size;i++)
{
int
i,
fd1,
fd2;
*q++
=
*p++;
struct
stat
dstat;
}
char
*
vec1,
*vec2,
*p,
*q;
munmap(vec1,
dstat.st_size);
munmap(vec2,
dstat.st_size);
fd1
=
open(“f1”,
O_RDONLY);
fd2
=
open(“f2”,
O_CREAT|O_TRUNC|O_RDWR,0640);
return
0;
fstat(fd1,&dstat);
}
fruncate(fd2,
dstat.st_size);
Sistemas
Opera,vos
48
Biblioteca
dinámica:
generación
hola.h
void hola();
gcc hola.o
gcc
hola.c
hola.so
#include “hola.h”
void hola() {
printf(“hola”); gcc prog
}
prog.c
#include “hola.h”
int main() {
hola();
return 0;
}
Sistemas
Opera,vos
49
Bibliotecas
dinámicas
• Enlace
explícito:
– Hay
que
escribir
el
código
para
cargar
y
enlazar
los
símbolos
de
la
biblioteca
dinámica.
– Ejemplo
de
uBlidad:
• Decidir
en
Bempo
de
ejecución
entre
dos
bibliotecas
dinámicas
que
implementan
una
misma
API.
Sistemas
Opera,vos
50
Bibliotecas
dinámicas:
servicios
POSIX
Sistemas
Opera,vos
51
Bibliotecas
dinámicas:
Servicios
POSIX
Sistemas
Opera,vos
52
Carga
explícita
de
biblioteca
dinámica
#include
<stdio.h>
typedef
void
(*pfn)(void);
int
main()
{
void
*
bib;
pfn
func;
bib
=
dlopen(“libhola.so”,
RTLD_LAZY);
func=dlsym(bib,”hola”);
(*func)();
dlclose(bib);
return
0;
}
Sistemas
Opera,vos
53
SISTEMAS OPERATIVOS:
Lección 9:
Gestión de Memoria
Sistemas Opera,vos 54