Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Antonino Mazzeo » 14.Esercitazione: Interprocess Communication e Shared Memory


Sommario

  • Interprocess Communication
  • Primitive get e ctl
  • Memoria condivisa
    • Primitive di creazione, collegamento e controllo

Interprocess Communication

  • Comunicazione tra processi mediante strutture dati rese disponibili dal kernel
    • Memoria condivisa (SHM : shared memory segments)
    • Semafori (SEM: semaphore arrays)
    • Code di messaggi (MSG: queues)
  • Oggetti (o risorse) IPC
  • Ogni risorsa IPC è identificata da un valore univoco nel sistema, denominata chiave (IPC key)

Primitive comuni: get e ctl

  • La primitiva get utilizza la IPC key, ed opportuni parametri, per restituire al processo un descrittore della risorsa
    • int …get (key_t key, …, int flag)
  • La primitiva ctl (control), permette, dato un descrittore, di verificare lo stato di una risorsa, cambiare lo stato di una risorsa o rimuovere una risorsa
    • int …ctl (int desc, …, int cmd, …)
  • Comandi eseguibili da shell
    • ipcs <-m|-s|-q>: visualizza tutte le strutture allocate (o solo shm, sem,msg) mostrandone anche l’identificatore e l’utente proprietario
    • ipcrm : rimuove una data struttura, noto il suo identificatore

Memoria condivisa

  • I processi Unix (a differenza dei thread) non possono condividere la memoria
    • Neanche i processi “parenti”: il figlio infatti eredita una copia dei dati del padre
    • Se i due processi modificano quei dati dopo la fork, ognuno modifica la propria copia
  • Una memoria condivisa (SHM) è una porzione di memoria accessibile da più processi
  • Su di essa un processo può scrivere dati che possono essere letti da un qualsiasi processo abbia i permessi per accedervi
Memoria condivisa

Memoria condivisa


Memoria condivisa

  • Utilizzo
    • Creazione della SHM
    • Collegamento alla SHM
    • Uso della SHM
    • Scollegamento della SHM
    • Eliminazione della SHM
  • Modalità di condivisione
    • richiesta esplicita: se un processo vuole usare una SHM esistente e ne conosce la chiave, può richiederla esplicitamente
    • tramite fork: un processo può “collegarsi” la SHM, dopodiché generare tramite fork i figli, i quali avranno automaticamente una copia del descrittore della SHM
  • Header da includere: <sys/shm.h>, <sys/ipc.h>

Primitive

  • Creazione
    • int shmget(key_t key, int size, int flag)
  • Collegamento
    • void* shmat(int shmid, const void *shmaddr, int flag)
    • Collega il segmento di memoria allo spazio di indirizzamento del chiamante.
  • Operazione di controllo
    • int shmctl(int ds_shm, int cmd, struct shmid_ds * buff)
    • Invoca l’esecuzione di un comando su una SHM

Prossima lezione

Esercitazione: Gestione dei semafori

I materiali di supporto della lezione

Shared Memory

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion