Contenido Requisitos de la gestión de memoria

Slides:



Advertisements
Presentaciones similares
GESTION DE MEMORIA.
Advertisements

Administración de memoria
Administración de Memoria Virtual
SISTEMAS OPERATIVOS GESTION DE MEMORIA INTEGRANTES Lizeth Chandi
UNIX COMP 240.
Sistema operativo Componentes de un sistema operativo
III - Gestión de memoria
Índice Objetivos del sistema de gestión de memoria
Sistemas Operativos Unidad II Procesos.
Introducción a los Sistemas Operativos Memoria Virtual
Modelo de procesos de dos estados
Contenido Objetivos del sistema de gestión de memoria
Tema II Unidad de memoria. 2 Unidad de memoria 2.1 Definiciones y conceptos básicos Localización Capacidad Unidad de transferencia
Detalles del sistema operativo
MEMORIA VIRTUAL PAGINACIÓN
Teoría de lenguajes y compiladores
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
Memoria Virtual Fallos de Página Algoritmos de Reemplazamiento
Unidad V Administración de la Memoria
Direcciones físicas y direcciones virtuales (lógicas)
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Tema 10: Gestión de Memoria
Administración de memoria
Semana 5 Subprogramas..
Gestor de memoria.
El ordenador es un sistema programable formado por un conjunto de elementos hardware que necesitan instrucciones que le indiquen cómo utilizar los recursos.
Unidad III Administración de procesos
Administración de Memoria Memoria Virtual
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Asignación de Espacio No Contiguo
Soporte HW para Administración de Memoria Cecilia Hernández
Administración de Memoria
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
Contenido Estructura del computador Ejecución de instrucciones
Arquitectura NFS El servidor NFS exporta uno o más directorios
Antecedentes Memoria virtual – separación de la memoria lógica de la física Sólo parte del programa necesita estar en memoria en un momento dado para.
Introducción a los Sistemas Operativos
Capítulo 7 Gestión de memoria.
Administración de Memoria no contigua
Gestión de procesos Sistemas Operativos Edwin Morales
Tema VII Memoria Virtual.
Tema 6. Administración de memoria
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 21 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
1 Descripción y control de procesos Capítulo 3. 2 Requerimientos de un SO relacionados con procesos Ejecutar concurrentemente múltiples procesos para.
COMPONENTES DEL SISTEMA OPERATIVO.
Memoria virtual.
Gestión de Memoria.
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
Sistemas Operativos Unidad III Procesos.
Gestión de Memoria.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Teoría de Sistemas Operativos Memoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
INTERRUPCIONES – ABRAZO MORTAL
T3-Memoria Mover malloc, sbrk a la primera parte
3.2.1 Administración de almacenamiento
Gestión de memoria Rina Arauz.
Elementos y tipos de sistemas operativos
Memoria Virtual Msc. Rina Arauz.
MEMORIA DINÁMICA.
Silberschatz, Galvin, and Gagne  Applied Operating System Concepts Memoria Virtual Concepto Paginado bajo demanda Performance del Paginado bajo.
Memoria Virtual Conceptos Paginación Bajo Demanda Creación de Procesos
Gestión de Memoria – Parte 2
Administración de Memoria Conceptos Swapping Asignación Continua Paginación Segmentación Segmentación con Paginación.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Estructura del sistema operativo
1 Tema 10: Administración de la Memoria Sistemas Operativos (Tema 13 en apuntes prof. Rovayo)
G ESTIÓN DE LA MEMORIA Paginación y segmentación.
Sistemas de archivos. Sistemas de archivos 2 Objetivo del SdA  Ocultar al usuario los detalles relativos al almacenamiento de información en dispositivos.
1/50 Ing. Gerardo Chávez Malpartida Administración de Memoria SISTEMAS OPERATIVOS.
Transcripción de la presentación:

Tema 4 Gestión de memoria El 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.

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 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 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 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 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 Tipos de memoria 1.- Código 2.- Datos declarados 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) Tipos de memoria 1.- Código 2.- Datos declarados Globales Con valor inicial Sin valor inicial Locales 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; b = d + 5; ....... return; } main (int argc, char **argv) { char *p; p = (char *) malloc (1024) f(b) free (p) .... exit (0) Sistemas operativos 6 Gestión de Memoria 2001

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

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

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

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

Gestión de memoria en sistemas monoprogramados II Overlays SO Zona común Zona de solapamiento Mod 1 Mod 2 Mod 3 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 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 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 16 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 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 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 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 20 Gestión de Memoria 2001

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 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 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 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 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 Sistemas operativos 25 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 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 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; /* Variable global con valor inicial */ int y; /* Variable global sin valor inicial */ f(){ int z; /* Variable local */ ....... } main(){ Sistemas operativos 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) 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 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 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 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 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. Fragmentación interna 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. Sistemas operativos 60 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 Sistemas operativos 71 Gestión de Memoria 2001

Mecanismo de traducción 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 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 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. Sistemas operativos 79 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. 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) Comienza a ejecutar el proceso Fichero /proc/PID/maps direccion perms offset dev nodo-i 08048000-08049000 r-xp 00000000 08:11 630795 Código 08049000-0804a000 rw-p 00000000 08:11 630795 Datos sin VI 0804a000-08054000 rwxp 00000000 00:00 0 Datos dinámicos 40000000-4000a000 r-xp 00000000 08:01 30602 ld.so 4000a000-4000b000 rw-p 00009000 08:01 30602 40010000-40028000 r-xp 00000000 08:01 30614 libm.so 40028000-40029000 rw-p 00017000 08:01 30614 40029000-400ba000 r-xp 00000000 08:01 30606 libc.so 400ba000-400c2000 rw-p 00090000 08:01 30606 400c2000-400ce000 rw-p 00000000 00:00 0 bfffc000-c0000000 rwxp ffffd000 00:00 0 Pila Sistemas operativos 82 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 Solución: reducir el grado de multiprogramación, suspendiendo uno o más procesos Sistemas operativos 84 Gestión de Memoria 2001