I semafori
Il semaforo contiene una variabile intera S che serve per proteggere l’accesso alle sezioni critiche.
Si può accedere al semaforo (alla variabile) solo attraverso due operazioni atomiche:
Altri nomi di wait e signal:
Variabili condivise tra gli n processi:
semaphore mutex; // inizialmente mutex = 1
Processo Pi:
S > 0 -> possibile accedere alla regione criticaS = 0 -> non e’ possibile accedere alla regione critica
Si definisce un semaforo come una struttura del tipo in figura:
Si assume che siano disponibili due operazioni (syscall):
In figura il codice relativo all’implementazione del comando wait.
In figura il codice relativo all’implementazione del comando signal.
Come garantire che le operazioni wait e signal vengano eseguite atomicamente?
-> (mettiamo un semaforo su un semaforo?)
Essendo funzioni di piccole dimensioni in questi casi si disabilitano le interruzioni durante l’esecuzione delle funzioni
Ad esempio: si vuole eseguire B in Pj solo dopo che A è stato eseguito in Pi
Due o più processi sono bloccati in attesa di un evento che può essere generato solo da uno dei due processi in attesa.
Un semaforo contatore può essere realizzato mediante due semafori binari.
Strutture dati:
Inizializzazione :
È un paradigma classico per processi cooperanti. Il processo produttore produce informazioni che vengono consumate da un processo consumatore.
Esempio: Un programma di stampa produce caratteri che verranno consumati dal driver della stampante.
La condizione in == out equivale sia a “buffer pieno” sia a “buffer vuoto”
Non è possibile utilizzare tutti gli elementi del buffer (se ne possono usare solo BUFFER_SIZE – 1)
Variabili condivise:
semaphore full, empty, mutex;
// inizialmente full = 0, empty = n, mutex = 1
Il buffer ha n posizioni, ciascuna in grado di contenere un elemento.
Allocazione contigua dei processi in memoria centrale
1. Storia ed evoluzione dei sistemi operativi
2. Struttura dei sistemi operativi
3. Interazione tra hardware e sistemi operativi
4. La rappresentazione dei processi
6. I Thread
7. Lo scheduling dei processi: introduzione e primi esempi
9. La sincronizzazione dei processi
10. I semafori
11. Allocazione contigua dei processi in memoria centrale
12. Allocazione non contigua dei processi in memoria centrale
14. Gli algoritmi di avvicendamento delle pagine
16. I sistemi RAID
17. L'organizzazione logica dei file system
18. L'organizzazione fisica dei file system
1. Storia ed evoluzione dei sistemi operativi
2. Struttura dei sistemi operativi
3. Interazione tra hardware e sistemi operativi
4. La rappresentazione dei processi
6. I Thread
7. Lo scheduling dei processi: introduzione e primi esempi
9. La sincronizzazione dei processi
10. I semafori
11. Allocazione contigua dei processi in memoria centrale
12. Allocazione non contigua dei processi in memoria centrale
16. I sistemi RAID
17. L'organizzazione logica dei file system
18. L'organizzazione fisica dei file system
I podcast del corso sono disponibili anche su iTunesU e tramite Feed RSS.