Architetture dei Calcolatori e Sistemi Operativi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Architetture dei Calcolatori e Sistemi Operativi"

Transcript

1 Prof. Gerardo Pelosi & Ing. Michele Scandale 30 Ottobre 2014 Gerardo Pelosi 1

2 Esercizio 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 disegnare il grafo di attesa. pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; void *thread1(void *arg) { pthread_mutex_lock(&mutexa); pthread_mutex_lock(&mutexb); printf("thread_1\n"); pthread_mutex_unlock(&mutexb); pthread_mutex_unlock(&mutexa); return NULL; void *thread2(void *arg) { pthread_mutex_lock(&mutexb); pthread_mutex_lock(&mutexa); printf("thread_2\n"); pthread_mutex_unlock(&mutexa); pthread_mutex_unlock(&mutexb); return NULL; // main is omitted... Gerardo Pelosi <gerardo.pelosi@polimi.it> 2

3 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

4 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Grafo di attesa Thread1 MutexA MutexB Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

5 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Grafo di attesa Thread1 locked MutexA MutexB Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

6 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Grafo di attesa Thread1 locked MutexA MutexB locked Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

7 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Grafo di attesa Thread1 locked MutexA wait MutexB locked Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

8 Esercizio 1 Si può facilmente verificare che nel caso in cui thread1 prende il lock su mutexa e contemporanemante thread2 prende il lock su mutexb si ha un deadlock: infatti thread1 aspetta la risorsa mutexb la quale non è rilasciata da thread2 poichè in attesa per la risorsa mutex1. Grafo di attesa Thread1 locked MutexA wait wait MutexB locked Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 3

9 Esercizio 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 disegnare il grafo di attesa. pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; void foo(int val) { pthread_mutex_lock(&mutexb); val *= 2; if(val > 4) pthread_mutex_unlock(&mutexb); void *thread1(void *arg) { pthread_mutex_lock(&mutexa); foo((int)arg); pthread_mutex_unlock(&mutexa); if((int)arg < 2) pthread_mutex_unlock(&mutexb); pthread_mutex_lock(&mutexa); printf("end of thread1\n"); pthread_mutex_unlock(&mutexa); return NULL; void *thread2(void *arg) { pthread_mutex_lock(&mutexa); pthread_mutex_lock(&mutexb); printf("end of thread2\n"); pthread_mutex_unlock(&mutexb); pthread_mutex_unlock(&mutexa); return NULL; int main() { pthread_t th1, th2; pthread_create(&th1, NULL, thread1, (void*)2); pthread_create(&th2, NULL, thread2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); return 0; Gerardo Pelosi <gerardo.pelosi@polimi.it> 4

10 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

11 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Grafo di attesa Thread1 MutexA MutexB Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

12 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Grafo di attesa Thread1 MutexA locked MutexB Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

13 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Grafo di attesa Thread1 MutexA locked locked MutexB Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

14 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Grafo di attesa Thread1 MutexA locked locked MutexB wait Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

15 Esercizio 2 Si può notare come thread1 non rilasci il lock su mutexb, in quando arg vale 2. Quindi se thread1 prende il lock su mutexa prima di thread2 quest ultimo rimarrà bloccato per sempre. Si ha quindi un deadlock se dopo la prima sezione critica di thread1 è eseguita la sezione critica di thread2. Grafo di attesa Thread1 wait MutexA locked locked MutexB wait Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 5

16 Esercizio 3 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock. pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; sem_t sem; void *th_fun1(void *arg){ for (int i = 0; i < (int)arg; ++i) { pthread_mutex_lock(&mutexa); sem_wait(&sem); pthread_mutex_unlock(&mutexa); return NULL; void *th_fun2(void *arg){ for(int i = 0; i < (int)arg; ++i) { pthread_mutex_lock(&mutexa); sem_post(&sem); pthread_mutex_unlock(&mutexa); return NULL; int main() { pthread_t th1, th2; sem_init(&sem, 0, 0); pthread_create(&th1, NULL, th_fun1, (void *)3); pthread_create(&th2, NULL, th_fun2, (void *)4); pthread_join(th1, NULL); pthread_join(th2, NULL); return 0; Gerardo Pelosi <gerardo.pelosi@polimi.it> 6

17 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

18 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Grafo di attesa Thread1 MutexA Sem Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

19 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Grafo di attesa Thread1 locked MutexA Sem Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

20 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Grafo di attesa Thread1 locked MutexA wait Sem Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

21 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Grafo di attesa Thread1 locked MutexA wait wait Sem Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

22 Esercizio 3 Si può verificare un deadlock se th_fun1 esegue sem_wait quando il semaforo è ancora a zero: il lock su mutexa non verrà rilasciato, impedendo a th_fun2 di entrare nella sezione critica ed eseguire sem_post. Grafo di attesa Thread1 locked MutexA wait wait Sem Thread2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 7

23 Esercizio 4 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock. sem_t empty1, full1, empty2, full2; int queue1, queue2; void *th_fun1(void *arg) { sem_wait(&empty1); sem_wait(&full2); queue1 = rand(); printf("queue2: %d\n", queue2); sem_post(&full1); sem_post(&empty2); return NULL; void *th_fun2(void *arg) { sem_wait(&empty2); sem_wait(&full1); queue2 = rand(); printf("queue1: %d\n", queue1); sem_post(&full2); sem_post(&empty1); return NULL; int main() { pthread_t th1, th2; sem_init(&empty1, 0, 0); sem_init(&empty2, 0, 0); sem_init(&full1, 0, 1); sem_init(&full2, 0, 1); pthread_create(&th1, NULL, th_fun1, NULL); pthread_create(&th2, NULL, th_fun2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); return 0; Gerardo Pelosi <gerardo.pelosi@polimi.it> 8

24 Esercizio 4 I due thread entrano in deadlock poichè entrambi eseguono sem_wait rispettivamente su empty1 e empty2, i quali sono inizialmente a zero, e solo mutuamente potrebbero essere notificati. Gerardo Pelosi <gerardo.pelosi@polimi.it> 9

25 Esercizio 5 Dato il seguente programma, riempire la tabella segnando il valore delle variabili a, b, c, d, e in corrispondena degli statement indicati. Indicare i possibili valori se sono al più due, indicare UNK se i possibili valori sono più di due, UND se la variabile non è inizializzata, NE se non esiste. pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; int c = 0; int e = 0; void *th_fun1(void *arg) { int a = 0, b = (int)arg; pthread_mutex_lock(&mutexa); e = 1; // Stat. A a = b + c; // Stat. B pthread_mutex_unlock(&mutexa); // Stat. C return (void *)a; void *th_fun2(void *arg) { while (e == 0); pthread_mutex_lock(&mutexa); c = ((int)arg) * 2; pthread_mutex_unlock(&mutexa); // Stat. D return (void *)c; int main() { pthread_t th1, th2; int d; pthread_create(&th1, NULL, th_fun2, (void *)3); pthread_create(&th2, NULL, th_fun1, (void *)4); pthread_join(th1, (void *)&d); // Stat. E pthread_join(th2, (void *)&d); // Stat. F return 0; Gerardo Pelosi <gerardo.pelosi@polimi.it> 10

26 Esercizio 5 thread condizione a b c d e th_fun1 th_fun1 th_fun1 th_fun2 main main subito dopo A subito dopo B subito dopo C subito dopo D subito dopo E subito dopo F Gerardo Pelosi <gerardo.pelosi@polimi.it> 11

27 Esercizio 5 thread condizione a b c d e th_fun1 subito dopo A UND 1 th_fun1 subito dopo B UND 1 th_fun1 subito dopo C 4 4 0/6 UND/6 1 th_fun2 subito dopo D 4/NE 4/NE 6 UND 1 main subito dopo E 4/NE 4/NE main subito dopo F NE NE Gerardo Pelosi <gerardo.pelosi@polimi.it> 12

28 Esercizio 6 Considerando il seguente programma: disegnare il grafo di sincronizzazione fra i thread P0, F1, F2, N1, N2, N3, N4. In tale grafo: nodi rappresentano thread arco da T 1 a T 2 quando T 1 esegue un post su almeno un semaforo su cui T 2 è in attesa. riempire la tabella dei valori delle variabili: indicare NE se la variabile non esiste; UND se la variabile non è stata inizializzata; UNK se la variabile può avere più di un solo valore. Gerardo Pelosi <gerardo.pelosi@polimi.it> 13

29 #define NSEM 7 sem_t sem_start[nsem]; sem_t sem_stop[nsem]; int ret_status[nsem]; void *P(void *arg) { int base = (int) arg; int alpha, status, index; sem_wait(&sem_start[base]); for (alpha = 0; alpha <= 1; ++alpha) { int off = (base == 0)? 3 : 1; index = base off * alpha; sem_post(&sem_start[index]); if (alpha == 1) { sem_wait(&sem_stop[index]); status = ret_status[index]; // Stat. A index = base + 1; sem_wait(&sem_stop[index]); status = ret_status[index]; // Stat. B ret_status[base] = alpha; sem_post(&sem_stop[base]); void *N(void *arg) { int tid = (int)arg; sem_wait(&sem_start[tid]); ret_status[tid] = (tid % 2)? 4 : 3; sem_post(&sem_stop[tid]); // Stat. C int main() { pthread_t th_p0, th_f1, th_f2; pthread_t th_n1, th_n2, th_n3, th_n4; for(int i = 0; i < NSEM; ++i) { sem_init(&sem_start[i], 0, 0); sem_init(&sem_stop[i], 0, 0); srand(time(null)); pthread_create(&th_p0, NULL, P, (void *) 0); // P0 pthread_create(&th_f1, NULL, P, (void *) 1); // F1 pthread_create(&th_f2, NULL, P, (void *) 4); // F2 pthread_create(&th_n1, NULL, N, (void *) 2); // N1 pthread_create(&th_n2, NULL, N, (void *) 3); // N2 pthread_create(&th_n3, NULL, N, (void *) 5); // N3 pthread_create(&th_n4, NULL, N, (void *) 6); // N4 sem_post(&sem_start [0]); sem_wait(&sem_stop [0]); pthread_join(th_p0, NULL); pthread_join(th_f1, NULL); pthread_join(th_f2, NULL); pthread_join(th_n1, NULL); pthread_join(th_n2, NULL); pthread_join(th_n3, NULL); pthread_join(th_n4, NULL); return 0; Gerardo Pelosi <gerardo.pelosi@polimi.it> 14

30 Esercizio 6 thread condizione alpha status sem_stop[6] P0 P0 P0 F1 F1 F2 F2 subito dopo A in F1 (prima iter) subito dopo A in F2 (prima iter) subito dopo B in P0 subito dopo C in N2 subito dopo B in F1 subito dopo C in N3 subito dopo B in F2 Gerardo Pelosi <gerardo.pelosi@polimi.it> 15

31 Esercizio 6 Grafo di sincronizzazione Si può notare che ogni thread esegue sia post che wait, dunque nel grafo si avrà che ogni nodo ha archi entranti e uscenti. Analizzando i thread con funzione P si ha: sem_wait su sem_start[base], sem_stop[base (base==0? 3 : 1)], sem_stop[base + 1] sem_post su sem_start[base + 1], sem_start[base (base==0? 3 : 1)], sem_stop[base] Basta sostituire i possibili valori di base per ottenere gli archi entranti e uscenti dei relativi nodi. P0 F1 F2 N1 N2 N3 N4 Gerardo Pelosi <gerardo.pelosi@polimi.it> 16

32 Esercizio 6 La struttura di sincronizzazione è tale per cui P0, F1 ed F2 fanno partire due thread ciascuno tramite un post su un semaforo dell array sem_start, poi attendono la loro terminazione in ordine inverso (tramite un wait su un semaforo dell array sem_stop). 1 P0 fa partire F1 ed F2 e poi attende che termini prima F2 seguito da F1. 2 F1 fa partire N1 ed N2 aspettando che termini prima N2 e poi N1. 3 Infine, F2 fa partire N3 ed N4 aspettando che termini prima N4 poi N3. Notare che i valori della variabile index (usata come indice degli array di semafori); e quello della variabile ret_status[...] sono legati ai thread secondo la tabella mostrata di seguito. thread P0 F1 N1 N2 F2 N3 N4 index ret_status[index] Gerardo Pelosi <gerardo.pelosi@polimi.it> 17

33 Esercizio 6 thread condizione alpha status sem_stop[6] P0 subito dopo A in F1 (prima iter) UNK 1 UNK 2 UNK 3 P0 subito dopo A in F2 (prima iter) 1 UND 0 P0 subito dopo B in P F1 subito dopo C in N2 UNK 5 UNK 6 UNK F1 subito dopo B in F1 2 3 UNK F2 subito dopo C in N3 UNK 7 UNK 8 UNK F2 subito dopo B in F Gerardo Pelosi <gerardo.pelosi@polimi.it> 18

34 Esercizio 6 Note: 1 può valere 0 o 1. 2 può essere UND o valere lo status di ritorno di F2 che è 2. 3 può valere 0 o 1. 4 sem_wait(&sem_stop[6]) è sicuramente stata risolta quindi il semaforo vale 0. 5 il thread F1 può essere uscito dal ciclo (alfa=2) oppure no (alfa=1), come potrebbe anche aver terminato (NE). 6 potrebbe essere UND nel caso non sia ancora stata assegnata, 4 nel caso valga il ritorno di N2, 3 nel caso valga il ritorno di N1, o potrebbe valere anche NE nel caso F1 abbia già terminato. 7 N3 è l ultimo ad essere aspettato da F2 per cui alfa potrebbe assumere 3 valori (0,1,2), come potrebbe anche non esistere più (NE). 8 potrebbe essere UND, 3 nel caso valga il valore di ritorno di N4, 4 nel caso valga il valore di ritorno di N3, oppure potrebbe non esistere più (NE). 9 sem_wait(&sem_stop[6]) è sicuramente stata risolta quindi il semaforo vale 0. Gerardo Pelosi <gerardo.pelosi@polimi.it> 19

35 Esercizio 7 Si consideri il seguente programma: pthread_mutex_t elem = PTHREAD_MUTEX_INITIALIZER; sem_t check; int counter = 0; void *sequence(void *arg) { int num; printf("sequence starget.\n"); // statement A for (num = 1; num <= 3; num++) { pthread_mutex_lock(&elem); sem_post(&check); counter++; // statement B pthread_mutex_unlock(&elem); printf("sequence ended.\n"); return NULL; void *single(void *arg) { sem_wait(&check); pthread_mutex_lock(&elem); sem_wait(&check); counter --; pthread_mutex_unlock(&elem); return NULL; // statement C // statement D Gerardo Pelosi <gerardo.pelosi@polimi.it> 20

36 Esercizio 7 int main() { pthread_t T1, T2; sem_init(&check, 0, 0); pthread_create(&t2, NULL, single, (void*)1); pthread_create(&t1, NULL, sequence, NULL); pthread_join(t1); // statement E pthread_join(t2); return 0; completare la tabella indicando lo stato di esistenza della variabile locale e del parametro nell istante di tempo specificato da ciascuna condizione. Completare ogni casella con ESISTE, NON ESISTE o PUÒ ESISTERE. completare la tabella indicando i valori delle variabili globali nell istante di tempo specificato da ciascuna condizione. Usare X quando non definito, nel caso più valori sono disponibili riportarli tutti. individuare eventuali deadlock ed indicare gli statement dove si bloccano i due thread precisando anche l iterazione di T1 e i valori di counter. Gerardo Pelosi <gerardo.pelosi@polimi.it> 21

37 Esercizio 7 Tabella: Esistenza di num e arg condizione num in T1 arg in T2 subito dopo A subito dopo C subito dopo E Tabella: Valore di check e counter condizione check counter subito dopo B (num = 1) subito dopo B (num = 2) subito dopo B (num = 3) subito dopo C subito dopo D Gerardo Pelosi <gerardo.pelosi@polimi.it> 22

38 Esercizio 7 Tabella: Esistenza di num e arg condizione num in T1 arg in T2 subito dopo A esiste esiste subito dopo C può esister esiste subito dopo E non esiste può esistere Gerardo Pelosi <gerardo.pelosi@polimi.it> 23

39 Esercizio 7 Tabella: Valore di check e counter condizione check counter subito dopo B (num = 1) 1/0 1 subito dopo B (num = 2) 2/1 2 subito dopo B (num = 3) 3/2/1 3/2 subito dopo C 2/1/0 3/2/1/0 subito dopo D 1/0 2/1 Gerardo Pelosi <gerardo.pelosi@polimi.it> 24

40 Esercizio 7 È possibile avere un deadlock nell ipotesi che T1 abbia eseguito la prima iterazione rilasciando la sezione critica e T2 sia entrato nella sezione critica e abbia stia eseguendo la seconda sem_wait. In tale situazione T2 rimane bloccato su sem_wait, mentre T1 rimane bloccato su pthread_mutex_lock all inizio della seconda iterazione del ciclo. La variabile counter ha valore 1. Gerardo Pelosi <gerardo.pelosi@polimi.it> 25

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

Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009

Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria 19 ottobre 2009 Sequenze di esecuzione - 2 Sequenze di esecuzione - 2 Esercizio 1 Sequenze di

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

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

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

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

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

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

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

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. 2016-17 Pietro Frasca Lezione 21 Martedì 10-01-2017 Sincronizzazione tra thread Per risolvere problemi

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

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

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

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

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

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

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

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

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

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

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

= 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 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

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

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

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

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

Sistemi operativi. Lez. 9: primitive per la concorrenza i semafori

Sistemi operativi. Lez. 9: primitive per la concorrenza i semafori Sistemi operativi Lez. 9: primitive per la concorrenza i semafori Disabilitazione interrupt Due processi possono trovarsi in sezione critica simultaneamente solo perché chi vi è entrato per primo è stato

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

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

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

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class

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

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 e Laboratorio, Prova del 5/4/2016

Sistemi Operativi e Laboratorio, Prova del 5/4/2016 Nome: Cognome: Matricola: fila: posto: corso: Esercizio 1 (5 punti) Si consideri un processore che dispone dei registri speciali PC (program counter) e PS (program status), dello stack pointer SP e dei

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 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

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

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

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

Esercitazione [1] Processi e Thread

Esercitazione [1] Processi e Thread Esercitazione [1] Processi e Thread Leonardo Aniello - aniello@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo Corso di Laurea in Ingegneria Informatica

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

DTI / ISIN / Titolo principale della presentazione. La cena dei filosofi. Amos Brocco, Ricercatore, DTI / ISIN. 14 maggio 2012

DTI / ISIN / Titolo principale della presentazione. La cena dei filosofi. Amos Brocco, Ricercatore, DTI / ISIN. 14 maggio 2012 DTI / ISIN / Titolo principale della presentazione 1 La cena dei filosofi Amos Brocco, Ricercatore, DTI / ISIN 14 maggio 2012 Il problema dei filosofi a cena Il problema dei filosofi a cena Il problema:

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

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

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

Sistemi Operativi e Laboratorio, Prova del 10/4/2018 compito A

Sistemi Operativi e Laboratorio, Prova del 10/4/2018 compito A Nome: Cognome: Matricola: corso: fila: posto: sercizio 1 (5 punti) Uno spool di stampa di un sistema multithread che gestisce due stampanti fisiche, è organizzato con un thread gestore che gestisce le

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

Sistemi Operativi e Laboratorio, Prova del 10/4/2018 compito B

Sistemi Operativi e Laboratorio, Prova del 10/4/2018 compito B Nome: Cognome: Matricola: corso: fila: posto: sercizio 1 (5 punti) Un sistema con 5 processi (A,, C,, ) e risorse dei tipi R1, R2, R3, R4, rispettivamente di molteplicità [7, 7, 3, 6], utilizza l algoritmo

Dettagli

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

Sistemi Operativi 1. Mattia Monga. a.a. 2018/19. 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. 2018/19 1 cba 2008 18 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

SC che operano su thread. pthread_create() etc...

SC che operano su thread. pthread_create() etc... SC che operano su thread pthread_create() etc... 1 Thread POSIX Obiettivi Fornire una breve introduzione descrivere alcune delle numerose SC relative ai thread POSIX fare qualche esempio concreto Finora

Dettagli

Introduzione al Multithreading

Introduzione al Multithreading Introduzione al Multithreading Claudia Calidonna Istituto di di Cibernetica C.N.R. Argomenti principali Parleremo di : Processi & Threads Operazioni sui threads ed eventuali confronti tra operazioni sui

Dettagli

Sistemi Operativi e Laboratorio, Prova del?/?/?

Sistemi Operativi e Laboratorio, Prova del?/?/? Nome: Cognome: Matricola: fla: posto: corso: Esercizio 1 Quali delle seguenti operazioni possono essere eseguite da un processo in stato utente? Operazione: Invocare l istruzione TSL (test and set lock-tipo

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

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

I Thread. I Thread. Se creiamo un nuovo processo con la fork, questo erediterà dal padre

I Thread. I Thread. Se creiamo un nuovo processo con la fork, questo erediterà dal padre I Thread 1 Ad un generico processo, sono associati i seguenti dati e le seguenti informazioni: codice del programma in esecuzione un area di memoria contenente le strutture dati dichiarate nel programma

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

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

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

Perche le CPU multicore

Perche le CPU multicore Perche le CPU multicore I processi industriali producono chip sempre piu densi in termini di transistor 2000 Inoltre: Watt ~ Volt 2 x frequenza Frequenza ~ Volt Watt ~ frequenza 3 Il rapporto Watt/mm 2

Dettagli

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A Nome: Cognome: Matricola: corso: fila: posto: Esercizio 1 (5 punti) Si consideri un processore che dispone dei registri speciali PC (program counter) e PS (program status), dello stack pointer SP e dei

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

THREAD. Programmazione in rete e laboratorio. Come si crea un thread

THREAD. Programmazione in rete e laboratorio. Come si crea un thread Programmazione in rete e laboratorio JAVA - Thread Alberto Martelli THREAD Thread: flusso sequenziale di controllo (esecuzione di istruzioni) in un programma. Nello stesso programma si possono far partire

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

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione

Dettagli

5f Esercizi Progr. Concorrente e Vari

5f Esercizi Progr. Concorrente e Vari 5f Esercizi Progr. Concorrente e Vari Contenuti: Esercizio 1 Programmazione concorrente, gestione coda FIFO (fornaio FIFO) Esercizio 2 - script, processi in background, pid, variabili. Esercizio 3 - script

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

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

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

Mutua Esclusione A" B"

Mutua Esclusione A B Mutua Esclusione Il problema della mutua esclusione nasce quando più di un processo alla volta può aver accesso a variabili comuni. La regola di mutua esclusione impone che le operazioni con le quali i

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

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI 1. Si consideri il programma C seguente (gli #include necessari sono omessi): / programma principale / 1.

Dettagli

Processi. Franco Maria Nardini

Processi. Franco Maria Nardini Processi Franco Maria Nardini La funzione main il kernel gestisce l avvio del vostro codice C (attraverso una funzione exec) routine speciale di start-up che prepara l ambiente di esecuzione per il main

Dettagli

ISTRUZIONI DI ITERAZIONE

ISTRUZIONI DI ITERAZIONE CHAPTER 6 CICLI 1 ISTRUZIONI DI ITERAZIONE Le istruzioni di iterazione sono usate per realizzare I cicli. Un ciclo è una istruzione il cui compito è di eseguire ripetutamente qualche altra istruzione (il

Dettagli

Thread POSIX. Thread POSIX: aspetti preliminari. Thread POSIX. Thread. Introduzione ai thread POSIX. Sincronizzazione

Thread POSIX. Thread POSIX: aspetti preliminari. Thread POSIX. Thread. Introduzione ai thread POSIX. Sincronizzazione Thread POSIX Introduzione ai thread POSIX operazioni elementari sui thread Sincronizzazione Semafori semafori di mutua esclusione semafori generali utilizzo ed esempi Variabili condition generalità utilizzo

Dettagli

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande/ VERSIONE 1 1) Nell uso dei puntatori in C++ la scrittura -> vuol dire: a) riferimento b) dereferenziazione e

Dettagli

Sincronizzazione. Problemi di sincronizzazione tipici Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Sincronizzazione. Problemi di sincronizzazione tipici Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Sincronizzazione Problemi di sincronizzazione tipici Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Produttore-Consumatore Produttore e consumatore con memoria limitata Utilizza

Dettagli

Mutua Esclusione Il problema della mutua esclusione non si sovrappongano nel tempo Nessun vincolo è imposto sull ordine

Mutua Esclusione Il problema della mutua esclusione non si sovrappongano nel tempo Nessun vincolo è imposto sull ordine Mutua Esclusione Il problema della mutua esclusione nasce quando più di un processo alla volta può aver accesso a variabili comuni. La regola di mutua esclusione impone che le operazioni con le quali i

Dettagli

Sistemi Operativi. Lez. 14 : il deadlock

Sistemi Operativi. Lez. 14 : il deadlock Sistemi Operativi Lez. 14 : il deadlock Criticità nei sistemi concorrenti Starvation: una situazione in cui l esecuzione di uno o più thread è posticipata indefinitamente Deadlock: una situazione in cui

Dettagli