= PTHREAD_MUTEX_INITIALIZER
|
|
|
- Agnella Grimaldi
- 7 anni fa
- Просмотров:
Транскрипт
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
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
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
Sistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Il 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
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
Processi 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
Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
I 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,
Sistemi 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
2. 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:
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
Realizzazione 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
Sistemi 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
Il 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
Meccanismi 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
Java 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
Informatica 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,
SISTEMI 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
Introduzione. 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
Il 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
Java 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
Computazione 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:
Deadlock 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
Sistemi 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
Capitolo 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
Sistemi Operativi Sincronizzazione tra Processi
Sistemi Operativi Processi Docente: Claudio E. Palazzi [email protected] Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
PROGRAMMA 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
puntatori 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
Gli 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
Posix 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 [email protected] Sommario Pthreads vs Unix processes L API per
Monitor. 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
Esercizi 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
CAPITOLO 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
2) 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
AXO. 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
Informatica 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
Unità 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
Gestione 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,
SISTEMI 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?
Multithreading 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
Implementazione 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
Sistemi 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 [email protected] Lezione XV: Concorrenza e sincronizzazione a.a. 2013/14 1 cba 2008 14 M. Monga. Creative Commons Attribuzione
Gestione 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
Corso 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
progam 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,
Allocazione 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
Java 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
Input/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
Sistemi Operativi Esercizi Sincronizzazione
Sistemi Operativi Esercizi Sincronizzazione Docente: Claudio E. Palazzi [email protected] Esercizi Sincronizzazione Sistemi Operativi - Claudio Palazzi 14 Semafori (1) Semafori: variabili intere contano
Esercizi 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
2. 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
Relazione 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
Laboratorio 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
Homework 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
T 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
Funzioni 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
SISTEMI 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
Sincronizzazione 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,
3. 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
Sottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
Le 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
Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread
Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti [email protected] Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui
Programmazione 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
System 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,
I 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
Gestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
SERVIZIO 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
SISTEMI 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
Programmazione 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
Sincronizzazione 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
Ingegneria 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
SISTEMI 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
I 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
Le 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)
Esercitazioni 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
Corso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 6 Alessandro Dal Palù email: [email protected] web: www.unipr.it/~dalpalu Interazione tra Processi I processi concorrenti possono interagire
Linguaggio 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
Un 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
LA 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
Processi 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
Sistemi 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
Introduzione 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
costruttori 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,
