Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Operační systémy 9. Spolupráce mezi procesy
Obsah: signály, zasílání zpráv kolona, pojmenovaná roura IPC socket sdílená paměť problém souběhu © Milan Keršláger
2
Spolupráce mezi procesy
využívána při multitaskingu tj. současný běh více úloh slouží ke vzájemné komunikaci procesů, předávání dat mezi procesy, synchronizaci využíváme při multiprogramování programátor využije multitasking zjednodušení naprogramování příslušné úlohy rozdělení na procesy zjednodušuje programování využití více jader procesorů
3
Příklady spolupráce systray (ikony, oznamovací oblast)
síťová aplikace pošle zprávu appletu applet zobrazí bublinu (nový , IM zpráva) renderování scény v 3D hře arbitr přiděluje práci výpočetním procesům zároveň synchronizace s pohybem hráče ovládání GUI události o pohybu myši sbírá správce oken informace o pohybu či kliknutí posílá aplikacím
4
Komunikace mezi procesy
zajišťuje několik činností synchronizace čekání na událost v druhém procesu vzájemné informování o postupu výpočtu signalizace jednoduchá asynchronní komunikace proces reaguje spuštěním obsluhy signálu výměna dat vysoké nároky na flexibilitu (specifické požadavky) pomocí výměny dat lze realizovat prakticky cokoliv
5
Mechanismy spolupráce
zasílání zpráv flexibilní, s daty nebo bez dat i mezi různými počítači (např. cluster) sdílená paměť silnější nástroj, (neomezené) možnosti knihovny → jednoduchá implementace některé OS podporují oba mechanismy lze však implementovat i dodatečně knihovní fce umožňují zjednodušení, přenositelnost
6
Signály jde o asynchronní oznámení události
realizace jako jednoduché zprávy (bez přenosu dat) jádro přeruší provádění procesu vyvolána obsluha signálu implicitní obsluha v jádře OS proces definuje vlastní obsluhu (proceduru) jsou oblíbené pro manipulaci s procesy ukončení procesu (slušné, násilné, chybou) znovunačtení (změněné) konfigurace
7
Signály v Unixu propojení na řídící znaky terminálu
může být změněno příkazem stty CTRL+c → SIGINT → implicitně ukončení procesu CTRL+z → SIGTSTP → pozastavení procesu CTRL+\ → QUIT → ukončení + zápis core ošetření výjimek (standardně ukončení + core) SIGFPE → dělení nulou SIGSEGV → porušení ochrany paměti signalizace od jádra SIGPIPE → po ukončení procesu, který čte z roury
8
Použití signálů v Unixu
systémové volání jádra – kill() knihovní funkce z programu nebo příkaz kill pro daný proces (PID) nebo pro skupinu procesů definice handleru proces sám definuje obsluhu signálu ignorování nebo procedura (vlastní nebo implicitní) není-li definována, tak implicitní handler nelze pro SIGKILL a SIGSTOP problémy souběh, globální proměnné, non-reentrantní funkce
9
Zasílání zpráv velmi flexibilní
lze předávat v rámci 1 systému, ale i přes síť zasílání zpráv použito i u sběrnice PCI, PCIe umístění zprávy sdílená paměť → předání ukazatele buffer, fronta zpráv možné problémy + ošetření chyb ztráta nebo duplicita zprávy zkomolení zprávy jeden z procesů skončí
10
Odlišnosti zasílání zpráv
počet participujících procesů dva nebo více → způsob vytváření spojení vlastnosti spojení kapacita spojení (kolik nezpracovaných) při nulové se odesílatel blokuje nebo se zpráva ztratí → nutnost kombinovat se synchronizačními prostředky omezená a neomezená kapacita velikost zpráv – pevná, proměnná duplex – jednosměrnost, obousměrnost synchronní, asynchronní – bez čekání na odpověď
11
Zprávy v Linuxu ipcs -l kromě informací a limitech zpráv poskytuje též informace o sdílené paměti
12
Zprávy ve Windows MS Windows nemají signály (nejsou POSIX)
WinAPI (nízkoúrovňové) vyšší jazyky mohou zprávy řešit jinak používá se zasílání zpráv funkce PostMessage a DispatchMessage program má funkce „WinMain“ a „WinProc“ zpráva WM_CLOSE (zavření okna křížkem) posláno po stisku „End Task“ ve správce procesů po stisku „End Process“ program ukončen bez signálu/zprávy WM_DESTROY (není okno, program běží) „nezavřitelný“ program nedělá po WM_CLOSE nic
13
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
14
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
15
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
16
Sdílená paměť velmi flexibilní, definuje ji POSIX
lze využít pro komunikaci programátor si (komunikaci) přizpůsobí dle svých potřeb funkce pro ovládání → syscall, knihovny definuje vytvoření, připojení, získání ukazatele pak zápisy i čtení, odpojení, zrušení sdílené paměti jednotné API (POSIX) zaručuje přenositelnost vzniká problém souběhu tj. problém současného zápisu do jednoho místa způsobuje ho multitasking, vícejádrové systémy
17
Řešení sdílené paměti využívá tabulky stránek
dva různé procesy mají v tabulce stejnou stránku proces vytvoří sdílenou paměť o velikosti X lze definovat omezení: jen pro čtení, i pro zápis jádro vrátí identifikátor identifikátor je potřeba předat jinému procesu třeba skrze společný soubor (roura, socket) nebo tím, teprve pak proces odštěpí potomka jiný proces se ke sdílené paměti připojí získá ukazatel (adresu v paměti) řešíme problém souběhu (zámky, synchronizace) po ukončení práce je nutno sdílený úsek zrušit
18
Problém souběhu dva (i více) procesů mění stejná data
při samostatném přístupu se problém neprojeví problémem je neatomická operace první proces upravuje sekvenčně data dojde ke změně kontextu na druhý proces druhý proces čte nekonzistentní data řešíme zamykáním zámky jsou knihovní funkce → univerzální použití též možnost atomické funkce + serializace
19
Thready běžné procesy jsou v paměti odděleny
thready sdílí společnou paměť při zápisu čehokoliv do paměti je problém souběhu řeší se zamykáním, synchronizačními primitivy nebo oddělené proměnné pro každý thread chyba v jednom threadu ovlivní ostatní typicky ukončení všech threadů problém pluginů v prohlížečích chyba ve Flashi → pád celého prohlížeče vyvedení pluginu do samostatného procesu → výkon!
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.