Compito del 4 settembre 2019+soluzioni
Stai vedendo l'anteprima delle prime pagine. Il file completo è gratis: registrati per leggerlo tutto.
Di cosa parla
- Esercizio 1: Algoritmo di Dekker
- Formalizzazione LTL dell'asserzione: "Se
wantpè sempre vero eturnvale sempre 1, allorawantqdiventa falso e lo rimane per sempre." Soluzione:□(want p ^ (turn = 1)) ⇒ ◇□¬wantq. - Dimostrazione per induzione computazionale dell'invariante:
wantq ⇒ (q3..5 V q8..10). La dimostrazione verifica la verità nello stato iniziale e analizza le transizioni di stato che modificano o rendono falsa la premessa, garantendo la conclusione.
- Formalizzazione LTL dell'asserzione: "Se
- Esercizio 2: Diagramma degli Stati per Semafori
- Costruzione del diagramma degli stati per un programma concorrente con due semafori (
SeT). - Analisi della proprietà di liveness: "P entra infinite volte in p2". Il diagramma mostra che tutti i cicli includono p2, confermando la proprietà.
- Costruzione del diagramma degli stati per un programma concorrente con due semafori (
- Esercizio 3: Problema dei Filosofi a Cena (2 Filosofi)
- Soluzione basata su semafori per due filosofi, acquisendo le forchette in ordine (prima
f0poif1). - Assenza di deadlock garantita dall'ordine di acquisizione. Starvation freedom è assicurata dal meccanismo di sblocco e disponibilità delle risorse.
- Soluzione basata su semafori per due filosofi, acquisendo le forchette in ordine (prima
- Esercizio 4: Monitor per Incrocio Stradale
- Implementazione di un monitor per regolare il traffico (NS o EO), con operazioni
enterCrossing(dir)eleaveCrossing(dir). - Variabili chiave:
P(direzione di precedenza),C(auto nell'incrocio),waitingCar[0..1](condition variables). enterCrossingattende se incrocio occupato o precedenza non per propria direzione.leaveCrossingcambia precedenza se incrocio si svuota e ci sono auto in attesa nell'altra direzione.- Rischio di starvation: un flusso continuo in una direzione può impedire alle auto nell'altra di accedere indefinitamente.
- Implementazione di un monitor per regolare il traffico (NS o EO), con operazioni
- Esercizio 5: Implementazione Java del Monitor per Incrocio
- Implementazione in Java del monitor usando
ReentrantLockeCondition. - Classe
Crossingcon variabiliP,C,waiting(contatori auto in attesa) ewaitPred(array diCondition). enterCrossingattende sulla condizionewaitPred[dir]seC>0 && P!=dir.leaveCrossing, se incrocio vuoto e auto in attesa nell'altra direzione, cambiaPe notifica (signalAll) suwaitPred[1-dir].- Le considerazioni sulla starvation sono analoghe all'esercizio 4.
- Implementazione in Java del monitor usando
Questo appunto è gratis. Registrati in 30 secondi per leggere tutte le pagine e scaricarlo.