Tema 4 Gestin de memoria Contenido Requisitos de

  • Slides: 85
Download presentation
Tema 4 Gestión de memoria

Tema 4 Gestión de memoria

Contenido • • Requisitos de la gestión de memoria Modelo de memoria de un

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 Gestión de Memoria 2001 Sistemas Distribuidos

Requisitos de gestión de memoria • S. O. multiplexa recursos entre procesos – Cada

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 Gestión de Memoria 2001 Sistemas Distribuidos

Funciones del gestor de memoria • • • Saber qué partes de la memoria

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 Gestión de Memoria 2001 Sistemas Distribuidos

Modelo de memoria de un proceso • Un proceso está formado por una serie

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 Gestión de Memoria 2001 Sistemas Distribuidos

Programa ejemplo int a; int b = 5; void f(int c) { int d;

Programa ejemplo int 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). . . . Tipos de memoria 1. - Código 2. - Datos declarados Globales Con valor inicial Sin valor inicial Locales Con valor inicial Sin valor inicial free (p). . exit (0) } Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Programa ejemplo: Fichero ejecutable int a; int b = 5; void f(int c) {

Programa ejemplo: Fichero ejecutable int 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 Sistemas Distribuidos

Programa ejemplo: Exec int a; int b = 5; void f(int c) { int

Programa ejemplo: Exec int 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 Sistemas Distribuidos

Programa ejemplo: malloc int a; int b = 5; void f(int c) { int

Programa ejemplo: malloc int 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 Sistemas Distribuidos

Programa ejemplo: Llamada a f int a; int b = 5; void f(int c)

Programa ejemplo: Llamada a f int 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 Sistemas Distribuidos

Gestión de memoria en sistemas monoprogramados • Modelo de memoria 0 SO Usuario FFF.

Gestión de memoria en sistemas monoprogramados • Modelo de memoria 0 SO Usuario FFF. . . Sistemas operativos Gestión de Memoria 2001 SO Sistemas Distribuidos

Gestión de memoria en sistemas monoprogramados II • Overlays 0 Zona común Zona de

Gestión de memoria en sistemas monoprogramados II • Overlays 0 Zona común Zona de solapamiento FFF. . . Sistemas operativos Gestión de Memoria 2001 SO • Mod 1 • Mod 2 • Mod 3 Sistemas Distribuidos

Multiprogramación • Ventajas: – Facilita la programación, dividiendo los programas en procesos. – Permite

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 Sistemas Distribuidos

Modelo de multiprogramación • Un proceso gasta p % de tiempo por E/S. •

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 Gestión de Memoria 2001 Sistemas Distribuidos

Modelo de multiprogramación II Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Modelo de multiprogramación II Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Reubicación • En un sistema multiprogramado es imposible conocer en tiempo de compilación y

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 Sistemas Distribuidos

Reubicación hardware • Hardware encargado de traducción • El S. O. se encarga de:

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 • Programa se carga en memoria sin modificar • Para el ejemplo anterior: Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Reubicación software • Traducción de direcciones durante carga del programa • Programa en memoria

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 Sistemas Distribuidos

Protección • • Monoprogramación: Protección del SO Multiprogramación: Además procesos entre sí Traducción debe

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 Gestión de Memoria 2001 Sistemas Distribuidos

Reubicación y protección Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Reubicación y protección Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Compartir memoria • Direcciones lógicas de 2 o más procesos se corresponden con misma

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 Sistemas Distribuidos

Maximizar rendimiento • Reparto de memoria maximizando grado de multiprogramación – Aprovechamiento de memoria

Maximizar rendimiento • Reparto 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 Sistemas Distribuidos

Fases en generación de ejecutable • Aplicación: conjunto de módulos en lenguaje de alto

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 • 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 Sistemas Distribuidos

Bibliotecas estáticas • Biblioteca: colección de módulos objeto relacionados • Bibliotecas del sistema o

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 Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Bibliotecas dinámicas • Carga y montaje de biblioteca en tiempo de ejecución • Ejecutable

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 Gestión de Memoria 2001 Sistemas Distribuidos

Bibliotecas dinámicas Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Bibliotecas dinámicas Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Bibliotecas dinámicas • Proceso: – El programa principal llama a la pseudo función XX

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 Gestión de Memoria 2001 Sistemas Distribuidos

Formato del ejecutable • Distintos fabricantes usan diferentes formatos – Ejemplo: Executable and Linkable

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 Gestión de Memoria 2001 Sistemas Distribuidos

Formato del ejecutable Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Formato del ejecutable Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Secciones del ejecutable • Variedad de tipos de secciones. Ejemplo: – Tabla de símbolos

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 Gestión de Memoria 2001 Sistemas Distribuidos

Variables globales versus locales • Variables globales – Estáticas – Se crean al iniciarse

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 Gestión de Memoria 2001 Sistemas Distribuidos

Variables globales versus locales • Ejemplo: int x=8; int y; /* Variable global con

Variables globales versus locales • Ejemplo: int x=8; int y; /* Variable global con valor inicial */ /* Variable global sin valor inicial */ f(){ int z; . . . . /* Variable local */ } main(){. . . . } Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Crear mapa de memoria desde ejecutable • Código – Compartida, RX, T. Fijo, Soporte

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 Gestión de Memoria 2001 Sistemas Distribuidos

Crear mapa desde ejecutable Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Crear mapa desde ejecutable Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Otras regiones del mapa creadas durante ejecución • Región de Heap – Soporte de

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 Gestión de Memoria 2001 Sistemas Distribuidos

Mapa de memoria de un proceso hipotético Sistemas operativos Gestión de Memoria 2001 Sistemas

Mapa de memoria de un proceso hipotético Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Servicios de gestión de memoria • Gestor de memoria realiza funciones internas • Ofrece

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria II • • Una región del proceso recibe el fichero.

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados: Servicios void *mmap(void *addr, size_t len, int prot, int flags, int fildes,

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejemplo: copia de ficheros #include <sys/types. h> #include <sys/stat. h> #include <sys/mman. h> #include

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejemplo: copia de ficheros /* Averigua la longitud del fichero origen */ fstat(fdo, &bstat)

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 Sistemas Distribuidos

Ejemplo: copia de ficheros /* Bucle de copia */ p=org; q=dst; for (i=0; i<bstat.

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejemplo II • Ejemplo: Cuántas veces aparece carácter en fichero int main(int argc, char

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejemplo II /* Bucle de acceso */ p=org; for (i=0; i<bstat. st_size; i++) if

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("%dn", contador); } Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Memoria compartida • La región puede proyectarse en cada proceso sobre direcciones virtuales diferentes.

Memoria compartida • La región puede proyectarse en cada proceso sobre direcciones virtuales diferentes. Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Memoria compartida: Servicios int shm_open(char *name, int oflag, mode_t mode); – Crea un objeto

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 Gestión de Memoria 2001 Sistemas Distribuidos

Memoria compartida: Ejemplo (I) • Creación de un segmento de memoria compartida (proceso A):

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 Sistemas Distribuidos

Memoria compartida: Ejemplo (II) • Acceso a un segmento de memoria compartida (proceso B):

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 Sistemas Distribuidos

Utilización de memoria asignada • Se proyecta sobre la zona asignada una estructura •

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 Gestión de Memoria 2001 Sistemas Distribuidos

Utilización de memoria asignada struct datos { int a; char b; float c; inte

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 Gestión de Memoria 2001 Sistemas Distribuidos

Reserva de memoria • malloc: es una función de librería del lenguaje C •

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: Heap. Create – Se puede asignar memoria a cada heap mediante: Heap. Alloc Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Liberar memoria • free: es una función de librería del lenguaje C • UNIX

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: Heap. Destroy – Se puede liberar memoria de un heap mediante: Heap. Free Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Bloquear páginas en marcos de memoria principal • mlockall – Bloquea todo el espacio

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 Gestión de Memoria 2001 Sistemas Distribuidos

Bloquear páginas en marcos de memoria principal • int mlock (void *addr, int len);

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 Gestión de Memoria 2001 Sistemas Distribuidos

Evolución de gestión de memoria • Muy ligada al desarrollo del hardware – HW

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 Gestión de Memoria 2001 Sistemas Distribuidos

Asignación contigua (1/2) • Zona contigua de memoria contiene mapa del proceso • Entre

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 Sistemas Distribuidos

Asignación contigua (2/2) • S. O. almacena en BCP valor de R. valla del

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 Sistemas Distribuidos

Paginación (1/2) • • • Hardware más sofisticado Unidad de asignación: Página Mapa de

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 Gestión de Memoria 2001 Sistemas Distribuidos

Paginación (2/2) • Entrada de la T. P. – Número de marco asociado –

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 Gestión de Memoria 2001 Sistemas Distribuidos

Memoria virtual • Gestión automática de la parte de la jerarquía de memoria formada

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 Sistemas Distribuidos

Memoria virtual • Jerarquía de memoria: Niveles de almacenamiento • Procesos exhiben proximidad de

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 Gestión de Memoria 2001 Sistemas Distribuidos

Gestión de espacio de swap • Asignación de espacio de swap cuando se crea

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejecución de programas • Creación de regiones iniciales desde ejecutable • No se asigna

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 Gestión de Memoria 2001 Sistemas Distribuidos

Con preasignación de swap • S. O. reserva espacio en swap para regiones •

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 Gestión de Memoria 2001 Sistemas Distribuidos

Sin preasignación de código • Región de código: compartida con soporte • No es

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 Gestión de Memoria 2001 Sistemas Distribuidos

Sin preasignación de swap • Entradas T. P. referencian a bloques del soporte (si

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria • Generalización de M. Virtual – Entradas de T. P.

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Ficheros proyectados en memoria Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Memoria virtual II • El proceso sólo ve direcciones virtuales. • El mapa virtual

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 Sistemas Distribuidos

Requisitos de la memoria virtual • Soporte en almacenamiento secundario. • Espacio virtual mayor

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 (R 1), (R 2) => tres fallos de página. • Esquemas HW de memoria virtual: – Paginación. – Segmentación paginada. Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Paginación I Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Paginación I Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Mecanismo de traducción • Necesario una tabla de páginas. Sistemas operativos Gestión de Memoria

Mecanismo de traducción • Necesario una tabla de páginas. Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Tabla de páginas I • La información de traducción se organiza en tablas de

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 Sistemas Distribuidos

Tabla de páginas II • Si la página no se encuentra en MP =>

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 Sistemas Distribuidos

Información de una ETP I Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Información de una ETP I Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Información de una ETP II • Otra información: – Copy-on-write – No paginada (fija

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 Gestión de Memoria 2001 Sistemas Distribuidos

Paginación por demanda • Los procesos residen en memoria secundaria y no se carga

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 Gestión de Memoria 2001 Sistemas Distribuidos

Manejo del fallo de página • El HW genera un trap de fallo de

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 Gestión de Memoria 2001 Sistemas Distribuidos

Soporte de la imagen de memoria • Regiones con soporte propio • Regiones sin

Soporte de la imagen de memoria • Regiones con soporte propio • Regiones sin soporte propio => swap. Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos

Creación de la imagen a partir de un fichero ejecutable • Inicialmente ninguna página

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. • 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 Sistemas Distribuidos

Ejecución de un programa en LINUX • Ejemplo de código. #include <math. h> #include

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 Gestión de Memoria 2001 Sistemas Distribuidos

Ejecución de un programa en LINUX II • Mandato strace – – open("/libm. so",

Ejecución de un programa en LINUX II • Mandato strace – – open("/libm. so", O_RDONLY) mmap() => se proyecta el código. open("/libc. so", O_RDONLY) mmap() => se proyecta el código. – Comienza a ejecutar el proceso • Fichero /proc/PID/maps direccion 08048000 -08049000 -0804 a 000 -080540000000 -4000 a 000 -4000 b 000 40010000 -40028000 -40029000 -400 ba 000 -400 c 2000 -400 ce 000 bfffc 000 -c 0000000 perms offset dev nodo-i r-xp 0000 08: 11 630795 rw-p 0000 08: 11 630795 rwxp 0000 00: 00 0 r-xp 0000 08: 01 30602 rw-p 00009000 08: 01 30602 r-xp 0000 08: 01 30614 rw-p 00017000 08: 01 30614 r-xp 0000 08: 01 30606 rw-p 00090000 08: 01 30606 rw-p 0000 00: 00 0 rwxp ffffd 000 00: 00 0 Sistemas operativos Gestión de Memoria 2001 Código Datos sin VI Datos dinámicos ld. so libm. so libc. so Pila Sistemas Distribuidos

Reemplazo de páginas • Objetivo: reducir la tasa de fallos. • Algoritmos: – Óptimo.

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 Sistemas Distribuidos

Hiperpaginación • Solución: reducir el grado de multiprogramación, suspendiendo uno o más procesos Sistemas

Hiperpaginación • Solución: reducir el grado de multiprogramación, suspendiendo uno o más procesos Sistemas operativos Gestión de Memoria 2001 Sistemas Distribuidos