Architetture dei Calcolatori e Sistemi Operativi
|
|
- Dante Morelli
- 4 anni fa
- Visualizzazioni
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 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,
DettagliThread: 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
DettagliArchitetture 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
DettagliProgrammazione 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
DettagliCosa 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
Dettagliistruzioni 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
DettagliSistemi 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
DettagliACSO 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
DettagliCorso 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
DettagliCosa 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
DettagliUniversità 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
DettagliEsercizio 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,
DettagliThread: 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
DettagliSincronizzazione 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
DettagliLaboratorio 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
DettagliEsercizio 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
DettagliLibreria 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
DettagliSemafori. 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
DettagliLABORATORIO 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
DettagliAXO 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
DettagliAXO 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
DettagliLinuxThreads: 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
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
DettagliAXO 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
DettagliLinuxThreads: 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
DettagliThread 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
DettagliEsercitazione 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
DettagliEsercitazione 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
DettagliLaboratorio 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
DettagliUniversità 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
DettagliSistemi 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
DettagliEsercitazione [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
DettagliI 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
DettagliCreazione 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
DettagliEsercizi 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
DettagliSistemi 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.
DettagliLABORATORIO 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
DettagliProblemi 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
DettagliSistemi 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
DettagliSincronizzazione 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
DettagliGESTIONE 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
DettagliCorso 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
DettagliTipi 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
DettagliSistemi 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
DettagliSistemi 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
DettagliEsercizio 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
Dettagli3.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
DettagliUniversità 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
DettagliJava 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
DettagliMutua 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
DettagliAXO 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
DettagliSistemi 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
DettagliSistemi 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
DettagliI 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
DettagliAXO 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
DettagliEsercitazione 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
DettagliSincronizzazione 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).
DettagliEsercitazione [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
DettagliSistemi 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
DettagliDTI / 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:
DettagliCorso: 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,
DettagliSistemi 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
DettagliEsercitazione [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
DettagliSistemi 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
DettagliEsercitazione 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
DettagliSistemi 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
DettagliSistemi 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.
DettagliSC 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
DettagliIntroduzione 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
DettagliSistemi 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
DettagliSistemi 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
DettagliEsercizio 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
DettagliI 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
DettagliSistemi 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
DettagliAXO 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
DettagliIntroduzione 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
DettagliPerche 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
DettagliSistemi 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
DettagliEsercitazione [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
DettagliTHREAD. 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
DettagliLinuxThreads. 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
DettagliINFORMATICA 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
Dettagli5f 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
DettagliSincronizzazione. 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
DettagliLinuxthreads: 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,
Dettagliil 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
DettagliMutua 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
DettagliMonitor 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
DettagliCorso 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.
DettagliProcessi. 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
DettagliISTRUZIONI 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
DettagliThread 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
DettagliInformatica/ 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
DettagliSincronizzazione. 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
DettagliMutua 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
DettagliSistemi 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