Gestion De Memoria Unix Y Linux
JunTrev8 de Diciembre de 2012
29.111 Palabras (117 Páginas)938 Visitas
TEMA 3. GESTIÓN DE MEMORIA
3.1. Introducción
3.2. Memoria virtual
3.2.1. Paginación
3.2.2. Segmentación
3.2.3. Segmentación paginada
3.2.4. Paginación por demanda
3.2.5. Algoritmos de reemplazo de página
3.2.6. Políticas de asignación de marcos de página
3.2.7. Operaciones sobre las regiones de un proceso
3.3. Gestión de memoria en UNIX
3.3.1. Intercambio (swap)
3.3.1.1. Asignación del espacio para intercambio por parte del kernel
3.3.1.2. Intercambiar procesos fuera de memoria.
3.3.1.3. Intercambiar procesos entre memoria principal y swap
3.3.2. Paginación por demanda.
3.3.2.1. Visión general
3.3.2.2. Estructuras de datos para paginación por demanda (UNIX)
3.3.2.3. Reemplazo de páginas.
3.3.3. Gestor de memoria del kernel
3.3.3.1. Buddy System (sistema de colegas)
3.3.3.2. Buddy System retardado
3.4. Gestión de memoria en Linux
3.4.1. Visión general
3.4.2. Direccionamiento de memoria en Linux
3.4.2.1. Espacios de direcciones
3.4.2.2. Segmentación en el i386
3.4.2.3. Segmentación en Linux
3.4.2.4. Paginación en el i386
3.4.2.5. Paginación en Linux
3.4.2.6. Gestión de las tablas de páginas (directorios y tablas de páginas)
3.4.3. Gestión de memoria en Linux
3.4.3.1. Gestión de marcos de página
3.4.3.2. Asignación y liberación de marcos de página
3.4.3.3. Políticas de asignación de memoria
3.4.3.4. El Buddy system (sistema de colegas)
3.4.3.5. El Slab allocator
3.4.3.6. Gestión de área de memoria no contigua
3.4.3.7. Memoria para procesos
3.4.3.8. Regiones de memoria
3.4.3.9. Gestor de faltas de página
3.4.3.9.1. Paginación por demanda
3.4.3.9.2. Copy-on-Write
3.4.3.10. Gestión del heap
3.4.4. Intercambio (swapping) en Linux
3.4.4.1. Visión general del intercambio (swapping) en Linux
3.4.4.2. Dispositivos de swap
3.4.4.3. Gestión de los dispositivos de swap
3.4.4.4. Gestión del swap, perspectiva general de la implementación
3.4.4.4.1. Formato de los dispositivos de swap
3.4.4.4.2 Descriptores de dispositivos de swap
3.4.4.4.3. Direcciones de entradas del swap
3.4.4.4.4. Selección de páginas a descartar
3.4.4.5. Gestión del swap, perspectiva detallada de la implementación
3.4.4.5.1. Gestión de los dispositivos de swap
3.4.4.5.2. Entrada/salida de páginas de swap
3.4.4.5.3. Eliminación de páginas de memoria
3.4.5. Cachés en Linux para la gestión de la memoria
3.1. INTRODUCCIÓN
La memoria es uno de los recursos más valiosos que gestiona el sistema operativo. Uno de los elementos principales que caracterizan un proceso es la memoria que utiliza. Ésta está lógicamente separada de la de cualquier otro proceso del sistema (excepto los threads de un mismo proceso que comparten normalmente la mayor parte de la memoria que tienen asignada). Un proceso no puede acceder, al espacio de memoria asignado a otro proceso, lo cual es imprescindible para la seguridad y estabilidad del sistema. El direccionamiento es una parte importante de la gestión de memoria, puesto que influye mucho en la visión del mismo por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del sistema. En Linux, además, un proceso tiene dos espacios de memoria: el espacio de memoria del usuario , único para ese proceso, y el espacio de memoria del kernel, idéntico en todos los procesos.
Objetivos del sistema de gestión de memoria:
Ofrecer a cada proceso un espacio lógico propio. Proporcionar protección entre procesos.
Permitir que los procesos compartan memoria. Dar soporte a las distintas regiones del proceso. Maximizar el rendimiento del sistema.
Proporcionar a los procesos mapas de memoria muy grandes.
Espacio de direcciones de un proceso Conjunto de direcciones a las que hace referencia. Los espacios de direcciones involucrados en la gestión de la memoria son de tres tipos:
Espacio de direcciones físicas. Las direcciones físicas son aquellas que referencian alguna posición de la memoria física. Se obtienen después de aplicar una transformación por parte de la MMU (Unidad de Manejo de Memoria).
Espacio de direcciones lógicas o virtuales. Las direcciones lógicas son las direcciones utilizadas por los procesos. Sufren una serie de transformaciones, realizadas por el procesador (la MMU), antes de convertirse en direcciones físicas.
Espacio de direcciones lineales. Las direcciones lineales se obtienen a partir de las direcciones lógicas tras haber aplicado una transformación dependiente de la arquitectura. En Linux las direcciones lógicas y lineales son idénticas. En el i386, es el nombre que reciben las direcciones tras haber aplicado la técnica de segmentación. En la segmentación, tras haber realizado las correspondientes comprobaciones de seguridad, se le suma a la dirección lógica una cierta dirección base, obteniendo así la dirección lineal. A partir del kernel de Linux 2.2.x, las direcciones base de casi todos los segmentos es 0, y por lo tanto, las direcciones lineales y las lógicas son las mismas.
La unidad de manejo de memoria (MMU) es parte del procesador. Sus funciones son: Convertir las direcciones lógicas emitidas por los procesos en direcciones físicas.
Comprobar que la conversión se puede realizar. La dirección lógica podría no tener una dirección física asociada. Por ejemplo, la página correspondiente a una dirección se puede haber intercambiada a una zona de almacenamiento secundario temporalmente.
Comprobar que el proceso que intenta acceder a una cierta dirección de memoria tiene permisos para ello.
En caso de fallo se lanzará una excepción que deberá ser resuelta por el kernel del sistema operativo. El kernel del sistema operativo está siempre en memoria principal, puesto que si se intercambia a una zona de almacenamiento secundario, ¿quién sería el encargado de llevarlo a memoria principal cuándo se produjera un fallo de acceso a memoria?
La MMU se inicializa para cada proceso del sistema. Esto permite que cada proceso pueda usar el rango completo de direcciones lógicas (memoria virtual), ya que las conversiones de estas direcciones serán distintas para cada proceso.
En todos los procesos se configura la MMU para que la zona del kernel (el cuarto gigabyte) sólo se pueda acceder en modo kernel (modo privilegiado).
La configuración correspondiente al espacio de memoria del kernel es idéntica en todos los procesos. Todos los threads de un mismo proceso también compartirán la configuración del espacio de memoria del usuario.
Para ejecutar un proceso debe estar, al menos en parte, en memoria principal. Subsistema de Gestión de
Memoria (parte del kernel del sistema operativo):
Decide qué procesos residen en memoria principal (al menos una parte). Maneja parte del espacio de direcciones virtuales que ha quedado fuera. Controla la cantidad de memoria principal.
Gestiona el intercambio de procesos entre memoria principal y memoria secundaria o dispositivo de
swap.
Históricamente UNIX:
Política de gestión de memoria llamada intercambio (swapping). Transferían procesos enteros entre memoria principal y swap. Problema: Límite al tamaño de los procesos.
Ventaja: Facilidad de implementación y el menor overhead del sistema.
UNIX BSD Paginación por demanda o demanda de páginas. Transferencia páginas de memoria, no procesos, entre memoria principal y swap. Kernel carga páginas de un proceso cuando las referencia. Ventajas (paginación por demanda):
Flexibilidad al mapear el espacio de direcciones virtuales de un proceso con la memoria física de la máquina
Permite tamaño proceso > cantidad de memoria física disponible. Más procesos residiendo en memoria simultáneamente.
3.2. MEMORIA VIRTUAL.
El tamaño combinado del programa, datos y pila puede exceder la cantidad de memoria física disponible. El sistema operativo guarda aquellas partes del programa concurrentemente en uso en memoria central y el resto en disco. Cuando un programa espera que se le cargue en memoria central de disco otra parte del mismo, la CPU se puede asignar a otro proceso.
Memoria virtual, el sistema operativo gestiona niveles de memoria principal y memoria secundaria: Transferencia de bloques entre ambos niveles (normalmente basada en paginación).
De memoria secundaria a principal: por demanda.
De memoria principal a secundaria: por expulsión.
Beneficios: (1) Aumenta el grado de multiprogramación; (2) Permite ejecución de programas que no quepan en memoria principal.
3.2.1. Paginación.
El espacio virtual de direcciones se divide en unidades llamadas páginas, todas del mismo tamaño. La memoria principal se divide en marcos de páginas (page frames) del mismo tamaño que las páginas virtuales y son compartidas por los distintos procesos del sistema (en cada marco de página
...