Semafori
2 primitive indivisibili
V(S) per rilasciare la risorsa
V(S) viene invocata dal processo che
finisce di utilizzare una risorsa
incrementa il valore di S
risveglia, se presente, il primo processo
nella coda di attesa
P(S) per accedere alla risorsa
se il semaforo è rosso
viene messo in attesa in una
coda e aspetta che si liberi la risorsa
se il semaforo è verde, viene
decrementato S
binari o spinlock
x = semaforo
x=1, il semaforo è verde e quindi il
processo può accedere alla risorsa
x=0, il semaforo è rosso e quindi il
processo deve aspettare.
primitiva S
intero non negativo
Starvation e deadlock
blocco processi
starvation
blocco individuale
deadlock
Blocco multiplo
proprietà di fairness
garantita da OS
deve mandare in esecuzione
sezione critica
sequenza delle
istruzioni con la quale un processo
accede
modifica
rilascia
una risorsa
in ogni istante può esservi in esecuzione solo una
La sincronizzazione fra processi
x=1, se la risorsa è libera
x=0, se la risorsa è già impegnata da un
altro processo
primitiva lock
allocare una risorsa x a un
processo
testa il semaforo per verificarne il suo
colore
se verde, lo deve mutare in rosso
se rosso, deve attendere che diventi verde
per poi mutarlo in rosso
attesa attiva