Concurrencia en Sistemas Operativos: Tipos, Modelos y Soluciones para Servidores

Clasificado en Informática

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

Concurrencia en Sistemas Operativos: Conceptos, Tipos y Modelos

La concurrencia se refiere a la capacidad de un sistema para ejecutar múltiples procesos o hilos de manera que sus intervalos de ejecución se solapen. Esto no implica necesariamente que se ejecuten simultáneamente en el mismo instante, sino que el sistema puede alternar entre ellos, dando la impresión de simultaneidad.

Tipos de Concurrencia

  • Concurrencia Aparente (Pseudoparalelismo): Se da cuando hay más procesos que procesadores disponibles. En este caso, los programas se multiplican en el tiempo, es decir, el sistema operativo reparte el tiempo de los procesadores entre los procesos, creando la ilusión de paralelismo.
  • Concurrencia Real (Paralelismo Real): Ocurre cuando cada proceso se ejecuta en un procesador diferente. En este escenario, la ejecución es verdaderamente en paralelo.

Modelos de Concurrencia

  • Multiprogramación con un Procesador: El sistema operativo reparte el tiempo del procesador entre los procesos. La planificación puede ser expulsiva (el SO puede interrumpir un proceso) o no expulsiva (el proceso se ejecuta hasta que cede voluntariamente el control).
  • Multiprocesador: Combina el paralelismo real y el pseudoparalelismo, utilizando múltiples procesadores para ejecutar procesos en paralelo y, a su vez, repartiendo el tiempo de cada procesador entre varios procesos.
  • Sistema Distribuido: Involucra varios computadores conectados por una red, permitiendo la ejecución de procesos en diferentes máquinas de forma concurrente.

Tipos de Procesos Concurrentes

  • Independientes: No tienen relación entre sí, no necesitan comunicación ni sincronización.
  • Cooperantes: Comparten recursos o información, requieren mecanismos de comunicación y sincronización para funcionar correctamente.

Problemas de la Concurrencia: Sección Crítica y Exclusión Mutua

La condición de carrera ocurre cuando el resultado de la ejecución de procesos concurrentes depende del orden en que se ejecutan. Para evitar esto, se utilizan instrucciones atómicas, que garantizan que una operación se ejecute como una unidad indivisible.

La sección crítica es un segmento de código que manipula un recurso compartido y debe ejecutarse de forma atómica. Para asegurar la atomicidad, se asocia un mecanismo de exclusión mutua a la sección crítica, que garantiza que solo un proceso pueda acceder al recurso a la vez.

Dos problemas comunes relacionados con la exclusión mutua son:

  • Interbloqueos (Deadlocks): Ocurren cuando dos o más procesos se bloquean mutuamente, esperando que el otro libere un recurso que necesita.
  • Inanición (Starvation): Se produce cuando un proceso no puede acceder a un recurso porque otros procesos lo acaparan constantemente.

Arquitecturas de Servidores Concurrentes

Un servidor concurrente debe manejar múltiples peticiones de clientes de forma eficiente. El proceso típico de atención a una petición incluye:

  1. Recepción de la petición: Implica operaciones de entrada/salida para recibir la petición del cliente.
  2. Procesamiento de la petición: Requiere tiempo de procesamiento en la CPU.
  3. Envío de la respuesta: Involucra operaciones de entrada/salida para enviar la respuesta al cliente.

Soluciones Basadas en Procesos

En esta arquitectura, cada vez que llega una petición, se crea un proceso hijo para procesarla. El proceso padre continúa esperando nuevas peticiones.

Problemas:

  • Alto consumo de recursos del sistema debido a la creación (fork) y terminación (exit) de procesos por cada petición.
  • Falta de control de admisión, lo que puede llevar a problemas de calidad de servicio si se reciben demasiadas peticiones.

Soluciones Basadas en Hilos

Hilos Bajo Demanda

Un hilo receptor se encarga de recibir las peticiones. Cuando llega una petición, se crea un nuevo hilo y se le pasa una copia de la petición. Es importante que sea una copia para evitar modificaciones accidentales de la petición original.

Problemas:

  • Aunque la creación y terminación de hilos es más económica que la de procesos, sigue teniendo un coste.
  • Falta de control de admisión: ¿Qué sucede si llegan muchas peticiones o las peticiones recibidas no terminan?

Pool de Hilos

Se crea un conjunto (pool) de hilos al inicio. Cuando llega una petición, se coloca en una cola. Los hilos del pool toman las peticiones de la cola y las procesan. Esta solución es más eficiente que la creación de hilos bajo demanda, ya que reduce el overhead de creación y destrucción de hilos.

Entradas relacionadas: