Swappa : Uni / Sistemi Operativi - Appunti caotici
Creative Commons License

Torna alla pagina di Sistemi Operativi


 :: Appunti caotici ::

Lezione 4 Comunicazione con scambio di messaggi

Pag 2

Modello della comunicazione a messaggi

In questa tecnica il processo mittente genererà le informazioni da trasmettere e le invierà, mediante messaggi, al processo ricevente. La politica utilizzata sarà la FCFS.

Messaggi

Il contenuto dei messaggi può contenere diverse informazioni che sono:

Pag 3

Buffer

Il sistema operativo può assegnare buffer:

  1. ad ogni coppia di processi, in modo esplicito;
  2. di uso generale, ovvero un unico pool di buffer che il sistema operativo mette indistintamente a disposizione per i vari processi. C'è però da considerare il fatto che questa scelta potrebbe risultare rischiosa, nel caso in cui avessi più applicazioni aperte.

La quantità di buffer assegnati dal sistema operativo può essere:

Funzioni (1)

Per permettere l'invio e la ricezioni di messaggi sono state messe a disposizioni determinate funzioni:

Invio: send(proc_ricevente, messaggio).

Deposita il messaggio in un buffer libero. La funzione è bloccante, ovvero blocca il processo mittente nel caso in cui non ci fossero buffer liberi. Una volta liberato un buffer il processo mittente potrà depositare il messaggio e la funzione sbloccherà il mittente.

Con questa funzione il processo mittente manda il messaggio e non se ne preoccupa più: se non c'è spazio nel buffer aspetta tutto il tempo che gli serve.

Pag 4

Funzioni(2)

Ricezione: receive(proc_mittente, messaggio).

Riceve il messaggio presente nel buffer. Tale funzione è bloccante, ovvero blocca il ricevente fino a quando non c'è un messaggio nel buffer.

Funzioni (3)

Nel caso non si voglia una chiamata bloccante si effettuano delle chiamate di invio e ricezione condizionale.

Invio condizionale: cond_send(proc_ricevente, messaggio): error status.

A differenza della funzione di invio precedente questa funzione non è bloccante, ovvero se al momento di depositare il messaggio non è presente alcun buffer libero ritornerà un messaggio di errore e il messaggio non sarà più depositato, ma sarà responsabilità del mittente decidere se rimandarlo o meno.

Pag 5

Funzioni (4)

Quindi si avrà anche una Ricezione condizionale: con_receive(proc_mittente, messaggio): error status.

Allo stesso modo il processo ricevente preleverà il messaggio dal buffer, se non ci sono messaggi ritornerà una condizione di errore, non ricevendo alcun messaggio.

Sincronizzazione dei processi comunicanti

Come sempre ci devono essere delle politiche di sincronizzazione per evitare dati inconsistenti. Ci possono essere due tipi di comunicazioni:

  1. Comunicazioni asincrone: queste chiamate sono bloccanti solo se l'operazione non può essere completata, l'invio avviene indipendentemente da ciò che sta facendo il processo ricevente. In altre parole, quando P manda il messaggio non sa a che punto della computazione sia arrivato Q, dato che può mandarlo in qualsiasi momento;
  2. Comunicazioni sincrone: queste comunicazioni sono possibili quando tutti e due i processi sono pronti per lo scambio di informazioni (quindi il processo mittende spedirà le informazioni e il processo ricevente sarà subito pronto per prelevarle). Nel caso in cui il processo mittente arrivi per primo si dovrà fermare ed aspettare il processo ricevente.

Pag 6

Identificazione dei processi comunicanti

Utilizzando la tecnica dello scambio di messaggi per la comunicazione dei processi devo identificare i processi che vogliono comunicare. Posso avere due tipi di comunicazione:

  1. Comunicazione simmetrica: è il caso in cui dico esplicitamente chi è il processo mittente e chi è il processo ricevente (comunicazione diretta);
  2. Comunicazione asimmetrica: in questo caso il processo mittente o il processo ricevente possono non essere identificati univocamente. Posso quindi ricevere messaggi da un processo di un gruppo specificato oppure da un gruppo qualsiasi. Allo stesso modo posso inviare messaggi a un processo di un gruppo specificato oppure a un processo qualsiasi.

Caratteristiche e problemi

I problemi che sorgono sono immediati:

Pag 7

Implementazione

Per risolvere i problemi elencati precendentemente posso implementare i buffer direttamente nello spazio di indirizzamento del sistema operativo, definendo il numero dei buffer che voglio utilizzare. Utilizzando quest'implementazione risolvo anche il problema dell'identificazione dei processi che inviano informazione, dato che mi basta vedere qual è il processo attivo, in quanto colui che ha fatto richiesta si troverà sicuramente nello stato di running.

I messaggi vengono normalmente smaltiti in modalità FIFO, ma potrebbero essere previste politiche di altro tipo (ad esempio con priorità, fissando deadline, ecc)


Torna alla pagina di Sistemi Operativi

(Printable View of http://www.swappa.it/wiki/Uni/SO-Mod3-4-Lez4)