Portada » Informática » Gestión de la memoria en Linux
Los procesos entienden de direcciones dentro del mapa de memoria del procesador.
Gestor de memoria asigna un marco de página a un proceso establece un soporte físico más rápido a una zona de la memoria del proceso. REQUISITOS DE LA GESTIÓN DE MEMORIA–
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.
Crear la imagen de los procesos a partir de los ficheros ejecutables, proporcionar protección entre procesos. Aislar los procesos, controlar los recursos, tratar los errores de acceso a memoria: detectados por el HW. Optimizar las prestaciones del sistema. MEMORIA REAL–No tiene memoria virtual, todas las regiones están en una zona contigua a la MP. Se deja un espacio de memoria principal para el crecimiento dinámico de las regiones.
Las regiones están separadas, alineadas a página y están formadas por un número entero de páginas.
Al crear o crecer es cuando se requiere asignar soporte físico.
Los espacios entre regiones no tienen soporte físico.
Crear una variable dinámica que quepa en la correspondiente regíón no implica al SO (lo resuelven las bibliotecas del lenguaje). Aumentar región dianamica lo hacen las bibliotecas del lenguaje.
Las bibliotecas del lenguaje gestionan el espacio disponible en la regíón de datos dinámicos. (llaman al SO cuando tienen que variar el tamaño de la regíón, o crear una nueva regíón).
conjunto de regiones (o segmentos) de memoria asignados a un proceso.
zona de direcciones de memoria definidas por dirección de comienzo y tamaño. ●
lugar donde se almacena el valor inicial. ●Puede ser compartida o privada.
●Niveles de protección típicos: RWX. ●Puede tener tamaño fijo o variable.
●Creación de regíón • Al crear el mapa inicial o por una solicitud posterior • En sistemas con memoria virtual no se asignan marcos de memoria principal, se asigna swap o rellenar con 0
●Liberación de regíón • Al terminar el proceso o por solicitud posterior • Se recuperan los recursos (swap y marcos)
●Cambio de tamaño de regíón • Del heap o de la pila • En sistemas con memoria virtual no se asigna memoria principal
●Duplicado de regíón • Operación requerida por el servicio FORK
Compartida, RX, tamaño fijo, fuente: el fichero ejecutable.
Privada, RW, tamaño fijo, fuente: el fichero ejecutable.
Privada, RW, tamaño fijo, fuente: rellenar con 0.
Privada, RW, tamaño variable, fuente: rellenar con 0. ●Pila inicial (creada al arrancar el programa): • Variables de entorno. • Argumentos del programa.
●Soporte de memoria dinámica gestionada por el lenguaje (p.E. Malloc en C). ●Persistencia controlada por el programador. ●Privada, RW, tamaño variable, fuente: rellenar con 0.
●Regíón asociada a la zona de memoria compartida. ●Compartida, tamaño variable, fuente: rellenar con 0. ●Protección especificada en proyección.
Regíón asociada a cada fichero proyectado. ●Compartida o privada, tamaño variable, fuente: el fichero proyectado. ●Protección especificada en proyección.
●Cada pila de thread corresponde con una regíón. ●Mismas carácterísticas que pila del proceso.
Regiones asociadas al código y datos de cada biblioteca dinámica
El gestor de memoria crea las regiones de memoria cuando: ●se crea un proceso (fork), ●se cambia el programa del proceso (exec), ●o se solicita una nueva regíón.
Numero mágico, registros, tabla de secciones.
Sección de código (texto):
Contiene código del programa. Suele incluir también las constantes del programa y cadenas de caracteres. ●Sección de datos con valor inicial:
Variables globales inicializadas. Tabla de símbolos para depuración y montaje dinámico.
Lista de bibliotecas dinámicas usadas.
Estáticas. Se crean al iniciarse el programa. Existen durante toda la ejecución del mismo. Dirección fija en memoria y en ejecutable.
Creadas dentro del reg de act de la rutina. Se crean al invocar una función. ●Se destruyen al retornar.
gestor de memoria se encarga de crear la imagen del proceso a partir de un fichero ejecutable. En UNIX esta operación la realiza el exec.
OBTENCIÓN DE MEMORIA EN BRUTO–●
Mediante las bibliotecas del lenguaje (malloc, new, …). ●Mediante el SO (se detallan más adelante). • Fichero proyectado en memoria. • Regíón de memoria compartida. • Nueva regíón de memoria.
Se proyecta sobre la zona asignada uno o varios tipos de datos: estructura, vector, array, etc. Se utilizan los datos mediante la referencia o el puntero devuelto por el servicio o por la función del lenguaje. Para memoria compartida hay que proyectar los mismos datos en todos los programas.
es una función del lenguaje. Si la memoria solicitada en el malloc no cabe en la región es necesario solicitar al SO una ampliación de la región de datos. La memoria obtenida sobrevive al retorno de la función donde se ubicó. Ha de liberarse explícitamente. Al hacer un free no se reduce el tamaño del heap.
primeros elementos de su bloque de activación(mete en la pila los valores).
espacio virtual se considera organizado en pags de tamáño fijo. El espacio de disco dedicado a soportar la memoria virtual se divide en páginas.
La memoria principal se divide en marcos de página.
En estos marcos se ubican las páginas. El SO ha de conseguir que las páginas usadas en cada momento estén ubicadas en marcos de memoria principal.
traduce las direcciones virtuales en reales que se basa en una estructura de información denominada tabla de páginas. Cada proceso tiene su tabla de páginas.La MMU produce un fallo de página (excepción) cuando la página afectada no está en memoria principal, pero sí en la tabla de páginas. ●La MMU produce una excepción de violación de memoria cuando la página afectada no está en la tabla de páginas del proceso. ●El SO trata el fallo de página, haciendo un transvase entre la memoria principal y el swap (disco). ●El SO trata la violación de memoria abortando el proceso
.
Supone extender la zona de intercambio con una parte de un fichero. • Tamaño entero de páginas, aunque se pida menos. ●Crear una regíón de memoria en el proceso del mismo tamaño que la parte de fichero añadida al intercambio.
los cambios son visibles por otros procesos que tengan proyectado el fichero y se modifica el fichero en el disco. Las regiones de código se suelen construir proyectando la sección de código de los ficheros ejecutables en modo compartido (exec).
los cambios no son visibles por otros procesos que tengan proyectado el fichero, ni modifican el fichero en el disco. Realizar una copia privada de la zona de disco proyectada. Realizar una copia privada de la zona de disco proyectada.
la MMU genera una excepción que es tratada por el gestor de memoria que: ●Selecciona un marco de página. ●En caso necesario libera el marco de página, devolviendo su contenido a swap (algoritmo de remplazo). ●Lee del disco la página requerida y la transfiere al marco seleccionado. ●Actualiza la tabla de páginas con la nueva metainformación.
Si número de marcos libres < umbral=»» y/o=»» procesador=»» libre=»» •=»» “demonio=»» de=»» paginación”=»» aplica=»» repetidamente=»» el=»» algoritmo=»» de=»» reemplazo,=»» seleccionado=»» páginas=»» a=»» reemplazar:=»» –se=»» marcan=»» como=»» no=»» disponibles=»» en=»» la=»» tabla=»» de=»» páginas,=»» pero:=»» –las=»» páginas=»» no=»» modificadas=»» pasan=»» a=»» lista=»» de=»» marcos=»» libres=»» –las=»» páginas=»» modificadas=»» pasan=»» a=»» lista=»» de=»» marcos=»» modificados=»» si=»» se=»» referencia=»» una=»» página=»» mientras=»» está=»» en=»» estas=»» listas:=»» •=»» fallo=»» de=»» página=»» la=»» recupera=»» directamente=»» de=»» la=»» lista=»» (no=»» hay=»» e/s).=»»>Multiprogramación–
Al aumentar el grado de multiprogramación: hay menos marcos de página para cada proceso • aumentan los fallos de página.
Se comparte una página mientras no se modifique . Si un proceso la modifica se crea una copia para él. “Duplicado por demanda”. COW es útil para el fork y para los datos con valor inicial.
Implementación de COW • Se comparten páginas de regiones duplicadas pero:
–se marcan de sólo lectura y con bit de COW –primera escritura –› Fallo de protección –› copia privada • Puede haber varios procesos con misma regíón duplicada –Existe un contador de uso por página –Cada vez que se crea copia privada se decrementa el contador –Si llega a 1, se desactiva COW ya que no hay duplicados
●FORK con COW • Se comparten todas las regiones • Las regiones privadas se marcan como COW en padre e hijo
• En vez de duplicar espacio de memoria sólo se duplica la tabla de páginas
cada página virtual asignada tiene un espacio fijo en el swap.
una página virtual asignada puede estar en: –swap –un marco de memoria –un fichero proyectado –a rellenar a 0 • En reemplazo hay que copiar la página a swap. Solamente se dedica swap a las regiones asignadas a los procesos. • Tamaño típico de swap es del orden del doble de la memoria principal disponible. ●Swap reside normalmente en el disco. En: • una partición • o un fichero ●En algunos casos el swap reside en una memoria RAM.
Un posible problema de seguridad aparece cuando se le suministra a un proceso un soporte físico de memoria y éste no tiene valor inicial. Si no se rellena a 0 por el SO el proceso podrá leer el contenido que dejó en ese soporte físico el proceso que lo utilizó anteriormente, pudiendo recuperar información valiosa del mismo.
Errores y avisos detectados por el HW y tratados por el SO.
• Acción del SO: Enviar una señal al proceso, que suele matarlo.
• Acción del SO: Enviar una señal al proceso, que suele matarlo.
• Se pone la última página como de lectura. Si se intenta escribir es que queda poca pila. • Acción del SO: Incrementar la regíón de pila. Si no es posible el incremento, enviar una señal al proceso para matarlo. Fallo de página. • Acción del SO: Realizar la migración de la página fallida y actualizar la tabla de páginas afectada.
• Las páginas están como de lectura. • Acción del SO: Desdoblar la página.
enlaza los módulos objeto con copias de módulos de las bibliotecas.
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. • La actualización de la biblioteca implica volver a montar cada programa que las usa.
Carga y montaje de la biblioteca en tiempo de ejecución. Regíón de código compartida. Regíón de datos privadaVentajas del montaje dinámico●
Menor tamaño de los ejecutables. • Código de rutinas de biblioteca sólo en el fichero de biblioteca. ●Los procesos pueden compartir el código de la biblioteca (regíón compartida en modo read only). ●Actualización automática de las bibliotecas: Uso de versiones.
Bibliotecas del mismo nombre incompatibles (versiones incompatibles). ●Eliminación de bibliotecas obsoletas. ●Sobrecarga en tiempo de ejecución.
Montaje en tiempo de carga en memoria. ●Montaje al invocar el procedimiento. ●Montaje explícito.
Montaje en tiempo de carga en memoria
Al iniciar la ejecución del programa el SO completa el ejecutable incluyendo todas las bibliotecas dinámicas y resolviendo los enlaces.
Solamente cuando el proceso trata de ejecutar un procedimiento por primera vez se incluye la biblioteca correspondiente y se resuelve su enlace. Produce menos sobrecarga que la solución anterior. El ejecutable contiene: ●Nombre de la biblioteca así como los puntos de enlace de las rutinas de la biblioteca. ●Rutina encargada de cargar y montar la biblioteca en tiempo de ejecución al realizarse la primera referencia a un procedimiento de la misma.
Es más flexible que anterior puesto que se puede seleccionar la biblioteca en tiempo de ejecución. ●El ejecutable ha de preguntar a la biblioteca sobre los puntos de enlace de sus funciones. ●Es más frágil que los anteriores, puesto que el compilador no ayuda a verificar los prototipos de las llamadas.