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
 
 
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