Top Banner
Threads (Hilos) Threads (Hilos) Vista general Modelos Multithreading Lanzamiento de Threading Pthreads Windows XP Threads Linux Threads Java Threads
25
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cap4

Threads (Hilos)Threads (Hilos)

■ Vista general

■ Modelos Multithreading

■ Lanzamiento de Threading

■ Pthreads

■ Windows XP Threads

■ Linux Threads

■ Java Threads

Page 2: Cap4

Proceso simple y MultithreadedProceso simple y Multithreaded

Page 3: Cap4

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

Page 4: Cap4

Thread KernelThread Kernel

■ Soportado por el Kernel

■ Ejemplos

● Windows XP/2000

● Solaris

● Linux

● Tru64 UNIX

● Mac OS X

Page 5: Cap4

Modelos MultithreadingModelos Multithreading

■ Muchos a uno

■ Uno a uno

■ Muchos a muchos

Page 6: Cap4

Muchos a unoMuchos a uno

■ Varios threads son mapeados hacia un thread kernel

■ Ejemplos:

● Solaris Green Threads

● GNU Portable Threads

Page 7: Cap4

Modelo muchos a unoModelo muchos a uno

Page 8: Cap4

Uno a unoUno a uno

■ Cada thread es mapeado hacia un thread kernel

■ Ejemplos

● Windows NT/XP/2000

● Linux

● Solaris 9 y anteriores

Page 9: Cap4

Modelo uno a unoModelo uno a uno

Page 10: Cap4

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

Page 11: Cap4

Modelo muchos a muchosModelo muchos a muchos

Page 12: Cap4

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

Page 13: Cap4

Modelo de dos nivelesModelo de dos niveles

Page 14: Cap4

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

Page 15: Cap4

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

Page 16: Cap4

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

Page 17: Cap4

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

Page 18: Cap4

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)

Page 19: Cap4

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

Page 20: Cap4

PthreadsPthreads

■ Estandar POSIX (IEEE 1003.1c) API para la creacion de thread y sincronizacion

■ Comun en UNIX (Solaris, Linux, Mac OS X)

Page 21: Cap4

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)

Page 22: Cap4

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)

Page 23: Cap4

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

Page 24: Cap4

Java ThreadJava Thread

Page 25: Cap4

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