Meziprocesová komunikace
Z Wikipedie, otevřené encyklopedie
Meziprocesová komunikace umožňuje současný běh více procesů eventuelně vláken a také podporují více procesorů. Tyto operační systémy poskytují základní prostředky pro synchronizaci procesů a vláken.
[editovat] Operační systémy ¨UNIX (Linux)
Následující funkce jazyka C se používají pro (těsné) paralelní programování:
- Spouštění nových (nezávislých) procesů se provádí pomocí funkce execl (a jejími variantami) a funkcí execv.
- Vytvoření nového procesu se provádí pomocí funkce fork. Ta vrací potomkovi číslici 0 a rodiči jeho identifikátor.
- Komunikace přes roury (pipe) se provádí funkcemi popen a pipe.
- Signály mohou procesy vypouštět funkcí kill a přijímat díky definici zpětného volání pomocí signal.
- Sdílená paměť se alokuje pomocí funkce shmget (prvním parametrem je semafor s identifikátorem úseku), připojení resp. odpojení sdílené paměti do paměti procesu se provádí pomocí funkcí shmat resp. shmdt.
- Operace se semafory se provádejí díky funkcím semop (resp. semtimedop).
- Fronta zpráv je realizována pomocí funkcí msgget, msgsnd a msgrcv.
Většina unixových operačních systémů implementuje jak tradiční fronty zpráv (System V), tak fronty zpráv definované normou POSIX. Další informace naleznete v manuálové stránce mq_overview nebo v referencích na konci článku.
[editovat] Operační systémy rodiny Microsoft Windows
- Spouštění nových (nezávislých) procesů se provádí pomocí volání funkcí z rodiny funkcí exec a spawn. Tyto funkce mají různé varianty, které se odlišují příslušným suffixem (např. execl, execle, execv, spawnl, spawnv, atd.). Rozdíl mezi funkcemi typu exec a spawn je takový, že funkce typu spawn umožňuje lepší práci s jednotlivými procesy (např. rodičovský proces může čekat až skončí potomek apod.).
- Vytvoření nového procesu se provádí pomocí funkce CreateProcess. Jestliže je provedení funkce CreateProcess úspěšné, její návratová hodnota je struktura PROCESS_INFORMATION, která obsahuje handely a identifikátory nově vytvořeného procesu a jeho primárního vlákna. Dále můžeme v prostředí Microsoft Windows vytvářet procesy pomocí funkce CreateProcessAsUser. Tato funkce nám umožňuje spouštět procesy s ohledem na bezpečnostní kontext uživatelského účtu v rámci nějž je proces spouštěn.
- Komunikace mezi jednotlivými procesy jsou zajišťovány pomocí tzv. „rour“ (angl. pipes). Roura je jakýsi umělý vstupní/výstupní komunikační kanál, který program používá k předávání informací dalším programům. K tomuto účelu nám slouží funkce popen a pipe. Funkce popen vytvoří rouru a provede spuštění příkazu resp. procesu. Tato funkce vrátí tzv. stream, který je přidružen k jednomu konci roury. Druhý konec roury je přidružen ke standartnímu výstupu spouštěného procesu. Funkce pipe oproti funci open nám rouru otevře jak pro čtení tak i pro zápis. Vrátí nám totiž dva handely na soubor místo jednoho, jak je tomu u popen.