Klasické problémy meziprocesové komunikace – producent-konzument aj.

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(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
+
* Predavani zprav
−
� Primitiva send, receive
+
* Primitiva send, receive
−
� Mailbox, port
+
* Mailbox, port
−
� RPC
+
* RPC
−
� Ekvivalence semaforu, zprav, ...
+
* Ekvivalence semaforu, zprav, ...
−
� Bariera, problem vecericich filozofu
+
* Bariera, problem vecericich filozofu
 +
 
 +
 
  
 
Problem sdilene pameti
 
Problem sdilene pameti
−
� Uvedene mechanismy
+
* Uvedene mechanismy
−
{ umisteni objektu ve sdilene pameti
+
**umisteni objektu ve sdilene pameti
−
� Nekdy neni vhodne
+
* Nekdy neni vhodne
−
{ Bezpecnost { globalni data pristupna kteremukoliv procesu bez ohledu na semafor
+
** Bezpecnost - globalni data pristupna kteremukoliv procesu bez ohledu na semafor
−
� Nekdy neni mozne
+
* Nekdy neni mozne
−
{ Procesy bezi na ruznych strojich, komunikuji spolu po siti Reseni { predavani zprav
+
** Procesy bezi na ruznych strojich, komunikuji spolu po siti Reseni { predavani zprav
  
 
Predavani zprav  
 
Predavani zprav  
−
{ send, receive
+
* send, receive
−
� Zavedeme 2 primitiva
+
* Zavedeme 2 primitiva
−
{ send (adresat, zprava) - odeslani zpravy
+
** send (adresat, zprava) - odeslani zpravy
−
{ receive(odesilatel, zprava) - prijem zpravy
+
** receive(odesilatel, zprava) - prijem zpravy
−
{ Send Zprava (lib. datovy objekt) bude zaslana adresatovi
+
** Send Zprava (lib. datovy objekt) bude zaslana adresatovi
−
{ Receive Prijem zpravy od urceneho odesilatele Prijata zprava se ulozi do promenne "zprava\
+
** 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ů)
 +
 
  
−
Producent-konzument
+
== Problém čtenářů a písařů ==
−
· 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ř
+
  
−
bank
+
* 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...


Problem sdilene pameti

Predavani zprav


Producent-konzument


Problém večeřících filosofů


Problém čtenářů a písařů

Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje