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