Comunicazione tra processi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m via cat. madre
m Bot: Correzione di uno o più errori comuni
Riga 1:
{{nota disambigua|altri significati della sigla IPC|[[Istruzioni Per Ciclo]]}}
==Generalità==
L'espressione '''comunicazione tra processi''' (in inglese '''Inter-Process Communication''' o '''IPC''') si riferisce a tutte quelle tecnologie [[software]] il cui scopo è consentire a diversi [[Processo (informatica)|processi]] di comunicare tra loro scambiandosi dati e informazioni. I processi possono risiedere sullo stesso computer o essere [[calcolo distribuito|distribuiti]] su una [[rete di computer|rete]]. Tutti i [[sistema operativo|sistemi operativi]] multitasking forniscono qualche meccanismo fondamentale di IPC; altri meccanismi più sofisticati o orientati a particolari tipi di [[sistema software|sistemi software]] possono essere forniti da tecnologie [[middleware]], [[linguaggio di programmazione|linguaggi di programmazione]] o a [[livello applicativo]], basandosi sui meccanismi forniti dal sistema operativo. In modo equivalente, questi metodi vengono utilizzati per la gestione dei [[thread]].
 
Nel caso specifico di processi distribuiti, i meccanismi di comunicazione fra processi sono in effetti [[protocollo di rete|protocolli di rete]]. Si deve notare, tuttavia, che non tutti i protocolli di rete sono meccanismi di IPC; ai livelli bassi della gerarchia [[Open Systems Interconnection|ISO OSI]], infatti, il concetto di processo non compare, e i protocolli si limitano a farsi carico del trasferimento di dati fra computer. L'esempio forse più noto di protocollo di rete per lo scambio di informazioni fra processi è [[Transmission Control Protocol|TCP]]; per un esempio di IPC a livello di linguaggio di programmazione si pensi a [[Remote Method Invocation|RMI]] di [[Java (linguaggio)|Java]]. Di norma, i meccanismi di IPC per processi distribuiti permettono la comunicazione anche fra processi residenti sulla stessa macchina.
Riga 37:
Nelle situazioni più semplici l'avanzamento dei [[processi]] avviene in maniera ''sequenziale'' cioè, [[sistema operativo]] assegna ad ogni processo le risorse necessarie per portare a termine a termine il lavoro.
Si parla di ''non sequenzialità'' quando i processi sono più complessi e bisogna suddividere il processo principale in sotto-processi più semplici la elaborare.
Generalmente i sistemi operativi operano nell'ottica '''non-sequenziale'''. È bene però accennare che tali processi possono effettuare delle comunicazioni attraverso lo scambio di informazioni e di eseguire le diverse operazioni in modalità parallela .Esistono poi situazioni in cui i processi entrino in competizione per l'utilizzo di una risorsa, creando così delle esecuzioni concorrenti . Tali situazioni vengono gestite dal sistema operativo tramite alcune [[primitive]] situate nel [[kernel]] e in particolare dal gestore dei processi ([[Scheduler]]).
 
==Scambio di informazioni==
 
Al livello base della comunicazione tra processi si presenta la possibilità dello scambio di informazioni tra due o più processi. Tale opzione viene realizzata attraverso due primitive:
*Send : che consente l'invio dell'informazione
*Receive : che consente di ricevere le informazioni
 
Un esempio tipico di comunicazione tra processi in rete viene presentato nell'architettura [[client/server]], le routine usate per lo scambio di informazioni sulla [[rete]] prendono il nome di [[socket]].
Riga 49:
==Elaborazione==
 
L'elaborazione dei processi viene suddivisa in due modalità :
* la modalità parallela
* la modalità concorrente
Riga 57:
L'elaborazione parallela dei processi consiste nel eseguire interi processi o parti di essi in modalità parallela.
Il sistema operativo può richiedere l'esecuzione di uno o più processi mentre un altro processo è in fase di esecuzione. I diversi processi che vengono lanciati in esecuzione prendono il nome di ''Coroutine'', segnalano il completamento dell'esecuzone attraverso la primitiva ''Resume'' e cedono il controllo al un'altra ''Coroutine''.
Quando un processo avanza in un punto in cui può essere avviata l'esecuzione di un altro processo in maniera parallela rispetto al primo, il sistema operativo attraverso la primitiva ''fork'' , genera un processo figlio che avanza in maniera indipendente dal padre. Il processo padre continua la sua esecuzione fin quando non incontra la primitiva ''join'' che controlla lo stato di avanzamento del processo figlio.
Un'altra forma di elaborazione parallela riguarda la possibilità che all'interno di uno stesso processo possano essere lanciante in esecuzione diverse istruzioni in modo parallelo, tale esecuzione viene realizzata attraverso le primitive ''Cobegin'' e ''Coend''.
 
Riga 63:
 
Viene definita elaborazione concorrente quando due più o processi accedono alle stesse risorse oppure quando la terminazione di un processo consente l'avanzamento di un altro processo.
Tale elaborazione può causare diversi problemi al sistema se non viene gestita in maniera adeguata infatti , il sistema operativo svolge una funzione molto importante per risolvere le problematiche riguardante questo tipo di elaborazione. Attraverso la [[sincronizzazione]] dei processi il sistema operativo risolve queste problematiche.
In pratica l'os impedisce che i processi entrino in conflitto tra di loro , gestendo l'accesso dei processi alle risorse ed evitando che i processi blocchino l'avanzamento complessivo dell'unità di elaborazione.
In tale ambito il sistema operativo garantisce la protezione della aree di lavoro dei processi e l'interferenza tra questi ultimi , evitando così perdite di dati.
 
====Produttore Consumatore====
Riga 86:
=====Primitive Segnala e Attendi=====
 
Le primitive usate dai semafori sono :
*la primitiva Attendi
*la primitiva Segnala
Riga 118:
 
=====Blocco Critico=====
Il blocco critico o [[deadlock]] si verifica quando uno o più processi rimangono indefinitamente in stato di attesa , a causa del non verificarsi delle condizioni necessarie per loro proseguimento.
L'uso del semaforo impedisce il verificarsi del blocco critico.
Due o più processi si trovano in un blocco critico quando si verificano tali condizioni:
Riga 134:
 
 
* A. Lorenzi, M. Sangalli , D. Tironi , ''Linux il sistema operativo l'amministrazione i server di rete'', Atlas. ISBN 88-268-1013-3.
*{{cita libro | nome= Andrew | cognome=S. Tanenbaum | wkautore= Andrew Stuart Tanenbaum | anno=2009 | titolo=I moderni Sistemi Operativi | lingua=italiano | editore=Pearson Prentice Hall | id=ISBN 88-7192-540-8 }}