cerca
Sistemi Operativi - Appunti caotici
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.SO-Mod3-4-Lez4 History

Hide minor edits - Show changes to output

Changed lines 47-48 from:
Riceve il messaggio presente nel buffer. Tale funzione è bloccante, ovvero blocca il mittente fino a quando non c'è un messaggio nel buffer.
to:
Riceve il messaggio presente nel buffer. Tale funzione è bloccante, ovvero blocca il ricevente fino a quando non c'è un messaggio nel buffer.
Changed lines 64-67 from:
Come sempre ci devono essere delle politiche di sincronizzazione per evitare dati inconsistenti. Ci possono essere due tipi di comunicazioni:\\

#''Comunicazioni asincrone:'' queste chiamate sono bloccanti solo se l'operazione non può essere completata, l'invio avviene indipendetemente da ciò che sta facendo il processo ricevente;\\
to:
Come sempre ci devono essere delle politiche di sincronizzazione per evitare dati inconsistenti. Ci possono essere due tipi di comunicazioni:
#''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;
Changed lines 70-73 from:
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:\\

#''Comunicazione simmetrica:'' è il caso in cui dico esplicitamente chi è il processo mittente e chi è il processo ricevente (comunicazione diretta);\\
to:
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:
#''Comunicazione simmetrica:'' è il caso in cui dico esplicitamente chi è il processo mittente e chi è il processo ricevente (comunicazione diretta);
Changed lines 75-80 from:
I problemi che sorgono sono immediati:\\

*Come faccio ad indentificare i processi che vogliono comunicare;\\

*Non vi è alcuna memoria condivisa fra i processi;\\
to:
I problemi che sorgono sono immediati:
*Come faccio ad indentificare i processi che vogliono comunicare?
*Non vi è alcuna memoria condivisa fra i processi;
Changed lines 84-86 from:
to:
I messaggi vengono normalmente smaltiti in modalità FIFO, ma potrebbero essere previste politiche di altro tipo (ad esempio con priorità, fissando deadline, ecc)
Changed lines 13-14 from:
In questa tecnica il processo mittente genererà le informazioni da trasmettere e le invierà, mediante messaggi, al processo ricevente.\\
to:
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.
Changed lines 16-23 from:
Il contenuto dei messaggi può contenere diverse informazioni che sono:\\

*Identità del processo mittente;\\

*Identità del processo ricevente;\\

*Informazioni da trasmettere;\\
to:
Il contenuto dei messaggi può contenere diverse informazioni che sono:
*Identità del processo mittente;
*Identità del processo ricevente;
*Informazioni da trasmettere;
Changed lines 24-42 from:
Il sistema operativo può assegnare due tipi di buffer:\\

#Nel primo caso viene assegnato un buffer ad ogni coppia di processi;\\

#Nel secondo caso il sistema operativo può assegnare un buffer di uso generale
.\\

C'è da considerare il fatto che potrebbe essere pericolo assegnare un unico pull di buffer se ho più applicazioni. La quantità di buffer assegnati dal sistema operativo può essere:\\

*Illimitata: il processo mittente appena possiede un messaggio lo deposita immediatamente nel buffer;\\

*Limitata: il processo mittente potrebbe aspettare prima di depositare il messaggio nel caso in cui non ci siano buffer liberi;\\

*Nulla: il processo mittente non può depositare alcun messaggio, dato che
non ci sono buffer.

!!!!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, tale funzione è bloccante, ovvero blocca il processo mittente nel caso non ci fossero buffer liberi. Una volta liberato un buffer il processo mittente potrà depositare il messaggio e la funzione sbloccherà il mittente.\\
to:
Il sistema operativo può assegnare buffer:
#ad ogni coppia di processi, in modo esplicito;
#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:
*Illimitata: il processo mittente appena possiede un messaggio lo deposita immediatamente nel buffer. Non è mai bloccante;
*Limitata: il processo mittente potrebbe aspettare prima di depositare il messaggio nel caso in cui non ci siano buffer liberi. Risulta quindi bloccante se manca spazio disponibile;
*Nulla: il processo mittente
non può depositare alcun messaggio, dato che non ci sono buffer disponibili in cui deporlo. E' sempre bloccante. Da notare come il processo ricevente non trovi alcun messaggio da leggere, ma il processo mittente in attesa di deporlo; ciò potrebbe permettere l'instaurarsi di una comunicazione diretta


!!!!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.
Changed lines 45-47 from:
'''Ricezione:''' ''receive(proc_mittente, messaggio)''. Riceve il messaggio presente nel buffer. Tale funzione è bloccante, ovvero blocca il mittente fino a quando non c'è un messaggio nel buffer.

!!!!Funzioni(3)
to:
'''Ricezione:''' ''receive(proc_mittente, messaggio)''.

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

!!!!Funzioni (3)
Changed lines 52-53 from:
'''Invio condizionale:''' ''cond_send(proc_ricevente, messaggio): error status''. A differenza della funzione di invio precendete questa funzione non è bloccante, ovvero se al momento di depositare il messaggio non è presente alcun buffer libero ritornerà un messaggio di errore.
to:
'''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.
Changed lines 57-60 from:
!!!!Funzioni(4)
Quindi si avrà anche una '''Ricezione condizionale''' ''con_receive(proc_mittente, messaggio): error status''.
Allo stesso modo il processo ricevente prelevererà il messaggio dal buffer, se non ci sono messaggi ritornerà una condizione di errore, non ricevendo alcun messaggio.
to:
!!!!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.
Changed line 76 from:
!!!Caratteristiche e problemi
to:
!!!!Caratteristiche e problemi
Added line 85:
!!Pag 7
Changed lines 77-79 from:
'''vado a mangiare'''
to:
I problemi che sorgono sono immediati:\\

*Come faccio ad indentificare i processi che vogliono comunicare;\\

*Non vi è alcuna memoria condivisa fra i processi;\\

*Le operazioni di sincronizzazione degli accessi è gestita implicitamente dal sistema operativo.

!!!!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.
Changed lines 70-73 from:
to:
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:\\

#''Comunicazione simmetrica:'' è il caso in cui dico esplicitamente chi è il processo mittente e chi è il processo ricevente (comunicazione diretta);\\

#''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
'''vado a mangiare'''
Changed lines 64-67 from:
#''Comunicazioni asincrone:''
to:
#''Comunicazioni asincrone:'' queste chiamate sono bloccanti solo se l'operazione non può essere completata, l'invio avviene indipendetemente da ciò che sta facendo il processo ricevente;\\

#''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
Changed lines 45-46 from:
*'''Invio:''' ''send(proc_ricevente, messaggio)''. Deposita il messaggio in un buffer libero, tale funzione è bloccante, ovvero blocca il processo mittente nel caso non ci fossero buffer liberi. Una volta liberato un buffer il processo mittente potrà depositare il messaggio e la funzione sbloccherà il mittente.
to:
'''Invio:''' ''send(proc_ricevente, messaggio)''. Deposita il messaggio in un buffer libero, tale funzione è bloccante, ovvero blocca il processo mittente nel caso non ci fossero buffer liberi. Una volta liberato un buffer il processo mittente potrà depositare il messaggio e la funzione sbloccherà il mittente.\\
Changed lines 48-67 from:
to:
!!!!Funzioni(2)
'''Ricezione:''' ''receive(proc_mittente, messaggio)''. Riceve il messaggio presente nel buffer. Tale funzione è bloccante, ovvero blocca il mittente 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 precendete questa funzione non è bloccante, ovvero se al momento di depositare il messaggio non è presente alcun buffer libero ritornerà un messaggio di errore.

!!Pag 5
!!!!Funzioni(4)
Quindi si avrà anche una '''Ricezione condizionale''' ''con_receive(proc_mittente, messaggio): error status''.
Allo stesso modo il processo ricevente prelevererà 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:\\

#''Comunicazioni asincrone:''

Changed lines 42-43 from:
!!Pag 4
to:
!!!!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, tale funzione è bloccante, ovvero blocca il processo mittente nel caso non ci fossero buffer liberi. Una volta liberato un buffer il processo mittente potrà depositare il messaggio e la funzione sbloccherà il mittente.

!!Pag
4
Added lines 1-45:
(:title Sistemi Operativi - Appunti caotici:)
[[Torna alla pagina di Sistemi Operativi->SistemiOperativi]]
----

%titolo%''':: Appunti caotici ::'''

%center%%sottotitolo%Lezione 4
%center%%sottotitolo%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.\\

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

*Identità del processo mittente;\\

*Identità del processo ricevente;\\

*Informazioni da trasmettere;\\

*Eventuali informazioni relative alla gestione dello scambio di messaggi.

!!Pag 3
!!!!Buffer
Il sistema operativo può assegnare due tipi di buffer:\\

#Nel primo caso viene assegnato un buffer ad ogni coppia di processi;\\

#Nel secondo caso il sistema operativo può assegnare un buffer di uso generale.\\

C'è da considerare il fatto che potrebbe essere pericolo assegnare un unico pull di buffer se ho più applicazioni. La quantità di buffer assegnati dal sistema operativo può essere:\\

*Illimitata: il processo mittente appena possiede un messaggio lo deposita immediatamente nel buffer;\\

*Limitata: il processo mittente potrebbe aspettare prima di depositare il messaggio nel caso in cui non ci siano buffer liberi;\\

*Nulla: il processo mittente non può depositare alcun messaggio, dato che non ci sono buffer.

!!Pag 4

----
[[Torna alla pagina di Sistemi Operativi->SistemiOperativi]]