interprocess communication (tsz. interprocess communications)
Az IPC lehetővé teszi a folyamatok számára, hogy adatokat cseréljenek és összehangolják a működésüket. Mivel a folyamatok általában függetlenek, szükség van mechanizmusokra a kommunikációjukhoz.
Egyirányú kommunikációs csatorna.
Egyik folyamat ír, a másik olvas.
Típusai:
Példa (Linux):
int fd;
pipe(fd);
Egy sor, amelyben a folyamatok üzeneteket helyezhetnek el és olvashatnak ki.
Aszinkron kommunikációt tesz lehetővé.
Az üzenetek addig maradnak a sorban, amíg egy folyamat ki nem olvassa őket.
Példa (Linux - System V):
msgget(key, IPC_CREAT | 0666);
Leggyorsabb IPC mechanizmus, mert a folyamatok közvetlenül osztoznak a memóriaterületen.
Szinkronizáció szükséges (például szemaforok használata), hogy elkerüljük az adatütközést.
Példa (Linux - System V):
shmat(shmid, NULL, 0);
Lehetővé teszi a különböző gépeken futó folyamatok közötti kommunikációt.
TCP/IP és UDP protokollokon alapul.
Példa (C - TCP Socket):
socket(AF_INET, SOCK_STREAM, 0);
Egyszerű üzenetek küldésére használható, például folyamatok leállítására (SIGKILL
, SIGSTOP
).
Aszinkron, de kis méretű adatokat tud továbbítani.
Példa (Linux):
kill(pid, SIGTERM);
Mivel több folyamat is hozzáférhet ugyanahhoz az erőforráshoz, szinkronizáció szükséges az ütközések elkerülése érdekében.
Szemaforok (Semaphores): Számlálók, amelyek szabályozzák az erőforrásokhoz való hozzáférést.
sem_wait(&sem);
sem_post(&sem);
Mutual Exclusion (Mutex): Biztosítja, hogy egyszerre csak egy folyamat férjen hozzá az erőforráshoz.
pthread_mutex_lock(&mutex);
pthread_mutex_unlock(&mutex);
Monitorok: Magas szintű szinkronizációs mechanizmus, amely feltételváltozókat használ.
IPC Mechanizmus | Sebesség | Bonyolultság | Legjobb felhasználás |
---|---|---|---|
Csövek (Pipes) | Közepes | Alacsony | Szülő-gyermek folyamatok közötti kommunikáció |
Üzenetsorok (Message Queues) | Közepes | Közepes | Aszinkron üzenetküldés |
Megosztott memória (Shared Memory) | Nagyon gyors | Magas | Nagy adatmennyiség megosztása |
Hálózati aljzatok (Sockets) | Lassú | Magas | Hálózati kommunikáció |
Jelek (Signals) | Lassú | Alacsony | Egyszerű értesítések küldése |