Está en la página 1de 55

SISTEMAS OPERATIVOS

Ing. Nancy Magaly Loja


2014
HILOS
Objetivos
 Presentar el concepto de hebras.
 Explicar el funcionamiento de las hebras en
algunos sistemas operativos.
HILOS (THREADS)

 Procesos concurrentes (un solo hilo de


ejecución)
 Sistemas Operativos modernos--- proceso
contiene más de un hilo de ejecución
HILOS (THREADS)
 Los hilos de ejecución que comparten
recursos, son en conjunto conocidos como
un proceso.
 Cuando un hilo modifica un dato en la
memoria, los otros hilos acceden a ese dato
modificado inmediatamente.
HILOS (THREADS)
HILOS (THREADS)
HILOS (THREADS)
 Comprende un ID, CP, conjunto de
registros y una pila.
 Un hilo es básicamente una tarea que puede
ser ejecutada en paralelo con otra tarea.
HILOS (THREADS)
 Hilo comparte con otros hilos que
pertenecen al mismo proceso: código, datos
y otros recursos como archivos abiertos.
HILOS (THREADS)
 El proceso sigue en ejecución mientras al
menos uno de sus hilos de ejecución siga
activo.
 Cuando el proceso finaliza, todos sus hilos
de ejecución también han terminado.
HILOS (THREADS)
 Debido a que tienen varios hilos de control,
el proceso puede efectuar más de una tarea
a la vez.
HILOS (THREADS)
 Un ejemplo de aplicación que podría hacer
uso de los hilos es un servidor web.
 El servidor gestiona multitud de solicitudes.
 Mejora si el servidor es un multiprocesador
HILOS (THREADS)
HILOS (THREADS)
CARACTERISTICAS
 Se comparten recursos, sin usar ningún
mecanismo de comunicación inter-proceso del
SO.
 La conmutación de contexto es más rápida.
 No hay protección entre las hebras.
HILOS (THREADS)
HILOS (THREADS)

VENTAJAS
1) CAPACIDAD DE RESPUESTA:
 El uso de múltiples hebras permite que un
programa continúe ejecutándose aunque parte
de él este bloqueado o realizando una
operación muy larga.
HILOS (THREADS)

VENTAJAS
2) COMPARTICIÓN DE RECURSOS:
 Las hebras comparten la memoria y los
recursos del proceso al que pertenecen.
 Una aplicación tiene varias hebras dentro del
mismo espacio de direcciones del proceso.
HILOS (THREADS)

VENTAJAS
3) ECONOMÍA:
 Es más económico crear y realizar cambios de
contexto entre hebras.
 Ejm en Solaris la computación de contexto con
procesos en 5 veces más lento que con hebras.
HILOS (THREADS)

VENTAJAS
4) UTILIZACIÓN SOBRE ARQUITECTURA
MULTIPROCESADOR:
 Las hebras pueden ejecutarse en paralelo en los
diferentes procesadores.
HILOS (THREADS)

TIPOS DE HEBRAS

1) Hebras de Usuario

1) Hebras del kernel


HILOS (THREADS)

TIPOS DE HEBRAS
1) Hebras de Usuario
 Todo el trabajo de gestión de hilos lo realiza
la aplicación y el núcleo o kernel no es
consciente de la existencia de hilos.
HILOS (THREADS)

TIPOS DE HEBRAS
1) Hebras de Usuario
El modo usuario tiene una biblioteca de hilos que
contiene el código para crear y destruir hilos,
intercambiar mensajes y datos entre hilos, para
salvar y restaurar el contexto de los hilos.
HILOS (THREADS)

TIPOS DE HEBRAS
2) Hebras del kernel
Todo el trabajo de gestión de hilos lo realiza el
kernel.
Si se bloquea un hilo, el kernel puede planificar otro.
HILOS (THREADS)
MODELOS MULTIHEBRA
1) Modelo muchos a uno.
2) Modelo uno a uno
3) Modelo uno a muchos
HILOS (THREADS)
MODELOS MULTIHEBRA
1) Modelo muchos a uno.
HILOS (THREADS)
MODELOS MULTIHEBRA
1) Modelo muchos a uno.
HILOS (THREADS)
MODELOS MULTIHEBRA

1) Modelo muchos a uno.


 Múltiples hebras del nivel de usuario a una
hebra del kernel.
 Bibliotecas de hebras en el espacio de
usuario, el proceso completo se bloquea si
una hebra realiza una llamada bloqueante
HILOS (THREADS)
MODELOS MULTIHEBRA

1) Modelo muchos a uno.


 Una sola hebra accede al kernel a la vez.
 No pueden ejecutarse varias hebras en
paralelo sobre múltiples procesadores.
HILOS (THREADS)
MODELOS MULTIHEBRA
2) Modelo uno a uno
HILOS (THREADS)
MODELOS MULTIHEBRA
2) Modelo uno a uno
 Cada hebra de usuario tiene una hebra del
kernel.
 Mayor concurrencia que el modelo de
muchos a muchos.
 Solo se bloquea la hebra que hace una
llamada bloqueante.
HILOS (THREADS)
MODELOS MULTIHEBRA
2) Modelo uno a uno
 Múltiples hebras en paralelo sobre varios
procesadores.
 Carga administrativa al crear hebras del
kernel.
 Ejm Linux, Windows, Solaris.
HILOS (THREADS)
MODELOS MULTIHEBRA
3) Modelo muchos a muchos
HILOS (THREADS)
MODELOS MULTIHEBRA
3) Modelo muchos a muchos
 Hebras de usuario sobre un número menor
de hebras del kernel.
 La cantidad de hebras de kernel depende de
la aplicación.
 Pueden asignarse más hebras del kernel a
una aplicación en un sistema
multiprocesador.
HILOS (THREADS)

BIBLIOTECAS DE HEBRAS
HILOS (THREADS)
BIBLIOTECAS DE HEBRAS
 Proporciona una API para crear y gestionar
hebras.
 Dos clases de bibliotecas de hebras
1) Bibliotecas en modo usuario.
2) Bibliotecas en nivel del kernel.
HILOS (THREADS)
BIBLIOTECAS DE HEBRAS
1) Bibliotecas en modo usuario.
 Llamada a una función local no llamada al
sistema.
 No existe intervención del kernel.
HILOS (THREADS)
BIBLIOTECAS DE HEBRAS
2) Bibliotecas en modo kernel.

 Soportadas directamente por el sistema


operativo.
 Llamadas al sistema
HILOS (THREADS)
BIBLIOTECAS DE HEBRAS
EJEMPLOS
1) POSIX Pthreads
2) Win 32
3) Java
HILOS (THREADS)
HEBRAS JAVA

 Todos los programas en java tienen un hilo o


una hebra de control.
 Incluso un sencillo programa Java ejecuta una
hebra en la máquina virtual Java.
HILOS (THREADS)
CREAR HEBRAS JAVA

1) Crear una nueva clase Thread y llamar al


método run().
2) Definir una clase que implemente la interfaz
Runnable, y luego se define un método run().
HILOS (THREADS)
CREAR HEBRAS JAVA
El código que implementa el método run, corre como
una hebra separada.
HILOS (THREADS)
CREAR HEBRAS JAVA
 La creación de un objeto Thread no crea
específicamente la nueva hebra sino el
método start() que hace dos cosas:
1) Asigna memoria e inicializa la nueva hebra.
2) Llama al método run() para que se ejecute por
la JVM.
HILOS (THREADS)
CONSIDERACIONES SOBRE LAS
HEBRAS
Llamadas al sistema fork() y exec()--Creación
 Dos versiones de fork(), una que duplique
todas las hebras y otra que duplique solo la
hebra que invocó la llamada fork().
 La llamada exec(), cambia el código y afecta
a todas las hebras.
HILOS (THREADS)
CONSIDERACIONES SOBRE LAS
HEBRAS
Cancelación---Eliminación
 Terminar una hebra antes que haya completado
su ejecución.
 Ejm. Tareas innecesarias, Detener una
descargar de una página web.
HILOS (THREADS)
Problemas con las hebras
 Tiempo requerido para crear la hebra que se
destruirá una vez completado su trabajo.
 Un número ilimitado de hebras concurrentes
podría agotar los recursos del sistema.
HILOS (THREADS)
CONJUNTOS COMPARTIDOS DE
HEBRAS
 La idea es crear una serie de hebras al
principio del proceso y colocarlas en un
conjunto compartido.
 Las hebras están a la espera de una tarea que
hay que realizar.
HILOS (THREADS)
CONJUNTOS COMPARTIDOS DE
HEBRAS
 Cuando hay una tarea que realizar son
despertadas.
 Si en el conjunto no tiene hebras libres, se
espera a que alguna quede libre.
HILOS (THREADS)
CONJUNTOS COMPARTIDOS DE
HEBRAS
 El número de hebras del conjunto depende del
número de procesadores, de la cantidad de
memoria física y del número esperado de
solicitudes.
HILOS (THREADS)
ACTIVACIONES DEL PLANIFICADOR
 En los programas multihebras, se debe
considerar los mecanismos de comunicación
entre el kernel y la biblioteca de hebras.
 Muchos sistemas que implementan el modelo
de muchos a muchos colocan una estructura de
datos intermedia entre las hebras de usuario y
las de kernel.
HILOS (THREADS)
ACTIVACIONES DEL PLANIFICADOR
 Esa estructura se denomina: Proceso ligero o
LWP.
 Cada LWP se asocia a una hebra del kernel
HILOS (THREADS)
ACTIVACIONES DEL PLANIFICADOR
 Comunicación necesaria sobre todo en
esquemas de muchos a muchos para permitir la
creación dinámica de hebras de kernel.
 Si la hebra de kernel se bloquea también los
hace el LWP y su correspondiente hebra de
usuario.
HILOS (THREADS)
ACTIVACIONES DEL PLANIFICADOR
Ejemplos de Hebras
Hebras en LINUX
 Linux no diferencia entre procesos e hebras.
 Una llamada al sistema que también se
utiliza es clone().
 Clone() permite mayor compartición de
recursos que fork().
Ejemplos de Hebras
Ejemplos de Hebras
Si no se le pasan parámetros o indicadores a
clone(); esta funciona como un fork().

También podría gustarte