0 Tema 4 Gestión de memoriaEl gestor de memoria es un componente básico del sistema operativo. Puente entre lo que piden las aplicaciones y el Hw de memoria. Es una parte del SO muy ligada al Hw y han evolucionado en paralelo. La frontera entre lo que hace el Hw y el Sw es muy difusa y por tanto muy buena para ser preguntada en test o en problemas.
1 Contenido Requisitos de la gestión de memoriaModelo 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 Lo que vamos a ver a lo largo de este capítulo se puede resumir en las siguientes secciones, Primero veremos los objetivos que tenemos que perseguir con la gestión de memoria y las funciones que por tanto debemos esperar del gestor de memoria. Después pasaremos a ver el modelo de memoria de un proceso y ahondaremos en los objetivos del Gestor de Memoria. En la siguiente sección analizaremos cómo se crea un fichero ejecutable, el formato de un fichero ejecutable y cómo a partir del ejecutable conseguimos el mapa de memoria de un proceso. Hablaremos más delante de los ficheros proyectados en memoria. Una técnica muy utilizada en los sistemas operativos actuales. Hablaremos como siempre de los servicios del sistema operativo para la gestión de memoria. Y como parte yo diría más importante entraremos en el tema de la Evolución de la gestión de memoria y de cómo se ha llegado hasta el modelo de Memoria Virtual. Sistemas operativos Gestión de Memoria 2001
2 Requisitos de gestión de memoriaS.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 Es función del SO realizar un reparto transparente, eficiente y seguro de los recursos del sistema de tal forma q cada proceso crea que tiene la máquina para él solo. Es decir, tenemos que poder desarrollar cosas sin vernos afectados con la existencia de otros programas. Como me imagino habréis visto, el procesador se reparte en el tiempo. Cada determinado periodo de tiempo un proceso entra en ejecución. Gracias al bloque de control de cada proceso, que contiene sus registros de procesador correspondientes, podemos realizar los cambios de contexto. En el caso de la memoria tenemos que realizar una multiplexación del espacio. El espacio disponible ,o sea, la memoria principal, la tenemos que repartir entre todos los procesos que la requieran. Sin embargo esto depende del nivel de la jerarquía de memoria del que estemos hablando. Este nos sirve para la MP pero no para los registros, que necesitan una multiplexación en el tiempo. PROPIEDADES Espacios lógicos independientes: en sistemas monoprogramados no hay problema, podemos saber a partir de qué dirección va a estar nuestro código. Pero en sistemas multiprogramados no se puede conocer a priori la posición que ocupará un programa. Por lo que se necesita reubicación. Protección: A los procesos entre sí y del SO. Y mapa de E/S común entonces tb entonces tampoco los procesos accederán a los dispositivos. Compartir memoria: Direcciones lógicas se corresponden con la misma dirección física. Así, la memoria asignada a un proceso no es contigua. Se puede compartir código o bien para intercambiar información. Soporte regiones: Gestor + Hw soporte a las características específicas de cada región. Ej: código de prog no debe modificarse. SO debe saber qué regiones y de qué tamaño existen. Zonas del mapa de memoria que no pertenecen a ninguna región y por tanto los accesos implican errores. El SO almacena para cada proceso una tabla de regiones. Max rendimiento: política de asignación adecuada. Saber donde están las cosas ocupa espacio de memoria, luego hay que minimizarlo. Sistemas operativos Gestión de Memoria 2001
3 Funciones del gestor de memoriaSaber 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 Gestión de Memoria 2001
4 Modelo de memoria de un procesoUn 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 Gestión de Memoria 2001
5 Programa ejemplo Tipos de memoria 1.- Código 2.- Datos declaradosint a; int b = 5; void f(int c) { int d; static e = 2; b = d + 5; return; } main (int argc, char **argv) { char *p; p = (char *) malloc (1024) f(b) free (p) .... exit (0) Tipos de memoria 1.- Código 2.- Datos declarados Globales Con valor inicial Sin valor inicial Locales Sistemas operativos Gestión de Memoria 2001
6 Programa ejemplo: Fichero ejecutableint a; int b = 5; void f(int c) { int d; 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 Gestión de Memoria 2001
7 Programa ejemplo: Execint a; int b = 5; void f(int c) { int d; 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 Gestión de Memoria 2001
8 Programa ejemplo: mallocint a; int b = 5; void f(int c) { int d; 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 Gestión de Memoria 2001
9 Programa ejemplo: Llamada a fint a; int b = 5; void f(int c) { int d; 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 Gestión de Memoria 2001
10 Gestión de memoria en sistemas monoprogramadosModelo de memoria SO Usuario Usuario SO FFF... Sistemas operativos Gestión de Memoria 2001
11 Gestión de memoria en sistemas monoprogramados IIOverlays SO Zona común Zona de solapamiento Mod 1 Mod 2 Mod 3 FFF... Sistemas operativos Gestión de Memoria 2001
12 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 Gestión de Memoria 2001
13 Modelo de multiprogramaciónUn 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 Gestión de Memoria 2001
14 Modelo de multiprogramación IISistemas operativos Gestión de Memoria 2001
15 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 Gestión de Memoria 2001
16 Reubicación hardware Hardware encargado de traducciónEl 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 Programa se carga en memoria sin modificar Para el ejemplo anterior: El código incluye referencias a memoria o dentro de los propios datos con punteros entre sí. Hay que poder realizar Reubicación del código. Esto nos obligará también a un proceso de traducción. Creamos un espacio lógico o mapa independiente para cada proceso y que es proyectado sobre memoria principal de acuerdo a una función de traducción. La traducción se lleva a cabo por un módulo específico del procesador llamado MMU (Memory Management Unit). El SO proporciona la función de traducción a la MMU. Alternativa Sw: reubicar en el momento de carga. Pero luego no se puede mover en T de ejecución, por lo que no es válido para la Memoria Virtual. Sistemas operativos Gestión de Memoria 2001
17 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 Gestión de Memoria 2001
18 Protección Monoprogramación: Protección del SOMultiprogramació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 Gestión de Memoria 2001
19 Reubicación y protecciónSistemas operativos Gestión de Memoria 2001
20 Compartir memoria Direcciones lógicas de 2 o más procesos se corresponden con misma dirección física Bajo control del S.O. Beneficios: Procesos ejecutando mismo programa comparten su código Mecanismo de comunicación entre procesos muy rápido Requiere asignación no contigua: Sistemas operativos Gestión de Memoria 2001
21 Maximizar rendimientoReparto de memoria maximizando grado de multiprogramación Aprovechamiento de memoria óptimo e irrealizable: Paginación: solución factible con aprovechamiento aceptable Uso de memoria virtual para aumentar grado de multiprogramación Sistemas operativos Gestión de Memoria 2001
22 Fases en generación de ejecutableAplicació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 Montaje (o enlace): Resuelve referencias entre módulos objeto Resuelve referencias a símbolos de bibliotecas Genera fichero ejecutable Carga en memoria Añade rutinas de biblioteca Sistemas operativos Gestión de Memoria 2001
23 Bibliotecas estáticasBiblioteca: 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 Sistemas operativos Gestión de Memoria 2001
24 Bibliotecas dinámicasCarga 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 Gestión de Memoria 2001
25 Bibliotecas dinámicasSistemas operativos Gestión de Memoria 2001
26 Bibliotecas dinámicasProceso: 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 Gestión de Memoria 2001
27 Formato del ejecutableDistintos 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 Gestión de Memoria 2001
28 Formato del ejecutableSistemas operativos Gestión de Memoria 2001
29 Secciones del ejecutableVariedad 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 Gestión de Memoria 2001
30 Variables globales versus localesEstá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 Gestión de Memoria 2001
31 Variables globales versus localesEjemplo: int x=8; /* Variable global con valor inicial */ int y; /* Variable global sin valor inicial */ f(){ int z; /* Variable local */ } main(){ Sistemas operativos Gestión de Memoria 2001
32 Crear mapa de memoria desde ejecutableCó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 Gestión de Memoria 2001
33 Crear mapa desde ejecutableSistemas operativos Gestión de Memoria 2001
34 Otras regiones del mapa creadas durante ejecuciónRegió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) 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 Gestión de Memoria 2001
35 Mapa de memoria de un proceso hipotéticoSistemas operativos Gestión de Memoria 2001
36 Servicios de gestión de memoriaGestor 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 Gestión de Memoria 2001
37 Ficheros proyectados en memoriaSistemas operativos Gestión de Memoria 2001
38 Ficheros proyectados en memoria IIUna 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 Gestión de Memoria 2001
39 Ficheros proyectados: Serviciosvoid *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 Gestión de Memoria 2001
40 Ejemplo: copia de ficheros#include
41 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 Gestión de Memoria 2001
42 Ejemplo: copia de ficheros/* Bucle de copia */ p=org; q=dst; for (i=0; i
43 Ejemplo II Ejemplo: Cuántas veces aparece carácter en ficheroint 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 Gestión de Memoria 2001
44 Ejemplo II /* Bucle de acceso */ p=org;for (i=0; i
45 Memoria compartida La región puede proyectarse en cada proceso sobre direcciones virtuales diferentes. Sistemas operativos Gestión de Memoria 2001
46 Memoria compartida: Serviciosint 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 Gestión de Memoria 2001
47 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 Gestión de Memoria 2001
48 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 Gestión de Memoria 2001
49 Utilización de memoria asignadaSe 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 Gestión de Memoria 2001
50 Utilización de memoria asignadastruct 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 Gestión de Memoria 2001
51 Reserva de memoria malloc: es una función de librería del lenguaje CUNIX 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 Gestión de Memoria 2001
52 Liberar memoria free: es una función de librería del lenguaje CUNIX 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 Gestión de Memoria 2001
53 Bloquear páginas en marcos de memoria principalmlockall 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 Sistemas operativos Gestión de Memoria 2001
54 Bloquear páginas en marcos de memoria principalint 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 Sistemas operativos Gestión de Memoria 2001
55 Evolución de gestión de memoriaMuy 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 Gestión de Memoria 2001
56 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 Gestión de Memoria 2001
57 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 Gestión de Memoria 2001
58 Paginación (1/2) Hardware más sofisticado Unidad de asignación: PáginaMapa 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 Gestión de Memoria 2001
59 Paginación (2/2) Entrada de la T.P. Fragmentación internaNú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 Gestión de Memoria 2001
60 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. Sistemas operativos Gestión de Memoria 2001
61 Memoria virtual Jerarquía de memoria: Niveles de almacenamientoProcesos 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 Gestión de Memoria 2001
62 Gestión de espacio de swapAsignació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 Gestión de Memoria 2001
63 Ejecución de programasCreació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 Gestión de Memoria 2001
64 Con preasignación de swapS.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 Gestión de Memoria 2001
65 Sin preasignación de códigoRegión de código: compartida con soporte No es necesario usar swap Se usa directamente ejecutable Sistemas operativos Gestión de Memoria 2001
66 Sin preasignación de swapEntradas 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 Gestión de Memoria 2001
67 Ficheros proyectados en memoriaGeneralizació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 Gestión de Memoria 2001
68 Ficheros proyectados en memoriaSistemas operativos Gestión de Memoria 2001
69 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 Gestión de Memoria 2001
70 Requisitos de la memoria virtualSoporte 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 Gestión de Memoria 2001
71 Paginación I Sistemas operativos Gestión de Memoria 2001
72 Mecanismo de traducciónNecesario una tabla de páginas. Sistemas operativos Gestión de Memoria 2001
73 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 Gestión de Memoria 2001
74 Tabla de páginas II Si la página no se encuentra en MP => fallo de página (trap al SO). Sistemas operativos Gestión de Memoria 2001
75 Información de una ETP ISistemas operativos Gestión de Memoria 2001
76 Información de una ETP IIOtra información: Copy-on-write No paginada (fija en memoria física). Cache desactivada. Rellenar a ceros. Rellenar de fichero. Sistemas operativos Gestión de Memoria 2001
77 Paginación por demandaLos 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 Gestión de Memoria 2001
78 Manejo del fallo de páginaEl 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 Gestión de Memoria 2001
79 Soporte de la imagen de memoriaRegiones con soporte propio Regiones sin soporte propio => swap. Sistemas operativos Gestión de Memoria 2001
80 Creación de la imagen a partir de un fichero ejecutableInicialmente ninguna página cargada en MP a excepción de la pila inicial. 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 Gestión de Memoria 2001
81 Ejecución de un programa en LINUXEjemplo de código. #include
82 Ejecución de un programa en LINUX IIMandato strace open("/lib/libm.so", O_RDONLY) mmap() => se proyecta el código. open("/lib/libc.so", O_RDONLY) Comienza a ejecutar el proceso Fichero /proc/PID/maps direccion perms offset dev nodo-i r-xp : Código a000 rw-p : Datos sin VI 0804a rwxp : Datos dinámicos a000 r-xp : ld.so 4000a b000 rw-p : r-xp : libm.so rw-p : ba000 r-xp : libc.so 400ba c2000 rw-p : 400c ce000 rw-p :00 0 bfffc000-c rwxp ffffd : Pila Sistemas operativos Gestión de Memoria 2001
83 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 Gestión de Memoria 2001
84 Hiperpaginación Solución: reducir el grado de multiprogramación, suspendiendo uno o más procesos Sistemas operativos Gestión de Memoria 2001