Threads (Hilos) Threads (Hilos) ■ Vista general ■ Modelos Multithreading ■ Lanzamiento de Threading ■ Pthreads ■ Windows XP Threads ■ Linux Threads ■ Java Threads
Jul 07, 2015
Threads (Hilos)Threads (Hilos)
■ Vista general
■ Modelos Multithreading
■ Lanzamiento de Threading
■ Pthreads
■ Windows XP Threads
■ Linux Threads
■ Java Threads
Proceso simple y MultithreadedProceso simple y Multithreaded
Threads de usuarioThreads de usuario
■ El administrador de Thread es hecho a traves de la biblioteca a nivel de usuario
■ Bibliotecas de bajo nivel:
● POSIX Pthreads
● Win32 threads
● Java threads
Thread KernelThread Kernel
■ Soportado por el Kernel
■ Ejemplos
● Windows XP/2000
● Solaris
● Linux
● Tru64 UNIX
● Mac OS X
Modelos MultithreadingModelos Multithreading
■ Muchos a uno
■ Uno a uno
■ Muchos a muchos
Muchos a unoMuchos a uno
■ Varios threads son mapeados hacia un thread kernel
■ Ejemplos:
● Solaris Green Threads
● GNU Portable Threads
Modelo muchos a unoModelo muchos a uno
Uno a unoUno a uno
■ Cada thread es mapeado hacia un thread kernel
■ Ejemplos
● Windows NT/XP/2000
● Linux
● Solaris 9 y anteriores
Modelo uno a unoModelo uno a uno
Modelo muchos a muchosModelo muchos a muchos
■ Permite a varios threads ser mapeados hacia varios threads kernel
■ Permite al SO crear un suficiente numero de threads kernel
■ Solaris version 9
■ Windows NT/2000 con el paquete ThreadFiber
Modelo muchos a muchosModelo muchos a muchos
Modelo de dos nivelesModelo de dos niveles
■ Similar a muchos-muchos, excepto que permite al thread usuario sr controlado por el thread kernel
■ Ejemplos
● IRIX
● HP-UX
● Tru64 UNIX
● Solaris 8 y mas reciente
Modelo de dos nivelesModelo de dos niveles
Lanzamiento de ThreadLanzamiento de Thread
■ Semantica de llamadas de sistema de fork() y exec()
■ Cancelacion de Thread
■ Manejo de senales
■ Conjunto de Thread
■ Thread de datos especificos
■ Activacion del planificador
Cancelacion de ThreadCancelacion de Thread
■ Termnando un thread de que este finalize
■ Dos posibiliades:
● Cancelacion asincrona lo termina el thread maestro inmediatamente
● Cancelacion diferida permite al thread maestro periodicamente chequear si este debe cancelarlo
Manejador de senalesManejador de senales
■ La senales son usadas en UNIX para notificar a un proceso que un evento particular a acurrido
■ Un manejador de senal es usado para procesos de senales
1. Senal generada por un evento particular
2. Senal es despachada hacia un proceso
3. Senal es manejada■ Opciones:
● Despachar la senal hacia el thread● Despachar la senal a cada thread en el proceso● Desaachar la senal hacia un cierto numero de threads en el
proceso● Asignar un thread especifico para recibir todas las senales
para el proceso
Conjunto de ThreadsConjunto de Threads
■ Crear un numero de threads en un conjunto donde ellos esperan trabajar
■ Ventajas:
● Usualmente mas rapido que el servicio de respuesta e crear un nuevo thread
● Permite a un numero de threads en la aplicacion estar controlados por una cantidad maxima
Thread de datos especificosThread de datos especificos
■ Permite a cada thread tener su propia copia de los datos
■ Util cuando no hay control sobre la creacion de threads (es decir, cuando se usan conjunto de threads)
Activacion del planificadorActivacion del planificador
■ Los modelos M:M y de dos niveles requieren comunicacion para mantener el apropiado numero de threads kernel
■ La activacion del planificador provee upcalls – un mecanismo de comunicacion desde el kernel hacia la biblioteca de thread
■ Esta comunicacion permite a una aplicacion mantener el numero correcto de threads kernel
PthreadsPthreads
■ Estandar POSIX (IEEE 1003.1c) API para la creacion de thread y sincronizacion
■ Comun en UNIX (Solaris, Linux, Mac OS X)
Windows XP ThreadsWindows XP Threads
■ Implementa un mapeo uno a uno
■ Cada thread contiene
● un id del thread
● Conjunto de registros
● Pila (stack) separada de kernel y usuario
● Area de almacenamiento de datos privada
■ El conjunto de registros, pilas, y el area de almacenamiento de datos privada son conocidos como el contexto del thread
■ La estructura de datos de un thread incluye:
● ETHREAD (executive thread block)
● KTHREAD (kernel thread block)
● TEB (thread environment block)
Linux ThreadsLinux Threads
■ Linux se refiere a ellos como refers tasks en vez de threads
■ La creacion de Thread es hecha a traves de la llamada de sistema clone()
■ clone() permite a una tarea hijo compartir el espacio de direccionamiento de la tarea padre (proceso)
Java ThreadsJava Threads
■ Los threads de Java son manejados por la JVM
■ Los threads de Java pueden ser creados por:
● Extendiendo la Thread class
● Implementando la Runnable interface
Java ThreadJava Thread
EjercicioEjercicio
■ Usar la biblioteca pthread
■ Escribir un programa en C que levante dos threads y escriba el identificador de cada thread.
■ Usar las funciones:
pthread_create
pthread_join
Compilar:
cc -lpthread mi_programa.c