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

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(→Problém večeřících filosofů)
Řádka 10: Řádka 10:
  
 
Problem sdilene pameti
 
Problem sdilene pameti
−
* Uvedene mechanismy
+
*umisteni objektu ve sdilene pameti
−
**umisteni objektu ve sdilene pameti
+
* Bezpecnost - globalni data pristupna kteremukoliv procesu bez ohledu na semafor
−
* Nekdy neni vhodne
+
* Procesy bezi na ruznych strojich, komunikuji spolu po siti Reseni - predavani zprav
−
** 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
 
* 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"
 +
 
 +
Synchronizace - blokující (synchronní) (recieve) / neblokující (asynchronní) (send)
 +
 
 +
* blokující send
 +
** čeká na převzetí správy příjemcem
 +
* neblokující send
 +
** vrací se ihned po odeslání zprávy
 +
** většina systémů
 +
* blokující receive
 +
** není-li ve frontě žádná zpráva, zablokuje se
 +
** většina systémů
 +
* neblokující receive
 +
** není-li zpráva, vrací chybu
 +
 
 +
problémy, které nejsou u semaforů ani monitorů, zvláště při komunikaci po síti
 +
* ztráta zprávy (potvrzení o přijetí (acknowledgement))
 +
* ztráta potvrzení (číslování zpráv, duplicitní zprávy se ignorují)
 +
* problém autentizace (zprávy je možné šifrovat)
 +
 
 +
lokální komunikace
 +
* rendezvous - eliminuje frontu zpráv, send zavolán dříve než receive – odesílatel zablokován, vyvolán send i receive – zprávu zkopírovat z odesílatele přímo do příjemce
 +
* využití mechanismu virtuální paměti paměť obsahující zprávu je přemapována z procesu odesílatele do procesu příjemce
 +
 
 +
typické aplikace typu klient - server
 +
* WWW klient x WWW server (Apache, IIS)
 +
* účetní aplikace x databázový systém (Oracle, MySQL)
 +
 
 +
 
 +
== Volání vzdálených procedur (RPC - Remote Procedure Call) ==
 +
 
 +
# Klient zavolá spojku klienta, reprezentující vzdálenou proceduru
 +
# Spojková procedura argumenty zabalí do zprávy, pošle ji serveru
 +
# Spojka serveru zprávu přijme, vezme argumenty a zavolá proceduru
 +
# Procedura se vrátí, návrat. hodnotu pošle spojka serveru zpět klientovi
 +
# Spojka klienta přijme zprávu obsahující návrat. hodnotu a předá ji volajícímu
 +
 
 +
dnes nejpoužívanější jazyková konstrukce pro
 +
implementaci distribuovaných systémů a
 +
programů bez explicitního předávání zpráv
 +
 
 +
 
 +
 
 +
== Ekvivalenty uvedených primitiv ==
 +
Lze implementovat semafory pomocí zpráv a zprávy pomocí semaforů
 +
 
 +
Lze ukázat, že je možné implementovat
 +
* Semafory pomocí monitoru
 +
* Monitory pomocí semaforů
 +
 
 +
 
 +
 
 +
== Bariéry ==
 +
 
 +
[[Soubor:Bariera.png]]
  
  
Řádka 47: Řádka 100:
 
* Špagety jsou tak klouzavé, že filosof potřebuje 2 vidličky, aby mohl jíst
 
* Š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í
 
* 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ží…)
+
* Problémy: uvíznutí(deadlock) (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ů)
 
* Řešení - Dijkstra (pomocí semaforů)
  
Řádka 59: Řádka 112:
 
* Semafor w zabrání vstupu písaře, pokud jsou čtenáři
 
* Semafor w zabrání vstupu písaře, pokud jsou čtenáři
 
* Semafor w také zabrání vstupu čtenářům, je-li písař
 
* Semafor w také zabrání vstupu čtenářům, je-li písař
 +
* toto je s předností čtenářů
 +
 +
* nebo to jde udělat tak, že když chce vstoupit písař, tak už tam nepustí další čtenáře (s předností písařů)
 +
 +
 +
== Problémy ==
 +
 +
 +
* Uvíznutí (Deadlock) - cyklické čekání dvou či více procesů na událost, kterou může vyvolat pouze některý z nich, nikdy k tomu však nedojde
 +
* Vyhladovění (starvation) -  proces se nedostane k požadovaným zdrojům

Verze z 29. 8. 2011, 20:17

Meziprocesova komunikace: // tady by to chtělo rozvést a doplnit...


Problem sdilene pameti


Obsah

Predavani zprav

Synchronizace - blokující (synchronní) (recieve) / neblokující (asynchronní) (send)

problémy, které nejsou u semaforů ani monitorů, zvláště při komunikaci po síti

lokální komunikace

typické aplikace typu klient - server


Volání vzdálených procedur (RPC - Remote Procedure Call)

  1. Klient zavolá spojku klienta, reprezentující vzdálenou proceduru
  2. Spojková procedura argumenty zabalí do zprávy, pošle ji serveru
  3. Spojka serveru zprávu přijme, vezme argumenty a zavolá proceduru
  4. Procedura se vrátí, návrat. hodnotu pošle spojka serveru zpět klientovi
  5. Spojka klienta přijme zprávu obsahující návrat. hodnotu a předá ji volajícímu

dnes nejpoužívanější jazyková konstrukce pro implementaci distribuovaných systémů a programů bez explicitního předávání zpráv


Ekvivalenty uvedených primitiv

Lze implementovat semafory pomocí zpráv a zprávy pomocí semaforů

Lze ukázat, že je možné implementovat


Bariéry

Bariera.png


Producent-konzument

Klasicky se zde sdílená paměť řeší pomocí pole, kde se z jedné strany položky přidávají a z druhé odebírají. Index kam zapisovat/odebírat počítáme modulo velikost pole. Kolizím zabráníme pomocí dvou semaforů, kde jeden obsahuje informaci o počtu plných prvků pole (f) a druhý o počtu prázdných prvků (e).


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

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


Problémy

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