Cinque filosofi passano la vita pensando e mangiando, attorno ad una tavola rotonda. Al centro della tavola vi è una zuppiera di riso e la tavola è apparecchiata con cinque bacchette.
Quando un filosofo pensa non interagisce con i colleghi. Quando gli viene fame tenta di impossessarsi delle bacchette che stanno alla sua destra ed alla sua sinistra. Il filosofo può prendere una sola bacchetta per volta.
Quando un filosofo affamato possiede due bacchette contemporaneamente, mangia. Terminato il pasto, appoggia le bacchette e ricomincia a pensare.
Si può rappresentare ciascuna bacchetta con un semaforo.
Ogni filosofo tenta di afferrare una bacchetta con un’operazione di wait e la rilascia eseguendo signal
se tutti i filosofi hanno fame contemporaneamente e prendono la bacchetta alla loro sinistra nessuno può prendere la bacchetta alla sua destra
(DEADLOCK)
Possibile soluzione
Ogni filosofo, dopo aver preso la prima forchetta, verifica se la seconda e’ disponibile. In caso contrario posa anche la prima
c’e il rischio che tutti i filosofi prendono la bacchetta sinistra, vedono che la destra e’ occupata e posano di nuovo la sinistra.
(STARVATION)
Possibile soluzione
Ogni filosofo, prima di mangiare si assicura di aver preso entrambe le bacchette
Deadlock:
insieme di processi bloccati (su una istruzione wait), ognuno dei quali in attesa che si libera una risorsa assegnata in uso esclusivo di un altro processo
Starvation:
insieme di processi in esecuzione che tentano ripetutamente senza successo di accedere ad una risorsa assegnata in uso esclusivo di un altro processo
state[i]=0 i=0,..,4 s[i]=0 i=0,..,4
Il semaforo e’ relativo al filosofo e non alla forchetta
La funzione test vede se i vicini stanno mangiando. In caso contrario dichiara che inizia a mangiare e alza il semaforo (abilita il filosofo a mangiare)
Un filosofo in attesa sulla wait in take_forks, sara’ sbloccato da un filosofo vicino che esegue test in put_forks
1° problema dei lettori–scrittori: nessun processo lettore deve attendere, salvo che uno scrittore abbia già ottenuto l’accesso ai dati condivisi (precedenza ai lettori)
⇓
possibilità di starvation per gli scrittori
2° problema dei lettori–scrittori: nessun processo scrittore deve attendere, salvo che uno scrittore abbia già ottenuto l’accesso ai dati condivisi (precedenza agli scrittori)
⇓
possibilità di starvation per gli lettori.
in un negozio di barbiere ci sono
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