Breve Resumen
Este video explica los procesos ligeros (hilos) en sistemas operativos modernos, contrastándolos con los procesos tradicionales. Se discuten los diferentes enfoques de concurrencia (uniproceso/unihilo, multiproceso/unihilo, uniproceso/multihilo, y multiproceso/multihilo), las ventajas de los hilos (creación y terminación más rápidas, comunicación eficiente), y los tipos de hilos (ULT y KLT), junto con sus implicaciones en el rendimiento y la arquitectura de aplicaciones.
- Los hilos comparten recursos del proceso al que pertenecen, lo que facilita la comunicación y el uso compartido de recursos.
- Existen dos tipos principales de hilos: los de nivel de usuario (ULT) y los de nivel de kernel (KLT), cada uno con sus propias ventajas y desventajas en términos de velocidad y soporte del sistema operativo.
- La elección entre ULT, KLT y multiproceso depende de los requisitos de la aplicación y las capacidades del sistema operativo.
Introducción a los Procesos Ligeros (Hilos)
Se introduce el concepto de procesos ligeros, también conocidos como hilos, y se establece la necesidad de comprender primero los fundamentos de los procesos. Se recuerda que cada proceso tiene su propio espacio de memoria aislado y protegido por el sistema operativo, lo que impide que un proceso acceda a la memoria de otro. A diferencia de los procesos, los hilos comparten los recursos del proceso al que pertenecen, incluyendo el espacio de memoria y la calendarización.
Diferencias Clave entre Procesos e Hilos
Se explica que los hilos no tienen su propio espacio de memoria ni calendarización, sino que utilizan los del proceso al que pertenecen. Esto permite que los hilos dentro del mismo proceso accedan a la información de otros hilos de manera más sencilla, ya que comparten la misma protección de memoria. Sin embargo, la comunicación entre procesos independientes requiere mecanismos adicionales proporcionados por el sistema operativo. La principal diferencia radica en que los hilos utilizan los recursos del proceso, mientras que los procesos tienen sus propios recursos.
Tipos de Aplicaciones y Enfoques de Concurrencia
Se describen cuatro tipos de aplicaciones según su enfoque de concurrencia: un proceso con un hilo (lo más básico), múltiples procesos con un hilo cada uno (multitarea básica), un proceso con múltiples hilos (concurrencia dentro de un proceso), y múltiples procesos con múltiples hilos cada uno (enfoque moderno para eficiencia y concurrencia). Se destaca que el enfoque multihilo/multiproceso es el más utilizado actualmente, ya que permite aprovechar la concurrencia y el "time sharing" de manera eficiente.
Estados de un Hilo y Ventajas sobre Procesos
Se mencionan los tres estados básicos de un hilo: corriendo, listo y bloqueado. Se explican las ventajas de los hilos sobre los procesos, como la creación y terminación más rápidas, y la conmutación más eficiente entre hilos dentro del mismo proceso. Esto se debe a que los hilos no requieren la asignación y liberación de recursos por parte del sistema operativo, lo que los hace más rápidos y eficientes.
Eficiencia y Comunicación entre Hilos
Se profundiza en las mejoras que ofrecen los hilos, como la comunicación más rápida entre hilos del mismo proceso al compartir memoria, la programación modular más sencilla y la capacidad de realizar trabajos concurrentes en primer y segundo plano. Se ejemplifica con el caso de JavaScript en HTML, donde el uso de hilos (web workers) permite realizar procesos intensos sin bloquear el hilo principal de renderizado.
Relación entre Hilos y Procesos: Dependencia y Afectación
Se explica que los cambios de estado de un proceso afectan a sus hilos, ya que los hilos corren dentro del proceso. Si un proceso termina o se suspende, sus hilos también terminan o se suspenden. Se introduce la existencia de dos tipos de hilos (ULT y KLT) y se menciona que el bloqueo de un hilo puede afectar al proceso, dependiendo del tipo de hilo y la implementación del sistema operativo.
Multihilo y Llamadas a Procedimientos Remotos
Se ilustra cómo el multihilo puede mejorar la eficiencia en situaciones de llamadas a procedimientos remotos (ej., consultas a bases de datos). En lugar de esperar a que una llamada bloqueante termine, se pueden utilizar múltiples hilos para realizar varias llamadas concurrentemente, mejorando el rendimiento general del sistema. Se introduce la necesidad de mecanismos de sincronización (semáforos, monitores) para gestionar el acceso a recursos compartidos y prevenir problemas de concurrencia como "deadlocks" y "condiciones de carrera".
Tipos de Hilos: User Level Threads (ULT) vs. Kernel Level Threads (KLT)
Se explican los dos tipos principales de hilos: los hilos de nivel de usuario (ULT) y los hilos de nivel de kernel (KLT). Los ULT son manejados por la aplicación y pueden correr en cualquier sistema operativo, pero si un hilo ULT se bloquea, todo el proceso se bloquea. Los KLT son manejados por el sistema operativo y requieren que el sistema operativo tenga la capacidad de implementarlos. Los KLT permiten que un proceso continúe ejecutándose aunque uno de sus hilos esté bloqueado.
User Level Threads (ULT): Características y Desventajas
Se detalla que con ULT, la biblioteca de hilos corre dentro del proceso, y el sistema operativo no tiene conocimiento de los hilos individuales. Esto significa que si un hilo se bloquea, todo el proceso se bloquea, limitando la concurrencia a nivel de lógica y no permitiendo aprovechar la concurrencia cuando un recurso está ocupado.
Jacketing: Solución para Llamadas Bloqueantes en ULT
Se introduce el "jacketing" como una técnica para solventar el problema de las llamadas bloqueantes en ULT en sistemas operativos que no soportan KLT. El "jacketing" consiste en convertir una llamada bloqueante en un hilo ULT en un proceso aparte, de modo que si esa llamada se bloquea, solo se bloquea ese proceso y no el proceso principal.
Kernel Level Threads (KLT): Características y Consideraciones
Se explica que con KLT, los hilos corren en el lado del kernel, y la calendarización es manejada por el sistema operativo. Esto permite que el sistema operativo sepa qué hilo está bloqueado y pueda seguir ejecutando otros hilos del mismo proceso. Aunque los KLT son más inteligentes, también son un poco más lentos que los ULT debido a la interacción con el sistema operativo. Se destaca que la elección entre ULT y KLT depende de las capacidades del sistema operativo y los requisitos de la aplicación.
ULT vs KLT vs Procesos: Rendimiento y Decisiones de Diseño
Se resume que los ULT son los más rápidos, seguidos por los KLT, y los procesos son los más lentos. Se enfatiza la importancia de combinar estas técnicas de manera inteligente en una aplicación bien desarrollada, utilizando ULT cuando sea posible, KLT para llamadas bloqueantes si el sistema operativo lo permite, y procesos solo cuando sea necesario.
Aplicaciones que se Benefician del Multiproceso
Se mencionan ejemplos de aplicaciones que se benefician del multiproceso, como el renderizado de video, simulaciones intensivas, servidores web con múltiples clientes simultáneos y aplicaciones Java. Se destaca la importancia de configurar adecuadamente la concurrencia en servidores web para manejar un gran número de usuarios simultáneamente.
Resumen y Conclusiones
Se resume que los hilos en los sistemas operativos modernos permiten crear procesos más rápidos y eficientes, facilitando el "time sharing" y mejorando la experiencia del usuario. La combinación inteligente de ULT, KLT y multiproceso, junto con un buen diseño de concurrencia, permite crear aplicaciones escalables y eficientes que pueden soportar un gran número de usuarios y procesos simultáneamente.

