Académique Documents
Professionnel Documents
Culture Documents
Captulo 4: Hilos
Visin general Modelos multi-hilos Consideraciones sobre hilos Pthreads Hilos de Windows XP Hilos de Linux Hilos de Java
Beneficios
Buenos tiempos de respuesta: Partes de proceso siguen en ejecucion a pesar de bloqueos Compartir recursos: Los datos globales sirven como Memoria compartida Economa: Es ms rapido y requiere menos recursos crear un thread. Utilizacin de arquitecturas MP: Mismo proceso corriendo en varios CPUs
Modelos Multi-Hilos
Mapeo de hilos de usuario a hilos del kernel:
Muchos-a-Uno
Muchos hilos de nivel de usuario se mapean a un solo hilo del kernel Ejemplos: Solaris Green Threads GNU Portable Threads
Modelo Muchos-a-Uno
Uno-a-Uno
Cada hilo de usuario se mapea a un hilo del kernel Ejemplos: Windows NT/XP/2000 Linux Solaris 9 y posterior
Modelo Uno-a-Uno
Que pasa si hay muchos hilos de usuario? Que se restringue user o kernel threads?
Modelo Muchos-a-Muchos
Permite que muchos hilos de usuario se mapeen a muchos hilos del kernel Permite que el S.O. cree un nmero suficiente de hilos del kernel Ejemplos: Solaris antes de la versin 9 Windows NT/2000 con el ThreadFiber package
Modelo Muchos-a-Muchos
Modelo de Dos-Niveles
Similar a M:M, excepto que permite al hilo de usuario estar ligado a un hilo del kernel Ejemplos: IRIX HP-UX Tru64 UNIX Solaris 8 y versiones previas
Modelo de Dos-Niveles
Librerias de hilos
POSIX implementa el standart (IEEE 1003) para creacion y sincronizacion de hilos. (librera pthreads) Windows usa la librera win32 threads. Java tambien tiene threads aunque en la practica llama a las librerias nativas.
Hilos de Java
Manejados por la JVM Pueden ser creados: Creando una clase que herede de Thread Creando una clase que implemente la interfaz Runnable
Semnticas de las llamadas fork() y exec() Cancelando hilos Manejo de llamadas Pools de hilos Datos especficos de un hilo Activaciones del planificador
padre
hijo
Exec reemplaza al proceso con uno nuevo, que pasa con los hilos del proceso?
Cancelando Hilos
Terminar un hilo antes de que termine Cuando deliberadamente se termina un hilo. Cuando los hilos realizan la misma tarea. Dos enfoques generales: Cancelacin asincrnica termina el hilo indicado inmediatamente Cancelacin diferida permite al hilo indicado verificar peridicamente si debe ser cancelado
Manejo de Seales
Usadas en sistemas UNIX para notificar a un proceso que un evento en particular ha ocurrido. En Unix la llamada kill sirve para enviar seales entre procesos y pthread_kill entre hilos. En windows Asincronous Porcedure calls. Un manejador de seal es usado para procesar las seales 1. Seal se genera por un evento en particular 2. Seal se entrega a proceso 3. Seal se maneja Opciones: Entregar seal al hilo al que dicha seal se aplica Entregar seal a todos los hilos del proceso Entregar seal a ciertos hilos del proceso Asignar un hilo especfico para recibir todas las seales del proceso
Pools de Hilos
Crear un nmero de hilos en un pool de donde esperan trabajar Ventajas: Usualmente es algo ms rpido antender un pedido en un hilo ya existente que crear uno nuevo Permite que el nmero de hilos de la aplicacin est limitado al tamao del pool
Modelos M:M and Two-level models requiren comunicacion para mantener un nmero apropiado de hilos del kernel. El planificador provee un mecanismo de comunicacin entre los hilos de kernel del SO y las librerias de hilos de usuario. Se monitorea los threads y cuando algun evento ocurre se ejecuta un procedimiento upcall. La libreria de threads (upcall handler) define que thread se va a ejecutar y solicita o asigna LWPs.
Permite que cada hilo tenga su propia copia de datos til cuando uno no tiene control sobre el proceso de creacin de hilos (es decir, cuando se usa un pool de hilos)
Otras Consideraciones
Problemas con eventos asincrnicos: Dos hilos intentan escribir en disco. El primer hilo inicia el controlador del disco El segundo corre en otro procesador antes de que el primero complete la operacin de escritura. El segundo intenta realizar una operacin de escritura distinta. El controlador del disco se confunde.
Dos hilos intentan escribir un mensaje por pantalla Un cambio de contexto ocurre antes de que el primer thread concluya su requerimiento.
Estructuras de datos compartidas Un hilo cierra un archivo que otro hilo est leyendo Requerimientos de memoria duplicados Llamadas a biblioteca Muchas funciones dan problemas si el cdigo es invocado dos veces por un mismo proceso Informes de error UNIX, variable global errno Manejo de seales Administracin de la pila Cmo darle memoria adicional? (por thread?)
Hilos Windows XP
Una aplicacion tiene muchos hilos Implementa mapeo uno a uno entre hilos, la libreria fiber implementa M:M Cada hilo contiene Un hilo id Registros Stacks de kernel y usuarios Area de datos privados Estos son conocidos como el contexto de hilo.
Hilos Windows XP
Linux Threads
Para linux hilos y procesos son tareas. Los hilos se crean con la llamada al sistema clone(). clone() permite que un proceso hijo comparta el adress space del procesos padre de acuerdo a:
34