Guida Comunicazione tra processi (S.O.)

Stato
Discussione chiusa ad ulteriori risposte.

syscall

Utente Emerald
21 Settembre 2013
683
43
581
475
Ultima modifica da un moderatore:
Nell'articolo tratteremo la comunicazione tra processi in un sistema operativo.



Torniamo a discutere della teoria dei sistemi operativi e, dopo aver affrontato a grandi linee ed in maniera semplice l'architettura di un S.O., ritengo opportuno scrivere, in maniera molto discorsiva, di come i processi comunichino tra loro all'interno dello stesso.

L'argomento infatti è molto importante al fine di comprendere al meglio il funzionamento teorico di un sistema operativo. La comunicazione fra processi comporta infatti la descrizione di politiche e meccanismi che permettono ai processi di scambiarsi informazioni per operare fra loro in modo cooperativo.

Iniziamo col dire che in primo luogo vanno definite le entità coinvolte in una comunicazione, che sono: Il processo mittente (P), che produrrà l'informazione, il processo destinatario (Q) che riceverà l'informazione e il canale di comunicazione, attraverso il quale l'informazione potrà fluire.

Prima di elencare le principali implementazioni, dobbiamo distinguere due modi di comunicare, quali la comunicazione diretta e indiretta.

Nella comunicazione diretta, ogni processo che vuole comunicare deve conoscere esplicitamente il mittente o il destinatario della comunicazione stessa. Solo allora si potrà procedere alla creazione del canale che presenti seguenti caratteristiche:
  • si stabilisce automaticamente tra due processi quando entrambi conoscono la loro identità;
  • ogni canale è associato esattamente a due processi.

Nella comunicazione indiretta, mittente e destinatario possono non conoscersi, infatti i messaggi verranno inviato a delle porte univoche e i due processi potranno comunicare solo condividendo una porta. In questo caso, il canale di comunicazione ha le seguenti caratteristiche:
  • si crea solo se entrambi i processi condividono una porta;
  • un canale può essere associato a più di due processi.

Con questo tipo di comunicazione non si pone il problema che il mittente e destinatario debbano esser vivi e attivi durante tutte le comunicazioni.

La comunicazione con memoria condivisa può essere implementata in vari modi:
  • Variabili globali
  • Buffer
  • Scambio di messaggi
  • Mail box
  • File
  • Socket

Variabili globali
Si hanno due processi con una partizione del loro spazio di indirizzamento che si sovrappongono. Pur essendo un sistema rapido, avere delle partizioni della memoria centrale in comune implica dei problemi, come la possibilità di compiere operazioni concorrenti. Al fine di evitare cose di questo genere, o si fa in modo che queste zone comuni siano gestite direttamente dal sistema operativo, oppure si realizza un'area comune fisicamente condivisa.​

Buffer
Si ha un buffer dal quale il processo destinatario andrà a prelevare le informazioni inserite dal processo mittente.​
Questo genere di comunicazione prevede meccanismi di sincronia al fine di evitare accessi concorrenti agli stessi dati che provocherebbero l'inconsistenza degli stessi.​

Scambio di messaggi
Prevede che l'informazione sia incompleta all'interno dei messaggi.​
Nel messaggio sono contenute anche informazioni sull'identità del mittente e del destinatario, con relative informazioni sullo scambio.​
Il messaggio viene memorizzato in un buffer e il sistema opeartivo potrà assegnarlo esplicitamente ad ogni coppia di processi.​

Mail box
Il messaggio viene depositato in una mail box (porta), una struttura presente nel sistema operativo (accessibile tramite un nome); oltre all'informazione da inviare contiene l'identità del mittente, il nome della mail box del destinatario ed eventuali informazioni di supporto alla gestione del messaggio nella mail box.​

File
La comunicazione con i file si divide in comunicazione con file condiviso o con pipeline, e rappresenta una naturale estensione della comunicazione con mail box, solo che i file fanno uso della memoria di massa.​
La comunicazione con pipeline utilizza le pipe, ovvero sfrutta dati residenti in memoria centrale e che condivide con i file molte delle sue funzioni.​

Socket
La comunicazione con i socket è dal punto di vista concettuale una generalizzazione delle reti e della pipe, anche se dal punto di vista realizzativo si tratta di strutture assai complesse.​
Nel sistemi operativi moderni, i socket sono delle astrazioni software, progettate per utilizzare delle api standard per la trasmissione di dati e la loro ricezione attraverso una rete o una RPC.​
Dal punto di vista di un programmatore, un socket, è un particolare oggetto su cui scrivere o leggere dati da trasmettere o ricevere.​

Bisogna anche dire che i processi, all'interno del sistema operativo, hanno delle priorità.
Il mezzo con cui il sistema operativo seleziona eventuali processi dalle code e sceglie tra quelli pronti nella memoria, è detto "scheduler", di cui parleremo in maniera più approfondita nella prossima guida :p

Ricordo inoltre che potete consultare le altre discussioni qui:



Ciao, ciao! o/
 
Re: [GUIDA]Comunicazione tra processi (S.O.)

Fai piano, devo ancora leggere le prime due :asd:

Inviato dal mio GT-I9100 usando Tapatalk 4
 
Re: [GUIDA]Comunicazione tra processi (S.O.)

Ciao,

non preoccuparti, prenditi pure tutto il tempo che reputi necessario.

La mia idea e' scrivere inizialmente dando una panoramica generale delle varie componenti, per poi successivamente approfondire magari integrando delle immagini che dovrei creare appositamente per far comprendere in maniera ancora piu' semplice quanto scritto, linkando in un unico thread tutti i vari argomenti che ho in mente di trattare!

Grazie comunque per l'interessamento ;-)
 
Stato
Discussione chiusa ad ulteriori risposte.