il processo che ha invocato P(S)

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

primitiva unlock

permette di rilasciare una risorsa x

imposta il colore del semaforo da rosso a
verde