Possibilità di creare un segmento di memoria condiviso per far scambiare i dati tra diversi processi. È uno dei modi più veloci per comunicare, ma è pericoloso: può essere necessario controllare i permessi di scrittura. Un alternativa sono i memory mapped files:
Conviene utilizzare i memory mapped files quando una normale scrittura su filesystem non sarebbe abbastanza veloce.
L'utilizzo della shared memory consiste in:
La primitiva usata per la creazione è shmget()
e necessita delle librerie 'ipc.h' e 'shm.h'
Per poter accedere allo stesso segmento condiviso, i vari processi possono usare la
chiave che viene restituita al momento della creazione.
Il segmento più piccolo che può essere allocato è 1 pagina, che può valere 1K,4K,...
a seconda del sistema.
Il terzo parametro è un valore bitwise o flag che serve a dare opzioni o
impostazioni di sicurezza, le flag vanno usate in OR per ottenere la sequenza i
bit di opzioni finali.
La sincronizzazione migliore viene effettuata con i semafori piuttosto che con
i permessi, i permessi servono per questioni di sicurezza.
Con la primitiva shmat()
che sta per shared memory attach posso collegare il segmento condiviso
ad altri processi.
smhdt()
è un modo per staccare il segmento dal processo chiamante.
Operazioni necessarie:
Diversi processi sono in grado di comunicare con un file condiviso
In linux a basso livelli il file viene diviso in pezzi della dimensione delle pagine
per avere un acesso ottimizzato.
La primitiva usata per questo meccanismo è mmap()
e dopo la chiamata
posso accedere all'oggetto con le primitive dei file
Il file dovrebbe sopravvivere al riavvio del computer.
La chiamata ad mmap()
è più flessibile rispetto alle shm ma ha più overhead
è possibile caricare in memoria con mmap()
anche file letti dal filesystem (con le primitive dei file)
Remote Procedure Call è una procedura remota bloccante eseguita nello spazio di memoria della propria macchina Ci sono dei problemi nello scambio di dati, ad esempio può cambiare la endianness tra le due macchine e quindi risulterebbe complicato passare dei puntatori. RPC è stata la soluzione storica (vecchia di 30anni) per le architetture client server rpc si basa su UDP e quindi non garantisce la consegna, in base al valore di ritorno possiamo solo dire che la procedura è stata eseguita almeno una volta, risulta quindi una buona idea fare funzioni idempotenti, cioè che produce lo stesso risultato se eseguita più volte. Remote Procedure Call Messages di solito usando External Data Representation che è una codifica indipendente rispetto alle due macchine e che permette di trasferire i dati usando una codifica universale.
rpcgen è il compilatore che genera gli stub per server e client.
Le matrici crossbar hanno il problema che il numero di punti cresce esponenzialmente quindi spesso vengono sostituite da switch a strati.