01 Jul

Fallos de Página

Detección: Cuando un proceso intenta acceder a una página que no está en la memoria principal, se produce un fallo de página.

Swap-in: El sistema operativo debe buscar la página faltante en el disco y cargarla en la memoria, a esto se le llama swap-in.

Bloqueo del Proceso: Mientras se carga la página desde el disco, el proceso que causó el fallo se bloquea temporalmente.

Actualización de Tabla: Una vez que la página está en memoria, se actualiza la tabla de páginas para reflejar la nueva ubicación de la página.

Algoritmos de Reemplazo de Página

  • Óptimo: Este algoritmo reemplaza la página cuyo uso está más lejano en el futuro. Es teórico porque requiere conocer el comportamiento futuro del programa, lo cual generalmente no es posible.
  • FIFO (First In, First Out): Reemplaza la página que ha estado en memoria por más tiempo. Aunque es simple, puede no ser efectivo y presenta la anomalía de Belady, donde aumentar los marcos de página puede incrementar los fallos de página.
  • LRU (Least Recently Used): Reemplaza la página que ha sido menos recientemente utilizada. Cada referencia a memoria actualiza un timestamp en la tabla de página, y se reemplaza la página con el timestamp más antiguo.
  • NRU (Not Recently Used): Este algoritmo utiliza una aproximación al LRU, reemplazando páginas que no han sido referenciadas recientemente.

Compartir

  • Espacio de Direccionamiento: Permite a los procesos compartir páginas comunes en memoria de manera eficiente, como la sección de código de un mismo proceso o el código de una biblioteca dinámica.
  • Uso Eficiente de Memoria: La compartición de memoria ayuda a optimizar el uso de la memoria al evitar duplicaciones innecesarias.
  • Memoria Compartida: Facilita la colaboración entre procesos que necesitan acceder a la misma información o recursos.
  • Protección: Asegura que los procesos no interfieran entre sí y que cada uno tenga acceso solo a las páginas de memoria que le corresponden.

Segmentación

La segmentación es un esquema de manejo de memoria que refleja la división lógica de un programa en bloques de tamaño variable llamados segmentos.

  • Uso: Permite una agrupación lógica de la información, como código, pila (stack), memoria dinámica (heap), tabla de símbolos, etc., cada uno en su propio segmento.
  • Direcciones Virtuales: Las direcciones virtuales se componen de un número de segmento y un desplazamiento dentro del segmento, donde el desplazamiento debe ser menor que el tamaño del segmento.

Beneficios

  • Facilita estructuras de datos de largo variable.
  • Protección de módulos contra accesos no autorizados.
  • Compartición eficiente de segmentos entre procesos.

Características

  • Estructuras de Datos de Largo Variable: Los segmentos permiten que las estructuras de datos como la pila (stack) tengan su propio tamaño y puedan variar.
  • Protección: Ofrece la capacidad de proteger módulos de accesos no autorizados, manteniendo la seguridad del proceso.
  • Compartición: Facilita que varios procesos compartan segmentos de memoria de manera eficiente, lo que optimiza el uso de la memoria.
  • Flexibilidad: La segmentación permite una división lógica del programa que refleja su estructura interna, con bloques de tamaño variable llamados segmentos.

Segmentación Paginada

Es una técnica de gestión de memoria que combina dos métodos: la segmentación y la paginación.

  • Segmentación: Divide el programa en segmentos que reflejan su estructura lógica, como código, pila y datos.
  • Paginación: Subdivide los segmentos en páginas más pequeñas para evitar la fragmentación interna y facilitar la administración de memoria.

Beneficios

  • Permite un uso más eficiente de la memoria.
  • Facilita la compartición y protección de módulos entre procesos.

Implementación: Utiliza una arquitectura que divide los segmentos en páginas, como en los procesadores Intel.

Threads o Hebras

Son hilos de ejecución que comparten recursos como el espacio de memoria dentro de un proceso.

  • Procesos vs. Hebras: Un proceso es un conjunto de threads que comparten espacio de memoria, mientras que los threads son secuencias de instrucciones ejecutadas por el microprocesador.
  • Control de Threads o Hebras: Cada thread mantiene su propia información de estado y se gestiona a través de un Bloque de Control de Hebras (TCB).
  • Sincronización: Es esencial para evitar inconsistencias en los datos compartidos entre threads y para controlar el acceso a secciones críticas de código.

Bloque de Control de Hebras (TCB)

Es una estructura de datos utilizada en sistemas operativos para gestionar las hebras o threads.

  • Información de Estado: Cada hebra tiene su propio TCB que mantiene información sobre su estado, como el contador de programa (Program Counter), registros, pila y el estado actual de la hebra.
  • Elementos por Hebra: El TCB almacena elementos específicos de cada hebra, diferenciándolos de los elementos que son compartidos por el proceso completo.
  • Compartición con el Proceso: Hay información que se comparte entre el Bloque de Control de Proceso y el TCB, como archivos abiertos, variables globales y espacio de direcciones.
  • Sincronización: El TCB es crucial para la sincronización de hebras, permitiendo la ejecución ordenada y controlada, especialmente en secciones críticas donde se accede a recursos compartidos.

Aplicaciones Multihebras

  • Concurrencia en Aplicaciones: Las aplicaciones multihebras utilizan múltiples hilos de ejecución (threads) que operan sobre los mismos datos de manera concurrente.
  • Ejemplos de Uso: Un servidor que inicia un hilo por cada solicitud recibida, un procesador de texto que trabaja simultáneamente con su corrector ortográfico y su compositor de página, y la gestión de interfaces gráficas.
  • Ventajas: Permite que varias tareas se realicen al mismo tiempo dentro de un mismo proceso, mejorando la eficiencia y el rendimiento de la aplicación.

Implementación de Hilos

Los hilos pueden ser manejados a nivel del kernel, por el usuario a través de bibliotecas de hilos, o mediante una implementación híbrida.

  • Implementación a Nivel del Kernel:
    • El scheduler del sistema operativo planifica los threads.
    • Si el próximo thread a ejecutar está en otro proceso, se produce un cambio de contexto; si está en el mismo proceso, no es necesario.
  • Implementación a Nivel de Usuario:
    • Una biblioteca de threads permite a los usuarios crear y gestionar threads, permitiendo la multiplexación de hilos en paralelo con el hilo principal.
  • Implementación en un Nivel Intermedio:
    • El Kernel puede ver algunos threads o grupos de threads, y decide cuáles planifica él y cuáles la biblioteca.

Operaciones Básicas con Hebras

  • Detención Temporal de la Ejecución de una Hebra:
    • Sleep: Detiene temporalmente la ejecución de la hebra actual por un tiempo determinado en milisegundos.
    • Join: Espera a que otra hebra termine su ejecución.
    • Suspend: Detiene indefinidamente la ejecución de una hebra hasta que se llame al método resume.
  • Abort: Interrumpe la ejecución de una hebra.

Deja un comentario