Klasické problémy meziprocesové komunikace – producent-konzument aj.
Z FAV wiki
(Rozdíly mezi verzemi)
(Založena nová stránka: Meziprocesova komunikace: � Predavani zprav � Primitiva send, receive � Mailbox, port � RPC � Ekvivalence semaforu, zprav, ... � Bariera, problem vecericich fil...) |
|||
| Řádka 1: | Řádka 1: | ||
| − | Meziprocesova komunikace: | + | Meziprocesova komunikace: // tady by to chtělo rozvést a doplnit... |
| − | + | * Predavani zprav | |
| − | + | * Primitiva send, receive | |
| − | + | * Mailbox, port | |
| − | + | * RPC | |
| − | + | * Ekvivalence semaforu, zprav, ... | |
| − | + | * Bariera, problem vecericich filozofu | |
| + | |||
| + | |||
Problem sdilene pameti | Problem sdilene pameti | ||
| − | + | * Uvedene mechanismy | |
| − | + | **umisteni objektu ve sdilene pameti | |
| − | + | * Nekdy neni vhodne | |
| − | + | ** Bezpecnost - globalni data pristupna kteremukoliv procesu bez ohledu na semafor | |
| − | + | * Nekdy neni mozne | |
| − | + | ** Procesy bezi na ruznych strojich, komunikuji spolu po siti Reseni { predavani zprav | |
Predavani zprav | Predavani zprav | ||
| − | + | * send, receive | |
| − | + | * Zavedeme 2 primitiva | |
| − | + | ** send (adresat, zprava) - odeslani zpravy | |
| − | + | ** receive(odesilatel, zprava) - prijem zpravy | |
| − | + | ** Send Zprava (lib. datovy objekt) bude zaslana adresatovi | |
| − | + | ** Receive Prijem zpravy od urceneho odesilatele Prijata zprava se ulozi do promenne "zprava\ | |
| + | |||
| + | |||
| + | == Producent-konzument == | ||
| + | |||
| + | * Dva procesy sdílejí společnou paměť (buffer) pevné velikosti N položek | ||
| + | * Jeden proces je producent - generuje nové položky a ukládá je do vyrovnávací paměti | ||
| + | * Paralelně běží proces konzument, který data vyjímá a spotřebovává | ||
| + | * Procesy mohou běžet různými rychlostmi => musí být zabezpečeno, aby nedošlo k přetečení/podtečení: | ||
| + | ** Konzument musí být schopen čekat na producenta, nejsou-li data | ||
| + | ** Producent musí být schopen čekat na konzumenta, je-li buffer plný | ||
| + | |||
| + | |||
| + | == Problém večeřících filosofů == | ||
| + | |||
| + | * 5 filosofů sedí kolem kulatého stolu | ||
| + | * Každý filosof má před sebou talíř se špagetami | ||
| + | * Mezi každými dvěma talíři je vidlička | ||
| + | * Špagety jsou tak klouzavé, že filosof potřebuje 2 vidličky, aby mohl jíst | ||
| + | * Když filosof dostane hlad, pokusí se vzít 2 vidličky; pokud uspěje, nějakou dobu jí, pak položí vidličky a pokračuje v přemýšlení | ||
| + | * Problémy: uvíznutí (všichni filozofové zvednou levou vidličku, žádný z nich už nemůže pokračovat), vyhladovění (pokud by filozofové vzali najednou levou vidličku, budou běžet cyklicky - vidí, že pravá není volná, položí…) | ||
| + | * Řešení - Dijkstra (pomocí semaforů) | ||
| + | |||
| − | + | == Problém čtenářů a písařů == | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | Problém čtenářů a písařů | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | * Představme si velkou databázi, množina procesů se pokouší souběžně číst a zapisovat | |
| + | * Více požadavků čtení - akceptovatelné | ||
| + | * Při zápisu nesmí nikdo jiný přistupovat, ani žádní čtenáři | ||
| + | * První čtenář, který dostane přístup do databáze, provede P(w), další pouze zvětšují čítač | ||
| + | * Po skončení čtenáři zmenšují čítač, poslední provede V(w) | ||
| + | * Semafor w zabrání vstupu písaře, pokud jsou čtenáři | ||
| + | * Semafor w také zabrání vstupu čtenářům, je-li písař | ||
Verze z 29. 8. 2011, 19:00
Meziprocesova komunikace: // tady by to chtělo rozvést a doplnit...
- Predavani zprav
- Primitiva send, receive
- Mailbox, port
- RPC
- Ekvivalence semaforu, zprav, ...
- Bariera, problem vecericich filozofu
Problem sdilene pameti
- Uvedene mechanismy
- umisteni objektu ve sdilene pameti
- Nekdy neni vhodne
- Bezpecnost - globalni data pristupna kteremukoliv procesu bez ohledu na semafor
- Nekdy neni mozne
- Procesy bezi na ruznych strojich, komunikuji spolu po siti Reseni { predavani zprav
Predavani zprav
- send, receive
- Zavedeme 2 primitiva
- send (adresat, zprava) - odeslani zpravy
- receive(odesilatel, zprava) - prijem zpravy
- Send Zprava (lib. datovy objekt) bude zaslana adresatovi
- Receive Prijem zpravy od urceneho odesilatele Prijata zprava se ulozi do promenne "zprava\
Producent-konzument
- Dva procesy sdílejí společnou paměť (buffer) pevné velikosti N položek
- Jeden proces je producent - generuje nové položky a ukládá je do vyrovnávací paměti
- Paralelně běží proces konzument, který data vyjímá a spotřebovává
- Procesy mohou běžet různými rychlostmi => musí být zabezpečeno, aby nedošlo k přetečení/podtečení:
- Konzument musí být schopen čekat na producenta, nejsou-li data
- Producent musí být schopen čekat na konzumenta, je-li buffer plný
Problém večeřících filosofů
- 5 filosofů sedí kolem kulatého stolu
- Každý filosof má před sebou talíř se špagetami
- Mezi každými dvěma talíři je vidlička
- Špagety jsou tak klouzavé, že filosof potřebuje 2 vidličky, aby mohl jíst
- Když filosof dostane hlad, pokusí se vzít 2 vidličky; pokud uspěje, nějakou dobu jí, pak položí vidličky a pokračuje v přemýšlení
- Problémy: uvíznutí (všichni filozofové zvednou levou vidličku, žádný z nich už nemůže pokračovat), vyhladovění (pokud by filozofové vzali najednou levou vidličku, budou běžet cyklicky - vidí, že pravá není volná, položí…)
- Řešení - Dijkstra (pomocí semaforů)
Problém čtenářů a písařů
- Představme si velkou databázi, množina procesů se pokouší souběžně číst a zapisovat
- Více požadavků čtení - akceptovatelné
- Při zápisu nesmí nikdo jiný přistupovat, ani žádní čtenáři
- První čtenář, který dostane přístup do databáze, provede P(w), další pouze zvětšují čítač
- Po skončení čtenáři zmenšují čítač, poslední provede V(w)
- Semafor w zabrání vstupu písaře, pokud jsou čtenáři
- Semafor w také zabrání vstupu čtenářům, je-li písař