Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Marco Lapegna » 22.Esercitazione 4: Sincronizzazione dei processi


Problema dei cinque filosofi

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.


Problema dei cinque filosofi

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.

Problema dei cinque filosofi

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


Problema dei cinque filosofi : soluzione 1


Soluzione 1: DEADLOCK

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

soluzione 2:


soluzione 2:


soluzione 2:


soluzione 2: STARVATION

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 e starvation

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

Soluzione 3: INEFFICIENTE


Soluzione 4 : OK


Soluzione 4: OK


Soluzione 4: OK


Soluzione 4: OK


Soluzione 4: OK


Osservazioni

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

Problema dei lettori e degli scrittori

  • Un insieme di dati (ad es. un file) deve essere condiviso da più processi concorrenti che possono richiedere la sola lettura del contenuto, o anche un aggiornamento.
  • Se due lettori accedono contemporaneamente ai dati condivisi non ha luogo alcun effetto negativo
  • Se uno scrittore accede simultaneamente ad un altro processo si può avere incoerenza dell’informazione

2 tipi di problemi

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 tipi di problemi

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.

Soluzione (proc. scrittore)


Soluzione (proc. lettore)


Il barbiere sonnolento

in un negozio di barbiere ci sono

  • una sedia per lavorare
  • n sedie per far attendere i clienti
  • il barbiere di solito dorme
  • quando arriva un cliente, questi lo sveglia e si fa servire
  • se nel frattempo arrivano altri clienti, si accomodano sulle sedie oppure vanno via se sono tutte occupate

Soluzione


Soluzione


  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion