3) Cosa si intende per primitiva bloccante/non bloccante?
Una primitiva non bloccante implica nessun ritardo nella sua esecuzione. La distinzione è a livello locale, nessuna distinzione a livello di semantica.
Comportamento delle primitive non bloccanti:
- send termina appena il messaggio è stato accodato o è stato copiato per la trasmissione (localmente)
- receive segnala la disponibilità a ricevere e mette a disposizione un area di buffer
- uso di interruzioni per segnalare il completamento della operazione
vantaggi
- massima flessibilità
- durata prevedibile (real time)
svantaggi e problemi
- possibilità di accesso multiplo all'area del messaggio
- difficoltà di programmazione: il partner della comunicazione si trova in uno stato impredicibile
- difficoltà di prova dei programmi
Primitive Bloccanti: si combina comunicazione e sincronizzazione con aggancio alla semantica
Comportamento delle primitive bloccanti:
- send non termina fino a quando il messaggio non è stato trasmesso (possibilità, in caso di affidabilità, di attendere anche la avvenuta ricezione da parte del destinatario).
- receive non termina fino a quando il messaggio è nel buffer del processo ricevente.
vantaggi
- massima sicurezza.
svantaggi e problemi
- limitazione del parallelismo.
- durata imprevedibile.
L’uso mescolato di primitive dei due tipi non produce conflitto.
Nei sistemi reali c’è sempre un time-out sulle primitive bloccanti, specie per il cliente.