Estrategias Avanzadas de Paginación y Gestión de Marcos de Memoria en Sistemas Operativos

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,97 KB

Gestión Avanzada de Memoria: Asignación de Marcos y Optimización del Rendimiento

Asignación de Marcos de Página

La asignación de marcos de página es crucial para el rendimiento del sistema. La estrategia varía según el entorno de ejecución:

Estrategias de Asignación

  • Monoprogramación (MONOPROG): Los marcos se asignan hasta que se agotan.
  • Multiprogramación (MULTIPROG): El número mínimo de marcos depende de la instrucción:
    • Guardar la instrucción (1 o 2 marcos).
    • Las referencias directas o indirectas.
  • Otras Estrategias (EL RESTO):
    • De forma equitativa al número de procesos (Memoria = Total / Procesos).
    • Proporcional a su tamaño: $M_i = (V_i / T_v) \times F$ (donde $M_i$ es el número de marcos asignados al proceso $i$, $V_i$ es el tamaño virtual del proceso $i$, $T_v$ es el tamaño virtual total, y $F$ es el número total de marcos libres).
    • Proporcional a su prioridad.

Variabilidad del Número de Marcos por Proceso

El número de marcos asignados a un proceso puede variar debido a:

  • El grado de multiprogramación.
  • Si los marcos de página víctima son globales (el número de marcos no varía si las víctimas son locales).

Impacto del Tamaño del Marco en el Rendimiento

Condiciones de Comparación

  • Un número de marcos fijo (abscisas).
  • Reemplazo local.

Ventajas del Tamaño Pequeño

  • La memoria se aprovecha mejor.
  • Menor fragmentación interna.
  • Nos ajustamos mejor a la localidad.

Ventajas del Tamaño Grande (Tendencia Histórica)

  • Se reduce la tabla de páginas.
  • Es más efectivo cuando tenemos memoria secundaria por efecto del acceso a disco.
  • Los fallos de páginas iniciales serán menores.
  • Pueden ser alcanzados por el TLB (Translation Lookaside Buffer).

Hiperpaginación (Thrashing)

Definición y Causas

La hiperpaginación (*thrashing*) es un grave fallo del rendimiento que ocurre cuando los procesos pasan más tiempo tratando fallos de página que realizando su trabajo útil. Este fenómeno se puede realimentar, ya que disminuye el uso de CPU y, consecuentemente, se inyectan más procesos al sistema, empeorando la situación.

Métodos Principales para Evitar la Hiperpaginación

1. Asignación Local y Elección de Víctima

Con asignación local al proceso en la elección de página víctima, se pueden limitar los efectos del *thrashing*.

2. Área Activa (Working Set)

Se define un área $\Delta$ variable para cada proceso, de tal manera que se tienen en cuenta los accesos a páginas en esa área en el pasado.

  • El número de páginas $W$ en esa área (*working set*) multiplicado por el número de procesos da el número de marcos mínimo para que no haya hiperpaginación. Esto también se conoce como *Resident Set Size*.
  • El *working set* depende de la localidad del proceso y del tamaño de $\Delta$.
  • Un proceso nunca debería bajar de su $W$ (su conjunto de trabajo).
  • Problemas de implementación incluyen la gestión del temporizador (*timer*) y el número de bits.

3. Frecuencia de Fallos de Página

Se definen dos límites (alto y bajo) para el número de fallos de página. El límite bajo puede ser función del *working set*. Se asignan o liberan marcos si se sobrepasan ambos límites.

Gestión de Memoria del Kernel

Diferencias con la Memoria de Usuario

La memoria del *kernel* es tratada de forma diferente a la del usuario:

  • Se trata de minimizar el desperdicio de memoria por fragmentación interna.
  • Por ello, muchos *kernels* (especialmente los antiguos) no utilizan paginación.
  • Además, si las operaciones de Entrada/Salida (E/S) se realizan en el *kernel*, esa memoria no podría retirarse a la Memoria Secundaria (MS). En muchos casos, esta memoria debe ser contigua.

Soluciones para Evitar la Fragmentación Externa en el Kernel (Sin Paginación)

Sistema Buddy de Descomposición Binaria

  • Se reparte la memoria en trozos de tamaño potencia de dos.
  • Se conceden trozos a las peticiones de memoria por el tamaño inmediatamente superior.
  • Se sigue desperdiciando algo de memoria, aun consolidando los trozos devueltos.

Optimización y Estrategias Avanzadas

Arquitecturas NUMA y Localidad

En máquinas NUMA (Non-Uniform Memory Access), se agrupan los procesos por su tiempo de acceso a memoria. Se cogen marcos del mismo grupo de procesos para mejorar la eficiencia.

Prepaging y TLB

  • Las páginas del *Working Set* (WSet) deberían caber en el TLB.
  • Prepaging: Existen funciones de costo asociadas a la precarga de páginas.

Optimización del Swap

La parte de *swap* tiene mayor rendimiento que la que tiene un sistema de ficheros encima.

Estrategias de Rendimiento en Swap

  • Los ejecutables están en ficheros. Se puede copiar el fichero en el *swap* y leerlo desde allí.
  • Otra opción es leerlo desde el fichero y pasar las páginas reemplazadas al *swap* para su posterior lectura.

Copy-On-Write (COW)

COW es una técnica donde se comparte todo entre procesos padres e hijos (sobre todo si el hijo realiza una llamada *exec*). Solo las páginas escritas se duplican. Esta técnica es utilizada por sistemas como Windows, Solaris y Linux.

Disminución del Tamaño del Swap

Para disminuir el tamaño del área de *swap*:

  • Las páginas de solo lectura (*Read-Only*) se mantienen en el fichero y no se pasan al *swap*.
  • Solo se pasan páginas de “memoria anónima” (aquella que no tiene soporte en el fichero, por ejemplo, *stack* o *heap*). Esta estrategia es común en Solaris, BSD y UNIX.

Entradas relacionadas: