CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Seminaris de CASO, curs 00/01 - 2Q Multithreading in Java Elisa Gonzalez Anna Mª.

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
TEMA 1 Introducción a la Programación Concurrente
Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Curso de Java Capitulo 1: Introducción a Java Profesor:
Programación Interactiva Hilos
Lenguaje de programación Java
Curso de JAVA. Iniciando con las Técnologias Java.
Introducción a Programación Concurrente
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (apunts de l’assignatura en format transparència) Multithreading and.
Tema 12: Programación multihilo
 son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
10. Hilos Definición y ejecución Thread y Runnable
Java. Threads (Hebras) Los sistemas operativos actuales permiten la multitarea, aunque esta se de tiempo compartido cuando se trabaja con un solo procesador.
Lic. Rosemary Torrico Bascopé
Java Mayra M. Méndez Anota.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Tema 6: Clases Antonio J. Sierra.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors JavaOS: an Object-OS Francesco Viganó y Sergi.
Igor Santos Grueiro. Ahora tenemos datos y datos …
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
SCJP Sun Certified Programmer for Java 6
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Unidad III Administración de procesos
Hilos - Lightweight process - Procesos ligeros
Introducción a la Programación. Lenguaje de Máquina.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Proyecto de Programación de Sistemas “Uso de Java Native Interface para envío y recepción de datos por puerto paralelo” Nombre: Ignacio Zamora R. Profesor:
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Curso de Java La tecnología Java
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors JavaOS para el negocio José Manuel García.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
TEMA 2. Programación Concurrente
UTFSM-Electrónica1 Fundamentos de Java Agustín J. González Programación de Sistemas: ELO-330.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David.
Programación de Dispositivos Móviles “Conceptos de J2ME” Rogelio Ferreira Escutia.
Algoritmos y programación 3 - cátedra Fontela Concurrencia.
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
UABJO LIC. EN CONTADURÍA PUBLICA INFOMATICA I MAC SISTEMAS OPERATIVOS
THREADS JAVA Ing. Esp. Ricardo Cujar. HILO Un hilo es un proceso que se está ejecutando en un determinado momento en el sistema operativo. Se les define.
Hilos y Multihilos Un thread (hilo, flujo de control del programa) representa un proceso individual ejecutándose en un sistema. A veces se les llama.
Hilos Java Profesor Elian Rojas Berrocal
Clases “ Es una Abstracción de un elemento del mundo real ”
La llegenda m’ajuda a llegir el mapa.... a interpretar el que diu
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Threads Introducción Modelos Multi-Threading Problemas con Threads Pthreads Threads en Solaris 2 Threads en Windows 2000 Threads en Linux Threads en Java.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Entorno de Trabajo e Introducción a Java Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 1.
Constructores Los constructores inicializan nuestra clase, le dan un estado inicial estable listo para su uso. Siempre que declarábamos una variable numérica.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Tema 1: Concurrencia con Java
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Disseny de la persistència Serialització
Multithreading i sincronització Edgar Ros Ferrer Xavier Farré Barbera
Threads en Java David Gañán Jiménez.
Transcripción de la presentación:

CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Seminaris de CASO, curs 00/01 - 2Q Multithreading in Java Elisa Gonzalez Anna Mª Guitart Jose Ramon Romera Cristina Santos Calles

SEMINARIS DE CASO 2 Índex –Introducció –Creació –Estats d’un thread –Scheduling –Sincronisme –Excepcions –Modelo de hilos en Java –Thread en Linux con Java

SEMINARIS DE CASO 3 Introducció(I) o Java és més que un llenguatge de programació: qualsevol programa en Java pot correr en qualsevol máquina on estigui implementada i intal.lada la Java Virtual Machine (JVM). o Des dels inicis de Java es va pensar disenyar un llenguatge orientat a objectes multitarea. o Quan “s’inicia” la JVM, es crea un nou procés. Dintre d’ell podran correr diversos threads. o Java proporciona dos models de manegar els threads: –Green (Implementació feta a nivell usuari) –Native (Crides es mapejen a la plataforma que hi hagi al sistema)

SEMINARIS DE CASO 4 Introducció (II) o Java proposa un sistema robust i simple per crear, configurar i executar threads: –Molt poques intruccions per managar-ho. Advantages : Facititat d’ús i de revisió de codi (s’evitaran més facilment deadlocks i inanicions). Inconvenients : Menor fexibilitat –Dos maneres de crear-los. o Millor interacció amb l’usuari: –Un programa que usi una interficie gràfica, la JVM automàticament crea un thread per l’execució de mètodes i un pel dibuix de finestres.

SEMINARIS DE CASO 5 Creació(I) o Passos a seguir per extendre la classe Thread : –Extendre la classe java.lang.Thread public class MyThread extends Thread { … } –Sobreescriure el mètode run() a la subclasse public void run(){ System.out.println( getName()); } –Crear una instància d’aquesta subclasse Thread thread1= new MyThread(); –Invocar el mètode start() a la instancia. thread1.start();

SEMINARIS DE CASO 6 Creació(II) o Exemple: public class MyThread extends Thread{ public void run(){ System.out.println(getName()); } public static void main(){ Thread t= new MyThread(); t.start; }

SEMINARIS DE CASO 7 Creació(III) o Extenent la classe Thread es poden heretar mètodes i variables de la classe pare. Però, per restriccions del Java, només es pot extendre una vegada de la classe pare. o Aquesta serà l’opció que s’usarà, normalment, quan creem alguna classe que ninguna altra hereti d’ella. o Però, en alguns casos ens interessarà extendre alguna de les funcionalitats a altres classes. Llavors, haurem de dotar de la qualitat de thread mitjançant interfície Runnable.

SEMINARIS DE CASO 8 Creació(IV) o Passos a seguir per implementar la interfície Runnable: –Definir la capçalera de la classe que implementa la interfície Runnable. public class nom_classe extends nom_clase_a_heretar implements Runnable { …. } –Implemetar el mètode run() i un objecte de tipo Thread que contingui el codi del fluxe concurrent que volem crear. public void run(){ …}

SEMINARIS DE CASO 9 Creació(V) –El constructor de la classe Thread rebra un argument que ha de ser una instància de la classe que implementa la interface Runnable. o Exemple: public class ThreadTest{ public static void main(String args[] { Xyz r = new XYZ(); Thread t = new Thread( r ); } class Xyz implements Runnable { int i;

SEMINARIS DE CASO 10 Creació(VI) public void run(){ while (true){ System.out.println(“Hello” + i++); if (i==50) break; }

SEMINARIS DE CASO 11 Estats d’un thread (I) o Durant la seva vida, un thread pot trobar-se en diferents estats: Bloqueado en la cola wait de un objeto Bloqueado en la cola de bloqueados En ejecución Muerte Otras causas de bloqueo ejecutable nuevo Start() Sleep() o thread join() s o interrupt() Sleep o join Run() completes Synchronized()Lock available Notify() interrupt() wait()

SEMINARIS DE CASO 12 Estats d’un thread (II): Nou Thread o En aquest estat és un thread buit. o El sistema no ha designat cap recurs per ell. o En aquest estat –s’arrenca amb start() –qualsevol altre mètode genera una excepció de tipus : IllegalThreadStateException

SEMINARIS DE CASO 13 Estats d’un thread (III): Parada o S’hi arriba: –Amb la invocació dels mètodes: join() sobre un altre thread Sleep() –Quan el thread es bloqueja per E/S –Quan el thread crida wait() o Recuperació a l’estat executable: –Si està a E/S en acabar l’execució de la comanda d’E/S –Si està adormit passat el temps especificat –Si ha fet un join quan acabi el procés sobre el que ha fet el join

SEMINARIS DE CASO 14 Estats d’un thread (IV): Parada o Recuperació a l’estat executable –Si un thread està esperant per una condició, cada cop que la variable que controla la condició varïi s’ha de fer un notify() o notifyAll()

SEMINARIS DE CASO 15 Estats d’un thread (V): Mort o S’hi arriba: –Quan s’acaba l’execució del run() –Invocant el mètode destroy() del thread

SEMINARIS DE CASO 16 Scheduling (I) o Java té un Scheduler: –Llista de processos que monitoritza tots els threads que s’estan executant en tots els programes. –Decideix quins threads s’executen i quins es troben preparats per a l’execució, en funció de: Prioritat del thread Indicador daemon del thread.

SEMINARIS DE CASO 17 Scheduling(II) o L’scheduler pot seguir un patró preemptiu o no-preemptiu –patró preemptiu: l’scheduler proporciona un segment de temps a cada thread per utilitzar el sistema. En passar l’interval de temps li treu el sistema i el cedeix a un altre thread. –patró no-preemptiu:El thread té assignat el sistema fins que acaba l’execució o fa un E/S, yield() o sleep().

SEMINARIS DE CASO 18 Scheduling(III): Prioritats o El rang de prioritats oscil.la entre 1 i 10 o La prioritat per defecte d’un thread és NORM_PRIORITY (prioritat de 5) o MIN_PRIORITY (prioritat de 1) o MAX_PRIOROTY (prioritat de 10) o Mètode getPriority() per conèixer el valor actual de la prioritat del thread.

SEMINARIS DE CASO 19 Scheduling(IV): Threads daemon o S’anomenen també serveis o S’executen amb prioritat baixa i proporcionen un servei bàsic a un programa quan l’activitat de la màquina és reduida o Exemple: garbage_collector o setDaemon() per passar a ser daemon (abans de l’ start() ) o isDaemon() per saber si és daemon.

SEMINARIS DE CASO 20 Excepcions(I) o Les excepcions ens proporcionen una manera senzilla de matar un thread des d’un altre. o Es generen des d’un punt del codi i ascendeixen als pares d’aquest codi. o Si no es tracten donen un error en temps d’execució i el programa finalitza. o Acaba éssent difícil de controlar, no aconsellable usar en programes grans.

SEMINARIS DE CASO 21 Sincronització(I) o mètodes: –wait(): El mètode wait() es heretat de la classe Object. Proporciona la posibilitat de comunicació entre Threads. Utilització: –Si un thread executa el metode wait d’un objecte, el thread es bloquejarà en la “cua” d’aquest objecte. –El thread no es desbloquejarà fins que un altre thread executi el mètode notify() o notifyAll() Detalls: –L’ordre de bloqueix és irrellevant a l’hora d’extreure de la cua.

SEMINARIS DE CASO 22 Sincronització(II) o mètodes: –notify(): El mètode notify() es heretat de la classe Object. Proporciona la posibilitat de comunicació entre Threads. Utilització: –Si un thread executa el métode notify() d’un objecte, el thread es desbloquejarà un element de la “cua” d’aquest objecte. Detalls: –Els elements de la cua no segueixen cap ordre segons l’inserció, així doncs no podem fer cap suposició sobre el thread que es desbloquejarà.

SEMINARIS DE CASO 23 Sincronització(III) o mètodes: –notifyAll(): El mètode notify() es heretat de la classe Object. Proporciona la posibilitat de comunicació entre Threads. Serveix per desbloquejar tots els threads bloquejats al objecte.

SEMINARIS DE CASO 24 Sincronització(IV) o mètodes: –join(): El mètode join() es heretat de la classe thread. Proporciona la posibilitat de comunicació entre Threads. Utilizació: –Bloqueix el thread actual fins que el thread sobre el que s’ha executat el join() termini.

SEMINARIS DE CASO 25 Modelo de hilos en JAVA(I) o Modelo de programación con hilos en JAVA: –No tenemos el control sobre el modelo de manejo de hilos. –Los detalles se establecen entre JVM y el sistema operativo. –La eleccion del modelo puede ser impuesta por el usuario –green –native Esto fuerza a escribir codigo mas portable( ventaja, desventaja ). o Espacio para manejo de hilos –Java proporciona dos modelos: GREEN NATIVE

SEMINARIS DE CASO 26 Modelo de hilos en JAVA(II) o GREEN –Tienen la API definida por Sun ( igual para todas las plataformas ) –Su implementacion esta hecha con hilos en espacio de usuario. o NATIVOS –Se implementan con el API proporcionada por la plataforma nativa –Windows y Solaris proporcionan API nativa propietarias –Otras plataformas de UNIX proporcionan la API pthreads de POSIX P1003.1c (ISO) –El nivel de implementacion suele ser a nivel Kernel, aunque existen implementaciones a nivel Usuario ( primeras implementaciones en HP-UX )

SEMINARIS DE CASO 27 Modelo de hilos en JAVA(III) o Preempción –DEF: Capacidad del planificador para interrumpir un hilo y introducir otro a ejecutar –Java no requiere preempcion necesariamente, dependera de la implementacion. –Por dicha razon tenemos dos modelos de control de hilos: Modelo donde no hay preempcion y por lo tanto el bloqueo del hilo es voluntario: explicitamente ( read()... ), implicitamente ( Thread.yield() o Thread.sleep()). Modelo donde el hilo puede ser interrumpido en cualquier momento, con lo que se hace necesario el uso de mecanismos de sincronizacion.

SEMINARIS DE CASO 28 Modelo de hilos en JAVA(IV)

SEMINARIS DE CASO 29 Threads en linux con JAVA(I) o Introducción: –Linux incluye la biblioteca POSIX pthread, totalmente operativa. –Toda aplicacón que utilice dicha biblioteca esta utilizando threads en el kernel con preempción. –En Linux la alternancia de threads en el kernel es equiparable a la de espacio usuario, con lo que no se hace necesario modelo en espacio usuario o hibrido. –El mecanismo de manejo de threads se construye con una única llamada a sistema _clone( ), dicha llamada no es visible a programadores JAVA ni es recomendable su utilización en C/C++ (poco transportable).

SEMINARIS DE CASO 30 Threads en linux con JAVA(II) o Introducción: –Debido a la utilizacion de la llamada _clone, cada thread tendrá un ID de proceso, con lo que tendremos 2 consecuencias: El proceso Multithread se muestra con muchas entradas en la lista de procesos ( comando shell ps ), la identificacion entre threads se hace difícil, aunque se pueden intuir mirando : – /proc/ /maps ( mapa de la zona de memoria ), donde los hilos relacionados tendran un mapa identico – /proc/ /status los valores contenidos seran iguales para todos los Vm*. – /proc/ / environ o /proc/ /fds, tendran datos iguales

SEMINARIS DE CASO 31 Threads en linux con JAVA(III) o Introducción: –La tabla de procesos tiene un espacio limitado por defecto a 256 entradas por usuario y 512 en total. – Tendríamos limitado el nº de threads, Aunque se puede aumentar si modificamos en el fichero include/linux/tasks.h los valores de: – NR_TASKS y –MAX_TASKS_PER_USER, entonces podremos soportar hasta 4092 procesos en entornos de Linux ( x86 ) MAKE. Aunque podremos personalizar nuestro kernel el hecho de utilizar muchos threads es signo de programación perezosa y puede llevar a un colapso utilizar metodo de encolamiento.

SEMINARIS DE CASO 32 Threads en linux con JAVA(IV) o Preempcion de hilos en linux –Dado el numero de versiones que hay de la JVM, las posibilidades son diversas: El puerto Blackdown JDK ofrece el manejo de hilos green y nativos: –La version nativa utiliza una planificacion con preempcion –La version de hilos green no la utiliza Otros entornos como Kaffe y gcj pueden variar su comportamiento segun las opciones elegidas en tiempo de configuracion

SEMINARIS DE CASO 33 Threads en linux con Java(V) o Prioridades de hilos –Las prioridades no tienen efecto bajo e JDK en Linux, aunque permite un cierto control sobre prioridades, pero eso solo es posible para procesos ejecutados como usuario root. –El Blackdown ni siquiera intenta establecer prioridades.

SEMINARIS DE CASO 34 Bibliografia o API JDK 1.3 o Manual de usuario y tuturial Java 2 –Agustin Froufe, Ed Ra-Ma o Curso de Java avanzado –Jedi