Kategóriák: Minden - processo

a GIANLUCA DAMIANI 5 éve

167

Semafori

La gestione della sincronizzazione tra processi riveste un ruolo cruciale nel garantire l'efficienza e l'equità nell'allocazione delle risorse in un sistema operativo. Due problematiche principali che possono sorgere sono lo starvation e il deadlock.

Semafori

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