= PTHREAD_MUTEX_INITIALIZER
|
|
- Agnella Grimaldi
- 5 anni fa
- Visualizzazioni
Transcript
1 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 in cui un thread accede a risorse comuni ad altri thread concorrenti. In particolare, quando una sezione critica prevede modifiche di variabili condivise, è necessario attuare una protezione che garantisca la mutua esclusione, cioè il divieto di accesso contemporaneo alla risorsa comune. Per i Thread POSIX la protezione delle sezioni critiche può essere ottenuta con una variabile mutex (Mutual Exclusion). Una variabile mutex è un semaforo binario che ha valore 0 (occupato), 1 (libero). Un mutex, posto a protezione di una sezione critica, previene la race condition (interferenza): dà l'accesso all'esecuzione ad un solo thread alla volta, lasciando fuori gli altri thread, fino a che il thread che sta occupando la sezione non ne ha terminato l'esecuzione. Per creare un mutex è necessario usare una variabile di tipo pthread_mutex_t, sempre di libreria pthread, che contiene informazioni sul nome del mutex, il proprietario, la struttura associata al mutex, la coda dei processi sospesi in attesa che mutex sia libero ecc. La dichiarazione ha la sintassi pthread_mutex_t semaforo; L'inizializzazione di una variabile mutex puo' essere statica o dinamica. L'inizializzazione statica avviene con l'uso della macro PTHREAD_MUTEX_INITIALIZER. L'istruzione pthread_mutex_t semaforo = PTHREAD_MUTEX_INITIALIZER; inizializza la variabile semaforo a occupato L'inizializzazione dinamica si attua con l'uso della funzione init il cui prototipo è int pthread_mutex_init( pthread_mutex_t *mutex, pthread_mutex_attr_t *mattr ) i cui parametri sono un puntatore alla variabile mutex e gli attributi del semaforo che, al valore NULL di default, inizializzano il semaforo a libero. L'istruzione pthread_mutex_init(&semaforo,null); inizializza la variabile semaforo a libero. Le funzioni base che operano su mutex e che consentono la gestione della mutua esclusione, l'attività più impegnativa per chi si occupa di programmazione concorrente, sono le due funzioni di lock e unlock. La funzione di blocco ha prototipo int pthread_mutex_lock(pthread_mutex_t * semaforo) accetta un singolo semaforo, e, posta all'inizio della sezione critica ha lo scopo di sospendere l'accesso alla sezione per tutti i thread concorrenti a quello in esecuzione, fino allo sblocco della stessa.quando vi è l'istruzione pthread_mutex_lock(&semaforo); solo il thread che è riuscito ad eseguire la lock prosegue l esecuzione e puo' accedere ai dati, gli altri thread chiamanti rimangono bloccati, vanno in attesa. Come si vede nel prototipo la lock è una funzione che restituisce un intero, uno zero, in caso di successo, o un codice di errore diverso da zero in caso di fallimento. Esiste anche una variante della funzione lock, la trylock, non bloccante per il thread chiamante. La funzione di sblocco ha prototipo int pthread_mutex_unlock(pthread_mutex_t * semaforo)
2 ed ha l'effetto di liberare la variabile mutex. L'istruzione pthread_mutex_unlock(&semaforo) posta al termine della sezione critica sblocca il semaforo. A questo punto un altro thread, che ha precedentemente chiamato la lock della mutex, in coda per accedere alla sezione critica, viene svegliato potrà terminare la lock (bloccando a sua volta l'accesso ad altri concorrenti) e procedere con l'esecuzione. Il valore di ritorno della funzione è analogo a quello della lock. E' possibile eliminare un mutex con la funzione int pthread_mutex_destroy( pthread_mutex_t *mutex ) che ha come parametro il puntatore al thread da distruggere e ritorna un valore 0 in caso di successo Condition Variable Come abbiamo appena visto i mutex hanno un importantissimo compito, ma, il prezzo, in termini di efficienza del programma potrebbe essere molto alto e, di fatto, rendere inutile la concorrenza. Infatti i threads in attesa dello sblocco si potrebbero trovare impegnati in onerose attività di busypolling (sequenze periodiche di test per il verificarsi di eventi). Per questo l'uso dei mutex viene spesso associato alle condition variables, variabili che consentono la sincronizzazione tra thread che condividono un mutex, e che permettono ai threads di sospendere la propria esecuzione in attesa del verificarsi di determinate condizioni su dati condivisi. E' da evitare l'uso di condition variables senza mutex, per scongiurare pericolose situazioni di deadlock. Inoltre è opportuno ribadire che una variable condition senza mutex non assicura mutua esclusione. Per creare una condition variable è necessario usare una variabile di tipo pthread_cond_t, sempre di libreria pthread. La dichiarazione ha la sintassi pthread_cond_t cond; Come per i mutex anche l'inizializzazione di una variable condition puo' essere statica o dinamica, statica con l'istruzione pthread_cond_t cond = PTHREAD_COND_INITIALIZER; e dinaminca con l'uso della funzione init int pthread_cond_init( pthread_cond _t *cond, pthread_cond_attr_t *condattr ) i cui parametri sono un puntatore alla variabile cond e gli attributi della variabile di condizione, al valore NULL di default. Le funzioni base che operano con variable condition sono la sospensione, wait, per mettere un thread in attesa, e il risveglio, signal, per risvegliare i thread sospesi La funzione di per mettere in attesa un thread è pthread_cond_wait(pthread_cond_t cond, pthread_mutex_t * semaforo) ha come parametri la variabile di condizione e il mutex che regola l'accesso alla sezione critica. Questa funzione blocca il thread chiamante sulla coda associata a cond, e il mutex semaforo viene sbloccato in modo da liberare la sezione critica ad un altro thread. Questa funzione deve essere chiamata quando il mutex è bloccato. La funzione di per risvegliare un thread bloccato è pthread_cond_signal(pthread_cond_t cond) il thread che viene svegliato è il primo della coda dei sospesi, se non vi è nessun processo in attesa la funzione viene ignorata. Per risvegliare tutti i thread in attesa si usa un funzione di broadcast pthread_cond_broadcast(pthread_cond_t cond)
3 che si rivolge a tutti i thread in attesa su quella condizione. Esempio Mettiamo in pratica i concetti espressi con un esempio classico della sincronizzazione, il problema produttore-consumatore. Si parla di problema produttore-consumatore quando due sezioni di un programma lavorano in concorrenza con compiti specifici: una produce un dato, l'altra lo consuma, in una alternanza ciclica, e, naturalmente, devono essere sincronizzate tra loro. Pensiamo ad esempio ad una variabile condivisa, con un thread che si occupa di acquisirla da input e un altro di stamparla. Il consumatore non deve stampare finchè il produttore non ha letto da input il dato, ma il produttore non deve leggere finchè il consumatore non ha stampato il dato precedente. Implementiamo un primo codice privo di mutex e variable condition #include<stdio.h> #include <pthread.h> int variabilecondivisa; //variabile che dovrebbe essere utilizzata in mutua esclusione //thread di acquisizione: produttore void* threadacquisisci(void* arg) while (1) //ciclo infinito printf(" \n"); scanf("%d",&variabilecondivisa); fflush(stdin); pthread_exit(null); //thread di stampa :consumatore void* threadstampa (void* arg) while(1) //ciclo infinito sleep(3);//attesa printf ("dato stampato è %d \n",variabilecondivisa); pthread_exit(null); int main() pthread_t miot;//thread per produrre il dato pthread_t miot2;//thread per stampare il dato //creazione dei thread pthread_create(&miot,null,threadacquisisci,null); pthread_create(&miot2,null,threadstampa,null); //attendo terminazione thread pthread_join(miot,null); pthread_join(miot2,null); //fine programma printf("programma terminato");
4 L'esecuzione darà risultati del tipo 3 4 dato stampato è 4 6 dato stampato è 6 8 ecc. E' evidente che l'uso della sleep non è in alcun modo sufficiente a sincronizzare i due thread, si origina una sequenza chiaramente errata. Inoltre se smettiamo di inserire vediamo che il consumatore continua a eseguire codice, stampando più volte l'ultimo dato acquisito Ora correggiamo il programma garantendo la sincronizzazione e la mutua esclusione con l'uso di mutex e variable condition. #include<stdio.h> #include <pthread.h> int variabilecondivisa; //variabile in mutua esclusione //mutex per la mutua esclusione identificatore semaforo pthread_mutex_t semaforo; //variable condition per la sincronizzazione identificatore empty pthread_cond_t empty; //variable condition per la sincronizzazione identificatore empty pthread_cond_t full; //thread di acquisizione: produttore void* threadacquisisci(void* arg) while(1) //attesa del segnale di utilizzo del dato precedente //non si deve leggere finchè non è avvenuta la stampa precedente pthread_cond_wait(&empty,&semaforo); //lock per l'accesso alla sezione critica //il dato deve essere letto non puo' ancora essere prelevato pthread_mutex_trylock(&semaforo); printf(" \n"); scanf("%d",&variabilecondivisa); fflush(stdin);
5 //invio segnale risveglio consumatore: il nuovo dato è stato prodotto pthread_cond_signal(&full); //unlock per uscita dalla sezione critica //il dato puo' essere prelevato pthread_mutex_unlock(&semaforo); pthread_exit(null); //thread di stampa :consumatore void* threadstampa (void* arg) //per la prima produzione pthread_cond_signal(&empty); while(1) //attesa del segnale del produttore //non si deve stampare finchè non è avvenuta la lettura pthread_cond_wait(&full,&semaforo); //lock per l'accesso alla sezione critica //il dato prima di una nuova produzione deve essere stampato pthread_mutex_trylock(&semaforo); printf ("dato stampato è %d \n",variabilecondivisa); //unlock per uscita dalla sezione critica //il dato puo' essere scritto pthread_mutex_unlock(&semaforo); //sveglia il thread produttore in attesa pthread_cond_signal(&empty); pthread_exit(null); int main() pthread_t produttore;//thread per produrre il dato pthread_t consumatore;//thread per stampare il dato pthread_mutex_init(&semaforo,null);//inizializzo semaforo a libero pthread_cond_init(&empty, NULL); pthread_cond_init(&full, NULL); //creazione dei thread pthread_create(&produttore,null,threadacquisisci,null); pthread_create(&consumatore,null,threadstampa,null); //attendo terminazione thread pthread_join(produttore,null); pthread_join(consumatore,null); //fine programma printf("programma terminato");
6 L'esecuzione sarà del tipo 3 dato stampato è 3 4 dato stampato è dato stampato è 3 4 dato stampato è 4 1 dato stampato è 1 5 dato stampato è 5 6 dato stampato è 6 7 dato stampato è 7 9 dato stampato è 9 dato stampato è 1 5 dato stampato è 5 6 dato stampato è 6 7 dato stampato è 7 9 dato stampato è 9 cioè correttamente sincronizzata.
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
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
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
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
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,
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliIl costrutto monitor
Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione
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
DettagliProcessi programma processo processo Stati di un processo Attesa di caricamento new Pronto ( ready ) Esecuzione running Waiting ( in Attesa )
Processi Un processo è l insieme delle azioni compiute dal processore per eseguire un programma. Si può semplificare dicendo che "un processo è un programma in esecuzione". Per meglio definire un processo
DettagliSistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
DettagliI Thread in Java e POSIX
I Thread in Java e POSIX Thread e Multithreading Per risolvere i problemi di efficienza del modello a processi pesanti (modello ad ambiente locale) è possibile far ricorso al modello ad ambiente globale,
DettagliSistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni
Anno Accademico 2011/2012 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un processo utente o dal
Dettagli2. I THREAD. 2.1 Introduzione
2. I THREAD 2.1 Introduzione Il tipo di parallelismo che è opportuno avere a disposizione nelle applicazioni varia in base al grado di cooperazione necessaria tra le diverse attività svolte in parallelo:
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
DettagliRealizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
DettagliSistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi
Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione
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:
DettagliIl costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry o public) ad una struttura dati comune a più processi, tale che: Le operazioni
DettagliMeccanismi di sincronizzazione: Semafori e Monitor
Meccanismi di sincronizzazione: Semafori e Monitor 1 Introduzione Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura
DettagliJava Virtual Machine
Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina
DettagliInformatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica
Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,
DettagliSISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)
SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Monitor e variabili condizione in Java) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università degli
DettagliIntroduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale
Introduzione Meccanismi di sincronizzazione: Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura di programmi
DettagliIl costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni
DettagliJava threads (2) Programmazione Concorrente
Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and
DettagliSommario Capitolo 1: Introduzione 5
Politecnico di Milano Anno Accademico 2010/2011 Sistemi distribuiti Corso del Prof. Gianpaolo Cugola Stefano Invernizzi Facoltà di Ingegneria dell Informazione Corso di Laurea Magistrale in Ingegneria
DettagliComputazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2
Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:
DettagliDeadlock e Starvation
DTI / ISIN / Titolo principale della presentazione 1 Deadlock e Starvation Amos Brocco, Ricercatore, DTI / ISIN 3 aprile 2012 Condivisione di risorse In un sistema si trovano delle risorse che possono
DettagliSistemi Operativi. Lezione 7 Comunicazione tra processi
Lezione 7 Comunicazione tra processi Introduzione La soluzione sw al problema della mutua esclusione è abbastanza complessa Algoritmo di Peterson La soluzione hw mediante disabilitazione degli interrupt
DettagliCapitolo 7: Sincronizzazione
Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1
DettagliSistemi Operativi Sincronizzazione tra Processi
Sistemi Operativi Processi Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo
DettagliLab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
DettagliPROGRAMMA DISCIPLINARE SVOLTO a. s. 2015 / 2016
PROGRAMMA DISCIPLINARE SVOLTO a. s. 2015 / 2016 DOCENTI: TESTARDO CINZIA, VALERIO FELICI CLASSE 4 a IA DISCIPLINA TPSI MACROARGOMENTI che sono stati trattati nel corso del corrente anno scolastico (in
Dettaglipuntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
DettagliGli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
DettagliPosix Threads: l evoluzione dei processi UNIX
Posix Threads: l evoluzione dei processi UNIX Raffaele Quitadamo, PhD in Computer Science Università di Modena e Reggio Emilia quitadamo.raffaele@unimore.it Sommario Pthreads vs Unix processes L API per
DettagliMonitor. Introduzione. Struttura di un TDA Monitor
Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione
DettagliEsercizi sugli Oggetti Monitor
Esercizi sugli Oggetti Monitor Esercitazione di Laboratorio di Programmazione di Rete A Daniele Sgandurra Università di Pisa 29/10/2008 Wait e Notify Ogni oggetto in Java ha un lock implicito. Il lock
DettagliCAPITOLO 24 I MONITOR
EFFETTO DELLE PRIMITIVE - signal E wait SUI SEMAFORI CAPITOLO 24 I MONITOR I semafori sono un mezzo efficace per la gestione della mutua esclusione in ambienti con processi concorrenti, ma spesso è difficile
DettagliIngegneria del Software
Ingegneria del Software Threads 2 Mauro Migliardi Ph. D. Sincronizzazione Start Programma per ATM Request Abbastanza grano? Deduci ammontare Stampa Ricevuta End Codice... public void withdraw(float amount)
Dettagli2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.
Tipo File Per memorizzare un dato su un supporto magnetico come un hard disk o un nastro, o più in generale su un'unità di memoria di massa viene utilizzata un tipo di dato chiamato file. Un file può essere
DettagliAvete capito fino in fondo il concetto di nodo fine flusso? Che differenza c e tra fine flusso e fine attività? MODEL DIFFERENCES AND EVOLUTION
1 Avete capito fino in fondo il concetto di nodo fine flusso? Che differenza c e tra fine flusso e fine attività? MODEL DIFFERENCES AND EVOLUTION 2 Rivediamo questo esempio di activity diagram Università
DettagliAXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
DettagliInformatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione
Informatica 3 Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Lezione 6 - Modulo 1 La gestione delle eccezioni Politecnico
DettagliUnità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa
DettagliGestione dei processi
Gestione dei processi Dormire unsigned int sleep(unsigned int); Attende un numero specificato di secondi a meno che non si verifichi un segnale Restituisce 0 se l'attesa è terminata senza interruzioni,
DettagliSISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007
2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?
DettagliMultithreading in Java. Fondamenti di Sistemi Informativi 2014-2015
Multithreading in Java Fondamenti di Sistemi Informativi 2014-2015 Multithreading La programmazione concorrente consente di eseguire più processi o thread nello stesso momento. Nel secondo caso si parla
DettagliImplementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche
Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche 5.1 Implementazione dei monitor con i semafori Un monitor è un tipo di
DettagliGlobal vs. local model
Cooperation models Global vs. local model Global environment Processes can share data Shared memory Local environment processes/ do not share data No shared memory Global environment Proc. P1 Proc. P2
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 5 Martedì 21-10-2014 Thread Come abbiamo detto, un processo è composto
DettagliL API socket ed i daemon
L API socket ed i daemon Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale del Policlinico, 137-00161 Rome - Italy http://www.iac.cnr.it/
DettagliSistemi Operativi. Bruschi Monga Re. Sincronizzazione con monitor pthreads. Shell Shell programming Esercizi I/O Esercizi Tabella riassuntiva
1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it Lezione XV: Concorrenza e sincronizzazione a.a. 2013/14 1 cba 2008 14 M. Monga. Creative Commons Attribuzione
DettagliGestione delle eccezioni in Java
Gestione delle eccezioni in Java Fondamenti di Informatica Ingegneria Gestionale Canale AL 1 Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel
DettagliCorso di Sistemi Operativi
Corso di Sistemi Operativi Sincronizzazione tra processi a.a. 2012/2013 Francesco Fontanella Modello concorrente In un sistema operativo coesistono un gran numero di attività che vengono eseguite più o
Dettagliprogam ponteasensounicoalaternato ; type dir = ( nord, sud );
Esercizio di Sincronizzazione Tra Processi: Ponte a Senso Unico Alternato Un ponte contiene una sola csia di traffico consentendo così l'accesso a macchine provenienti da una sola direzione per volta,
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
DettagliJava Native Interface Appunti
Java Native Interface Appunti Riccardo Rizzo 1/8 Introduzione L'uso delle Java Native Interface e' giustificato tutte quelle volte che una applicazione non puo' essere scritta interamente in Java. Per
DettagliInput/output in C e in C++
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni
DettagliSistemi Operativi Esercizi Sincronizzazione
Sistemi Operativi Esercizi Sincronizzazione Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Esercizi Sincronizzazione Sistemi Operativi - Claudio Palazzi 14 Semafori (1) Semafori: variabili intere contano
DettagliEsercizi sul Monitor in Java
Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette
Dettagli2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.
1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno
DettagliRelazione tra thread e processi
I Thread POSIX Relazione tra modello a processi e a thread Creazione di un thread Attesa Distacco Terminazione Ricerca e confronto Inizializzazione dinamica Relazione tra thread e processi Nel modello
DettagliSommario. G. Piscitelli
Sommario Sincronizzazione Inconsistenza di dati condivisi: i rischi dell'interleaving nei processi concorrenti La race condition Il problema della "sezione critica" dei processi concorrenti e la soluzione
DettagliLaboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate
DettagliHomework HWC1 di Programmazione Concorrente 13 novembre 2014 anno accademico 2014/2015
Homework HWC1 di Programmazione Concorrente 13 novembre 2014 anno accademico 2014/2015 Modalità di consegna L homework va consegnato entro le ore 20:00 di domenica, trenta di novembre, inviando al docente
DettagliT 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:
Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare
DettagliFunzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
DettagliI Thread. Laboratorio Software 2008-2009 M. Grotto R. Farina
I Thread M. Grotto R. Farina Sommario 1. I Thread Introduzione 2. Creazione e terminazione Utilizzo Scheduling dei processi 3. Comunicazione 4. Attributi Passaggio di parametri Funzioni utili Descrizione
DettagliSISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.
SISTEMI OPERATIVI 06.a Il Nucleo Nucleo di un SO Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher 1 Architettura di base dei SO Due le strutture di riferimento: a
DettagliSincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.
Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica,
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 22 Martedì 7-1-2014 1 System Call per l'uso dei segnali Un processo che
Dettagli3. Terza esercitazione autoguidata: progetto gestione voli
9 3. Terza esercitazione autoguidata: progetto gestione voli Qui ci occupiamo di scrivere un programma abbastanza lungo, dedicato alla gestione di una tabella di dati. Una tabella e una struttura dati
DettagliSottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliTerza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread
Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti smonti@deis.unibo.it Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui
DettagliProgrammazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1
+ Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati
DettagliTUTORATO di LINGUAGGI I
TUTORATO di LINGUAGGI I Enrico Vianello TUTORATO di LINGUAGGI I contatti utili LE LEZIONI SI TERRANNO: VENERDI 12.30-14.30 PER INFORMAZIONI e DOMANDE: enrico.vianello@student.unife.it IL MATERIALE UTILIZZATO
DettagliSystem call fcntl e record locking
System call fcntl e record locking Esempio: prenotazione di voli aerei La compagnia ACME Airlines usa un sistema di prenotazione dei voli basato su unix. Possiede due uffici per la prenotazione, A e B,
DettagliI THREAD O PROCESSI LEGGERI Generalità
I THREAD O PROCESSI LEGGERI Generalità Thread: segmento di codice (funzione) Ogni processo ha un proprio SPAZIO DI INDIRIZZAMENTO (area di memoria) Tutti i thread genereti dallo stesso processo condividono
DettagliSimulazione dell esecuzione di processi su architettura multiprocessore
Simulazione dell esecuzione di processi su architettura multiprocessore Progetto di Sistemi per l Elaborazione delle Informazioni A cura di: Bernardino Frola Sommario Introduzione Struttura Comportamento
DettagliGestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
DettagliSERVIZIO AGENZI@BPB GRUPPO BANCA POPOLARE DI BARI
SERVIZIO AGENZI@BPB GRUPPO BANCA POPOLARE DI BARI ISTRUZIONI OPERATIVE PER LA FUNZIONE DI AUTORESET (SBLOCCO PASSWORD ONLINE) PROFILI CON FUNZIONI DISPOSITIVE BASIC E FULL Il servizio di autoreset è disponibile
DettagliSISTEMI OPERATIVI. Deadlock (blocco critico) Domande di verifica. Luca Orrù Centro Multimediale Montiferru 04/06/2007
2007 SISTEMI OPERATIVI Deadlock (blocco critico) Domande di verifica Luca Orrù Centro Multimediale Montiferru 04/06/2007 Deadlock (blocco critico) 1. Si descriva il deadlock e le condizioni sotto cui si
DettagliProgrammazione concorrente in Java
Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente
DettagliSincronizzazione dei processi
Sincronizzazione dei processi Sincronizzazione dei processi Background Il problema della sezione critica Hardware di sincronizzazione Semafori Problemi classici di sincronizzazione Monitor 6.2 Background
DettagliIngegneria del Software
Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi
DettagliSISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO
SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra Università degli Studi di Bergamo a.a. 2012-13 La gestione dei thread in Java
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliThread. Thread. Creazione di nuovi processi. Applicazioni reali. La creazione di un nuovo processo costa I tempi di context switch sono elevati
Thread Thread Motivazioni Modelli Multithread Pthread, Threads in Win32, Thread in Java Problematiche relative ai Thread Thread Windows XP Thread Linux Applicazioni reali Creazione di nuovi processi Browser
DettagliLe system call: fork(), wait(), exit()
Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include int add(a,b,c)
DettagliEsercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)
Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private
DettagliCorso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 6 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Interazione tra Processi I processi concorrenti possono interagire
DettagliLinguaggio C - Funzioni
Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche
DettagliUn esercizio d esame. Flavio De Paoli
Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori
DettagliLA SINCRONIZZAZIONE TRA PROCESSI
LA SINCRONIZZAZIONE TRA PROCESSI E' più complesso scrivere programmi concorrenti rispetto a programmi sequenziali in quanto non basta essere sicuri della correttezza dei singoli moduli ma è necessario
DettagliProcessi parte V. Processi parte V. Sincronizzazione dei processi mediante monitor: Sintassi Funzionamento Implementazione
Processi parte V Processi parte V Sincronizzazione dei processi mediante monitor: Sintassi Funzionamento Implementazione Monitor Il costrutto monitor permette di definire un tipo di dato astratto e di
DettagliSistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.
Programmi applicativi Un programma applicativo (o applicativo) è un eseguibile che può essere utilizzato dall utente e che ha funzionalità di alto livello (word processor, spreadsheet, DBMS) Univ. Milano-Bicocca
DettagliIntroduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
Dettaglicostruttori e distruttori
costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,
Dettagli