Sistema operativo: subprocesos múltiples

¿Qué es Thread?

Un subproceso es un flujo de ejecución a través del código de proceso, con su propio contador de programa que realiza un seguimiento de qué instrucción ejecutar a continuación, registros del sistema que contienen sus variables de trabajo actuales y una pila que contiene el historial de ejecución.

Un hilo comparte con sus hilos pares poca información como segmento de código, segmento de datos y archivos abiertos. Cuando un hilo altera un elemento de memoria de segmento de código, todos los demás hilos lo ven.

Un hilo también se llama lightweight process. Los subprocesos proporcionan una forma de mejorar el rendimiento de las aplicaciones mediante el paralelismo. Los subprocesos representan un enfoque de software para mejorar el rendimiento del sistema operativo al reducir el subproceso de sobrecarga es equivalente a un proceso clásico.

Cada hilo pertenece exactamente a un proceso y ningún hilo puede existir fuera de un proceso. Cada hilo representa un flujo de control independiente. Los subprocesos se han utilizado con éxito en la implementación de servidores de red y servidores web. También proporcionan una base adecuada para la ejecución paralela de aplicaciones en multiprocesadores de memoria compartida. La siguiente figura muestra el funcionamiento de un proceso de un solo subproceso y uno de varios subprocesos.

Diferencia entre proceso e hilo

SN Proceso Hilo
1 El proceso es pesado o requiere muchos recursos. El hilo es liviano y consume menos recursos que un proceso.
2 La conmutación de procesos necesita interacción con el sistema operativo. El cambio de hilo no necesita interactuar con el sistema operativo.
3 En varios entornos de procesamiento, cada proceso ejecuta el mismo código pero tiene su propia memoria y recursos de archivo. Todos los hilos pueden compartir el mismo conjunto de archivos abiertos, procesos secundarios.
4 Si un proceso está bloqueado, ningún otro proceso puede ejecutarse hasta que se desbloquee el primer proceso. Mientras un hilo está bloqueado y esperando, se puede ejecutar un segundo hilo en la misma tarea.
5 Múltiples procesos sin usar subprocesos consumen más recursos. Los procesos de varios subprocesos utilizan menos recursos.
6 En múltiples procesos, cada proceso opera independientemente de los demás. Un hilo puede leer, escribir o cambiar los datos de otro hilo.

Ventajas del hilo

  • Los hilos minimizan el tiempo de cambio de contexto.
  • El uso de subprocesos proporciona simultaneidad dentro de un proceso.
  • Comunicación eficiente.
  • Es más económico crear y cambiar de contexto los hilos.
  • Los subprocesos permiten la utilización de arquitecturas multiprocesador a una mayor escala y eficiencia.

Tipos de hilo

Los hilos se implementan de dos formas siguientes:

  • User Level Threads - Hilos administrados por el usuario.

  • Kernel Level Threads - Subprocesos gestionados por el sistema operativo que actúan sobre el kernel, un núcleo del sistema operativo.

Hilos de nivel de usuario

En este caso, el kernel de administración de subprocesos no es consciente de la existencia de subprocesos. La biblioteca de subprocesos contiene código para crear y destruir subprocesos, para pasar mensajes y datos entre subprocesos, para programar la ejecución de subprocesos y para guardar y restaurar contextos de subprocesos. La aplicación comienza con un solo hilo.

Ventajas

  • El cambio de hilo no requiere privilegios de modo Kernel.
  • El hilo de nivel de usuario puede ejecutarse en cualquier sistema operativo.
  • La programación puede ser específica de la aplicación en el subproceso de nivel de usuario.
  • Los hilos de nivel de usuario son rápidos de crear y administrar.

Desventajas

  • En un sistema operativo típico, la mayoría de las llamadas al sistema se bloquean.
  • La aplicación multiproceso no puede aprovechar el multiprocesamiento.

Hilos de nivel de kernel

En este caso, la gestión de subprocesos la realiza el Kernel. No hay código de gestión de subprocesos en el área de la aplicación. Los subprocesos del kernel son compatibles directamente con el sistema operativo. Cualquier aplicación puede programarse para ser multiproceso. Todos los subprocesos de una aplicación se admiten en un solo proceso.

El kernel mantiene información de contexto para el proceso en su conjunto y para los hilos individuales dentro del proceso. La programación por parte del núcleo se realiza por subprocesos. El Kernel realiza la creación, programación y administración de hilos en el espacio del Kernel. Los subprocesos del núcleo son generalmente más lentos de crear y administrar que los subprocesos del usuario.

Ventajas

  • Kernel puede programar simultáneamente varios subprocesos del mismo proceso en varios procesos.
  • Si un hilo en un proceso está bloqueado, el Kernel puede programar otro hilo del mismo proceso.
  • Las propias rutinas del kernel pueden ser multiproceso.

Desventajas

  • Los subprocesos del núcleo son generalmente más lentos de crear y administrar que los subprocesos del usuario.
  • La transferencia de control de un hilo a otro dentro del mismo proceso requiere un cambio de modo al Kernel.

Modelos de subprocesos múltiples

Algunos sistemas operativos proporcionan un subproceso de nivel de usuario combinado y un servicio de subproceso de nivel de kernel. Solaris es un buen ejemplo de este enfoque combinado. En un sistema combinado, múltiples subprocesos dentro de la misma aplicación pueden ejecutarse en paralelo en múltiples procesadores y una llamada al sistema de bloqueo no necesita bloquear todo el proceso. Los modelos de subprocesos múltiples son de tres tipos

  • Relación de muchos a muchos.
  • Relación de muchos a uno.
  • Relación uno a uno.

Modelo de muchos a muchos

El modelo de muchos a muchos multiplexa cualquier número de subprocesos de usuario en un número igual o menor de subprocesos del núcleo.

El siguiente diagrama muestra el modelo de subprocesos de muchos a muchos donde 6 subprocesos a nivel de usuario se multiplexan con 6 subprocesos a nivel de kernel. En este modelo, los desarrolladores pueden crear tantos subprocesos de usuario como sea necesario y los subprocesos de Kernel correspondientes pueden ejecutarse en paralelo en una máquina multiprocesador. Este modelo proporciona la mejor precisión en la concurrencia y cuando un hilo realiza una llamada al sistema de bloqueo, el kernel puede programar otro hilo para su ejecución.

Modelo de muchos a uno

El modelo de muchos a uno asigna muchos subprocesos a nivel de usuario a un subproceso a nivel de Kernel. La gestión de subprocesos se realiza en el espacio del usuario mediante la biblioteca de subprocesos. Cuando el hilo realiza una llamada al sistema de bloqueo, todo el proceso se bloqueará. Solo un subproceso puede acceder al Kernel a la vez, por lo que varios subprocesos no pueden ejecutarse en paralelo en multiprocesadores.

Si las bibliotecas de subprocesos a nivel de usuario se implementan en el sistema operativo de tal manera que el sistema no las admite, entonces los subprocesos del Kernel utilizan los modos de relación de muchos a uno.

Modelo uno a uno

Existe una relación de uno a uno entre el subproceso a nivel de usuario y el subproceso a nivel de kernel. Este modelo proporciona más simultaneidad que el modelo de muchos a uno. También permite que se ejecute otro hilo cuando un hilo realiza una llamada al sistema de bloqueo. Admite múltiples subprocesos para ejecutarse en paralelo en microprocesadores.

La desventaja de este modelo es que la creación de un hilo de usuario requiere el hilo del Kernel correspondiente. OS / 2, Windows NT y Windows 2000 utilizan un modelo de relación uno a uno.

Diferencia entre subprocesos a nivel de usuario y a nivel de kernel

SN Hilos a nivel de usuario Subproceso a nivel de kernel
1 Los subprocesos a nivel de usuario son más rápidos de crear y administrar. Los subprocesos a nivel de kernel son más lentos de crear y administrar.
2 La implementación se realiza mediante una biblioteca de subprocesos a nivel de usuario. El sistema operativo admite la creación de subprocesos del kernel.
3 El hilo a nivel de usuario es genérico y puede ejecutarse en cualquier sistema operativo. El hilo de nivel de kernel es específico del sistema operativo.
4 Las aplicaciones multiproceso no pueden aprovechar el multiprocesamiento. Las propias rutinas del kernel pueden ser multiproceso.