IPC sta per Comunicazione tra processi.
Questa tecnica consente ai processi di comunicare tra loro.
Poiché ogni processo ha il proprio spazio di indirizzi e uno spazio utente univoco, in che modo il processo comunica tra loro?
La risposta è Kernel, il cuore del sistema operativo Linux che ha accesso a tutta la memoria. Quindi possiamo richiedere al kernel di allocare lo spazio che può essere utilizzato per comunicare tra i processi.
Il processo può anche comunicare avendo un file accessibile a entrambi i processi. I processi possono aprire e leggere/scrivere il file, il che richiede molte operazioni di I/O che richiedono tempo.
Diversi tipi di IPCS
Esistono vari IPC che consentono a un processo di comunicare con altri processi, sullo stesso computer o su computer diversi nella stessa rete.
- Tubi – Fornisce un modo per i processi di comunicare tra loro attraverso lo scambio di messaggi. Le named pipe forniscono un modo per i processi in esecuzione su diversi sistemi di computer per comunicare sulla rete.
- Memoria condivisa – I processi possono scambiare valori nella memoria condivisa. Un processo creerà una porzione di memoria a cui può accedere un altro processo.
- Coda messaggi – È un elenco strutturato e ordinato di segmenti di memoria in cui i processi archiviano o recuperano dati.
- Semafori – Fornisce un meccanismo di sincronizzazione per i processi che accedono alla stessa risorsa. Nessun dato viene passato con un semaforo; coordina semplicemente l'accesso alle risorse condivise.
10 Esempio di comando IPCS
ipcs è un comando UNIX/Linux, che viene utilizzato per elencare le informazioni sulla comunicazione tra processi Il comando ipcs fornisce un report su System V IPCS (Coda messaggi, Semaforo e Memoria condivisa).
Esempio IPCS 1:elenca tutte le strutture IPC
Il comando ipcs con l'opzione -a elenca tutte le strutture IPC che hanno accesso in lettura per il processo corrente. Fornisce dettagli su coda messaggi, semaforo e memoria condivisa.
# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2 ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204 ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
Tutta la struttura IPC ha una chiave e un identificatore univoci, che vengono utilizzati per identificare una struttura IPC.
Esempio 2 IPCS:elenca tutta la coda dei messaggi
ipcs con l'opzione -q, elenca solo le code di messaggi per le quali il processo corrente ha accesso in lettura.
$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
Esempio IPCS 3. Elenca tutti i semafori
L'opzione ipcs -s viene utilizzata per elencare i semafori accessibili.
# ipcs -s ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204
Esempio IPCS 4. Elenca tutta la memoria condivisa
l'opzione ipcs -m con il comando ipcs elenca le memorie condivise.
# ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2
Esempio IPCS 5. Informazioni dettagliate su una struttura IPC
l'opzione ipcs -i fornisce informazioni dettagliate su una struttura ipc.
# ipcs -q -i 32768 Message Queue msqid=32768 uid=0 gid=0 cuid=0 cgid=0 mode=0644 cbytes=0 qbytes=65536 qnum=0 lspid=0 lrpid=0 send_time=Not set rcv_time=Not set change_time=Thu Aug 5 13:30:22 2010
L'opzione -i con -q fornisce informazioni su una particolare coda di messaggi. L'opzione -i con -s fornisce i dettagli del semaforo. L'opzione -i con -m fornisce dettagli su una memoria condivisa.
Esempio IPCS 6. Elenca i limiti per la struttura IPC
l'opzione ipcs -l fornisce i limiti di sistema per ciascuna funzione ipc.
# ipcs -m -l ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 67108864 max total shared memory (kbytes) = 17179869184 min seg size (bytes) = 1
Il comando precedente fornisce i limiti per la memoria condivisa. -l può essere combinato con -q e -s per visualizzare rispettivamente i limiti per la coda dei messaggi e i semafori.
Un'unica opzione -l fornisce i limiti per tutte e tre le strutture IPC.
# ipcs -l
Esempio IPCS 7. Elenca i dettagli del creatore e del proprietario per la struttura IPC
l'opzione ipcs -c elenca l'id utente e l'id gruppo del creatore e l'id utente e l'id gruppo del proprietario. Questa opzione può essere combinata con -m, -s e -q per visualizzare i dettagli del creatore per una specifica struttura IPC.
# ipcs -m -c ------ Shared Memory Segment Creators/Owners -------- shmid perms cuid cgid uid gid 1056800768 660 oracle oinstall oracle oinstall 323158020 664 root root root root 325713925 666 root root root root
Esempio IPCS 8. ID di processo che hanno effettuato l'accesso alla struttura IPC di recente
L'opzione ipcs -p mostra l'ID del creatore e l'ID del processo che ha avuto accesso alla funzione ipc corrispondente molto di recente.
# ipcs -m -p ------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid 1056800768 oracle 16764 5389 323158020 root 2354 2354 325713925 root 20666 20668
-p può anche essere combinato con -m,-s o -q.
Esempio IPCS 9. Ora dell'ultimo accesso
L'opzione ipcs -t visualizza l'ultima ora di funzionamento in ciascuna struttura ipc. Questa opzione può anche essere combinata con -m, -s o -q per stampare per un tipo specifico di struttura ipc. Per la coda dei messaggi, l'opzione -t mostra l'ultima ora di invio e ricezione, per la memoria condivisa mostra l'ultimo allegato (porzione di memoria) e il timestamp scollegato e per il semaforo mostra l'ultima operazione e i dettagli dell'ora modificati.
# ipcs -s -t ------ Semaphore Operation/Change Times -------- semid owner last-op last-changed 0 root Thu Aug 5 12:46:52 2010 Tue Jul 13 10:39:41 2010 32769 root Thu Aug 5 11:59:10 2010 Tue Jul 13 10:39:41 2010 1094844418 oracle Thu Aug 5 13:52:59 2010 Thu Aug 5 13:52:59 2010
Esempio IPCS 10. Stato dell'utilizzo corrente
ipcs con il comando -u visualizza l'utilizzo corrente per tutta la struttura IPC. Questa opzione può essere combinata con un'opzione specifica per visualizzare lo stato di una particolare struttura IPC.
# ipcs -u ------ Shared Memory Status -------- segments allocated 30 pages allocated 102 pages resident 77 pages swapped 0 Swap performance: 0 attempts 0 successes ------ Semaphore Status -------- used arrays = 49 allocated semaphores = 252 ------ Messages: Status -------- allocated queues = 1 used headers = 0 used space = 0 bytes