Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

UNIX 12. Komunikace mezi procesy © Milan Keršlágerhttp://www.pslib.cz/ke/slajdy Obsah: ● meziprocesová.

Podobné prezentace


Prezentace na téma: "UNIX 12. Komunikace mezi procesy © Milan Keršlágerhttp://www.pslib.cz/ke/slajdy Obsah: ● meziprocesová."— Transkript prezentace:

1 UNIX 12. Komunikace mezi procesy © Milan Keršlágerhttp://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/ Obsah: ● meziprocesová komunikace ● soubor, sdílená paměť ● mapování souborů do paměti ● signály, zasílání zpráv ● roura, pojmenovaná roura, IPC soket ● zamykání souborů, souborové zámky 27.5.2011

2 Účely komunikace ● Inter-Process Communication (IPC) 1) multiprogramování – úloha je rozdělena na více samostatných úloh, aby mohly být zpracovávány odděleně – je nutné zajistit synchronizaci, signalizaci a výměnu dat 2) clustery – výpočty probíhají na oddělených počítačích – je nutné zajistit synchronizaci, signalizaci a výměnu dat při využití počítačové sítě ● vzniká problém souběhu – problém současného zápisu více procesů do stejných dat

3 Souběh ● dva nebo více procesů modifikuje stejná data ● pokud by procesy byly spuštěny samostatně, k problému by nedošlo ● vznikají mysteriózní chyby ● ohrožená data mohou být uložena různě: ● data operačního systému: paměť jádra OS ● uživatelská data: soubor, sdílená paměť ● thready: z principu mají sdílenou paměť

4 Souběh – ze života ● sekretářka přidává všem zaměstnancům 100 Kč ● její program načte sdílená data ● sekretářka přičte 100 Kč ● data jsou uložena do sdíleného úložiště ● šéf se rozhoduje o přidělení prémie 500 Kč ● sekretářka načte další, ale odejde udělat kafe ● šéf načte stejná data, přičte 500 a data uloží ● sekretářka přijde, přičte 100 k původní částce ● sekretářka přepíše výsledek, 500 Kč se ztratí

5 Souběh – v počítači ● vytváření souborů ● soubor musí mít v adresáři unikátní jméno ● nové nejprve testujeme, pak teprve vytváříme ● může dojít k přerušení mezi testem a vytvořením ● nutnost atomické operace (typicky v jádru OS) ● přístup do SQL databáze ● aktualizace několika položek → nekonzistence dat ● ne vše lze vyřešit jako jedinou SQL instrukci ● používá se zamykání (souboru, semafory apod.) – vzniká však nový problém „uváznutí“

6 Atomická operace ● proběhne jako jeden celek ● operaci nelze přerušit – výsledek (všechny výsledky) se projeví najednou ● nejlépe jedna strojová instrukce ● delší (složitější) operace nejsou atomické ● atomicitu je možné zajistit jinými prostředky – zákaz přerušení, instrukce TSL, semafory ● tj. (zdánlivě) atomický sled více strojových instrukcí (kódu) – jeden CPU: operace je pak zdánlivě atomická – víceprocesorový systém ● zdánlivá atomicita operace problém neřeší ● řešení: budeme chránit (zamykat) data

7 Meziprocesová komunikace ● soubor ● sdílená paměť ● mapování souborů do paměti ● signály ● zasílání zpráv ● roura ● pojmenovaná roura ● IPC socket ● zamykání souborů

8 Soubor ● nejjednodušší výměna dat mezi procesy ● dočasné soubory ● v unixových systémech v adresáři /tmp, /var/tmp – všichni mají právo zápisu → mohou si vzájemně škodit ● používá se sticky bit → nelze si vzájemně mazat i přes „w“ ● i tak vyžaduje vytváření dočasných souborů speciální zacházení ● zejména u privilegovaných procesů je riziko poměrně velké ● též problém souběhu → náhodné názvy, zamykání ● komunikace je však poměrně těžkopádná ● velká režie (zápis na HDD) ● mají však všechny systémy → přenositelnost

9 Sdílená paměť ● procesy jsou normálně odděleny ● kromě threadů, které mají sdílenou paměť záměrně ● sdílená paměť je shodná s částí jiného procesu ● při zápisu problém souběhu – řeší se zamykáním, synchronizačními primitivy ● funkce pro ovládání definuje POSIX – definuje vytvoření, připojení, získání ukazatele – pak zápisy i čtení, odpojení, zrušení sdílené paměti – zaručuje přenositelnost

10 Příklad $ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x790068c1 6160388 apache666 808 0 $ ipcrm shm 6160388 ● nejprve jsou vypsány sdílené segmenty paměti ( ipcs ) ● druhý příkaz ( ipcrm ) zruší sdílený segment paměti (zůstane-li chybně po programu) ● mnoho programů pro GUI využívá sdílenou paměť pro komunikaci ● výše je sdílená paměť démona WWW serveru Apache ● uživatel vidí jen oblasti, do kterých má přístup ● uživatel root vidí všechny oblasti v systému ● v jazyce C se používají funkce shmget(), shmat() apod.

11 Mapování souborů do paměti ● původně metoda nahrazující klasické operace ● otevření, čtení, zápis, posun ukazatele, zavření – nevýhodou je neustále kopírování dat mezi cache, bufferem a paměťovým prostorem procesu ● využívá mechanismu „výpadku stránky“ – odkládání nepoužívaných částí paměti na disk – využíváno u stránkování paměti ● lze využít i pro meziprocesovou komunikaci ● namapovaný soubor může být sdílen více procesy ● samozřejmě je nutné řešit souběh atp.

12 Příklad ● používá se funkce mmap() ● otevření souboru pomocí open() ● získaný deskriptor jako parametr mmap() – na (zvolené) adrese v paměti bude obsah souboru – pro ni definujeme délku okna a offset obsahu souboru ● ukončení pomocí munmap() – zrušení mmap() též ukončením programu

13 Signály ● jednoduchá meziprocesová komunikace ● implementováno v jádře OS ● asynchronní signalizace mezi procesy – v unixových OS může odesílat signál i jádro OS ● lze poslat jen vlastním procesům – správce (root) může poslat signál všem procesům ● proces zpracovává signál vyvoláním procedury – implicitní akce, ignorování signálu, vlastní obsluha signálu – ne všel lze předefinovat (KILL bohužel, resp. naštěstí nejde) – při zpracování volat jen bezpečné funkce (! reentrantnost) ● odesláním signálu systémovým voláním kill()

14 Syscall: kill() ● název podle signálu KILL ● signály odlišeny názvy, ty mapovány na čísla – HUP – „zavěšení“ + ukončení, dnes rekonfigurace – INT – přerušení (z terminálu CTRL+c) – QUIT – ukončení + core dump – KILL – nepodmíněné ukončení procesu („vražda“) ● nelze ve stavu D (proces je v jádře, čeká na dokončení I/O) – SEGV – porušení ochrany paměti – PIPE – signalizace rozpadu roury (ukončení skupiny) – TERM – slušná žádost o ukončení procesu – STOP – pozastavení procesu – CONT – obnovení běhu procesu

15 Příkaz kill ● zasílání signálů z příkazového řádku ● kill -l → vypíše seznam signálů + jejich čísla ● kill – zaslání signálu TERM (žádost o ukončení) – je číslo procesu – signál lze posílat jen svým procesům, root může všem ● kill -1 nebo kill -HUP – dnes někdy znovunačtení konfigurace (rekonfigurace) ● kill -9 nebo kill -KILL – bezpodmínečné ukončení procesu

16 Zasílání zpráv ● univerzálnější, než signály ● mezi procesy lze přenášet i data ● implementace v jádře nebo jako sdílená paměť ● řešení mezních situací ● synchronní a asynchronní ● jednosměrné, obousměrné ● spolehlivý přenos nebo bez záruk – nutnost implementovat fronty, potvrzování zpráv ● řešení duplikace, ztráty, příjemce skončil atd.

17 Kolona (roura) ● propojení příbuzných procesů ● propojení přes deskriptory – jednosměrné spojení (jeden zapisuje, druhý čte) ● vytváří se skupina procesů – jádro posílá při přerušení roury signál SIGPIPE – skupina reaguje ukončením („broken pipe“) ● v paměti kruhový vyrovnávací paměť – buffer ● typicky se využívá v příkazovém řádku grep ro /etc/passwd | sort

18 Pojmenovaná roura ● umožňuje spojení nepříbuzných procesů ● definuje POSIX ● styčné místo je speciální soubor typu roura – název lze nějak předat nepříbuzným procesům – vytvořená pojmenovaná roura „přežije“ ukončení procesů ● data vyměňována v paměti (buffer) ● pouze jednosměrná komunikace (FIFO) – jeden proces zapisuje, další čte

19 IPC socket ● též tzv. Unix Domain Socket, definuje POSIX ● speciální soubor, ale implementováno v RAM ● obdoba síťové komunikace – od roury přidává obousměrnou komunikaci – navíc možnost více klientů ● například PostgreSQL server + klient – /tmp/.s.PGSQL.5432 – klient otevře a připojí se

20 Zamykání souborů ● pro zabránění souběhu ● v unixových systémech jen informativní (advisory) – i když je na soubor aplikován zámek, jádro ho nevynutí – všechny programy musí zámky respektovat – funkce fcntl() a flock() → též na části souboru ● sdílené zámky – též nazývány jako zámky pro čtení ● exkluzivní zámky – též nazývány jako zámky pro zápis ● souborové zámky

21 Souborové zámky ● soubor signalizující zamčeno ● např. /etc/shadow.lock – znamená: někdo si mění heslo, tak počkáme – někdy název včetně PID procesu, který ho vytvořil ● opět jde o záležitost respektu, jádro nevynucuje ● používá se ve shellu a na FS bez podpory zámků – např. starší verze NFS bez lock démona ● vytvoření musí být atomická operace – v shellu „noclobber“ nebo vytvoření adresáře – v zásadě poměrně komplikovaná logika – problém „opuštěných zámků“ (anglicky: stale lock file)


Stáhnout ppt "UNIX 12. Komunikace mezi procesy © Milan Keršlágerhttp://www.pslib.cz/ke/slajdy Obsah: ● meziprocesová."

Podobné prezentace


Reklamy Google