La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David.

Presentaciones similares


Presentación del tema: "CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David."— Transcripción de la presentación:

1 CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David Sagristà Granollés e6678235@est.fib.upc.es

2 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 2 Un Thread és un flux seqüencial de control inclòs en un procés i usat per aïllar tasques. Un procés pot contenir un o més Threads executant-se concurrentment, i cadascú fent una tasca diferent. Què és?

3 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 3 Cóm es crea? Hi ha dues maneres de crear un Thread:  Crear una instància d’una classe que implementi la interfície RUNNABLE.  Com a extensió de la classe Thread.

4 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 4 Cóm es crea? (Mode 1) [I] Crear una instància d’una classe que implementi la interfície RUNNABLE:  Definir la capçalera de la classe que implementa la interfície Runnable.  Implementar el mètode Run(), i un objecte tipus Thread que contingui el codi del fluxe concurrent que volem crear.  El constructor de la classe Thread rebrà un argument que ha de ser una instància de la classe que implementa la interfície Runnable.

5 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 5 public class ElMeuThread extends Thread { public ElMeuThread (string str) { super(str); } public void run() { for (int i = 0; i<10; i++) { system.out.println (i + “ “ + getName()); try { sleep ((long) (math.random()*1000)); } catch (interruptedException e){} } system.out.println(“FET!!! “ + getName()); } Cóm es crea? (Mode1_exemple) [II]

6 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 6 Cóm es crea? (Mode 2) [III] Extensió de la classe Thread:  Extendre la classe Thread.  Sobrescriure el mètode run() a la subclasse.  Crear una instància de la subclasse.  Invocar el mètode start a la instància.

7 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 7 Cóm es crea? (Mode 2_exemple) [IV] public class ElMeuThread extends Thread { public void run() { system.out.println(getName()); } public static void main() { thread t = new ElMeuThread(); t.start(); }

8 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 8 El cicle de vida [I]

9 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 9 El cicle de vida [II]  A l’estat new, el Thread és un objecte buit, i no té reservat cap recurs de sistema. Desde aquest estat només podem fer un start.  El mètode start genera els recursos de sistema, dur a terme les tasques d’esquedulejat i fa que passi a l’estat runnable.  Al fer les crides al mètode run, el thread passa a estat running.  Desde l’estat running podem anar a un estat de bloqueig, o la mort del thread.  Si l’execució acaba, o s’invoca el mètode destroy del thread, anem a l’estat dead.

10 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 10 El cicle de vida [III]  Hi ha diverses maneres d’entrar i sortir d’un bloqueig (estat not runnable): (entrada al bloqueig. sortida del bloqueig) Invocació del mètode join. Quan acabi el procés sobre el que s’ha fet el join Invocació del mètode sleep. Passat el temps especificat Per entrada/sortida. En acabar l’execució de la comanda E/S Per la crida wait. Quan un thread està esperant per a una condició, quan la variable de control de la condició varii, s’ha de fer un notify o un notify all

11 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 11 Scheduling [I]  L’scheduling està basat en un model de prioritats. Per decidir quin thread s’ha d’executar, l’escheduler es fixa en la prioritat de cadascú i escull el de més alta prioritat.  El mètode Yield es pot usar per permetre a altres mètodes amb la mateixa prioritat poder executar-se.  El rang de prioritats oscil.la entre 1 i 10. Per defecte un thread te prioritat 5.  Amb el mètode setPriority podem modificar la prioritat d’un thread, i amb el mètode getPriority, podem saber quina és la prioritat d’un thread.  La prioritat d’un nou thread és la mateixa del que està en execució.

12 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 12 Scheduling [II] L’scheduler segueix un patró:  Preemptiu, si proporciona un fragment de temps a cada thread per usar el sistema, i en pasar l’intèrval de temps li treu el sistema i el dóna a un altre thread.  No-preemptiu, si el thread té assignat el sistema fins que acaba l’execució, fa una E/S, un yield o un sleep.

13 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 13 Multithreading  El multithreading és la manera d’obtenir, amb rapidesa, concurrència dins un espai de processos.  De vegades els threads són anomenats processos lleugers o contextes d’execució.  Java suporta Multithreading a nivell llenguatge i via rutines de sistema i objectes thread.

14 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 14 Sincronització [I]  A nivell de llenguatge, els mètodes que dins una classe són declarats synchronized, no s’executen de manera concurrent, ho fan sota el control de monitors per asegurar la consistència de les variables.  Cada classe i cada objecte instanciat, tenen el seu propi monitor, que actua en cas de ser necessari.  Per que un objecte sigui Thread-Safe, tot mètode que pugui fer canviar de valor la instància d’una variable, ha de ser declarat synchronized.

15 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 15 Sincronització [II]  Quan un mètode synchronized s’executa, adquireix un monitor sobre l’objecte actual.  El monitor no permet actuar a cap altre mètode sincronitzat, sobre l’objecte.  Quan el mètode acaba, el monitor desapareix, i la resta de mètodes sincronitzats són lliures d’intentar executar-se sobre l’objecte.  Els monitors mantenen un fluxe de comunicació entre threads.

16 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 16 Sincronització [III] Esquema bàsic de monitor: Object obj = new object(); Synchronized(obj) { obj.wait(); }... Synchronized(obj) { obj.notify(); }

17 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 17 Sincronització [IV]  Amb els mètodes wait i notify, podem implementar bloquejos a temps real en Java. Per això usem la classe lock, que implementa un semàfor booleà.

18 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 18 Sincronització [V] Definició de la classe Lock: class Lock extends Object { private boolean m_bLocked = false; public synchronized void lock() { if( m_bLocked ) { do { try { wait(); } catch( Exception e ) { e.printStackTrace(); } } while ( m_bLocked ); } m_bLocked = true; }

19 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 19 Sincronització [VI] Definició de la classe Lock (continua): public synchronized void releaseLock() { if( m_bLocked ) { m_bLocked = false; notify(); } public synchronized boolean isLocked() { return m_bLocked; }

20 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 20 Sincronització [VII] o Exemple de lectors/escriptors solucionat amb classe Lock: import Lock; public class CriticalResourceUsingLocks { private Lock m_readLock = new Lock(); private intm_reading = 0; private Lock m_writeLock = new Lock(); public int read() { int readData = 0; m_readLock.lock(); if( m_reading = = 0 ) m_writeLock.lock(); m_reading++; m_readLock.releaseLock(); // lectura m_readLock.lock(); m_reading--; if( m_reading == 0 ) m_writeLock.releaseLock();

21 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 21 Sincronització [VIII] Exemple de lectors/escriptors solucionat amb classe Lock (continua) : m_readLock.releaseLock(); return readData; } public void write( int x ) { m_writeLock.lock(); // escritura m_writeLock.releaseLock(); }

22 Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 22 Bibliografia o http://java.sun.com/docs/books/tutorial/index.html o http://devcentral.iticentral.com/articles/Java/thread_sync/ o http://developer.java.sun.com/


Descargar ppt "CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David."

Presentaciones similares


Anuncios Google