Interazione tra Processi

Documenti analoghi
Interazione tra Processi. Sistemi Operativi T AA

Processi Interagenti L interazione puo` avvenire mediante due meccanismi: Comunicazione: scambio di informazioni tra i processi interagenti.

Interazione tra Processi. Sistemi Operativi T AA

Interazione, sincronizzazione e comunicazione tra processi

Interazione e sincronizzazione

Processi interagenti. Processi interagenti. Interazione fra processi: meccanismi di sincronizzazione e comunicazione. Processi interagenti

Interazione fra processi: meccanismi di sincronizzazione e comunicazione

Chiamata di procedura remota

Chiamata di procedura remota

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

Il Concetto di Processo

Il Concetto di Processo

I Processi. Il Concetto di Processo

Dati: variabili globali Program Counter Alcuni registri di CPU Stack: parametri, variabili locali a funzioni/procedure

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

Le risorse. Alcune definizioni

Esercitazioni 13 e 14

SEMAFORI. Semaforo. s--; Il valore di un semaforo s è legato al numero delle operazioni wait e signal eseguite su di esso dalla relazione:

Processi e Thread. Concetto di processo

Sistemi Operativi T. Processi e Thread

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune

Sistemi Operativi T Processi e Thread

Processi e thread. Concetto di processo

Sistemi Operativi. Processi e Thread

Il Modello a scambio di messaggi

Modello a scambio di messaggi

Monitor. Le procedure entry sono le sole operazioni che possono essere utilizzate dai processi per accedere alle variabili comuni.

LABORATORIO DI SISTEMI OPERATIVI

La Comunicazione tra Processi in Unix

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi.

Monitor [Hoare 74] Uso del monitor

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

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

Esercizio sulla gestione di file in Unix. Sistemi Operativi T AA

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

Primitive asincrone. Send non bloccante: il processo mittente, non appena inviato il messaggio, prosegue la sua esecuzione.

Introduzione alla Programmazione Concorrente

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

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

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

Indice. Modelli di comunicazione tra processi (IPC) Strumenti di programmazione per IPC

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

Esercitazione 3 Programmazione Concorrente nel linguaggio go. 13 Novembre 2017

Comunicazione con sincronizzazione estesa

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

Il Modello a scambio di messaggi

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007

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

6. Sincronizzazione dei Processi. Esempio: Produttore- Consumatore con n elementi. Esempio: Produttore- Consumatore con n elementi

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

Il Concetto di Processo

Il monitor. Sistemi Operativi T AA

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

Il costrutto monitor [Hoare 74]

La Comunicazione tra Processi in Unix

Sincronizzazione dei processi. Capitolo 5 -- Silberschatz

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B. Esercitazioni 3 e 4

Esercitazioni 3 e 4. Sincronizzazione dei Processi (2 a parte)

Comunicazione e sincronizzazione tra processi Indice. Comunicazione e sincronizzazione. Esempio 1. Monitor - 1. Monitor - 2. Monitor - 3.

Corso di Informatica

Il modello a scambio di messaggio

Il monitor. Sistemi Operativi T AA

I Processi. Il Concetto di Processo

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

Capitolo 4: Processi

6 Il Sistema Operativo Indice (segue) 6.4 La gestione dei processi Sincronizzazione tra processi - 1

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Architettura degli elaboratori 2 - T. Vardanega 1

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni:

Principles of Concurrent Programming

Corso di Informatica

Sistemi Operativi A Parte III - Sincronizzazione

Sistemi operativi - Concetti ed esempi -Settima edizione

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

Modello a scambio di messaggi

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

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

Sistemi Operativi. 6 LEZIONE SINCRONIZZAZIONE DEI PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08

Sistemi Operativi Prova scritta per coloro che non hanno svolto le esercitazioni con valutazione 27 Febbraio 2008

Esercitazione [9] Riepilogo sui Semafori

Problema dei Fumatori di sigarette. Problema dei Fumatori di sigarette. Problema dei Fumatori di sigarette

// Riferimento al canale da processi esterni << nome del processo >>.channel; // Primitiva send send << valore >> to << porta >>;

MODELLO A MEMORIA COMUNE. Aspetti caratterizzanti

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1

Il monitor. Costrutti linguistici per la sincronizzazione

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

Sistemi Operativi. Lezione 7-bis Esercizi

Programmazione concorrente

I THREAD O PROCESSI LEGGERI

Processi. Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

LABORATORIO DI SISTEMI OPERATIVI

Transcript:

Interazione tra Processi 1

Classificazione: Processi interagenti processi interagenti/indipendenti: due processi sono indipendenti se l esecuzione di ognuno non è in alcun modo influenzata dall altro. processi interagenti: cooperanti: i processi interagiscono volontariamente per raggiungere obiettivi comuni (fanno parte della stessa applicazione) in competizione: i processi, in generale, non fanno della stessa applicazione, ma interagiscono indirettamente, per l acquisizione di risorse comuni. Sistemi Operativi L-A - Interazione tra Processi 2 2

Processi Interagenti L interazione puo` avvenire mediante due meccanismi: Comunicazione: scambio di informazioni tra i processi interagenti. P1 Sincronizzazione: imposizione di vincoli temporali sull esecuzione dei processi.. Ad esempio, l istruzione K del processo P1 puo` essere eseguita soltanto dopo l istruzione J del processo P2 <istruzione K>.. sincronizzazione. <istruzione J>.. P2 Sistemi Operativi L-A - Interazione tra Processi 3 3

Processi Interagenti Realizzazione dell interazione:dipende dal modello di processo: modello ad ambiente locale: non c è condivisione di variabili (processo pesante): la comunicazione avviene attraverso scambio di messaggi la sincronizzazione avviene attraverso scambio di eventi (segnali) modello ad ambiente globale: più processi possono condividere lo stesso spazio di indirizzamento => possibilità di condividere variabili (es. threads): variabili condivise e strumenti di sincronizzazione (es.semafori) Sistemi Operativi L-A - Interazione tra Processi 4 4

Processi interagenti mediante scambio di messaggi Facciamo riferimento al modello ad ambiente locale: non vi è memoria condivisa i processi possono interagire (cooperano/competono) mediante scambio di messaggi: comunicazione Il Sistema Operativo offre meccanismi a supporto della comunicazione tra processi (Inter Process Communication, o IPC). Operazioni Necessarie: send: spedizione di messaggi da un processo ad altri receive: ricezione di messaggi Sistemi Operativi L-A - Interazione tra Processi 5 5

Scambio di messaggi send msg P 0 P 1 Lo scambio di messaggi avviene mediante un canale di comunicazione tra i due processi Caratteristiche del canale: monodirezionale, bidirezionale receive uno-a-uno, uno-a-molti, molti-a-uno, molti-a-molti capacità modalità di creazione: automatica, non automatica Sistemi Operativi L-A - Interazione tra Processi 6 6

Meccanismi di comunicazione tra processi Aspetti caratterizzanti: caratteristiche del canale caratteristiche del messaggio: dimensione tipo tipo della comunicazione: diretta o indiretta simmetrica o asimmetrica bufferizzata o no... Sistemi Operativi L-A - Interazione tra Processi 7 7

Naming In che modo viene specificata la destinazione di un messaggio? Comunicazione diretta: al messaggio viene associato l identificatore del processo destinatario (naming esplicito) send(proc, msg) Comunicazione indiretta: il messaggio viene indirizzato a una mailbox (contenitore di messaggi) dalla quale il destinatario preleverà il messaggio: send(mailbox, msg) Sistemi Operativi L-A - Interazione tra Processi 8 8

Comunicazione diretta send(msg, P1) P 0 P 1 Il canale è creato automaticamente tra i due processi che devono conoscersi reciprocamente: canale punto-a-punto canale bidirezionale: p0: send(query, P1); p1: send(answ, P0) per ogni coppia di processi esiste un solo canale(<p0, P1>) Sistemi Operativi L-A - Interazione tra Processi 9 9

Esempio: Produttore & Consumatore Processo produttore P: pid C =...; main() { msg M; do } { produco(&m);... send(c, M); }while(!fine); Comunicazione simmetrica: Processo consumatore C: pid P=...; main() { msg M; do { receive(p, &M);... consumo(m); }while(!fine); il destinatario fa il naming esplicito del mittente Sistemi Operativi L-A - Interazione tra Processi 10 } 10

Processo produttore P:... main() { msg M; do } { produco(&m);... send(c, M); }while(!fine); Comunicazione asimmetrica Comunicazione asimmetrica: Processo consumatore C:... main() { msg M; pid id; do { receive(&id, &M);... consumo(m); }while(!fine); il destinatario non è obbligato a conoscere l identificatore del mittente: la variabile id raccoglie l identificatore del mittente. Sistemi Operativi L-A - Interazione tra Processi 11 } 11

Problema: scarsa modularità: Comunicazione diretta la modifica del nome di un processo implica la revisione di tutte le operazioni di comunicazione difficoltà di riutilizzo utilità di servizi di directory (name server) Sistemi Operativi L-A - Interazione tra Processi 12 12

Comunicazione indiretta send(msg, mbx) receive(msg, mbx) P 0 mbx P 1 I processi cooperanti non sono tenuti a conoscersi reciprocamente e si scambiano messaggi depositandoli/prelevandoli da una mailbox condivisa. La mailbox (o porta) è una risorsa astratta condivisibile da più processi che funge da contenitore dei messaggi. Sistemi Operativi L-A - Interazione tra Processi 13 13

Proprietà: Comunicazione indiretta il canale di comunicazione è rappresentato dalla mailbox (non viene creato automaticamente) il canale può essere associato a più di 2 processi: mailbox di sistema: molti-a-molti (come individuare il processo destinatario di un messaggio?) mailbox del processo destinatario: molti-a-uno canale bidirezionale: p1: send(answ, mbx) per ogni coppia di processi possono esistere più canali (uno per ogni mailbox condivisa) Sistemi Operativi L-A - Interazione tra Processi 14 14

Buffering del canale Ogni canale di comunicazione è caratterizzato da una capacità: numero dei messaggi che è in grado di gestire contemporaneamente. Gestione secondo politica FIFO: i messaggi vengono posti in una coda in attesa di essere ricevuti la lunghezza massima della coda rappresenta la capacità del canale. P send(msg,..) receive(msg,..) P Sistemi Operativi L-A - Interazione tra Processi 15 15

Buffering del canale Capacità nulla: non vi è accodamento perchè il canale non è in grado di gestire messaggi in attesa processo mittente e destinatario devono sincronizzarsi all atto di spedire (send) / ricevere (receive) il messaggio: comunicazione sincrona o rendez vous send e receive possono essere sospensive:... send(q,m) Processo P attesa sincronizzazione......... receive(p,m) Processo Q Sistemi Operativi L-A - Interazione tra Processi 16 16

Buffering del canale Capacità limitata: esiste un limite N alla dimensione della coda: se la coda non è piena, un nuovo messaggio viene posto in fondo se la coda è piena: la send è sospensiva se la coda è vuota: la receive può essere sospensiva Capacità illimitata: lunghezza della coda teoricamente infinita: non c è possibilità di sospensione. Sistemi Operativi L-A - Interazione tra Processi 17 17

Remote Procedure Call (RPC) È un tipo di comunicazione sincrona, in cui il mittente si sospende fino a che il destinatario non restituisce una risposta (reply)al messaggio inviato: il messaggio potrebbe richiedere l esecuzione di un servizio... send(q,m) Processo P attesa sincronizzazione... receive(p,m) <esecuzione servizio> reply(p, answ) Processo Q Sistemi Operativi L-A - Interazione tra Processi 18 18

Caratteristiche della comunicazione tra processi Unix Due meccanismi di comunicazione: pipe: comunicazione locale (nell ambito della stessa gerarchia di processi) socket: comunicazione in ambiente distribuito (tra processi in esecuzione su nodi diversi di una rete) Pipe:comunicazione indiretta (senza naming esplicito) canale unidirezionale molti-a-molti bufferizzata (capacità limitata): possibilità di sospensione sia per mittenti che per destinatari. Sistemi Operativi L-A - Interazione tra Processi 19 19

Sincronizzazione tra processi Si è visto che due processi possono interagire per: cooperare: i processi interagiscono allo scopo di perseguire un obiettivo comune competere: i processi possono essere logicamente indipendenti, ma necessitano della stessa risorsa (dispositivo, file, variabile, ecc.) per la quale sono stati dei vincoli di accesso: ad esempio: gli accessi dei due processi alla risorsa devono escludersi mutuamente nel tempo (Mutua Esclusione nell accesso alla risorsa) In entrambi i casi è necessario disporre di strumenti di sincronizzazione. Sistemi Operativi L-A - Interazione tra Processi 20 20

Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sulle operazioni dei processi interagenti. Nella cooperazione: Ad Esempio: Per imporre un particolare ordine cronologico alle azioni eseguite dai processi interagenti. per garantire che le operazioni di comunicazione avvengano secondo un ordine prefissato. Nella competizione: per garantire la mutua esclusione dei processi nell accesso alla risorsa condivisa. Sistemi Operativi L-A - Interazione tra Processi 21 21

Sincronizzazione tra processi nel modello ad ambiente locale In questo ambiente non vi e` la possibilita` di condividere memoria: Gli accessi alle risorse "condivise" vengono controllati e coordinati dal sistema operativo. La sincronizzazione avviene mediante meccanismi offerti dal sistema operativo che consentono la notifica di eventi asincroni (privi di contenuto informativo) tra un processo ed altri: segnali Sistemi Operativi L-A - Interazione tra Processi 22 22

Sincronizzazione tra processi nel modello ad ambiente globale Facciamo riferimento a processi che possono condividere variabili (modello ad ambiente globale, o a memoria condivisa) per descrivere alcuni strumenti di sincronizzazione tra processi. In questo ambiente: cooperazione: lo scambio di messaggi avviene attraverso strutture dati condivise (ad es., mailbox) competizione: le risorse sono rappresentate da variabili condivise (ad esempio, puntatori a file) In entrambi i casi è necessario sincronizzare i processi per coordinarli nell accesso alla memoria condivisa: problema della mutua esclusione Sistemi Operativi L-A - Interazione tra Processi 23 23

Esempio: comunicazione in ambiente globale con mailbox di capacita` ` MAX typedef struct { coda mbx; int num_msg; } mailbox; Processo mittente: shared mailbox M; main() { <crea messaggio m> if (M.num_msg < MAX) /* send: */ { inserisci(m.mbx,m); M.num_msg++;} /* fine send*/ } Processo destinatario: shared mailbox M; main() { if (M.num_msg >0) /* receive: */ { estrai(m.mbx,m); M.num_msg--;} /* fine receive*/ <consuma messaggio m> } Sistemi Operativi L-A - Interazione tra Processi 24 24

Processo mittente: T 0 :<crea messaggio m> T 1: if (M.num_msg < MAX) T 2: inserisci(m.mbx,m); Esempio: Esecuzione inizialmente M.num_msg=1; Processo destinatario:... T 3: if (M.num_msg >0) T 4: estrai(m.mbx,m); T 5: M.num_msg--; La correttezza della gestione della mailbox dipende dall ordine di esecuzione dei processi! E` necessario imporre la mutua esclusione dei processi nell accesso alla variabile M! Sbagliato! M.num_msg=0 Sistemi Operativi L-A - Interazione tra Processi 25 25

Il problema della mutua esclusione In caso di condivisione di risorse (variabili) può essere necessario impedire accessi concorrenti alla stessa risorsa (variabile). Sezione critica: è la sequenza di istruzioni mediante le quali un processo accede e può aggiornare variabili condivise. Mutua esclusione: Mutua esclusione: ogni processo esegue le proprie sezioni critiche in modo mutuamente esclusivo rispetto agli altri processi Sistemi Operativi L-A - Interazione tra Processi 26 26

Mutua esclusione In generale, per garantire la mutua esclusione nell accesso a variabili condivise, ogni sezione critica è: preceduta da un prologo (entry section), mediante il quale il processo ottiene l autorizzazione all accesso in modo esclusivo seguita da un epilogo (exit section), mediante il quale il processo rilascia la risorsa <entry section> <sezione critica> <exit section> Sistemi Operativi L-A - Interazione tra Processi 27 27

Esempio: Produttore & Consumatore 0 msg produttore consumatore N-1 buffer HP: Buffer (mailbox) limitato di dimensione N Sistemi Operativi L-A - Interazione tra Processi 28 28

produttore&consumatore Necessita` di garantire la mutua esclusione nell esecuzione delle sezioni critiche (accesso e aggiornamento del buffer) Necessità di sincronizzare i processi: quando il buffer è vuoto (il consumatore non può prelevare messaggi) quando il buffer è pieno (il produttore non può depositare messaggi ) Sistemi Operativi L-A - Interazione tra Processi 29 29

Produttore & Consumatore: prima soluzione (attesa attiva) Processo produttore:... shared int cont=0; shared msg Buff [N]; main() { msg M; } do { produco(&m); while (cont==n); inserisco(m, Buff); cont=cont+1; }while(true); Processo consumatore:... shared int contatore=0; shared msg Buff [N]; main() { msg M; do } { while (cont==0); prelievo(&m, Buff); cont=cont-1; consumo(m); }while(true); Sistemi Operativi L-A - Interazione tra Processi 30 30

Produttore/Consumatore Problema: finchè non si creano le condizioni per effettuare l operazione di inserimento/prelievo, ogni processo rimane in esecuzione all interno di un ciclo: while (cont==n); attesa attiva while (cont==0); per migliorare l efficienza del sistema, in alcuni sistemi operativi e` possibile utilizzare le primitive: sleep() (): per sospendere il processo che la chiama wakeup(p) (P): per riattivare un processo P sospeso (se P non è sospeso, non ha effetto e il segnale di risveglio viene perso) Sistemi Operativi L-A - Interazione tra Processi 31 31

Produttore & Consumatore: seconda soluzione Processo produttore P:... shared msg Buff [N]; shared int cont=0; main() {msg M; do {produco(&m); if(cont==n)sleep(); inserisco(m, Buff); cont = cont + 1; if (cont==1) wakeup(c); } while(true); } Processo consumatore C:... shared msg Buff [N]; shared int cont=0; main() { msg M; } do { if(cont==0)sleep(); prelievo(&m, Buff); cont=cont-1; if (cont==n-1) wakeup(p); consumo(m); }while(true); Sistemi Operativi L-A - Interazione tra Processi 32 32

Produttore & Consumatore seconda soluzione Possibilità di blocco dei processi: consideriamo la sequenza temporale: 1. cont=0 (buffer vuoto) 2. C legge cont, poi viene deschedulato (stato pronto) 3. P inserisce un messaggio, cont++ (cont=1) 4. P esegue una wakeup(c): C non è bloccato(è pronto), il segnale è perso 5. C verifica cont e si blocca 6. P continua a inserire Messaggi, fino a riempire il buffer Blocco di entrambi i processi Soluzione: garantire la mutua esclusione dei processi nell esecuzione delle sezioni critiche (accesso a cont, inserimento e prelievo) Sistemi Operativi L-A - Interazione tra Processi 33 33

Produttore e consumatore È necessario garantire la mutua esclusione dei processi quando aggiornano le variabili condivise (Buff e cont), cioè nelle sezioni critiche Soluzione: uso dei semafori Sistemi Operativi L-A - Interazione tra Processi 34 34

Definizione di Semaforo: E` un tipo di dato astratto al quale sono applicabili solo due operazioni (primitive): wait (s) signal (s) Semafori (Dijkstra,, 1965) Al semaforo s sono associate: una variabile intera s.value non negativa con valore iniziale >= 0. 0 una coda di processi s.queue Il semaforo puo` essere condiviso da 2 o più processi per risolvere problemi di sincronizzazione (es.mutua esclusione) Sistemi Operativi L-A - Interazione tra Processi 35 35

Operazioni sui semafori: definizione void wait(s) { if (s.value == 0) } <il processo viene sospeso e il suo descrittore inserito in s.queue> else s.value=s.value-1; void signal(s) { if (<esiste un processo nella coda s.queue>) } <il suo descrittore viene estratto da s.queue e il suo stato modificato in pronto> else s.value=s.value+1; Sistemi Operativi L-A - Interazione tra Processi 36 36

wait/signal Wait: la wait(s), in caso di s.value=0, implica la sospensione del processo che la esegue (stato running -> waiting) nella coda s.queue associata al semaforo. Signal: l esecuzione della signal (s) non comporta concettualmente nessuna modifica nello stato del processo che l'ha eseguita, ma può causare il risveglio a un processo waiting nella coda s.queue. La scelta del processo da risvegliare avviene secondo una politica FIFO (il primo processo della coda). wait e signal agiscono su variabili condivise e pertanto sono a loro volta sezioni critiche! Sistemi Operativi L-A - Interazione tra Processi 37 37

Atomicità di wait e signal Affinchè sia rispettato il vincolo di mutua esclusione dei processi nell accesso al semaforo (mediante wait/signal), wait e signal devono essere operazioni indivisibili (azioni atomiche): durante un'operazione sul semaforo (wait o signal) nessun altro processo può accedere al semaforo fino a che l'operazione è completata o bloccata. Il Sistema Operativo realizza wait e signal come operazioni non interrompibili (ad es. system call). Sistemi Operativi L-A - Interazione tra Processi 38 38

Mutua esclusione con semafori: Esempio Consideriamo due processi P1 e P2 che condividono una struttura dati D sulla quale vogliamo quindi imporre il vincolo di mutua esclusione: shared data D; P1: /*sezione critica: */ Aggiorna1(&D); /*fine sez.critica: */ P2: /*sezione critica: */ Aggiorna2(&D); /*fine sez.critica: */ Aggiorna1 e Aggiorna2 sono sezioni critiche e devono essere eseguite in modo mutuamente esclusivo. Sistemi Operativi L-A - Interazione tra Processi 39 39

P1: Mutua esclusione con semafori: Esempio Soluzione: uso di un semaforo (binario) mutex, il cui valore e` inizializzato a 1. wait(mutex); Aggiorna1(&D); signal(mutex); shared data D; semaphore mutex=1; mutex.value=1; P2: wait(mutex) Aggiorna2(&D); signal(mutex); Il valore del semaforo mutex può assumere soltanto due valori (0,1): semaforo binario la soluzione è sempre corretta, indipendentemente dalla sequenza di esecuzione dei processi (e dallo scheduling della CPU). Sistemi Operativi L-A - Interazione tra Processi 40 40

P1: Mutua esclusione con semafori: esecuzione Ad es: verifichiamo la seguente sequenza di esecuzione: T 3: wait(mutex)=> P1 sospeso sulla coda ; Cambio di Contesto P1-> P2[P1 waiting, P2 running] P2: T 0: wait(mutex)=> mutex.value=0; T 1: <inizio di Aggiorna2> T 2: Cambio di Contesto P2->P1 [P2 ready, P1 running] T 7: <esecuzione di Aggiorna2> T 8: signal(mutex)=> mutex.value=1;... T 4: <conclus. di Aggiorna2> T 5: signal(mutex) => risveglio di P1 [P1 ready, P2 running] T 6: P2 termina: Cambio di Contesto P2->P1 [P2 terminated, P1 running]... Sistemi Operativi L-A - Interazione tra Processi 41 41

Sincronizzazione di processi cooperanti Mediante i semafori possiamo imporre vincoli temporali sull esecuzione di processi cooperanti. Ad esempio: P1: /*fase A : */ fasea( ); /*fine fase A */ P2: /*fase B: */ faseb( ); /*fine fase B */ Obiettivo: Vogliamo imporre che l esecuzione della fase A (in P1) preceda sempre l esecuzione della fase B (in P2) Sistemi Operativi L-A - Interazione tra Processi 42 42

Sincronizzazione di processi cooperanti Soluzione: introduco un semaforosync, inizializzato a 0. P1: fasea( ); signal(sync); semaphore sync=0; sync.value=0 P2: Sistemi Operativi L-A - Interazione tra Processi 43 wait(sync) faseb( ); se P2 esegue la wait prima della terminazione della fase A, P2 viene sospeso; quando P1 termina la fase A, puo`: Sbloccare P1, oppure Portare il valore del semaforo a 1 (se P2 non e` ancora arrivato allawait). 43

Produttore & Consumatore con semafori Problema di mutua esclusione: produttore e consumatore non possono accedere contemporaneamente al buffer: introduciamo il semaforo binario mutex, con valore iniziale a 1; Problema di sincronizzazione: il produttore non può scrivere nel buffer se questo è pieno: introduciamo il semaforo vuoto, con valore iniziale a N; il consumatore non può leggere dal buffer se questo è vuoto: introduciamo il semaforo pieno, con valore iniziale a 0; Sistemi Operativi L-A - Interazione tra Processi 44 44

Produttore & Consumatore con semafori /* Processo produttore P:*/ main() {msg M; do {produco(&m); wait(vuoto); wait(mutex); inserisco(m, Buff); signal(mutex); signal(pieno); } while(true);} shared msg Buff [N]; shared semaforo mutex; mutex.value=1; shared semaforo pieno; pieno.value=0 shared semaforo vuoto; vuoto.value=n /* Processo consumatore C:*/ main() { msg M; do { wait(pieno); wait(mutex); prelievo(&m, Buff); signal(mutex); signal(vuoto); consumo(m); }while(true);} Sistemi Operativi L-A - Interazione tra Processi 45... 45

Strumenti di Sincronizzazione Semafori: consentono una efficiente realizzazione di politiche di sincronizzazione tra processi La correttezza della realizzazione e` completamente a carico del programmatore Alternative: esistono strumenti di piu` alto livello (costrutti di linguaggi di programmazione) che eliminano a priori il problema della mutua esclusione sulle variabili condivise Variabili Condizione Regioni critiche Monitor Sistemi Operativi L-A - Interazione tra Processi 46 46