Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Hilos
Concepto
Beneficios
Hilos a nivel kérnel y a nivel usuario
Modelos multihilos
Hilos de Solaris 2
Hilos de Java
Hilos
un proceso un proceso
un hilo varios hilos
Hilo Hilos
Mono-hilo Multi-hilo
Modelos de procesos de un solo hilo y de
muchos hilos
Compartición de recursos
Economía
Utilización de arquitecturas de múltiples procesadores
Hilos a nivel usuario
Ejemplos
- Hilos POSIX
- Mach C-threads
- Hilos de Solaris
Hilos a nivel usuario (un CPU con dos
núcleos)
Planificador del SO
Hardware
Ejemplos
• Windows 95/98/NT
• Solaris
• Linux
• Mac OS
Hilos a nivel kernel (con un CPU con un solo
núcleo)
Nivel usuario
Nivel kérnel
(sistema
operativo)
Planificador del SO
Hardware
CPU Core
Hilos a nivel kernel (con un CPU con doble
núcleo)
Nivel usuario
Nivel kérnel
(sistema
operativo)
Planificador del SO
Hardware
CPU Core Core
Ventajas de los hilos a nivel kérnel
Muchos a uno
Uno a uno
Muchos a muchos
Muchos a uno
k
Relaciones entre estados de ULTs y estados
de procesos
Hilo 1
Hilo 2
Listo Ejecución
Listo Ejecución
Bloqueado
Bloqueado
Usuario
Kernel
Listo Ejecución
Bloqueado
Proceso B
Uno a uno
Ejemplos:
- Windows 95/98/NT
- OS/2
Modelo uno a uno
LWP – Nivel intermedio entre los hilos a nivel kernel y los hilos
a nivel usuario.
Hilos en Solaris 2. Recursos necesarios para
los tipos de hilos
Hilos del kernel
• Estructura de datos pequeña y un stack
• El intercambio de hilos no requiere cambiar la información del
acceso a memoria
• Cambios de hilos relativamente rápidos
Hilos en Solaris 2. Recursos necesarios para
los tipos de hilos
LWP
• PCB con datos de los registros
• Información sobre la memoria
• El intercambio entre LWP es relativamente lento
Hilos en Solaris 2. Recursos necesarios para
los tipos de hilos
Hilos a nivel usuario
• Solo requiere un stack y un contador de programa
• No involucrar al kernel significa un intercambio rápido
• El kernel solo ve los LWP que soporta los hilos a nivel usuario
Ejemplo de la arquitectura multihilo de
Solaris
Usuario Biblioteca
de hilos
L L L L L L L L L
Núcleo
Hardware P P P P P
Hilo a nivel de
usuario
Hilo del núcleo L Proceso ligero P Procesador
Gestión de hilos básica
Un hilo tiene :
• Un identificador (ID)
• Una pila
• Una prioridad de ejecución
• Una dirección de inicio de ejecución.
Gestión de hilos básica
(POSIX)
Se dice que un hilo es dinámico si se puede crear en cualquier
instante durante la ejecución.
En POSIX :
• los hilos se crean dinámicamente con la función
pthread_create.
• pthread_exit termina el hilo que la invoca.
Gestión de hilos básica (POSIX), ejemplo:
Espera a que
pthread_join(a_thread);
termine el hilo
creado
}
Hilo principal
funcion_hilo()
{
…
} Hilo creado con la llamada
pthread_create
Gestión de hilos básica
(POSIX)
Pthread_join()
• Hilo que ejecuta pthread_join, espera a que termine otro hilo
El hilo principal debe esperar a que terminen todos los hilos
creados
• Si el hilo principal no espera a que terminen los hilos creados,
al terminar termina el proceso con todos los hilos.
Hilos en memoria
Código
(compartido)
Datos
(compartidos)
Int cont=0 (var. Global)
Stack (de cada hilo)
Int i
(var local)
Stack (de cada hilo)
Int i
(var local)