Cap4

466 views
389 views

Published on

esta presentacion es de l clase 4 de ingenieria

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
466
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cap4

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

×