Mutua esclusione con message passing

hee136
Testo
One elegant solution to the mutual exclusion problem is based on message passing instead of shared variables. The idea is that two processes share a message channel and synchronize by reading and writing from/onto this channel. In this exercise, you have to:
Write a Promela model for a mutual exclusion algorithm for two processes that uses a channel as its only global data structure.
Link

-------------------------------------------------

Non riesco a capire cosa devo fare. Sono indeciso fra le seguenti due:
1) realizzare due processi che condividono un canale e una risorsa e tramite al canale si sincronizzano sull'accesso alla risorsa
2) realizzare due processi che condividono solo un canale e una copia locale di una risorsa che condividono attraverso il canale. Quando uno dei due vuole usare la risorsa, lo dice sul canale. Così l'altro sa che non può accedere. Alla fine chi ha preso la risorsa dice all'altro che la risorsa è libera e comunica pure il risultato della sua elaborazione così che l'altro possa aggiornare la sua copia locale prima di iniziare la sua elaborazione.

Ho pensato alle seguenti soluzioni (valide in entrambi i casi):
1) processo che gestisce in modo centralizzato la risorsa
2) token che si passano i processi in sequenza, chi ha il token può accedere alla risorsa

Risposte
hamming_burst
"hee136":
Testo
One elegant solution to the mutual exclusion problem is based on message passing instead of shared variables. The idea is that two processes share a message channel and synchronize by reading and writing from/onto this channel. In this exercise, you have to:
Write a Promela model for a mutual exclusion algorithm for two processes that uses a channel as its only global data structure.

a parte che non conosco questo modello (devo controllare se è citato in qualche libro di programmazione concorrente che ho utilizzato in passato ed è definito in altro modo, se serve controllerò...). Mi pare proprio che il tipo di condivisone di risorse descritto qui sopra sia quello utilizzato dai processi linux (le fork()). Un punto di riferimento può essere proprio questo, per rispondere al quesito del problemi, cioè comprendere come gestiscono la comunicazione i processi e vedere come adattarlo al tuo problema.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.