Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009"

Transcript

1 Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria 19 ottobre 2009

2 Sequenze di esecuzione - 2 Sequenze di esecuzione - 2 Esercizio 1 Sequenze di esecuzione - 2 Dato il seguente programma e le seguenti sequenze di esecuzione, dire quali possono essere prodotte da tale programma e quali no; si suppone sempre una esecuzione atomica dell istruzione printf. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 7 int e = 0; 8 9 void * th_fun1( void * arg){ 10 printf( X - 1\n ); 11 pthread_mutex_lock(& mutexa); 12 e = 1; 13 printf( X - 2\n ); 14 printf( X - 3\n ); 15 pthread_mutex_unlock (& mutexa); 16 printf( X - 4\n ); 17 return NULL; 18 } 19 void * th_fun2( void * arg){ 20 printf( Y - 1\n ); 21 while(e == 0) 22 ; 23 pthread_mutex_lock(& mutexa); 24 printf( Y - 2\n ); 25 pthread_mutex_unlock (& mutexa); 26 printf( Y - 3\n ); 27 return NULL; 28 } 29 int main( int argc, char * argv[]){ 30 pthread_t th1, th2; 31 int d; pthread_create(& th1, NULL, th_fun2, NULL); 34 pthread_create(& th2, NULL, th_fun1, NULL); pthread_join(th1, NULL); 37 pthread_join(th2, NULL); return 0; 40 } Con la variabile e si garantisce che la sezione critica di th_fun2 venga eseguita dopo la sezione critica di th_fun1, per cui tutte le tracce di esecuzione in cui Y-2 e eseguita dopo la sequenza X 2, X 3 sono valide. Notare che questo include anche la serializzazione del thread th_fun1 seguito dal thread th_fun2.

3 Race-Condition Race-Condition Esercizio 2 Race-Condition Identificare le race-conditions presenti nel seguente programma e modificare quest ultimo in modo tale da risolvere il seguente problema: Due persone (P1 e P2) diverse devono maneggiare due conti in banca (C1 e C2): P1 deve depositare 10 in C1 e prelevare 20 da C2; P2 deve depositare 40 in C1 e 20 in C2. Notare che i due conti in banca devono poter essere maneggiati separatamente. Risolvere il problema sostituendo a? lock o unlock e a il nome del mutex relativo. # include <stdlib.h> # include <stdio.h> # include <pthread.h> pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; int conto1 = 100; int conto2 = 100; void * persona1( void * arg){ pthread_mutex_?(& ); conto1 += 10; pthread_mutex_?(& ); pthread_mutex_?(& ); conto2 -= 20; pthread_mutex_?(& ); return NULL; } void * persona2( void * arg){ pthread_mutex_lock(& ); conto2 += 20; pthread_mutex_unlock (& ); pthread_mutex_?(& ); conto1 += 40; pthread_mutex_?(& ); return NULL; } int main( int argc, char * argv[]){ pthread_t th1, th2; pthread_create(& th1, NULL, persona1, NULL); pthread_create(& th2, NULL, persona2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); } return 0;

4 Race-Condition Race-Condition Soluzione La race condition esiste per il fatto che entrambi i conti correnti sono modificati in parallelo da entrambe le persone. Per correggere il problema è necessario proteggere l accesso ai conti in banca con due mutex, uno per ogni conto corrente. # include <stdlib.h> # include <stdio.h> # include <pthread.h> pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; int conto1 = 100; int conto2 = 100; void * persona1( void * arg){ pthread_mutex_lock(& mutexa); conto1 += 10; pthread_mutex_unlock (& mutexa); pthread_mutex_lock(& mutexb); conto2 -= 20; pthread_mutex_unlock (& mutexb); return NULL; } void * persona2( void * arg){ pthread_mutex_lock(& mutexb); conto2 += 20; pthread_mutex_unlock (& mutexb); pthread_mutex_lock(& mutexa); conto1 += 40; pthread_mutex_unlock (& mutexa); return NULL; } int main( int argc, char * argv[]){ pthread_t th1, th2; pthread_create(& th1, NULL, persona1, NULL); pthread_create(& th2, NULL, persona2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); } return 0;

5 Deadlock con Mutex - 1 Deadlock con Mutex - 1 Esercizio 3 Deadlock con Mutex - 1 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. Ricordasi che, usando i mutex, sia ha possibilità di deadlock nel caso due o più thread diversi acquisiscano due o più mutex in ordine diverso, con tali sequenze di acquisizione innestate una dentro l altra; questa è la situazione più comune, ma non l unica, attravero la quale si può avere una situazione di deadlock. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; 7 8 void * thread1( void * arg){ 9 pthread_mutex_lock(& mutexa); 10 pthread_mutex_lock(& mutexb); 11 printf( Sono il thread_1\n ); 12 pthread_mutex_unlock (& mutexb); 13 pthread_mutex_unlock (& mutexa); 14 return NULL; 15 } 16 void * thread2( void * arg){ 17 pthread_mutex_lock(& mutexb); 18 pthread_mutex_lock(& mutexa); 19 printf( Sono il thread_2\n ); 20 pthread_mutex_unlock (& mutexa); 21 pthread_mutex_unlock (& mutexb); 22 return NULL; 23 } int main( int argc, char * argv[]){ 26 pthread_t th1, th2; pthread_create(& th1, NULL, thread1, NULL); 29 pthread_create(& th2, NULL, thread2, NULL); 30 pthread_join(th1, NULL); 31 pthread_join(th2, NULL); return 0; 34 } Si può facilmente identificare la situazione che porta alla generazione di un deadlock: thread1 blocca mutexa e contemporaneamente thread2 blocca mutexb; nessuno dei due thread potrà più procedere, in quanto thread1 aspetta che venga sbloccato mutexb da thread2 e thread2 che venga sbloccato mutexa da thread1.

6 Deadlock con Mutex - 2 Deadlock con Mutex - 2 Esercizio 4 Deadlock con Mutex - 2 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; 7 8 void foo( int val){ 9 pthread_mutex_lock(& mutexb); 10 val *= 2; 11 if( val > 4) 12 pthread_mutex_unlock (& mutexb); 13 } void * thread1( void * arg){ 16 pthread_mutex_lock(& mutexa); 17 foo(( int) arg); /* Invocato con 2, non sblocchera mutex B */ 18 pthread_mutex_unlock (& mutexa); 19 if(( int) arg < 2) 20 pthread_mutex_unlock (& mutexb); /* non sblocca B */ 21 pthread_mutex_lock(& mutexa); /* Attende A */ 22 printf( Sono alla fine del thread1\n ); 23 pthread_mutex_unlock (& mutexa); 24 return NULL; 25 } 26 void * thread2( void * arg){ 27 pthread_mutex_lock(& mutexa); 28 pthread_mutex_lock(& mutexb); /* Attesa infinita su B */ 29 printf( Sono alla fine del thread2\n ); 30 pthread_mutex_unlock (& mutexb); 31 pthread_mutex_unlock (& mutexa); 32 return NULL; 33 } int main( int argc, char * argv[]){ 36 pthread_t th1, th2; pthread_create(& th1, NULL, thread1, ( void *) 2); 39 pthread_create(& th2, NULL, thread2, NULL); 40 pthread_join(th1, NULL); 41 pthread_join(th2, NULL); return 0; 44 }

7 Deadlock con Semafori - 1 Deadlock con Semafori - 1 Questo programma è stato chiaramente strutturato male, in quanto thread1 non libererà mai la risorsa mutexb nel caso l argomento val della funzione foo sia uguale a 2. In questo caso, se thread1 blocca mutexb prima che lo faccia thread2, quest ultimo resterà bloccato in attesa che venga liberato, cosa che non accadrà mai. Il grafo di attesa e mostrato in figura 1. Figura 1: Grafo di attesa. Esercizio 5 Deadlock con Semafori - 1 Un deadlock dovuto ad accesso sincronizzato alle risorse puo in generale verificarsi se: Mutua esclusione: almeno una delle risorse del sistema deve essere non condivisibile (ossia usata da un processo alla volta oppure libera). Possesso ed attesa: i processi che possiedono almeno una risorsa, devono attendere prima di richiederne altre (gia allocate ad altri processi). Impossibilita di prelazione: solo il processo che detiene la risorsa puo rilasciarla. Attesa circolare. Un semaforo puo essere visto come un tipo particolare di risorsa quando e usato come un mutex (range contatore 0,1). Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 7 sem_t sem; 8 9 int c,e = 0;

8 Deadlock con Semafori - 1 Deadlock con Semafori void * th_fun1( void * arg){ 12 int i = 0; 13 for(i = 0; i < ( int) arg; i++){ 14 pthread_mutex_lock(& mutexa); 15 sem_wait(& sem); 16 pthread_mutex_unlock (& mutexa); 17 } 18 return NULL; 19 } 20 void * th_fun2( void * arg){ 21 int i = 0; 22 for(i = 0; i < ( int) arg; i++){ 23 pthread_mutex_lock(& mutexa); 24 sem_post(& sem); 25 pthread_mutex_unlock (& mutexa); 26 } 27 return NULL; 28 } 29 int main( int argc, char * argv[]){ 30 pthread_t th1, th2; sem_init(& sem, 0, 0); 33 pthread_create(& th1, NULL, th_fun1, ( void *) 3); 34 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, NULL); 37 pthread_join(th2, NULL); return 0; 40 } É presente un deadlock nel caso l istruzione sem_wait si blocca perchè il semaforo è vuoto; in una tale situazione, th_fun1 aspetta th_fun2, ma, nello stesso momento, th_fun2 è bloccato in attesa che mutexa venga rilasciato da th_fun1. Il grafo di attesa e mostrato in figura 2. Figura 2: Grafo di attesa.

9 Deadlock con Semafori - 2 Deadlock con Semafori - 2 Esercizio 6 Deadlock con Semafori - 2 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 sem_t sem_vuoto1; 7 sem_t sem_pieno1; 8 9 sem_t sem_vuoto2; 10 sem_t sem_pieno2; int coda1; 13 int coda2; void * th_fun1( void * arg){ 16 sem_wait(& sem_vuoto1); 17 sem_wait(& sem_pieno2); 18 coda1 = rand(); 19 printf( Il valore della coda2 e %d\n, coda2); 20 sem_post(& sem_pieno1); 21 sem_post(& sem_vuoto2); 22 return NULL; 23 } 24 void * th_fun2( void * arg){ 25 sem_wait(& sem_vuoto2); 26 sem_wait(& sem_pieno1); 27 coda2 = rand(); 28 printf( Il valore della coda1 e %d\n, coda1); 29 sem_post(& sem_pieno2); 30 sem_post(& sem_vuoto1); 31 return NULL; 32 } 33 int main( int argc, char * argv[]){ 34 pthread_t th1, th2; sem_init(& sem_vuoto1, 0, 0); 37 sem_init(& sem_vuoto2, 0, 0); 38 sem_init(& sem_pieno1, 0, 1); 39 sem_init(& sem_pieno2, 0, 1); 40 pthread_create(& th1, NULL, th_fun1, ( void *) 3); 41 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, NULL); 44 pthread_join(th2, NULL); return 0;

10 Deadlock con Semafori - 3 Deadlock con Semafori } Nessuno dei due thread riesce a procedere in quanto entrambi devono aspettare che l altro thread faccia l incremento di sem_vuoto. Esercizio 7 Deadlock con Semafori - 3 Indicare se nell esercizio 5 sono presenti deadlock se il semaforo e inizializzato a 1. Esercizio 8 Valore Variabili - 1 Dato il seguente programma, riempire la tabella in figura 3 segnando il valore delle variabili in corrispondenza degli statement indicati. Il valore di una variabile puo essere indicato come: Intero, carattere, stringa, se univocamente individuabile. NE: se la variabile non esiste. UND: se la variabile esiste ma non e stata ancora inizializzata. Nel caso in cui una variabile puo avere massimo due valori V1 e V2 indicare il valore come V1/V2. Per i casi in cui la variabile puo avere piu di due valori utilizzare il simbolo UNK. Con l etichetta Dopo Linea X si intende il valore (o i valori) assumibili dalla variabile tra lo statement X e lo statement next(x) all interno dello stesso thread. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 7 int c = 0, e = 0; 8 9 void * th_fun1( void * arg){ 10 int a = 0, b = ( int) arg; 11 pthread_mutex_lock(& mutexa); 12 e = 1; 13 a = b + c; 14 pthread_mutex_unlock (& mutexa); 15 return ( void *) a; 16 } 17 void * th_fun2( void * arg){ 18 while(e == 0) 19 ; 20 pthread_mutex_lock(& mutexa); 21 c = (( int) arg)*2;

11 Valore Variabili - 2 Valore Variabili pthread_mutex_unlock (& mutexa); 23 return ( void *) c; 24 } 25 int main( int argc, char * argv[]){ 26 pthread_t th1, th2; 27 int d; pthread_create(& th1, NULL, th_fun1, ( void *) 3); 30 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, (void *)&d); 33 pthread_join(th2, (void *)&d); return 0; 36 } Thread Dopo Linea Valore delle Variabili a b c d e th1 12 th1 13 th1 14 th2 22 main 32 main 33 Figura 3: Tabella iniziale. Thread Dopo Linea Valore delle Variabili a b c d e th UND 1 th UND 1 th (prima di riga 21)/8 (dopo) UND 1 th2 22 3/NE 3 /NE 8 UND/3 1 main 32 NE NE 0 (prima di riga 21)/8 (dopo) 3 1 main 33 NE NE Figura 4: Tabella finale coi valori delle variabili. Esercizio 9 Valore Variabili - 2 Dato il seguente programma: disegnare un grafo di sincronizzazione fra i thread (P0, F1, F2, N1, N2, N3, N4). Il grafo di sincronizzazione è composto da:

12 Valore Variabili - 2 Valore Variabili - 2 cerchi, rappresentanti i thread; frecce uni-direzionali, da un thread T1 ad un thread T2, quando T1 esegue un post su almeno uno dei semafori su cui T2 è in attesa; frecce bi-direzionali, tra un thread T1 e un thread T2, quando T1 esegue un post su almeno uno dei semafori su cui T2 è in attesa e, viceversa, T2 esegue un post su almeno uno dei semafori su cui T1 è in attesa. riempire la tabella dei valori delle variabili (Figura 5) segnando il valore di ciascuna variabile in corrispondenza degli statement indicati. Il valore di una variabile o semaforo può essere indicato come: Intero, carattere, stringa, se univocamente individuabile. NE: se la variabile non esiste. UND: se la variabile esiste ma non è stata ancora inizializzata. UNK: se la variabile può avere più di uno valore. Prestare attenzione all etichetta Condizione. In particolare, con Subito dopo statement X si intende il valore (o i valori) assumibili dalle variabili tra lo statement X e lo statement immediatamente successivo all interno del thread indicato nella condizione stessa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 # define NSEM 7 7 # define DELAY sleep( rand()%2) sem_t sem_start[ NSEM]; 11 sem_t sem_stop[ NSEM]; 12 int ret_status[ NSEM]; void *P( void * arg) 15 { 16 int base = ( int) arg; 17 int alfa; 18 int status; 19 int index; 20 sem_wait(&sem_start[base]); 21 for( alfa =0; alfa <=1; alfa ++) 22 { 23 int off = ( base ==0)? 3 : 1; 24 index = base +1+ off* alfa; 25 sem_post(&sem_start[index]); 26 if( alfa ==1)

13 Valore Variabili - 2 Valore Variabili { 28 sem_wait(&sem_stop[index]); 29 status = ret_status[ index]; 30 } /* STATEMENT A */ 31 } 32 index = base + 1; 33 sem_wait(&sem_stop[index]); 34 status = ret_status[ index]; /* STATEMENT B */ 35 ret_status[ base]= ( alfa); 36 sem_post(&sem_stop[base]); 37 } void *N( void * arg) 40 { 41 int tid= ( int) arg; 42 sem_wait(& sem_start[( int) tid]); 43 ret_status[ tid]= ( tid % 2)? 4 : 3; 44 sem_post(& sem_stop[( int) tid]); /* STATEMENT C */ 45 } int main( int argc, char * argv[]){ 49 pthread_t th_p, th_f1, th_f2; 50 pthread_t th_n1, th_n2, th_n3, th_n4; 51 int i; 52 for(i=0; i<nsem;i++) 53 { 54 sem_init(& sem_start[i],0,0); 55 sem_init(& sem_stop[i],0,0); 56 } 57 srand(time(null)); pthread_create(& th_p0, NULL, P, ( void *) 0); /* P0 */ 60 pthread_create(& th_f1, NULL, P, ( void *) 1); /* F1 */ 61 pthread_create(& th_f2, NULL, P, ( void *) 4); /* F2 */ pthread_create(& th_n1, NULL, N, ( void *) 2); /* N1 */ 64 pthread_create(& th_n2, NULL, N, ( void *) 3); /* N2 */ 65 pthread_create(& th_n3, NULL, N, ( void *) 5); /* N3 */ 66 pthread_create(& th_n4, NULL, N, ( void *) 6); /* N4 */ sem_post(& sem_start [0]); 69 sem_wait(& sem_stop [0]); pthread_join( th_p0, NULL); 72 pthread_join( th_f1, NULL); 73 pthread_join( th_f2, NULL); pthread_join( th_n1, NULL); 76 pthread_join( th_n2, NULL); 77 pthread_join( th_n3, NULL);

14 Valore Variabili - 2 Valore Variabili pthread_join( th_n4, NULL); return 0; 81 } Thread Thread ID Condizione Variabili alfa status sem_stop[6] P0 th_p0 subito dopo statement A in F1 (prima iterazione) P0 th_p0 subito dopo statement A in F2 (prima iterazione) P0 th_p0 subito dopo statement B F1 th_f1 subito dopo statement C in N2 F1 th_f1 subito dopo statement B F2 th_f2 subito dopo statement C in N3 F2 th_f2 subito dopo statement B Figura 5: Tabella dei valori delle variabili. Soluzione Grafo di sincronizzazione. Il grafo connette con delle freccie bi-direzionali P0 a (F1, F2), F2 a (N1, N2) ed F3 a (N3, N4), ed è mostrato in Figura 6. Figura 6: Grafo di sincronizzazione. Notare che gli indici index all interno dell array dei semafori e lo stato di ritorno (ret_status) sono legati ai thread secondo la tabella in Figura 7. La struttura di sincronizzazione in pratica è tale per cui P0, F1 ed F2 fanno partire due thread ciascuno tramite un post sul semaforo sem_start, aspettando la loro terminazione in ordine inverso (attesa su sem_stop). Quindi, P0 fa partire F1 ed F2 e poi attende che termini prima F2 seguito da F1. F1 fa partire N1 ed N2 aspettando che termini prima N2 e poi N1. Infine F2 fa partire N3 ed N4 aspettando che termini prima N4 poi N3.

15 Valore Variabili - 2 Valore Variabili - 2 thread P0 F1 N1 N2 F2 N3 N4 index ret_status Figura 7: Indice e stato di ritorno di ciascun thread. Valore delle variabili. La soluzione sara disponibile venerdi 23 ottobre.

Programmazione di concorrente - Deadlock

Programmazione di concorrente - Deadlock Programmazione di concorrente - Deadlock Prof. Gerardo Pelosi & Ing. Michele Scandale 30 Ottobre 2014 Il materiale illustrato a lezione e in queste note contiene anche esempi di Fabrizio Castro, Luca Fossati,

Dettagli

Architetture dei Calcolatori e Sistemi Operativi

Architetture dei Calcolatori e Sistemi Operativi Prof. Gerardo Pelosi & Ing. Michele Scandale 30 Ottobre 2014 Gerardo Pelosi 1 Esercizio 1 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare

Dettagli

Programmazione concorrente

Programmazione concorrente Programmazione concorrente Prof. Gerardo Pelosi & Ing. Michele Scandale 16 Ottobre 2014 Il materiale illustrato a lezione e in queste note contiene anche esempi di Fabrizio Castro, Luca Fossati, Vittorio

Dettagli

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P3 Programmazione concorrente 2/12/2015 programmazione concorrente 1 modello di esecuzione sequenziale istruzioni eseguite in ordine predeterminabile in base

Dettagli

istruzioni eseguite in ordine predeterminabile in base al codice del programma e dei valori dei dati in ingresso

istruzioni eseguite in ordine predeterminabile in base al codice del programma e dei valori dei dati in ingresso Programmazione Concorrente sequenze critiche e mutua esclusione istruzioni atomiche deadlock sincronizzazione e semafori settembre 2009 programmazione concorrente 1 modello di esecuzione sequenziale istruzioni

Dettagli

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 21 Martedì 10-01-2017 Sincronizzazione tra thread Per risolvere problemi

Dettagli

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix).

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix). Threads nel S.O. Linux Il thread è un processo leggero che può condividere uno spazio di indirizzi (o parte di esso) con il padre e gli altri processi della gerarchia cui appartiene. Realizzato a livello

Dettagli

Esercizi di mutua esclusione e sincronizzazione

Esercizi di mutua esclusione e sincronizzazione Esercizi di mutua esclusione e sincronizzazione Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 1 Chi sono Dottorando in Ingegneria Informatica (3 anno) Il vostro esercitatore di ACSO per

Dettagli

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016 Esercitazione 2! Mutex e semafori POSIX 3 Novembre 2016 Strumenti di sincronizzazione nella libreria LinuxThread I semafori nelle librerie pthread e LinuxThreads La libreria pthread definisce soltanto

Dettagli

Esercitazione 2 Sincronizzazione con semafori. 31 Ottobre 2013

Esercitazione 2 Sincronizzazione con semafori. 31 Ottobre 2013 Esercitazione 2 Sincronizzazione con semafori 31 Ottobre 2013 Strumenti di sincronizzazione nella libreria LinuxThread e nel linguaggio Java I semafori nelle librerie pthread e LinuxThreads La libreria

Dettagli

Esercizio 1 - nucleo e commutazione tra processi

Esercizio 1 - nucleo e commutazione tra processi Esercizio 1 - nucleo e commutazione tra processi / programma CODICE.c / int main ( ) {... fd = open( /acso/file_prova, ORDWR) pid = fork ( ); if (pid == 0) {/ codice eseguito da F1 / execl ( /acso/prog_x,

Dettagli

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads I thread nel sistema operativo LINUX: Linuxthreads : Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int flags, void

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 18 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche

Dettagli

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo Sistemi operativi ì Corso di Laurea Triennale in Ingegneria Informatica Lezione 7 Mutex Condition Esempi di utilizzo Domande sulle lezioni passate? Sommario ì Sincronizzazione ì Mutex ì Variabili condition

Dettagli

Cosa sono i semafori?

Cosa sono i semafori? Semafori Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 19 febbraio 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Sincronizzazione di thread POSIX

Sincronizzazione di thread POSIX Sincronizzazione di thread POSIX Sincronizzazione I thread condividono la memoria Rischio di race condition Necessari meccanismi di sincronizzazione mutex (semaforo binario) condition variable I mutex

Dettagli

Architetture dei Calcolatori e Sistemi Operativi

Architetture dei Calcolatori e Sistemi Operativi Prof. Gerardo Pelosi & Ing. Michele Scandale 23 Ottobre 2014 Gerardo Pelosi 1 Esercizio 1 Quattro amici fanno una scommessa: il vincitore sceglie casualmente a chi tocca bere

Dettagli

= PTHREAD_MUTEX_INITIALIZER

= PTHREAD_MUTEX_INITIALIZER MUTEX Prof.ssa Sara Michelangeli Quando si programma in modalità concorrente bisogna gestire le problematiche di accesso alle eventuali sezioni critiche. Una sezione critica è una sequenza di istruzioni

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 8 settembre 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Cosa sono i semafori?

Cosa sono i semafori? Mutex Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 13 Giovedì 16-11-2017 Variabili condizione (condition) La variabile condizione

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 22 Giovedì 12-01-2017 1 Un esempio di sincronizzazione tra thread Risolviamo

Dettagli

Semafori. Semafori classici con i thread POSIX 2

Semafori. Semafori classici con i thread POSIX 2 Semafori classici Semafori I semafori sono primitive, implementate attraverso dei contatori, fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Per queste primitive

Dettagli

AXO Architettura dei Calcolatori e Sistemi Operativi

AXO Architettura dei Calcolatori e Sistemi Operativi olitecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe elagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 12 Martedì 14-11-2017 System call per l'uso dei segnali Un processo che

Dettagli

Esercitazione n.1! 23 Ottobre Obiettivi: Introduzione alla programmazione pthreads:

Esercitazione n.1! 23 Ottobre Obiettivi: Introduzione alla programmazione pthreads: Esercitazione n.1! 23 Ottobre 2017 Obiettivi: Introduzione alla programmazione pthreads: Gestione thread posix: creazione: pthread_create terminazione: pthread_exit join: pthread_join Sincronizzazione

Dettagli

Sincronizzazione di thread POSIX

Sincronizzazione di thread POSIX Sincronizzazione di thread POSIX Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2004-2005 Walter Crescenzi(Universita di Roma 3).

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 4 settembre 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 4 luglio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti

Dettagli

I thread nel sistema operativo LINUX: Linuxthreads

I thread nel sistema operativo LINUX: Linuxthreads I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int

Dettagli

GESTIONE DEI PROCESSI E DEI THREADS IN UN SISTEMA LINUX (PARTE 3) 1

GESTIONE DEI PROCESSI E DEI THREADS IN UN SISTEMA LINUX (PARTE 3) 1 Pietro Pino (pepy91) GESTIONE DEI PROCESSI E DEI THREADS IN UN SISTEMA LINUX (PARTE 3) 4 July 2013 I SEMAFORI La causa della maggior parte dei bugs che coinvolgono i threads è che i threads accedono agli

Dettagli

Sincronizzazione fra processi

Sincronizzazione fra processi Sincronizzazione fra processi Mutex Semafori 3.1 Mutex Tutte le variabili e le risorse condivise vanno protette mediante una qualche forma di sincronizzazione. Senza sincronizzazione, applicazioni concorrenti

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 16 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013 Esercizio sul Monitor Ponte con utenti grassi e magri 11 Novembre 2013 1 Ponte con utenti grassi e magri Si consideri un ponte pedonale che collega le due rive di un fiume. Al ponte possono accedere due

Dettagli

Thread thread lightweight process

Thread thread lightweight process Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

I thread nel sistema operativo LINUX: Linuxthreads

I thread nel sistema operativo LINUX: Linuxthreads I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 9 luglio 2012 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti

Dettagli

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread: Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Sincronizzazione I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Introduzione Le soluzioni Software sono complesse da utilizzare dal punto di vista del programmatore

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

" &$ () " ) ) $ ' () *) " ) $

 &$ ()  ) ) $ ' () *)  ) $ %&! "# $ #include int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]: %s\n", i, argv[i] ); 1 2 " &$ cc cc program.c a.out pippo pluto topolino argv[0]: a.out

Dettagli

il tipo di parallelismo dipende dal grado di cooperazione

il tipo di parallelismo dipende dal grado di cooperazione Thread Settembre 2009 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio d informazione) necessario tra attività svolte in parallelo processo macchina virtuale

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 6 settembre 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

I THREAD. thread 2. thread 1

I THREAD. thread 2. thread 1 I THREAD Un thread è un singolo flusso di istruzioni, all interno di un processo, che lo scheduler può fare eseguire separatamente e concorrentemente con il resto del processo. Per fare questo uno thread

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 10 Martedì 7-11-2017 Thread a livello kernel Modello da uno a uno La

Dettagli

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività

Dettagli

Problemi con la concorrenza. Sincronizzazione di processi e thread (1) Problemi con la concorrenza. Il problema della concorrenza

Problemi con la concorrenza. Sincronizzazione di processi e thread (1) Problemi con la concorrenza. Il problema della concorrenza Sincronizzazione di processi e thread (1) Problemi con la concorrenza #define NITER 1000000 int count = 0; void *ThreadAdd(void *); /*thread s function prototype */ int main(int argc, char * argv[]) pthread_t

Dettagli

Esercitazione E9 Sincronizzazione

Esercitazione E9 Sincronizzazione Esercitazione E9 Sincronizzazione Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi

Dettagli

Esercizio monitor con pthreads

Esercizio monitor con pthreads Esercizio monitor con pthreads Si consideri la pista di pattinaggio sul ghiaccio di una località turistica montana. La pista di pattinaggio è aperta a tutti. In particolare i clienti dell impianto si suddividono

Dettagli

AXO Architettura dei Calcolatori e Sistemi Operativi

AXO Architettura dei Calcolatori e Sistemi Operativi Politecnico di Milano Dipartimento di Elettronica, Informazione e Bioingegneria prof.ssa Anna Antola prof. Luca Breveglieri prof. Roberto Negrini prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa

Dettagli

AXO Architettura dei Calcolatori e Sistemi Operativi

AXO Architettura dei Calcolatori e Sistemi Operativi Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 21 settembre 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere

Dettagli

Mutua esclusione. Una variabile condizione non fornisce la mutua esclusione. C'è bisogno di un mutex per poter sincronizzare l'accesso ai dati.

Mutua esclusione. Una variabile condizione non fornisce la mutua esclusione. C'è bisogno di un mutex per poter sincronizzare l'accesso ai dati. Mutua esclusione Una variabile condizione non fornisce la mutua esclusione. C'è bisogno di un mutex per poter sincronizzare l'accesso ai dati. Sincronizzazione Una variabile condition è sempre associata

Dettagli

LinuxThreads. LinuxThreads: monitor & variabili condizione

LinuxThreads. LinuxThreads: monitor & variabili condizione LinuxThreads Variabili Condizione LinuxThreads: monitor & variabili condizione Lo standard POSIX 1003.1c (libreria ) non implementa il costrutto Monitor ma implementa i mutex implementa le variabili

Dettagli

Corso: Sistemi Operativi

Corso: Sistemi Operativi Sistemi Operativi Lez. 15: multithreading con Pthreads 1 Pthreads: POSIX Threads Pthreads insieme standard di funzioni C per la programmazione multithreaded IEEE Portable Operating System Interface, POSIX,

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 12 Giovedì 15-11-2018 Un esempio di sincronizzazione tra thread Risolviamo

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 9 Martedì 6-11-2018 I thread nello standard POSIX: la libreria pthreads

Dettagli

Linuxthreads: esercizio

Linuxthreads: esercizio Linuxthreads: esercizio Esercizio Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato (Npiccole,

Dettagli

Monitor pthreads. Esercizio

Monitor pthreads. Esercizio Monitor pthreads Esercizio Esercizio monitor Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 13 luglio 2016 (Traccia A) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine

Dettagli

Obiettivi: Esercitazione n.1! 26 Ottobre Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads:

Obiettivi: Esercitazione n.1! 26 Ottobre Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads: Esercitazione n.1! 26 Ottobre 2016 Obiettivi: Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads: creazione: pthread_create terminazione: pthread_exit join: pthread_join

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 17 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche

Dettagli

Esempio: la Toilette Unisex

Esempio: la Toilette Unisex Esempio: la Toilette Unisex Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando i semafori forniti dalla libreria LinuxThreads, si realizzi un'applicazione concorrente

Dettagli

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere

Dettagli

Esercitazione [2] Concorrenza

Esercitazione [2] Concorrenza Esercitazione [2] Concorrenza Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Dettagli

Tipi di POSIX Semaphores

Tipi di POSIX Semaphores Semafori POSIX Sono una particolare implementazione dei semafori. Possono svolgere il ruolo di semafori binari o generali (n-ari) a seconda di quale valore viene loro assegnato all'atto della inizializzazione

Dettagli

AXO Architettura dei Calcolatori e Sistemi Operativi

AXO Architettura dei Calcolatori e Sistemi Operativi Politecnico di Milano Dipartimento di Elettronica, Informazione e Bioingegneria prof.ssa Anna Antola prof. Luca Breveglieri prof. Roberto Negrini prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa

Dettagli

Sistemi Operativi. Bruschi Monga Re. Concorrenza Semafori. Sincronizzazione con monitor pthreads. Sistemi Operativi. Bruschi Monga Re.

Sistemi Operativi. Bruschi Monga Re. Concorrenza Semafori. Sincronizzazione con monitor pthreads. Sistemi Operativi. Bruschi Monga Re. 1 Mattia Monga Lezione XVI: Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2016/17 1 cba 2008 17 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo

Dettagli

Thread Posix. Agenda. Introduzione Libreria thread. Esempi ed esercizi

Thread Posix. Agenda. Introduzione Libreria thread. Esempi ed esercizi Thread Posix Agenda Introduzione Libreria thread Creazione e terminazione di thread Sincronizzazione tra thread Variabili condition cenni Esempi ed esercizi 2 Fonti POSIX Thread Programming http://www.llnl.gov/computing/tutorials/worksh

Dettagli

AXO Architettura dei Calcolatori e Sistemi Operativi

AXO Architettura dei Calcolatori e Sistemi Operativi Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura

Dettagli

Seminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica

Seminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica Seminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica Ing. Francesco Restuccia E-mail: f.restuccia@studenti.unipi.it Pervasive Computing & Networking Lab (PerLab)

Dettagli

Esercitazione [3] Sincronizzazione inter-processo

Esercitazione [3] Sincronizzazione inter-processo Esercitazione [3] Sincronizzazione inter-processo Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi

Dettagli

Qualche esercizio. E. Mumolo

Qualche esercizio. E. Mumolo Qualche esercizio E. Mumolo Chiamate di sistema per la gestione processi in Linux fork, wait, waitpid, exec implementazione di grafi delle precedenze Chiamate di sistema per la gestione dei Segnali in

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi Laboratorio di Sistemi Operativi LAB5 System call per gestione semafori 2002/2003 Pagani Trentini Slide 1 Agenda Linux strutture pthread_t, sem_t pthread_create, pthread_exit, sem_init, sem_post, sem_wait,

Dettagli

Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica

Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica Ing. Simone Brienza E-mail: simone.brienza@for.unipi.it Pervasive Computing & Networking Lab (PerLab) http://www.perlab.it

Dettagli

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int

Dettagli

Sistemi Operativi 1. Mattia Monga. a.a. 2017/18. Dip. di Informatica Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. a.a. 2017/18. Dip. di Informatica Università degli Studi di Milano, Italia 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2017/18 1 cba 2008 18 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 7 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Threads Un thread è l unità di base per l utilizzo della CPU. Composto

Dettagli

Introduzione ai POSIX Threads (libreria Pthread) E.Mumolo, DIA.

Introduzione ai POSIX Threads (libreria Pthread) E.Mumolo, DIA. Introduzione ai POSIX Threads (libreria Pthread) E.Mumolo, DIA mumolo@units.it Modello implementativo dei Thread Architettura Gestiti da librerie utente Processo1 Processo2 Processo3 Processo4 Processo5

Dettagli

Thread. Contiene lucidi tratti da: Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II),

Thread. Contiene lucidi tratti da: Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), Thread Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2005-2007 Thread processi leggeri un processo può avere diversi thread i thread

Dettagli

3.2 Concorrenza, parallelismo e parallelismo reale

3.2 Concorrenza, parallelismo e parallelismo reale 3. PROGRAMMAZIONE CONCORRENTE 3.1 Introduzione La programmazione usuale si basa su un modello di esecuzione sequenziale, cioè sull ipotesi che le istruzioni di un programma vengano eseguite una dopo l

Dettagli

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) { JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 26 giugno 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -

Dettagli

Il semaforo. Strumento linguistico di basso livello per risolvere problemi di sincronizzazione.

Il semaforo. Strumento linguistico di basso livello per risolvere problemi di sincronizzazione. Il semaforo 1 Il semaforo Strumento linguistico di basso livello per risolvere problemi di sincronizzazione. Il meccanismo semaforico e` normalmente utilizzato a livello di macchina concorrente per realizzare

Dettagli

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione

Dettagli

Esercitazione [4] Produttore/Consumatore

Esercitazione [4] Produttore/Consumatore Esercitazione [4] Produttore/Consumatore Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 14 luglio 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli