Está en la página 1de 29

Sistemas Operativos: Hilos

Hilos (Threads) de procesos en un SO


Sistemas Operativos: Repaso hasta ahora…

▪ Bloque de Control de Procesos (PCB)


▪ Comportamiento expresado por Estados: Nuevo, Listo/Suspendido, Listo,
Ejecutando, Bloqueado, Bloqueado/Suspendido, Saliente
▪ Planificados por el SO para su admisión, uso de memoria y CPU.
Planificadores de Largo, Mediano y Corto Plazo, respectivamente.
▪ Algoritmos de planificación de corto plazo:
– Feedback o Retroalimentación, cuya posibi- Sin Desalojo Con desalojo

lidad de desalojo dependerá de los algoritmos FCFS o FIFO Round Robin

seleccionados para cada cola. Y… SPN SRT


HRRN Virtual Round Robin
Prioridades Prioridades
Hilos: Introducción

▪ Imagen de un proceso común o proceso “pesado”.


▪ Cada proceso dentro de su imagen contiene el Código
(algoritmos) de su programación.
▪ Ejecutar el mismo proceso en multiples oportunidades,
daría como resultado las mismas acciones.
▪ Al conjunto de acciones ejecutadas por un proceso se las
llama su “traza” o “hilo conductor”
Hilos: Definición

▪ Definición: Definimos como Hilo, a


la traza o ejecución de acciones Código Datos Archivos

esperadas de un proceso, basadas


en la programación del mismo.
Registros Pila

▪ Es una unidad de Planificación


que utiliza el CPU y que
comprende:
– Un ID de hilo, un set de registros Hilo único
(Como un PC, SP, IP, etc.) y una del proceso

pila propios
Hilos: Ejemplo de un Proceso con un Hilo

▪ Sin importar cuántas veces se ejecute el


algoritmo de la figura, mientras que se
encuentre en ejecución, realizará
siempre las mismas acciones.

▪ Pero… ¿qué ocurriría si necesitáramos


que ejecutara distintas acciones
“simultáneamente” , o distintas tareas,
según alguna decisión?
Hilos: Procesos Multihilo

▪ Si un proceso tiene más de un hilo, Proceso P

puede ejecutar múltiples tareas al Código Datos Archivos

mismo tiempo.
▪ Comparte con sus hilos su sección Registros Registros Registros

de código, su sección de datos, y Pila Pila Pila

los recursos asignados al proceso


por el SO.
▪ En general, de ahora en más
Hilo 1 Hilo 2 Hilo n
llamaremos al generador de un hilo
como PADRE y al hilo generado
como HIJO.
Hilos: Ejemplos comunes

• Navegadores Web
• Prácticamente todos los
programas de la suite de
Microsoft 365
• Cualquier Homebanking
• Instagram y sus amigos…
• El portal de AFIP (ponele…)
Hilos: Ventajas de uso y Beneficios

Velocidad de respuesta (Responsiveness)


Hacer una aplicación “multihilos” puede permitir al programa continuar ejecutando cuando alguno
de sus hilos se bloquea (aunque no siempre!), o cuando hace alguna operación que toma mucho
tiempo.
Compartición de Recursos
Los hilos comparten la memoria y los recursos de los procesos a los que pertenecen.
Economía
Dado que los hilos en un proceso comparten los recursos, es más económico crear y cambiar
contextos de hilos.
La creación de un proceso (por ejemplo la JVM en Windows) es alrededor de 30 veces más lenta que
la creación de un hilo
Utilización de Multiprocesamiento y Arquitecturas Multi-Procesador
Determinado tipo de hilos pueden ejecutarse en diferentes procesadores paralelamente
Hilos: Tipos de Hilo

Hilos de Núcleo (Kernel Level Hilos de Usuario (User Level


Threads) o KLTs Threads) o ULTs
▪ Son visibles para el SO ▪ Son visibles para el programador
pero no para el SO.
Hilos: Escenario combinado

▪ El núcleo soporta y administra (Planifica) los KLTs


▪ Los ULTs son implementados y planificados a través de
una Biblioteca de Hilos.
▪ En general, los ULTs son creados con mayor velocidad
que los KLTs (y por consecuencia, que los procesos),
porque no se requiere intervención del Kernel.
▪ Un proceso puede crear uno o más KLTs.
▪ Un KLT puede crear uno o más ULTs.
Hilos: Modelos Multihilo

Muchos a Muchos
Uno a Uno

Muchos a Uno
Hilos: Modelos Multihilo – Uno a Uno

▪ Uno a Uno: Cada Hilo de usuario se mapea con un hilo de Kernel


– Hay mayor nivel de competitividad por recursos que en el modelo Muchos a Uno
– Permite ejecutar otros hilos de Kernel cuando alguno de ellos está bloqueado.
– Crear un nuevo hilo de usuario requiere crear un nuevo hilo de kernel (más
overhead!)
– Crear demasiados hilos de Kernel para el mismo proceso, puede ser ineficiente
– Diferentes hilos de esta combinación, pueden usar diferentes procesadores, en
caso de haber más de uno
Hilos: Modelos Multihilo – Muchos a Uno

▪ Muchos a uno: Muchos hilos de Usuario


mapeados a un único hilo de Kernel
– La administración de los hilos es
realizada por la Biblioteca de Hilos.
– Es eficiente. Se pueden crear tantos
hilos como se desee.
– Todo el Proceso/KLT se va a bloquear si
se hace una Llamada al Sistema
bloqueante
– Aunque se tengan múltiples
procesadores, los hilos de estas
combinaciones sólo utilizarán uno.
Hilos: Modelos Multihilo – Muchos a Muchos

▪ Muchos a muchos: permite muchos hilos de


usuario mapeados a menos hilos de kernel
– Permite al SO crear la cantidad necesaria de
hilos de Kernel
– El número de hilos de Kernel podrá ser
específico a una aplicación o un tipo de
máquina

NOTA: Hay un modelo de


Dos Niveles donde
ambos Muchos a Muchos y
Uno a Uno se mezclan
Hilos: Biblioteca de Hilos

▪ Una Biblioteca de Hilos provee al programador una API* para crear y


manejar los hilos
▪ Dos formas de implementación
– Biblioteca entera en el espacio de Usuario sin soporte para Kernel
▪ Todos los datos y estructuras de la librería existen en el espacio de Usuario.
▪ Todas las funciones y llamadas se realizan en el espacio de Usuario
– Funciones a nivel de kernel soportadas por el SO
▪ Todos los datos y estructuras existen en el espacio de Kernel o Núcleo
▪ El invocado de funciones puede resultar en System Calls al Kernel

*Una API (Application Programming Interface) es un conjunto de funciones que sirven al programador para comunicar diferentes
sistemas, o manejar funcionalidades específicas en la programación de alguno de ellos. Por ejemplo, la Biblioteca de hilos provee
funciones para comunicarse con el Kernel
Hilos: Proceso Liviano (LWP)

▪ Muchos sistemas que implementan modelos de ULT 1 ULT 2 ULT n

Muchos-a-Muchos o Dos Niveles, colocan una


estructura intermedia entre los Hilos de Kernel y
los Hilos de Usuario
LWP

▪ Esta estructura es el LWP (Light Weight Process) o


Proceso Liviano
– Un hilo de usuario se encuentra conectado con un LWP KLT
– Cada LWP se conecta con un KLT
– El sistema operativo planifica los KLTs para utilizar el CPU
– Si el KLT se bloquea, el LWP se bloquea y todos los hilos
Proceso
de usuario se bloquean P1
Hilos: Proceso Liviano (LWP)

▪ Para la Biblioteca de Hilos (ULTs), el LWP se comporta como un CPU


“virtual” en el que la aplicación puede planificar la ejecución de los ULTs.
▪ La Biblioteca de Hilos es responsable por la Planificación entre los ULTs.
▪ En general el cambio de contexto entre ULTs implica tomar el contexto del
ULT que está utilizando el LWP y reemplazarlo por el de otro ULT.
Hilos: Estados de los Hilos de Usuario

▪ Al igual que los Procesos/KLTs que son planificados por el SO, los ULTs
utilizan estados:
– Creación (Spawn): Un ULT es iniciado. Se carga y se ejectuta
– Bloqueado (Blocked): Un ULT solicita un recurso y debe esperar a que le sea asignado a su
correspondiente KLT.
– Desbloqueado/Listo (Unlock/Ready): El recurso es asignado al KLT
– Finalizado: Se liberan los recursos ocupados por contexto y pila del hilo (en el LWP)
Hilos: Estados de los Hilos

• ULT2 se está ejecutando en el Proceso B

• ULT2 produce una llamada al sistema que


bloquea al Proceso B, sin embargo ULT2
continúa en el estado Ejecutando (Recordar
que utiliza el LWP como su CPU Virtual).
• Como Proceso B está bloqueado, ningún hilo
podrá continuar su ejecución hasta
finalizado el bloqueo
Hilos: Estados de los Hilos

• El quantum asignado a Proceso B finaliza, por


lo que Proceso B es reenviado a la cola de
Listos.

• Proceso B retoma su ejecución y ULT2


requiere que ULT1 haga alguna acción para
proveer información (es decir que necesita que
se le provea “algo” sin lo cual no puede
continuar y se bloquea), ULT1 inicia su
ejecución. Mientras tanto el Proceso B sigue
utilizando su tiempo de CPU.
Hilos: Planificación
(Ejemplo con CPU Uniprocesador)

a. En el instante cero P1 es admitido en el sistema. El SO planifica la cola de


Listos con RR de quantum=Q. Inicia la ejecución de Hilo A hasta que éste
solicita E/S.
b. Habiendo quedado libre el CPU, Hilo B inicia su ejecución. Mientras tanto
Hilo A finaliza su E/S. Hilo B continua hasta finalizar su Q.
c. Hilo A retoma su ejecución. P2 es
admitido en el sistema. Hilo A
continua hasta finalizar su Q.
d. Salido Hilo A del CPU, P2 inicia su
ejecución, ya que estaba en la cola
de listos.

¿Por qué no continúa Hilo B?


Hilos: Planificación – Diagrama de Gantt
(Ejemplo con CPU Uniprocesador)

El Diagrama de Gantt muestra


el comportamiento de los hilos
KLT y ULT en la planificación
del SO. El SO procesa los hilos
de cada proceso, concediendo
“rodajas” de ejecución.
Hilos: Ejemplo Uniprocesador - KLTs
▪ Los KLTs compiten cuando hay un único Core o CPU

Nivel usuario

Nivel kérnel
(sistema
operativo)

Planificador del SO

Hardware

CPU Core
Hilos: Ejemplo con Doble Núcleo - KLTs
▪ Los hilos pueden planificarse en forma independiente por cada CPU

Nivel usuario

Nivel kérnel
(sistema
operativo)

Planificador del SO

Hardware
CPU Core Core
Hilos: Ejemplo con Doble Núcleo - ULTs
▪ Los ULTs sólo pueden aprovechar un único Core o CPU,
independientemente de que haya más disponibles.

Proceso de usuario gestiona y planifica


Nivel usuario
los múltiples hilos
Nivel kérnel
(sistema
operativo)

Planificador del SO

Hardware

CPU Core Core


Hilos: Hilos de Usuario - ULTs

Ventajas Desventajas

▪ Pueden implementarse en las ▪ No son vistos por el SO por lo que su


aplicaciones que se ejecutaban en planificación queda atada a la
sistemas operativos que no son experiencia del programador
capaces de planificar hilos
▪ Utilizan un único procesador en
▪ No generan Overhead al SO ambientes multiprocesador
▪ No hay límite en la cantidad de ULTs ▪ Una Llamada al sistema bloqueante
que pueden crearse asociados al bloquea el LWP y su KLT asociado, por
mismo LWP y su correspondiente KLT lo que ningún otro hilo dependiente de
este KLT podrá ejecutar.
Hilos: Hilos de Kernel - KLTs

Ventajas Desventajas

❖ El proceso de usuario no se tiene que ❖Causan mayor Overhead en


encargar de la planificación de los determinados modelos (Ej. Uno-a-
hilos Uno)

❖ Si tenemos un procesador con más de ❖Limitados por la disponibilidad del


manejo de hilos del SO. Muchos KLTs
un núcleo, el Sistema operativo puede pueden causar excesiva “sobrecarga”
planificar los hilos en diferentes (Overhead).
núcleos
❖Limitados a la aplicación o máquina
❖ El bloqueo de un hilo no bloquea la utilizadas
ejecución del resto (ya que los ve el
SO como procesos ligeros separados) ❖Mayor costo de creación y
administración que los ULTs
Hilos: Ejercicio Completo
Hilos: ¿Preguntas?

También podría gustarte