Komunikacja asynchroniczna w modelu rozproszonym.odv\f]qhsureohp\zvsyáelh QR FL Problem wzajemnego wykluczania 1DMF] FLHMSRMDZLDM F\VL ZSUDNW\FH operacje lokalne; SURWRNyáZVW SQ\ rejon krytyczny; SURWRNyáNR FRZ\ forever %H]SLHF]H VWZR: - :UHMRQLHNU\W\F]Q\PSURJUDPXPR HSU]HE\ZDü MHGQRF]H QLHFRQDMZ\ HMMHGHQSURFHV \ZRWQR ü: - 3URFHVNWyU\FKFHZHM ügruhmrqxnu\w\f]qhjrznr FXGR niego wejdzie Problem producenta i konsumenta 3U]\NáDG] \FLD: fabryka, magazyn, odbiorca 3U]\NáDG]V\VWHPyZOLF] F\FKX \WNRZQLNNRPSXWHUDEXIRU klawiatury, system operacyjny %H]SLHF]H VWZR: -.RQVXPHQWSRELHUDSRUFM Z\SURGXNRZDQ SU]H]SURGXFHQWD - Producent czeka na wolne miejsce w buforze -.RQVXPHQWF]HNDQDSHáQHPLHMVFHZEXIRU]H Komunikacja asynchroniczna... Str. 1
\ZRWQR ü: -.RQVXPHQWNWyU\FKFHRGHEUDüSRUFM ZNR FXM RGELHU]H - 3URGXFHQWNWyU\Z\SURGXNRZDáSRUFM ZNR FXM XPLH FLZ buforze Warianty: - bez bufora - bufor jednoelementowy - bufor N-elementowy - bufor nieograniczony (producent nie czeka) - wielu producentów - wielu konsumentów - SRUFMHUy QHMZLHONR FL Interesuje nas synchronizacja producenta i konsumenta. 3UREOHPGRERUXZLHONR FLEXIRUDMHVWSR]DQDV]\PL zainteresowaniami Problem czytelników i pisarzy 3U]\NáDG: rezerwacja miejsc lotniczych %H]SLHF]H VWZR: - Gdy pisarz zapisuje, nikt inny nie czyta, ani nie pisze - *G\F]\WHOQLNF]\WDLQQLF]\WHOQLF\PRJ F]\WDü \ZRWQR ü: -.D G\F]\WHOQLNNWyU\FKFHF]\WDüZNR FXE G]LHPyJá UR]SRF] üf]\wdqlh -.D G\SLVDU]NWyU\FKFHSLVDüZNR FXE G]LHPyJá UR]SRF] üslvdqlh Komunikacja asynchroniczna... Str. 2
Warianty: - SULRU\WHWF]\WHOQLNyZ ZLDGRPDUH]\JQDFMD] \ZRWQR FL PR OLZR ü]djárg]hqldslvdu]\ - SULRU\WHWSLVDU]\ ZLDGRPDUH]\JQDFMD] \ZRWQR FL PR OLZR ü]djárg]hqldf]\whoqlnyz - UyZQHSULRU\WHW\EH]PR OLZR FL]DJáRG]HQLD - ograniczona liczba miejsc w czytelni 3UREOHPSL FLXILOR]RIyZ 3U]\NáDGDEVWUDNF\MQ\DOHXND]XM F\SRGVWDZRZHSUREOHP\ ZVSyáELH QR FL %H]SLHF]H VWZR: - )LOR]RIMHMH OLPDREDZLGHOFH - DGHQZLGHOHFQLHPR HE\üMHGQRF]H QLHZSRVLDGDQLX dwóch filozofów \ZRWQR ü - 1LNWQLHXPU]H]JáRGX Warianty narodowe: ZáRVNLILOR]RIRZLHMHG] PDNDURQZLGHOFDPL FKL VNLILOR]RIRZLHMHG] U\ SDáHF]NDPL Komunikacja asynchroniczna... Str. 3
Model rozproszony: 1LHPDSDPL FLZVSyáG]LHORQHMSU]H]SURFHV\ 6\QFKURQL]DFMDLNRPXQLNDFMDRGE\ZDVL Z\á F]QLH]DSRPRF SU]HV\áDQLDNRPXQLNDWyZMDZQHJROXEQLHMDZQHJR 0R OLZHUHDOL]DFMHZ\PLDQ\NRPXQLNDWyZ komunikacja synchroniczna: - SURFHVNWyU\FKFHZ\VáDüNRPXQLNDWF]HNDD LQQ\SURFHV E G]LHFKFLDáJRRGHEUDü - SURFHVNWyU\FKFHRGHEUDüNRPXQLNDWXF]HNDD LQQ\SURFHV E G]LHFKFLDáJRZ\VáDü - SU]HND]DQLHNRPXQLNDWXPR HVL RGE\üMHG\QLHSU]\XG]LDOH ]DLQWHUHVRZDQ\FKSURFHVyZEH]SR UHGQLND komunikacja asynchroniczna: - SURFHVNWyU\FKFHZ\VáDüNRPXQLNDWQLHF]HNDD NWR E G]LH FKFLDáJRRGHEUDüW\ONRXPLHV]F]DJRZEXIRU]H - SURFHVNWyU\FKFHRGHEUDüNRPXQLNDWF]HNDD E G]LHGOD niego komunikat (wersja EORNXM FDOXENR F]\RGELyU NRPXQLNDWXV\JQDOL]XM FEá GZHUVMDQLHEORNXM FD) Sposoby adresowania komunikatów: NRPXQLNDWPR HE\üSU]H]QDF]RQ\GODNRQNUHWQHJRprocesu; NRPXQLNXM FHVL SURFHV\]QDM VZRMHQD]Z\ (identyfikacja symetryczna) NRPXQLNDWPR HE\üSU]H]QDF]RQ\GODNRQNUHWQHJRprocesu; MHGQD]HVWURQQLHZLH]NLPVL NRPXQLNXMH (identyfikacja asymetryczna, charakterystyczna dla architektury klient-serwer) Komunikacja asynchroniczna... Str. 4
NRPXQLNDWPR HE\üZ\V\áDQ\SRNRQNUHWQ\Pkanale NRPXQLNDF\MQ\PZ\V\áDM F\QLHPXVLZLHG]LHüGRNRJRWUDIL komunikat NRPXQLNDWPR HE\üZVWDZLRQ\GRNRQNUHWQHJRbufora (ograniczonego lub nieograniczonego) 3U]HDQDOL]XMHP\QDVW SXM FHZDULDQW\: komunikacja asynchroniczna, komunikaty wstawiane do wskazanego bufora (á F]D, á F]DQD]ZDQH, kolejki komunikatów w systemie Unix) NRPXQLNDFMDDV\QFKURQLF]QDNRPXQLNDW\Z\V\áDQHSU]H] NDQDá\NRPXQLNDF\MQHQLHRJUDQLF]RQHEXIRU\Estelle) komunikacja synchroniczna, symetryczna (CSP) komunikacja synchroniczna, asymetryczna (Ada) komunikacja asynchroniczna, komunikaty wstawiane do nieograniczonego bufora, selektywny wybór z bufora (Linda) Cechy komunikacji asynchronicznej: Z\VáDQLHNRPXQLNDWXQLHZVWU]\PXMHQDGDZF\]SHZQ\PL Z\M WNDPL Z\VáDQHLMHV]F]HQLHRGHEUDQHNRPXQLNDW\V SU]HFKRZ\ZDQHZ buforze EXIRUPR HE\üQLHRJUDQLF]RQ\OXERJUDQLF]RQ\SUyEDZ\VáDQLD NRPXQLNDWXGRSHáQHJREXIRUDPR HNR F]\üVL Eá GHPOXE ZVWU]\PDQLHPSURFHVXZ\V\áDM FHJR RGELHUDQLHNRPXQLNDWyZPR H]DNR F]\üVL ZVWU]\PDQLHP QDGDZF\ZHUVMDEORNXM FDOXEEá GHPZHUVMDQLHEORNXM FD Komunikacja asynchroniczna... Str. 5
Notacja do opisu komunikacji asynchronicznej Abstrahujemy od konkretnej realizacji i jej technicznych Z\PRJDFKVNXSLDM FVL QDHOHPHQWDFKLVWRWQ\FK]SXQNWX ZLG]HQLDSURJUDPRZDQLDZVSyáELH QHJR X \ZDP\NRQVWUXNFMLSURJUDPLVW\F]Q\FK]M ]\NDPascal UR]V]HU]DP\M ]\NRGHILQLFMHprocesówVNáDGQLDW\FKGHILQLFML MHVWDQDORJLF]QDMDNVNáDGQLDGHILQLFMLSURFHGXU process P (i: integer);... end dodajemy konstrukcje co i coendgrz\ud DQLD ZVSyáELH QHJR wykonania procesów, np.: co P(1); P(1); P(2); Q coend wprowadzamy predefiniowany typ danych buffer. Zmienne tego W\SXUHSUH]HQWXM EXIRU\GRNWyU\FKZ\V\áDP\L]NWyU\FK odbieramy komunikaty ]PLHQQHW\SXEXIRURZHJRPRJ Z\VW SLüMHG\QLHZ SURFHGXUDFKZ\V\áDQLDLRGELHUDQLDNRPXQLNDWyZ0RJ E\ü deklarowane jedynie poza procesami EXIRU\V QLHRJUDQLF]RQHLG]LDáDM MDNNROHMNLSURVWH ]DNáDGDP\LVWQLHQLHSUHGHILQLRZDQ\FKSURFHGXU - SendMessage (b, t), NWyUDSRZRGXMHZ\VáDQLHNRPXQLNDWXR WUH FLWGREXIRUDEWMHVWZDUWR FL GRZROQHJRW\SX - GetMessage (b, t)nwyudsrzrgxmhz\m FLHSLHUZV]HJR NRPXQLNDWX]EXIRUDEL]DSDPL WDQLHJRQD]PLHQQHMW7\S RGHEUDQHJRNRPXQLNDWXPXVLE\ü]JRGQ\]W\SHP]PLHQQHMW MH OLEXIRUMHVWSXVW\WRGetMessage (b, t) wstrzymuje proces SURFHV\QLHPRJ RGZRá\ZDüVL GR]PLHQQ\FKglobalnych ]Z\M WNLHP]PLHQQ\FKEXIRURZ\FK operacja GetMessage (b, t)mhvw \ZRWQD Komunikacja asynchroniczna... Str. 6
3U]\NáDG Problem wzajemnego wykluczania b: buffer; m: integer; process P; m: integer; operacje lokalne; GetMessage(b, m); {SURWRNyáZVW SQ\} rejon krytyczny; SendMessage(b, m) {SURWRNyáNR FRZ\} until false SendMessage (b, m); co P; P co -DN]PLHQLVL UR]ZL ]DQLHMH OL E G]LHZL FHMSURFHVyZ" ZUHMRQLHNU\W\F]Q\PPDSU]HE\ZDüFRQDMZ\ HM0SURFHVyZ" EXIRU\E G RJUDQLF]RQH" 2GSRZLHG]LQDüZLF]HQLDFK Komunikacja asynchroniczna... Str. 7
3U]\NáDG 3L FLXILOR]RIyZ Wariant I. Widelec jest komunikatem. process Fil (i: 0..4); ^P\ O ` GetMessage (b[i], m); GetMessage (b[(i+1) mod 5], m); {jem} SendMessage (b[i], m); SendMessage (b[(i+1) mod 5], m) until false b[4] 3 4 b[3] b[0] 2 0 b[2] b[1] 1 Zakleszczenie:ZV]\VF\SRELHUDM QDMSLHUZOHZ\ZLGHOHFLF]HNDM na prawy 3U]\NáDG 3L FLXILOR]RIyZ Wariant II. Widelce jako procesy. 1LHGHWHUPLQLVW\F]QDNROHMQR üsrgqrv]hqldzlghofyz w, f: array[0..4] of buffer; Fil[0] Fil[1]... w[0] f[0] w[1] f[1]... Wid[0] Wid[1] Komunikacja asynchroniczna... Str. 8
process Fil (i: 0..4); k: integer; ^P\ O ` SendMessage (w[i], i); GetMessage (f[i], k); { czekaj na potwierdzenie } SendMessage (w[(i+1) mod 5], i); GetMessage (f[i], k); { czekaj na potwierdzenie } {jem} SendMessage (w[i], i); SendMessage (w[(i+1) mod 5], i) until false process Wid (i: 0..4); k1, k2, ktoje: integer; ktoje := 0; k2 := 0; GetMessage (w[i], k1); if k2 = ktoje then ktoje := k1 else ktoje := k2; SendMessage (f[nwrmh@l^z\ OLMSRWZLHUG]HQLH` GetMessage (w[i], k2); until false 1LHGHWHUPLQLVW\F]QDNROHMQR üsrelhudqldzlghofyzqlhsrsudzld V\WXDFMLGDOHMMHVWPR OLZHzakleszczenie. Komunikacja asynchroniczna... Str. 9
3U]\NáDG 3L FLXILOR]RIyZ Wariant III. 3URFHVQDG]RUXM F\. type 6WDQ -H0\ OL*áRGQ\ Komunikat = record co: (&KFH-H ü6nr F]\á kto: 0..4 serw: buffer; f : array [0..4] of buffer; const Jedz = 0; Fil[0] process Fil (i:0..4); k: Komunikat; potw: integer; k.kto := i; ^P\ O ` k.co := &KF -H ü SendMessage (serw, k); f[0] f[0] S GetMessage (f[i], potw); { czekaj na potwierdzenie } {jem} NFR 6NR F]\á SendMessage (serw, k) until false; Fil[1]... f[1]... Komunikacja asynchroniczna... Str. 10
process S; s: array [0..4] of6wdq 0\ OL0\ OL0\ OL0\ OL0\ OL k: Komunikat; procedure6sudzg N ifv>n@ *árgq\and (s[(k-1) mod 5]) <> Je and (s[(k+1) mod 5]) <> Je then s[k] := Je; SendMessage (f[k], Jedz) end end^6sudzg ` {proces S} GetMessage (serw, k); case k.co of &KFH-H ü s[nnwr@ *árgq\ 6SUDZG k.kto); 6NR F]\á s[nnwr@ 0\ OL 6SUDZG NNWRmod 5); 6SUDZG NNWRmod 5) end end {case} until false )LOR]RIRZLHSRGQRV] RE\GZDZLGHOFHQDUD]0R OLZH ]DJáRG]HQLH Komunikacja asynchroniczna... Str. 11
3U]\NáDG 3L FLXILOR]RIyZ Wariant IV. Bilety. bilety: EXIIHU^SRF] WNRZRZEXIRU]HELOHW\` process Fil (i: 0..4); k: integer; ^P\ O ` GetMessage (bilety, k); SendMessage (w[i], i); SendMessage (w[(i+1) mod 5], i); GetMessage (f[i], k); GetMessage (f[i], k); {jem} SendMessage (w[i], i); SendMessage (w[(i+1) mod 5], i); SendMessage (bilety, k) until false 5R]ZL ]DQLHSRSUDZQH3U]\VWROHSU]HE\ZDMHGQRF]H QLHFR QDMZ\ HMILOR]RIyZ Realizacje schematu komunikacji asynchronicznej: 81,;á F]DDQJpipe) 81,;á F]DQD]ZDQHpliki FIFO) UNIX kolejki komunikatu Komunikacja asynchroniczna... Str. 12