25) In cosa consiste e come viene realizzata la concorrenza nel modello RPC (nel server)?

Concorrenza nel server (ad esempio, progetto di un file system distribuito con allocazione fisica dei file su nodi remoti e trasparenza all'utente: le operazioni del file system su un file remoto necessitano di un supporto di comunicazione RPC):

assumiamo l’esistenza un programma RPC con questi servizi, che serva richieste contemporanee da clienti del file system.

Eventi per servire una richiesta:

La concorrenza dei servizi viene realizzata in quanto il dispatching può passare immediatamente alla attesa di nuovi messaggi, lasciando un processo concorrente per l'esecuzione del servizio, ma poiché la creazione di un processo concorrente per ogni richiesta è molto costosa, vi è la possibilità di creare un certo numero di processi pronti per l'esecuzione del servizio

Generazione dei processi concorrenti ad ogni richiesta:

uso della fork()

il processo figlio esegue il servizio.

il processo padre esce dalla procedura di dispatching e rientra ad aspettare le RPC.

Il processo padre non attende la terminazione del figlio (al fine di deallocarne l'area dati e registrarne la terminazione), quindi ad ogni terminazione di una procedura di servizio il processo figlio diventa zombie. Il padre per accorgersi della terminazione del figlio usa la primitiva wait3().

wait3() è una primitiva con comportamento asincrono non bloccante: per tutti i processi generati, legge lo stato di terminazione e dealloca. Se un figlio è già uscito (zombie) la primitiva ritorna immediatamente

pid_t wait3 (stat_loc, options, reserved)

int *stat_loc; /* stato di ritorno del figlio */

int options; /* opzioni di funzionamento */

int *reserved; /* in genere non usato: mettere a NULL */

con l’opzione WNOHANG la primitiva è non bloccante, cioè ritorna immediatamente se non ci sono figli da aspettare.

Condivisione del gestore di trasporto:

la fork() è invocata dopo la creazione del gestore di trasporto. Ne consegue quindi la condivisione dei file descriptor fra padre e figlio e del gestore di trasporto fra padre e figlio.

Problema: la condivisione fra figli dipende dal protocollo di trasporto

UDP: una sola socket

TCP : ad ogni messaggio una socket connessa al client, cioè nessuna condivisione fra figli diversi

Il gestore:

con UDP, conoscendo la socket del chiamante, reinvia alla socket relativa. È importante che arrivi un solo messaggio

con TCP utilizza la connessione del processo. È importante che si crei una connessione per ogni attività del server

 


Back
Index
Next