Issuu on Google+

POLUTEQNEIO KRHTHS

ARQES KATANEMHMENWN SUSTHMATWN Baslh Samoladˆ

QANIA 2005


ii


Perieqìmena 1 Eisagwg  1.1 Mia apl  prospèlash sto diadktuo . . . . . . 1.2 Qarakthristikˆ katanemhmènwn susthmˆtwn . . 1.2.1 Katanemhmènh leitourgikìthta . . . . . . 1.2.2 Upologistiko pìroi . . . . . . . . . . . . 1.2.3 Epikoinwna . . . . . . . . . . . . . . . . 1.2.4 Axiopista . . . . . . . . . . . . . . . . . 1.2.5 Asfˆleia . . . . . . . . . . . . . . . . . . 1.3 H dom  twn katanemhmènwn susthmˆtwn . . . . 1.3.1 Uphrese . . . . . . . . . . . . . . . . . 1.3.2 Pelˆte kai uphrète . . . . . . . . . . . 1.3.3 Polueppede arqitektonikè . . . . . . . 1.3.4 Arqitektonikè omobˆjmwn (peer-to-peer) 1.4 H ulopohsh twn katanemhmènwn susthmˆtwn . 1.4.1 Epikoinwna . . . . . . . . . . . . . . . . 1.4.2 Poluepexergasa . . . . . . . . . . . . . 1.4.3 Gl¸sse programmatismoÔ . . . . . . . . 1.4.4 Apomakrusmène kl sei . . . . . . . . . 1.4.5 Katanemhmèna antikemena . . . . . . . . 1.4.6 Jemeli¸dei uphrese . . . . . . . . . . 1.5 Eplogo . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

1 2 4 4 5 6 6 7 8 8 9 9 10 11 11 12 13 14 16 16 17

2 Ulopohsh Pelat¸n kai Uphret¸n 2.1 Epikoinwna diergasi¸n . . . . . . . . . . . 2.2 Diktuak  epikoinwna . . . . . . . . . . . . 2.2.1 Eisagwg  sta sockets . . . . . . . . 2.2.2 Epikoinwna me TCP sockets . . . . . 2.2.3 Epikoinwna me UDP sockets . . . . 2.2.4 DieujÔnsei sto IP . . . . . . . . . . 2.2.5 RÔjmish th epikoinwna me sockets 2.3 Poluplexa epikoinwna me sockets . . . . 2.4 Omadik  epikoinwna . . . . . . . . . . . . 2.4.1 Epikoinwna me ekpomp  . . . . . . . 2.4.2 Epikoinwna me pollapl  dianom  .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

19 19 20 21 23 25 26 31 33 35 35 36

iii

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .


iv

PERIEQOMENA

2.5 Leptomèrie kai epektˆsei th qr sh sockets . . . . . . . . 2.5.1 Qr sh paramètrwn elègqou Eisìdou/Exìdou . . . . . 2.5.2 Socket Timeouts . . . . . . . . . . . . . . . . . . . . . 2.5.3 Klesimo enì socket . . . . . . . . . . . . . . . . . . . 2.6 Poluepexergasa . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Sugqronismì ergasi¸n . . . . . . . . . . . . . . . . . 2.7 Pollaplè diergase kai sugqronismì . . . . . . . . . . . . 2.7.1 signals . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.2 Sugqronismì metaxÔ diergasi¸n . . . . . . . . . . . . 2.7.3 Diergase -damone . . . . . . . . . . . . . . . . . . . 2.8 N mata kai sugqronismì . . . . . . . . . . . . . . . . . . . . 2.8.1 Basik  qr sh twn nhmˆtwn . . . . . . . . . . . . . . . 2.8.2 Teqnikè sugqronismoÔ nhmˆtwn . . . . . . . . . . . . 2.8.3 Proqwrhmènh qr sh nhmˆtwn . . . . . . . . . . . . . 2.9 Ulopohsh uphret¸n . . . . . . . . . . . . . . . . . . . . . . 2.9.1 Genik  dom  enì uphrèth . . . . . . . . . . . . . . . . 2.9.2 Iterative server . . . . . . . . . . . . . . . . . . . . . . 2.9.3 Process-based concurrent server . . . . . . . . . . . . . 2.9.4 Preforking . . . . . . . . . . . . . . . . . . . . . . . . 2.9.5 Thread-based concurrent server . . . . . . . . . . . . . 2.10 Epikoinwna pelˆth-uphrèth . . . . . . . . . . . . . . . . . . 2.10.1 Prwtìkolla epikoinwna pelˆth-uphrèth . . . . . . . 2.10.2 SÔnodoi . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11 Anqneush kai antimet¸pish sfalmˆtwn . . . . . . . . . . . . 2.11.1 Anqneush sfalmˆtwn se sockets . . . . . . . . . . . . 2.11.2 Ulopohsh athsh -apìkrish me anoq  se sfˆlmata 3 Sust mata Apomakrusmènwn Kl sewn 3.1 Apomakrusmène kl sei . . . . . . . . . . . . . . . . . . . . 3.2 Logismikì apomakrusmènwn kl sewn . . . . . . . . . . . . . 3.2.1 Diepafè uphresi¸n . . . . . . . . . . . . . . . . . . . 3.2.2 Esw/exwterkeush katˆ to qrìno metˆfrash . . . . . 3.2.3 Gl¸sse OrismoÔ Diepaf¸n . . . . . . . . . . . . . . 3.2.4 Esw/exwterkeush me reflection . . . . . . . . . . . . . 3.3 Orsmata se apomakrusmène kl sei . . . . . . . . . . . . . 3.3.1 Jewrhtikˆ stoiqea kai anaparˆstash tÔpwn . . . . . 3.3.2 Pèrasma orismˆtwn . . . . . . . . . . . . . . . . . . . 3.3.3 Ulopohsh apomakrusmènwn kl sewn me call-by-copy 3.4 Ektèlesh apomakrusmènwn kl sewn . . . . . . . . . . . . . . 3.4.1 SÔnodoi . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Epikoinwna . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 Poluepexergasa . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

39 42 42 43 43 45 46 50 51 52 53 55 58 68 72 73 73 74 75 76 76 77 78 79 80 81

. . . . . . . . . . . . . .

85 86 88 89 89 91 92 96 96 98 100 101 101 102 103


v

PERIEQOMENA

4 Katanemhmèna Antikemena 4.1 Basikè ènnoie . . . . . . . . . . . . . . . . . . . . 4.1.1 Object brokers . . . . . . . . . . . . . . . . . 4.1.2 Interfaces . . . . . . . . . . . . . . . . . . . . 4.1.3 Ulopohsh RMI . . . . . . . . . . . . . . . . 4.2 CORBA . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Montèlo dedomènwn . . . . . . . . . . . . . . 4.2.2 Arqitektonik  . . . . . . . . . . . . . . . . . 4.2.3 Basikè uphrese . . . . . . . . . . . . . . . 4.2.4 Parˆdeigma ulopohsh Hello world . . . . . 4.3 JavaRMI . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Domè ulopohsh katanemhmènwn antikeimènwn . . 4.4.1 Basikè odhge . . . . . . . . . . . . . . . . 4.4.2 Sqediasmì gia sunìdou . . . . . . . . . . . 4.4.3 Stateless uphrese . . . . . . . . . . . . . . . 4.4.4 Klhronomikìthta . . . . . . . . . . . . . . . 4.4.5 Eppedo afaresh . . . . . . . . . . . . . . . 4.4.6 Iterators . . . . . . . . . . . . . . . . . . . . . 4.4.7 Antimet¸pish sfalmˆtwn . . . . . . . . . . . 4.5 Metaknhsh k¸dika . . . . . . . . . . . . . . . . . . 4.5.1 Probl mata asfˆleia . . . . . . . . . . . . 4.5.2 Teqnologe diadiktÔou kai metaforˆ k¸dika 4.6 Energopohsh kai persistence antikeimènwn . . . . . 4.6.1 Energopohsh antikeimènwn . . . . . . . . . . 4.6.2 Persistence . . . . . . . . . . . . . . . . . . . 4.7 Epikoinwna publish/subscribe . . . . . . . . . . . . . 4.7.1 Basikè ènnoie . . . . . . . . . . . . . . . . 4.7.2 Tuple spaces . . . . . . . . . . . . . . . . . . 4.7.3 Ourè mhnumˆtwn . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

105 106 106 107 107 108 109 110 111 112 113 113 113 114 115 117 118 119 120 121 122 123 125 126 127 128 128 129 129

5 Uphrese onomˆtwn kai katalìgou 5.1 Uphrese onomˆtwn . . . . . . . . . . . . . . . . 5.1.1 Q¸roi onomˆtwn . . . . . . . . . . . . . . . 5.1.2 Uniform Resource Identifiers (URIs) . . . . 5.1.3 Arqitektonik  uphresi¸n onomˆtwn . . . . 5.1.4 Orgˆnwsh tou q¸rou onomˆtwn . . . . . . 5.2 H uphresa DNS . . . . . . . . . . . . . . . . . . 5.2.1 O q¸ro onomˆtwn tou DNS . . . . . . . . 5.2.2 Arqitektonik  tou DNS . . . . . . . . . . . 5.2.3 Qr sh tou DNS apì ti efarmogè . . . . . 5.3 Uphrese katalìgou . . . . . . . . . . . . . . . . 5.3.1 Uphrese anakˆluyh (discovery services)

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

133 134 134 135 136 137 138 138 139 140 140 141

6 Asfˆleia

. . . . . . . . . . .

143


vi

PERIEQOMENA

7 Katanemhmènoi Algìrijmoi 145 7.1 Montèla katanemhmènou ulikoÔ . . . . . . . . . . . . . . . . . . . . . 145 7.1.1 SÔgqrono montèlo koin  mn mh (synchronous shared memory model) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7.1.2 AsÔgqrono montèlo koin  mn mh (asynchronous shared-memory model) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7.1.3 SÔgqrono diktuakì montèlo (synchronous network model) . . . 148 7.1.4 AsÔgqrono diktuakì montèlo (asynchronous network model) . . 149 7.1.5 SÔgkrish twn diafìrwn montèlwn . . . . . . . . . . . . . . . . 150 7.2 O qrìno sta katanemhmèna sust mata . . . . . . . . . . . . . . . . . 151 7.2.1 Sugqronismì . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.2.2 O algìrijmo tou Christian . . . . . . . . . . . . . . . . . . . . 153 7.3 Logikì qrìno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7.3.1 Rolìgia Lamport . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.3.2 Dianusmatikˆ rolìgia . . . . . . . . . . . . . . . . . . . . . . . 155 7.4 Prosomoi¸sei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.4.1 Prosomowsh mhnumˆtwn me qr sh koin  mn mh . . . . . . . 156 7.4.2 Prosomowsh koin¸n metablht¸n me epikoinwna mhnumˆtwn . 156 7.5 Eklog  hgèth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.6 Katanemhmènh l yh stigmiotÔpou . . . . . . . . . . . . . . . . . . . . 156 7.7 Filìsofoi pou geumatzoun . . . . . . . . . . . . . . . . . . . . . . . . 158 7.8 Buzantin  sumfwna . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 8 Sugqronismì

163

9 Dosolhye 165 9.0.1 Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.0.2 Concurrency control . . . . . . . . . . . . . . . . . . . . . . . . 166 10 Sugqronismì plhrofora

167

11 Arqitektonikè pelˆth-uphrèth 169 11.1 Efarmogè web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 11.2 Uphrète efarmog¸n . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 12 Uphresiostrafe arqitektonikè 171 12.1 To Plègma (Grid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 13 Jewra Poluepexergasa 173 13.1 Stoiqea apì ton kathgorikì logismì pr¸th tˆxh . . . . . . . . . . 174 13.1.1 Genikeumènoi posodekte . . . . . . . . . . . . . . . . . . . . . 175 13.1.2 H sunˆrthsh if . . . . . . . . . . . . . . . . . . . . . . . . . . 176 13.2 Progrˆmmata metasqhmatism¸n . . . . . . . . . . . . . . . . . . . . . 178 13.2.1 Q¸ro katastˆsewn enì progrˆmmato . . . . . . . . . . . . . 179 13.2.2 Oi entolè pollapl  anˆjesh w metasqhmatismo katˆstash 181 13.2.3 Progrˆmmata ¸ metasqhmatismo katˆstash . . . . . . . . . 181 13.2.4 Genkeush twn programmˆtwn metasqhmatism¸n . . . . . . . . 182


vii

PERIEQOMENA

13.2.5 àna pragmatikì parˆdeigma . . . . . 13.3 Logikè idiìthte ektelèsimwn ekfrˆsewn . . 13.3.1 Asjenèsjerh prosunj kh . . . . . . . 13.4 Idiìthte programmˆtwn . . . . . . . . . . . 13.5 Idiìthte adiablhtìthta . . . . . . . . . . . 13.5.1 Paradegmata . . . . . . . . . . . . . 13.5.2 Apodexei idiot twn adiablhtìthta 13.5.3 Paradegmata apodexewn . . . . . . . 13.6 Idiìthte proìdou . . . . . . . . . . . . . . . 13.6.1 Dkaie ektelèsei . . . . . . . . . . . 13.6.2 Ef mere idiìthte . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

185 189 189 191 192 193 194 195 197 198 200

14 Upologismì th Apìdosh

201

A H gl¸ssa programmatismoÔ Python

203

B To prìtupo CORBA B.1 To montèlo dedomènwn th OMG . . . . . . . . . . . . . B.1.1 Operations . . . . . . . . . . . . . . . . . . . . . B.1.2 Interfaces . . . . . . . . . . . . . . . . . . . . . . B.1.3 Attributes . . . . . . . . . . . . . . . . . . . . . . B.1.4 TÔpoi . . . . . . . . . . . . . . . . . . . . . . . . B.1.5 exceptions . . . . . . . . . . . . . . . . . . . . . B.1.6 Modules kai scoping . . . . . . . . . . . . . . . . B.1.7 àna oloklhrwmèno parˆdeigma . . . . . . . . . . B.2 Metˆfrash CORBA IDL se Python . . . . . . . . . . . B.2.1 Apeikìnish onomˆtwn kai scopes . . . . . . . . . B.2.2 Apeikìnish tÔpwn . . . . . . . . . . . . . . . . . B.2.3 Apeikìnish gia exceptions . . . . . . . . . . . . . B.2.4 Apeikìnish gia interfaces . . . . . . . . . . . . . B.3 Metˆfrash CORBA IDL se Java . . . . . . . . . . . . B.4 H arqitektonik  CORBA . . . . . . . . . . . . . . . . . B.4.1 References se katanemhmèna antikemena CORBA B.4.2 Prwtìkolla epikoinwna . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

205 205 205 206 206 207 209 209 209 211 211 211 212 212 213 213 214 215


viii

PERIEQOMENA


Kefˆlaio 1 Eisagwg  Ta katanemhmèna sust mata enai h aiqm  tou dìrato th shmerin  teqnologa plhroforik  , pou sunìdeuse qronikˆ kai allhlotrofodìthse thn epanˆstash sti yhfiakè epikoinwne katˆ th dekaeta tou '90. Ta sunantˆ kane apì to mikrìtero forhtì upologist  mèqri ton megalÔtero uperupologist , na ekteloÔn apì ti pio sunhjismène leitourge , ìpw h peri ghsh sto diadktuo, w ti plèon exeidikeumène , ìpw o sugqronismì twn fanari¸n stou drìmou mia megaloÔpolh . Meriko apì tou pìrou kai uphrese pou s mera prosfèrontai apì katanemhmèna sust mata enai: • Uphrese sust mato arqewn (diktuako dskoi). • Uphrese poluepexergasa /parˆllhlh epexergasa (pq. clusters). • Ektup¸sei . • Metaforˆ arqewn (yhfiakè biblioj ke , mousik , klp.). • Hlektronikì taqudromeo. • Kìmboi diadiktÔou, apì proswpikè selde mèqri sust mata dhmoprasi¸n. • Bˆsei dedomènwn kai katˆlogoi. • Sust mata grafik  diasÔndesh qrhst¸n (GUI). • Uphrese grafeou (thlefwna, fax, klp.) • Paiqndia! . . . kai pollˆ ˆlla. H tìso megˆlh diesdush twn katanemhmènwn susthmˆtwn, dhmiourge mia sugkequmènh eikìna w pro to ti akrib¸ enai èna katanemhmèno sÔsthma. Ti koinì

1


2

KEFALAIO 1. EISAGWGH

mpore na èqoun oi uphrese leitourgikoÔ sust mato (pq. katanemhmèno sÔsthma arqewn) me èna diktuakì paiqndi, pèra ap' to ìti kai ta dÔo qrhsimopoioÔn th diktuak  sÔndesh diaforetik¸n upologist¸n? M pw loipìn to antikemeno twn katanemhmènwn susthmˆtwn enai to dio me autì twn diktÔwn upologist¸n? Sto kefˆlaio autì ja apant soume autˆ akrib¸ ta erwt mata. 1.1

Mia apl  prospèlash sto diadktuo

àna foitht  jèlei na mˆjei an to biblo {Katanemhmèna Sust mata} èqei epistrafe sth biblioj kh th sqol  tou, ¸ste na to daneiste autì . H biblioj kh diajètei mia istoselda mèsw th opoa o foitht  ma mpore na brei thn plhrofora pou ton endiafèrei. To kajhmerinì autì senˆrio enai tupikì th qr sh

X terminal

Workstation

Web server Network

File server DNS server

Database

Sq ma 1.1: Upologistiko pìroi gia mia prospèlash sth biblioj kh. kai olokl rwsh pollapl¸n katanemhmènwn susthmˆtwn se mia eniaa efarmog . Gia thn exuphrèthsh tou qr sth ma , ja energopoihje ìqi mìnon èna , allˆ pollo upologistè , diktuakˆ sundedemènoi, ìpw sto Sq.1.1. Stou upologistè autoÔ ekteloÔntai diˆfore diergase , oi opoe katˆ thn anaz thsh tou qr sth ma ja epikoinwn soun metaxÔ tou , ìpou h kajemiˆ ja ulopoi sei to dikì th tm ma th epexergasa . Oi diergase autè fanontai sto Sq.1.2. O qr sth ma ergˆzetai se èna termatikì twn X windows. To termatikì ektele th diergasa Xserver, èna prìgramma to opoo diaqeirzetai thn ojình, to plhktrolìgio kai to pontki tou termatikoÔ, kai prosfèrei uphrese grafik¸n parajÔrwn se ˆlla progrˆmmata.


3

1.1. MIA APLH PROSPELASH STO DIADIKTUO

O web browser mozilla ekteletai sto stajmì ergasa (Workstation). O qr sth ma , san diktuakì qr sth , èqei th dik  tou perioq  sto diktuakì dsko pou prosfèretai ston File server apì th diergasa nfsd. O diktuakì autì dsko ja qrhsimopoihje katˆ thn ektèlesh th prospèlash sth biblioj kh, gia na apojhkeÔsei proswrinˆ arqea pou apaitoÔntai gia th leitourga tou mozilla.

File server

DNS server

nfsd

bind

mozilla

apache

Web browser

oracle

Database

X terminal Xserver

Workstation

Sq ma 1.2: Oi diergase pou sunergˆzontai gia mia anaz thsh biblou. Mèsa sta plasia ta onìmata twn diergasi¸n. Dpla sta plasia ta onìmata twn upologist¸n, sÔmfwna me to Sq.1.1. Ta bèlh upodhl¸noun th ro  mhnumˆtwn metaxÔ twn diergasi¸n. O Web server filoxene thn istoselda th biblioj kh , pou brsketai upì th diaqerish th efarmog  apache, allˆ ìqi th bˆsh dedomènwn pou uposthrzei thn efarmog  parakoloÔjhsh twn biblwn. H bˆsh dedomènwn brsketai sto Database, th diaqeirzetai h diergasa oracle, kai exuphrete tautìqrona ˆllou qr ste pou yˆqnoun gia bibla, allˆ kai tou bibliojhkˆriou , oi opooi thn enhmer¸noun gia ti kin sei twn biblwn th biblioj kh . A melet soume b ma-b ma thn ektèlesh th anaz thsh tou qr sth ma . Sto Sq.1.2 fanetai h epikoinwna metaxÔ twn diergasi¸n pou summetèqoun sthn anaz thsh. 1. O qr sth tup¸nei to URL th istoselda th biblioj kh ston mozilla. Kˆje forˆ pou patˆ kˆpoio pl ktro sto plhktrolìgio tou X terminal, èna pakèto me thn plhrofora tou pat mato tou antstoiqou pl ktrou stèlnetai ston mozilla, o opoo apantˆ stèlnonta sto Xserver thn entol  na zwgrafsei sthn ojình tou X terminal ton antstoiqo qarakt ra. 2. O mozilla prèpei na bre th diktuak  dieÔjunsh tou URL pou tou zhtetai. Epikoinwne loipìn me th diergasa bind, h opoa prosfèrei thn uphresa DNS (Domain Name Service). H bind ja epistrèyei th diktuak  dieÔjunsh (IP address) tou Web server. 3. O mozilla stèlnei sto apache m numa prospèlash th istoselda pou


4

KEFALAIO 1. EISAGWGH

z thse o qr sth , kai to apache thn epistrèfei. O mozilla stèlnei ston X server ti katˆllhle entolè ¸ste h selda na apeikoniste sto qr sth. 4. O qr sth ma eisˆgei to ìnoma tou biblou pou yˆqnei sthn katˆllhlh jèsh th istoselda th biblioj kh . O mozilla ja stelei th nèa athsh tou qr sth sto apache, to opoo me th seirˆ tou ja stelei thn katˆllhlh er¸thsh sth bˆsh dedomènwn oracle. H oracle apantˆ kai to apache dhmiourge dunamikˆ mia istoselda me thn aparathth plhrofora, thn opoa epistrèfei sto mozilla. Autì me th seirˆ tou stèlnei ti katˆllhle entolè ston Xserver, ¸ste na apeikonsei th selda sto qr sth ma . 5. O qr sth feÔgei biastikˆ gia th biblioj kh. àqoume loipìn mia polÔ sunhjismènh kai apl  leitourga, pou ìmw qrhsimopohse 6 diktuakoÔ upologistè , ton kajèna gia mia apl  kai sugkekrimènh leitourga. Apì thn pleurˆ wstìso tou biastikoÔ ma qr sth, h ìlh efarmog  ja mporoÔse na  tan sugkentrwmènh se ènan kai monadikì upologist . O qr sth ma den èmaje pw kai poio upologistè suneisèferan sthn apˆnthsh pou èyaqne, allˆ qrhsimopohse thn istoselda th biblioj kh ìpw ja qrhsimopoioÔse opoiad pote mh-katanemhmènh efarmog . H idiìthta aut  twn katanemhmènwn susthmˆtwn onomˆzetai diafˆneia (transparency). Enai polÔ shmantik  sta katanemhmèna sust mata.1 Sth sunèqeia ja entopsoume kai ˆlla gnwrsmata kai idiìthte twn katanemhmènwn susthmˆtwn. 1.2

Qarakthristikˆ katanemhmènwn susthmˆtwn

To qarakthristikì gn¸risma enì katanemhmènou sust mato enai h diafan  sunergasa metaxÔ perissotèrwn th mia anexˆrthtwn diergasi¸n. Enai tìso genikìlogo autì o orismì , ¸ste na prokale th fantasa na ton sumplhr¸sei. Ja prèpei na antistaje kane ston peirasmì na kˆnei upojèsei , pq. gia thn Ôparxh poll¸n upologist¸n. äle oi diergase enì katanemhmènou sust mato mpore kˆllista na ekteloÔntai ston dio upologist . Wstìso, diafan  sunergasa shmanei ìti mporeallˆ den apaitetaioi diergase autè na brskontai se diaforetikoÔ upologistè . OÔte ja prèpei na upojèsoume ìti ìle oi diergase epikoinwnoÔn metaxÔ tou diktuakˆ,   ìti èqoun diaforetikoÔ rìlou na epitelèsoun. A exetˆsoume loipìn analutikˆ ti diˆfore pijanìthte . 1.2.1

Katanemhmènh leitourgikìthta

H orgˆnwsh twn katanemhmènwn susthmˆtwn sun jw antikatoptrzei thn orgˆnwsh tou pragmatikoÔ kìsmou, me bˆsh ti arqè tou katamerismoÔ tou ploÔtou (gia upologistikˆ sust mata: th plhrofora ) kai tou katamerismoÔ th ergasa (me tˆsh gia ekeidkeush). 1

O orismì enì katanemhmènou sust mato katˆ ton

kˆpoio mhqˆnhma pou den èqei dei potè èqei qalˆsei.

Leslie Lamport:

Enai èna sÔsthma pou se empodzei na ergaste ìtan

(se eleÔjerh metˆfrash)


1.2. QARAKTHRISTIKA KATANEMHMENWN SUSTHMATWN

5

Sta katanemhmèna sust mata, milˆme antstoiqa gia katanom  twn dedomènwn (data distribution) kai katanom  twn leitourgi¸n (functional distribution). H katanom  dedomènwn kai leitourgi¸n prosfèrei mia seirˆ apì pleonekt mata se sqèsh me ta mh katanemhmèna sust mata: • MegalÔterh diajesimìthta (availability), epeid  mia blˆbh den pl ttei sun jw olìklhro to sÔsthma, allˆ mìnon mèro tou. • MegalÔterh dunamikìthta, dhlad  th dunatìthta na prosjètoume  na afairoÔmededomèna kai leitourge enìsw to sÔsthma leitourge. • KalÔterh autonoma (autonomy), dhlad  th dunatìthta na allˆzoume (anabajmzoume, epanarrujmzoume klp) tm mata tou sust mato , qwr na ephreˆzoume ta upìloipa. • KalÔterh parakoloÔjhsh (auditing) tou sust mato , afoÔ enai pio xekˆjarh h ro  twn dedomènwn kai leitourgi¸n.

àqei ìmw kai meionekt mata: • Epanˆlhyh twn diwn leitourgi¸n (pq. èlegqo th exousiodìthsh tou qr sth apì kˆje monˆda qwristˆ). • Auxhmèno kìsto prospèlash twn dedomènwn, diìti h metˆdos  tou mèsw diktÔou enai polÔ pio akrib  apì thn prospèlas  tou sta plasia th dia diergasa .

Dhlad , ta meinonekt mata th katanom  dedomènwn kai leitourgi¸n estiˆzontai sthn apìdosh tou sust mato , kˆti pou me th ragdaa exèlixh tou ulikoÔ den krnetai apagoreutikì, parˆ mìnon se eidikè peript¸sei . 1.2.2

Upologistiko pìroi

Enai sunhjismèno (allˆ ìqi aparathto) gia ta katanemhmèna sust mata na katanèmontai se diaforetikoÔ upologistikoÔ pìrou (CPUs, dskoi, dktua klp). H katanom  aut  prosfèrei euelixa se dÔo antjete kateujÔnsei : Klimˆkwsh (scalability): an diapistwje pt¸sh th apìdosh lìgw uperbolik  epibˆrunsh kˆpoiou tm mato tou sust mato (p.q. aux jhke to forto enì kìmbou tou diadiktÔou), enai eÔkolo na prosjèsoume sto sÔsthma nèou upologistikoÔ pìrou , stou opoou na metafèroume mèro tou fortou. Axiopohsh (utilization): an antjeta kˆpoioi pìroi (p.q. ektupwtè ) den axiopoioÔntai epark¸ , mporoÔme na tou afairèsoume, metafèronta to fìrto stou upìloipou .


6

KEFALAIO 1. EISAGWGH

1.2.3

Epikoinwna

H epikoinwna mèsa sta katanemhmèna sust mata mpore na gnei me polloÔ trìpou . Oi dÔo genikìtere kathgore epikoinwna enai h sundet  (on-line) epikoinwna kai h asÔndeth (off-line) epikoinwna. Sth sundet  epikoinwna, èna m numa metaddetai mèsw enì kanalioÔ apì ton apostolèa kai lambˆnetai ˆmesa apì ton paral pth. Paradegmata: 1. Apeujea sundèsei mèsw diktÔou (pq. TCP/IP sockets). Oi sundèsei autè enai oi pio euèlikte sthn prˆxh, afoÔ mporoÔn na sundèsoun apì diergase ston dio upologist  mèqri diergase se upologistè sta dÔo ˆkra tou kìsmou. 2. Sundèsei mèsw mhqanism¸n tou leitourgikoÔ sust mato (pq. pipes, signals), ìtan oi diergase ekteloÔntai ston dio upologist . àqoun genikˆ polÔ uyhl  apìdosh kai axiopista, kai gi autì protim¸ntai se kˆpoie peript¸sei . Sthn asÔndeth epikoinwna, ta mhnÔmata apojhkeÔontai se kˆpoio mèso (pq. sto dsko) kai diabˆzontai apì ton paral pth ìtan autì jel sei. Paradegmata: 1. Apoj keush sto dsko (  genikˆ se mìnimh mn mh), h opoa enai qr simh ìtan h diergasa-paral pth den sumpptei qronikˆ me th diegasa apostolèa,   ìtan ta mhnÔmata enai polÔ megˆla gia na kratioÔntai sthn kÔria mn mh. Klassikì parˆdeigma enai to hlektronikì taqudromeo. 2. Apoj keush sthn kÔria mn mh, pou jewretai h taqÔterh mèjodo epikoinwna metaxÔ diergasi¸n. Qrhsimopoietai se katanemhmèna sust mata pragmatikoÔ qrìnou   polÔ uyhl  taqÔthta . Klassikì parˆdeigma qr sh enai sta katanemhmèna sust mata grafik¸n. àna m numa mpore na apeujÔnetai se ènan apodèkth, opìte milˆme gia epikoinwna shmeou me shmeo (point-to-point),   mpore na apeujÔnetai se polloÔ apodèkte , opìte èqoume omadik  epikoinwna, ete me ekpomp  (broadcast) ete me pollapl  dianom  (multicast). äpoia kai an enai h mèjodo epikoinwna , enai aparathth h koin  apodoq  enì prwtokìllou (protocol). àna prwtìkollo orzei th logik  gl¸ssa sthn opoa enai grammèna ta mhnÔmata. Ta prwtìkolla, san gl¸sse pou enai, èqoun grammatikì, suntaktikì kai shmasiakì mèro , ìpw oi gnwstè ma gl¸sse programmatismoÔ. Sthn prˆxh qrhsimopoioÔntai prwtìkolla apì ta piì aplˆ (pou lgo diafèroun apì data formats) mèqri exairetikˆ perploke majhmatikè gl¸sse . 1.2.4

Axiopista

Genikˆ, h axiopista enì sust mato exartˆtai apì dÔo sumplhrwmatikè idiìthte , gnwstè ¸ adiablhtìthta2 (safety) kai prìodo (progress). Mia ˆtuph perigraf  aut¸n twn ìrwn enai h ex  : adiablhtìthta èqoume ìtan tpota {kakì} de sumbanei, en¸ prìodo èqoume ìtan kˆti {kalì} sumbanei. O perergo autì 2

H ellhnik  lèxh

asfˆleia

èqei kajierwje w h metˆfrash tou ìrou

security.


1.2. QARAKTHRISTIKA KATANEMHMENWN SUSTHMATWN

7

diaqwrismì èqei akrib  majhmatik  perigraf  thn opoa ja melet soume se epìmeno kefˆlaio. Gia na proseggsoume kˆpw perissìtero ti ènnoie autè , qwr na mpoÔme se leptomèreie , a parathr soume ìti èna sÔsthma pou den kˆnei tpote enai adiˆblhto (afoÔ de sumbanei tpota, de sumbanei tpota kakì!). Wstìso, èna tètoio sÔsthma den enai kai polÔ qr simo. Ta katanemhmèna sust mata, ìpw kai ìla ta sust mata, prèpei na enai adiˆblhta. Se praktikoÔ ìrou , autì mpore na shmanei na mh qˆnoun dedomèna, na enai asfal  (secure), dhl. na exasfalzoun to apìrrhto twn stoiqewn kai thn akeraiìthta twn apant sewn, klp. àna diablhtì sÔsthma, katanemhmèno   mh, den èqei megˆlh axa. H diajesimìthta (availability) enì sust mato enai èna krit rio proìdou tou sust mato . €lla krit ria proìdou enai h taqÔthta apìkrish (response time), h prospelasimìthta (accessibility) (dhl. h dunatìthta qr sh apì diaforetikˆ shmea), kai fusikˆ to kìsto qr sh !

1.2.5

Asfˆleia

äla ta sust mata poll¸n qrhst¸n jètoun periorismoÔ sti prˆxei pou mporoÔn na ektelèsoun diaforetiko qr ste . Gia parˆdeigma, se ènan upologist , to leitourgikì sÔsthma apagoreÔei stou qr ste na prospelˆsoun ta arqea ˆllwn qrhst¸n. Kˆje qr sth loipìn èqei sugkekrimèna pronìmia prìsbash (access privileges), h diaqerish twn opown onomˆzetai exousiodìthsh (authorization). Sumplhrwmatikˆ me thn exousiodìthsh, to sÔsthma prèpei na mpore na tautopoi sei tou qr ste tou, na bebaiwje dhlad  ìti èna qr sth enai pragmatikˆ autì pou dhl¸nei ìti enai. H diadikasa aut  lègetai diapsteush (authentication) kai den periorzetai mìno stou anjr¸pinou qr ste enì sust mato , allˆ kai stou hlektronikoÔ , dhl. se ˆlla progrˆmmata ta opoa epizhtoÔn na qrhsimopoi soun to sÔsthma. Tèlo , to sÔsthma prèpei na mpore na exasfalsei to apìrrhto twn dedomènwn tou. Dedomèna mporoÔn na klapoÔn apì to sÔsthma, ete mèsw tou diou tou sust mato (p.q. apì ènan eisbolèa pou upodÔetai kˆpoio nìmimo qr sth), ete katˆ thn epikoinwna metaxÔ diergasi¸n (p.q. me upoklop  mhnumˆtwn mèsa apì to dktuo). Gia na exasfalistoÔn apì tètoie , ta katanemhmèna sust mata qrhsimopoioÔn teqnikè kruptografa , ti opoe ja anaptÔxoume se epìmeno kefˆlaio. H asfˆleia enai oxumèno jèma gia ta katanemhmèna sust mata pou parousiˆzoun uyhl  prospelasimìthta (p.q. sust mata pou mporoÔn na prospelastoÔn apì to diadktuo). Ta katanemhmèna sust mata suqnˆ ektenontai se polloÔ upologistè , se kˆje ènan apì tou opoou to leitourgikì sÔsthma  dh parèqei mia upodom  asfalea , me thn opoa to katanemhmèno sÔsthma (pou sun jw ulopoie qwristˆ sust mata exousiodìthsh kai diapsteush ) prèpei na sunergaste. Aut  h poluplokìthta enai suqnˆ phg  laj¸n kai paraleyewn se jèmata asfˆleia . àtsi, ìqi mìnon kajstantai pio euˆlwta ta dia ta katanemhmèna sust mata, allˆ kajistoÔn euˆlwtou kai tou upologistè pou ta filoxenoÔn.


8

KEFALAIO 1. EISAGWGH

1.3

H dom  twn katanemhmènwn susthmˆtwn

H leitourgikìthta enì katanemhmènou sust mato enai sÔnjesh enì arijmoÔ apì uphrese (services). W uphresa mporoÔme na orsoume mia leitourga pou prosfèretai apì mia   perissìtere diergase -uphrète (server processes) pro diergase -pelˆte (client processes). Oi rìloi tou uphrèth kai tou pelˆth enai sun jw fanero mèsa se èna katanemhmèno sÔsthma. Sto parˆdeigma th §1.1 (blèpe Sq.1.2), h diergasa mozilla enai pelˆth twn diergasi¸n Xserver, nfsd, bind kai apache. H diergasa apache enai me th seirˆ th pelˆth twn bind kai oracle. Oi diergase mporoÔn na enaikai sun jw enaitautìqrona uphrète gia kˆpoie uphrese , kai pelˆte gia kˆpoie ˆlle . Mpore akìma na enai pelˆte gia uphrese pou kai oi die prosfèroun. Shm: gia suntoma, ant twn ìrwn {diergasa-pelˆth } kai {diergasa-uphrèth } ja qrhsimopoioÔme aplˆ tou ìrou {pelˆth } kai {uphrèth } antstoiqa. Oi diergase pou apartzoun èna katanemhmèno sÔsthma, katanèmontai sto diajèsimo ulikì anˆloga me ti peristˆsei th efarmog  . An h efarmog  enai apokleistik  qr sh apì kˆpoia omˆda qrhst¸n (pq. ta mèlh mia etairea ), tìte suqnˆ aut  h katanom  sqediˆzetai kentrikˆ (pq. apì to tm ma mhqanogrˆfhsh th etairea ). Allˆ ta katanemhmèna sust mata epitrèpoun th sunergasa anexˆrthtwn etarwn. Skeftete ton Pagkìsmio Istì san katanemhmènh efarmog .To diadktuo sa dnei prìsbash se ekatommÔria upologistè anˆ ton kìsmo, ìpou h katanom  twn diergasi¸n sto ulikì èqei gnei antstoiqa apì ekatommÔria anjr¸pou pou aplˆ jèloun na moirastoÔn plhrofore pou katèqoun. Anakefalai¸nonta , h dom  twn katanemhmènwn susthmˆtwn analÔetai w ex  : • Katanom  th leitourgikìthta th efarmog  se uphrese . • Gia kˆje uphresa, katanom  twn rìlwn pelˆth kai uphrèth se diergase . • Katanom  twn diergasi¸n se upologistè .

Ta parapˆnw stoiqea sunistoÔn thn arqitektonik  enì katanemhmènou sust mato . Mèsa apì thn èreuna kai thn empeira, èqoun anaptuqje diˆfore genikè arqitektonikè gia katanemhmèna sust mata. Ja suneqsoume me mia sÔntomh episkìphsh twn kuriotèrwn. 1.3.1

Uphrese

Gia na qrhsimopoi sei mia uphresa, h diergasa pelˆth stèlnei ston antstoiqo uphrèth mia athsh exuphrèthsh (service request). Parˆdeigma: H diergasa mozilla jèlei na zht sei thn istoselda http://www.foo.bar/a/b/c.html. H athsh exuphrèthsh pro th diergasa apache ston kìmbo www.foo.bar


1.3. H DOMH TWN KATANEMHMENWN SUSTHMATWN

9

ja èqei th morf  GET /a/b/c.html 2 Sthn §1.2.3 anafèrame ta prwtìkolla, w ti logikè gl¸sse me ti opoe epikoinwnoÔn oi diergase . Ti perissìtere forè , upˆrqei mia antistoiqa 1 : 1 metaxÔ uphresi¸n kai prwtokìllwn. Wstìso, den enai ˆgnwste oi peript¸sei 1 : n (h dia uphresa prosfèretai apì diaforetikˆ prwtìkolla) kai n : 1 (pollè diaforetikè uphrese mèsa apì to dio prwtìkollo). Mia shmantik  parat rhsh enai oti ta prwtìkolla mporoÔn na baszontai se upo-prwtìkolla, ìpw mia gl¸ssa programmatismoÔ mpore na baszetai se biblioj ke . 1.3.2

Pelˆte kai uphrète

To aploÔstero katanemhmèno sÔsthma, perilambˆnei ènan uphrèth, pou prosfèrei mia mìno uphresa se ènan arijmì apì pelˆte . Parˆdeigma tètoia uphresa enai to FTP (File Transfer Protocol).3 O uphrèth (pou paradosiakˆ sto U NIX lègetai ftpd) dèqetai sundèsei (sun jw tautìqrona) apì polloÔ pelˆte . Oi pelˆte èqoun th dunatìthta na peridiabˆsoun mia perioq  tou dskou, kai na diabˆsoun   na grˆyoun se aut n arqea. S mera upˆrqoun dekˆde ulopoi sei pelat¸n kai uphret¸n th uphresa FTP. Oi ulopoi sei autè mporoÔn na sunergˆzontai metaxÔ tou epeid  ulopoioÔn ìle to om¸numo prwtìkollo, dhl. {miloÔn thn dia gl¸ssa}. To prwtìkollo FTP baszetai sthn ènnoia th sunìdou (session). ätan èna pelˆth prwtosundeje ston uphrèth, kai afoÔ diapisteute, xekinˆ mia sÔnodo. Katˆ th diˆrkeia th sunìdou upobˆllei ston uphrèth mia seirˆ apì ait sei , kˆje mia ap' ti opoe exuphretetai ˆmesa. H sÔnodo l gei ete metˆ apì d lwsh tou pelˆth, ete apì ton uphrèth se perptwsh sfˆlmato . Upˆrqoun prwtìkolla, me pio gnwstì to HTTP (Hyper Text Transfer Protocol), pou den uposthrzoun sunìdou . Se tètoia prwtìkolla oi efarmogè enai sun jw se jèsh na ulopoi soun oi die kˆpoia morf  sunìdou, me ˆllou mhqanismoÔ tou prwtokìllou, pq. sto HTTP, oi perissìtere efarmogè qrhsimopoioÔn ta cookies. Tupikì qarakthristikì twn uphret¸n enai h dunatìthta tautìqronh exuphrèthsh ait sewn apì polloÔ pelˆte . Se polÔ bebarhmèna sust mata, o arijmì twn tautìqrona exuphretoÔmenwn pelat¸n mpore na anèljei se arketè qiliˆde . Sthn perptwsh aut  mpore na apaitetai h katanom  tou fortou tou sust mato se pollaploÔ upologistè . 1.3.3

Polueppede arqitektonikè

Mia dhmofil  katanom  th leitourgikìthta mia efarmog  baszetai sthn ierarqik  prosèggish: sqediasmì enì sust mato pou enswmat¸nei èna   perissìtera ˆlla sust mata. Mia tètoia prosèggish odhge se sust mata ierarqikˆ. 3

IdoÔ èna parˆdeigma ìpou h uphresa tautzetai me èna prwtìkollo.


10

KEFALAIO 1. EISAGWGH

Suqnˆ ta polueppeda sust mata enai proĂ°ĂŹnta anabˆjmish palaiotèrwn susthmˆtwn, sta opoa prostjetai kainoĂ”ria leitourgikĂŹthta, h opoa emperièqei thn paliˆ. Parˆdeigma: Prin apĂŹ thn èleush tou pagkĂŹsmiou istoĂ”, pollè efarmogè pou s mera prosfèrontai mèsw autoĂ” (pq. trapezikè efarmogè ),  tan prosbˆsime mĂŹno mèsa apĂŹ eidikeumèna progrˆmmata. ArgĂŹtera, ta sust mata autˆ èginan prosbˆsima mèsw diadiktĂ”ou prosjètonta èna eppedo prĂŹsbash qrhst¸n ulopoihmèno me istoselde . Diadktuo  web front-end



Paliè efarmogè pprÏsbash ppp p p pp ppp p p px

Efarmog  2 Suqnˆ ta katanemhmèna sust mata sqediˆzontai ek bˆjrwn me bˆsh thn polueppedh dom , me bˆsh thn arq  tou diaqwrismoĂ” twn zhthmˆtwn (separation of concerns). DĂ”o dhmofile proseggsei enai oi arqitektonikè twn dĂ”o kai twn tri¸n epipèdwn (two/three layer architecture). Se genikè grammè , h arqitektonik  tri¸n epipèdwn prokĂ”ptei w ex  : • Sto {emprĂŹ } eppedo (front end) katanèmetai h leitourgikĂŹthta th efarmog  pou aforˆ th diepaf  tou sust mato me to qr sth. • Sto {psw} eppedo (back end), katanèmontai oi leitourge pou aforoĂ”n exwterikoĂ” kai fusikoĂ” pĂŹrou (pq. bˆsei dedomènwn, apoj keush arqewn, makrĂŹqronoi upologismo klp.) • H upĂŹloiph leitourgikĂŹthta topojetetai sto mesao eppedo (middle tier). Genikˆ, h leitourgikĂŹthta aut  èqei sa skopĂŹ th metatrop  twn ait sewn tou emprĂŹ epipèdou se ait sei tou psw epipèdou.

Enai pijanĂŹ, h leitourgikĂŹthta pou apomènei sto mesao eppedo na enai tetrimmènh. Sthn perptwsh aut , to sĂ”sthma sqediˆzetai w sĂ”sthma dĂ”o epipèdwn. 1.3.4

Arqitektonikè omobˆjmwn (peer-to-peer)

Pèra apĂŹ ti polueppede arqitektonikè , h katanom  th leitourgikĂŹthta mpore na gnei mèsw th sunergasa omobˆjmwn, dhlad  diergasi¸n-uphret¸n oi opooi ulopoioĂ”n thn dia uphresa, kai oi opooi sunergˆzontai gia na exuphret soun ait sei .


1.4. H ULOPOIHSH TWN KATANEMHMENWN SUSTHMATWN

11

Parˆdeigma: H uphresa DNS (Domain Name Service) enai mia uphresa katalìgou pou kurw metafrˆzei ta sumbolikˆ onìmata kìmbwn tou Internet se dieujÔnsei IP. H sunolik  bˆsh dedomènwn den upˆrqei apojhkeumènh se kanèna shmeo tou kìsmou, allˆ enai katanemhmènh se dekˆde qiliˆde uphrète DNS. Kˆje uphrèth DNS diaqeirzetai ta perieqìmena th topik  bˆsh . An deqje athsh gia kˆpoio kìmbo tou Internet tou opoou th dieÔjunsh den gnwrzei, enai upeÔjuno na prowj sei thn er¸thsh se kˆpoion ˆllo uphrèth DNS, o opoo me th seirˆ tou mpore na thn prowj sei peraitèrw, klp. 2 1.4

H ulopohsh twn katanemhmènwn susthmˆtwn

Mèqri t¸ra epikentrwj kame sth leitourgikìthta (§1.2) kai sthn arqitektonik  (§1.3) twn katanemhmènwn susthmˆtwn. Sto shmeo autì, ja strèyoume thn prosoq  ma sti mejìdou kai sta ergalea logismikoÔ me ta opoa ulopoioÔntai ìla autˆ pou perigrˆyame w t¸ra. Ta ergalea ulopohsh katanemhmènwn susthmˆtwn parèqoun genikoÔ mhqanismoÔ me tou opoou dieukolÔnetai h anˆptuxh pelat¸n kai uphret¸n. Prin wstìso mil soume sugkekrimèna gia tètoia ergalea, prèpei na anaferjoÔme sti apait sei epikoinwna kai poluepexergasa twn programmˆtwn aut¸n. 1.4.1

Epikoinwna

Sthn §1.2.3 anaferj kame sthn epikoinwna entì twn katanemhmènwn susthmˆtwn apì thn ˆpoyh th leitourgikìthta . Ed¸ ja anaferjoÔme sthn programmatistik  ulopohsh th epikoinwna metaxÔ diergasi¸n. Oi kuriìteroi mhqanismo epikoinwna diergasi¸n pou prosfèrontai apì to leitourgikì sÔsthma qwrzontai se mhqanismoÔ ro  (streams), mhqanismoÔ koin  mn mh (shared memory) kai mhqanismoÔ eidopohsh . Sto U NIX sunantˆme tou akìloujou mhqanismoÔ katˆ kathgora: Ro  : Diktuakè sundèsei , pq. mèsw TCP/IP upodoq¸n (sockets), diaswlhn¸sei (pipes), suskeuè qarakt rwn (character devices), ourè mhnumˆtwn (message queues). Oi sundèsei ro  mporoÔn na enai monìdorome   amfdrome . Se gl¸sse programmatismoÔ oi mhqanismo ro  gnontai sun jw diajèsimoi mèsa apì antikemena ro  , apì ta opoa to prìgramma mpore na diabˆsei   na grˆyei se autˆ, sa na prìkeitai gia arqea. Koin  mn mh : Tm mata koin  mn mh (shared memory segments), apeikonismèna arqea sthn kÔria mn mh (memory-mapped files). H koin  mn mh prosfèretai apì to leitourgikì sÔsthma adiamìrfwth. Upˆrqei h dunatìthta prostasa eggraf  th koin  mn mh apì kˆpoie diergase .


12

KEFALAIO 1. EISAGWGH

Oi gl¸sse programmatismoÔ qrhsimopoioÔn thn koin  mn mh gia thn apoj keush {koin¸n metablht¸n}. Eidopohsh : S mata (signals), shmatofore (semaphores, locks). Oi mhqanismo auto qrhsimopoioÔntai gia na eidopoi soun ti diergase gia sumbˆnta gia ta opoa prèpei na energ soun. Se gl¸sse uyhloÔ epipèdou oi shmatofore qrhsimopoioÔntai w shmea emplok  , dhlad  w sÔgqronh epikoinwna, en¸ ta s mata mèsw routin¸n qeirismoÔ (signal handlers, aka. callbacks), dhlad  gia asÔgqronh epikoinwna. 1.4.2

Poluepexergasa

H poluepexergasa enai krsimh thn ulopohsh uphret¸n, oi opooi prèpei na exuphretoÔn pollè ait sei tautìqrona, an kai s mera qrhsimopoietai kai se pelˆte , gia na belti¸sei thn apìdos  tou stèlnonta parˆllhla pollaplè ait sei . H poluepexergasa ulopoietai me dÔo trìpou : (a) me pollaplè diergase , kai (b) me n mata (threads). A melet soume thn perptwsh enì uphrèth. Upˆrqei mia basik  diergasa, h opoa perimènei na lˆbei ait sei exuphrèthsh , pq. ènarxh sunìdou (bl. §1.3.2). ätan fjˆsei mia athsh, ja sumbe genikˆ èna apì ta akìlouja: Sthn perptwsh pollapl¸n diergasi¸n: H athsh ja stale se mia diergasa (h opoa mpore na dhmiourghje ekenh th stigm ), kai ja arqsei h exuphrèths  th . H diergasa aut  sunennoetai, ìtan upˆrqei anˆgkh, me ti ˆlle tautìqrona ekteloÔmene diergase pou exuphretoÔn ˆlle ait sei . Sthn perptwsh qr sh nhmˆtwn: Ja dhmiourghje èna kainoÔrio n ma, to opoo ja analˆbei thn exuphrèthsh th athsh . O sugqronismì me ˆlla n mata gnetai mèsw amoibaou apokleismoÔ (mutual exclusion) kai h epikoinwna mèsw metablht¸n. Oi dÔo teqnikè èqoun pleonekt mata kai meionekt mata. • H teqnik  pollapl¸n diergasi¸n prosfèrei kalÔterh prostasa apì sfˆlmata (pq. exˆntlhsh th mn mh , diafjorˆ metablht¸n ˆllh diergasa ), kai eukolìterh apomìnwsh. • H epikoinwna kai o sugqronismì enai eukolìtero na ulopoihjoÔn me n mata. • H polunhmatik  epexergasa enai kˆpw pio oikonomik  se pìrou sust mato (pq. kÔria mn mh). • O qrìno dhmiourga enì n mato enai sun jw mikrìtero apì to qrìno dhmiourga mia diergasa .

Sunoptikˆ, h teqnik  twn pollapl¸n diergasi¸n prosfèrei kalÔterh eustˆjeia, me uyhlìtero kìsto ulopohsh kai katanˆlwsh pìrwn tou sust mato . Paliìtera, h ulopohsh me n mata jewroÔntan shmantikˆ grhgorìterh apì mia ulopohsh me pollaplè diergase . S mera, h diaforˆ th apìdosh metaxÔ twn


1.4. H ULOPOIHSH TWN KATANEMHMENWN SUSTHMATWN

13

dÔo mejìdwn èqei mikrÔnei shmantikˆ, idiatera ìtan qrhsimopoietai koin  mn mh metaxÔ pollapl¸n diergasi¸n. Genikˆ pˆntw , ìla autˆ exart¸ntai apì to leitourgikì sÔsthma. Gia parˆdeigma, to Linux elˆqista diaqwrzei n mata kai diergase . Antjeta, sta Windows NT to kìsto dhmiourga mia nèa diergasa enai merikè qiliˆde forè uyhlìtero apì to kìsto dhmiourga n mato . Akìmh ki ètsi ìmw , enai dunatìn na proekkin sei to sÔsthma ènan arijmì apì diergase , oi opoe na epanaqrhsimopoioÔntai gia pollè ait sei . Bèbaia, aut  h prosèggish mei¸nei thn eustˆjeia pou prosfèroun oi pollaplè diergase . 1.4.3

Gl¸sse programmatismoÔ

O programmatismì twn katanemhmènwn susthmˆtwn qwr th bo jeia eidikoÔ logismikoÔ, enai genikˆ eppono kai epirrep  se sfˆlmata pou dÔskola aniqneÔontai. Gia pollˆ qrìnia, mèqri thn eisagwg  tou ontokentrikoÔ programmatismoÔ, h qr sh glwss¸n eidikeumènwn se katanemhmèna sust mata  tan h kÔria teqnologa anˆptuxh logismikoÔ katanemhmènwn susthmˆtwn. H katˆstash aut  epibarunìtan apì th reustìthta pou epikratoÔse sta prwtìkolla twn diktÔwn kai stou mhqanismoÔ poluepexergasa twn diafìrwn leitourgik¸n susthmˆtwn. S mera, afenì oi teqnologe diktÔwn kai poluepexergasa èqoun stajeropoihje shmantikˆ, kai afetèrou èqei epikrat sei o ontokentrikì programmatismì , me apotèlesma na mhn enai plèon aparathth h qr sh exeidikeumènwn glwss¸n programmatismoÔ. Wstìso h anˆptuxh twn glwss¸n aut¸n ma ddaxe pollˆ gia to p¸ programmatzontai ta katanemhmèna sust mata. Gi autì kai ja anaferjoÔme sÔntoma se merikè apì ti kuriìtere . Gl¸sse me sÔgqronh epikoinwna Mia apì ti pr¸te gl¸sse protˆjhke to 1978 apì ton C.A.R. Hoare [8℄, se èna ˆrjro pou ephrèase shmantikˆ thn èreuna, me to ìnoma CSP (Communicating Sequential Processes). Parìlo pou h gl¸ssa aut  den ulopoi jhke potè, apotèlese th bˆsh gia th gl¸ssa Occam kai enèpneuse th sqedash tou Transputer th etaira Inmos Ltd., enì apì ta pio epituqhmèna CPUs gia parˆllhle arqitektonikè . Sto montèlo autì, oi diergase ekteloÔntai parˆllhla kai anexˆrthta. O monadikì mhqanismì epikoinwna ulopoietai me ti entolè send kai receive. H epikoinwna enai sÔgqronh; ìtan mia diergasa ektele thn entol  send, emplèketai (is blocked), dhlad  stamatˆ mèqri h lambˆnousa diergasa na ektelèsei thn entol  receive. ätan sumbe autì, to m numa metabibˆzetai kai oi dÔo diergase apemplèkontai kai suneqzoun. To meionèkthma th sÔgqronh epikoinwna enai h mewsh th apìdosh pou mpore na prokalèsei h makrìqronh paramon  twn diergasi¸n se emplok . Se pollè peript¸sei wstìso, h sÔgqronh epikoinwna den apotele prìblhma. Gi autì kai h sÔgqronh epikoinwna ulopoietai apì ìle ti gl¸sse . Upˆrqoun pollè parallagè kai epektˆsei tou basikoÔ sÔgqronou mhqanismoÔ. Mia polÔ diadedomènh parallag  enai o mhqanismì th sunˆnthsh (rendezvous), o opoo qrhsimopoietai se pollè gl¸sse , metaxÔ twn opown kai h Ada. H Ada anaptÔqjhke to 1983 gia to Upourgeo €muna twn Hnwmènwn Politei¸n,


14

KEFALAIO 1. EISAGWGH

kai uiojet jhke arqikˆ w upoy fia na antikatast sei ìle ti ˆlle gl¸sse programmatismoÔ (fusikˆ, autì de sunèbh potè). H Ada èqei egkataleifje s mera pro qˆrin tou ontokentrikoÔ programmatismoÔ, allˆ o basikì mhqanismì pou eis gage metexelqjhke sto mhqanismì apomakrusmènwn kl sewn (remote procedure calls, aka. RPC) pou qrhsimopoietai eurèw mèqri s mera. Gl¸sse me asÔgqronh epikoinwna Sthn asÔgqronh epikoinwna, mia diergasa stèlnei èna m numa qwr na emplake. Mpore loipìn na suneqsei thn epexergasa, kai endeqomènw na stelei perissìtera mhnÔmata. Ta mhnÔmata pou den èqoun akìmh lhfje apojhkeÔontai se mia ourˆ (queue), ap' ìpou ta paralambˆnei o apodèkth . Tupik  qr sh th asÔgqronh epikoinwna gnetai sta X Windows. Oi pelˆte stèlnoun asÔgqrona ait sei , me ti opoe zhtoÔn apì ton uphrèth na zwgrafsei sta parˆjura th efarmog  diˆfora aplˆ antikemena, ìpw grammè , parallhlìgramma, shmea kai kemeno. Epeid  èna polÔploko parˆjuro apoteletai suqnˆ apì qiliˆde tètoia antikemena, h asÔgqronh epikoinwna prosfèrei shmantikì pleonèkthma taqÔthta . Parˆdeigma: Gia na dete th diaforˆ sthn apìdosh metaxÔ sÔgqronh kai asÔgqronh epikoinwna , dokimˆste na ektelèsete thn efarmog  mozilla me thn parˆmetro --sync, kai bebaiwjete oti h efarmog  den ekteletai sto dio mhqˆnhma me ton X Server. Katìpin, epanalˆbete thn ektèlesh qwr thn parˆmetro --sync. 2 1.4.4

Apomakrusmène kl sei

To meionèkthma twn eidikeumènwn glwss¸n programmatismoÔ enai h asumbatìthta me propˆrqouse biblioj ke kai ergalea pou èqoun anaptuqje gia gl¸sse genikoÔ skopoÔ. Se pollè peript¸sei , ta pleonekt mata ston katanemhmèno programmatismì apì th qr sh mia exeidikeumènh gl¸ssa wqrioÔn mprostˆ sthn èlleiyh upost rixh aut¸n twn glwss¸n se biblioj ke , aposfalmatwtè , diorjwtè klp. O mhqanismì twn apomakrusmènwn kl sewn enai polÔtimo w pro to ìti enai sumbatì me gl¸sse programmatismoÔ genikoÔ skopoÔ, prosfèronta tautìqrona ta perissìtera apì ta pleonekt mata mia exeidikeumènh gl¸ssa . Den enai loipìn tuqaa h epikrˆthsh tou, oÔte h eukola me thn opoa pollè etairee ton uiojèthsan sta proðìnta tou . H ergasa twn Birrell kai Nelson [1℄ enai h pr¸th ¸rimh prìtash enì mhqanismoÔ RPC gia gl¸sse genikoÔ skopoÔ. H basik  idèa enai h ex  : h epikoinwna metaxÔ dÔo diergasi¸n gnetai mèsa apì thn kl sh sunart sewn. H metaforˆ dedomènwn apì th mia diergasa sthn ˆllh gnetai mèsw twn orismˆtwn th kl sh , kai th epistrefìmenh tim  th sunˆrthsh .


15

1.4. H ULOPOIHSH TWN KATANEMHMENWN SUSTHMATWN

Parˆdeigma: Mia apl  uphresa enai h metˆfrash onomˆtwn qrhst¸n se pragmatikˆ onìmata. A onomˆsoume thn uphresa aut  whois. Sto montèlo RPC, orzetai mia sunˆrthsh: string whois(string)

O pelˆth pou qrhsimopoie thn uphresa aplˆ kale th sunˆrthsh: > print whois(’vsam’) Vasilis Samoladas

O uphrèth pou ulopoie th sunˆrthsh perièqei ton antstoiqo k¸dika: def whois(uname): # a stupid implementation for u,n in ALL_USERS: if u==uname: return n return ’Unknown user’

2

Ulopohsh apì ton programmatist 

K¸dika pelˆth o

v /

stub pelˆth O

/o dktuo /o /o /o /o

stub uphrèth o

( /

K¸dika uphrèth

<

Ulopohsh apì to sÔsthma RPC Sq ma 1.3: H ro  elègqou se mia kl sh th uphresa whois. To sÔsthma RPC enai upeÔjuno na aniqneÔsei thn kl sh ston pelˆth, na metafèrei thn kl sh ston uphrèth, na thn ektelèsei eke kai na epistrèyei to apotèlesma psw ston pelˆth. Gia na epiteuqje autì me diafˆneia, dhl. san h sunˆrthsh whois na  tan topik  sunˆrthsh ston pelˆth, qrhsimopoioÔntai ta prìsjeta (stubs). Dete th ro  mia kl sh sto Sq.1.3. Ta stubs èqoun analˆbei th diaqerish th kl sh apì epikoinwniak  kai poluepexergastik  pleurˆ . H sÔnjesh twn stubs enai arketˆ perplokh, gi autì den gnetai me to qèri, allˆ apì eidikoÔ metafrastè , pou parnoun w esodo ti dhl¸sei twn apomakrusmènwn sunart sewn kai dhmiourgoÔn ta arqea twn stubs, ta opoa sundèontai sthn upìloiph efarmog . Oi apomakrusmène sunart sei aplopohsan shmantikˆ thn anˆptuxh katanemhmènwn susthmˆtwn se gl¸sse programmatismoÔ genikoÔ skopoÔ. Wstìso, h qr sh tou den enai qwr probl mata, ta opoa kurw aforoÔn th diaqerish


16

KEFALAIO 1. EISAGWGH

apotuqhmènwn kl sewn. Se ìle praktikˆ ti gl¸sse programmatismoÔ, h kl sh sunˆrthsh jewretai ìti pˆntote petuqanei.4 Aut  h idiìthta den isqÔei ìtan pernˆme se apomakrusmène sunart sei , ìpou h apotuqa mpore na proèrqetai apì kˆpoio prìblhma sto dktuo, sto leitourgikì sÔsthma klp. kai to sÔsthma ja prèpei na antapokrije. 1.4.5

Katanemhmèna antikemena

Me thn eisagwg  tou ontokentrikoÔ programmatismoÔ h anˆptuxh katanemhmènwn susthmˆtwn aplopoi jhke shmantikˆ. Oi ontokentrikè gl¸sse programmatismoÔ prosfèroun uyhl  epektasimìthta, kai den enai pia aparathth h qr sh exeidikeumènwn glwss¸n programmatismoÔ. Sti ontokentrikè gl¸sse programmatismoÔ up rxe prìbleyh gia kalÔterou mhqanismoÔ diaqerish sfalmˆtwn kurw twn exceptions, kai antistajmsthke ètsi to megalÔtero meionèkthma twn apomakrusmènwn kl sewn. Sta sust mata katanemhmènwn antikeimènwn, xefeÔgoume apì th logik  twn diergasi¸n pelˆth kai uphrèth, kai pernˆme se èna montèlo ìpou to kˆje antikemeno enai uphrèth , pelˆte enai ìsoi kaloÔn mejìdou tou antikeimènou, kai to prwtìkollo epikoinwna prosdiorzetai apì thn klˆsh tou antikeimènou. Epsh , me th qr sh antikeimenostraf¸n mejìdwn, aplopoietai h qr sh prohgmènwn teqnik¸n, ìpw h asÔgqronh kai h omadik  epikoinwna. H qr sh katanemhmènwn antikeimènwn gr gora epektˆjhke se ìle ti gl¸sse programmatismoÔ, akìmh kai ti mh ontokentrikè (ìpw h C), kai protupopoi jhke apì megˆlou organismoÔ kai etairee . To pio gnwstì prìtupo enai to prìtupo CORBA (Common Object Request Broker Architecture), apì ton organismì OMG (Object Management Group), ston opoo summetèqoun ìle sqedìn oi megˆle etairee logismikoÔ kai pollˆ panepist mia kai ereunhtikˆ kèntra. Epsh , gia profane lìgou , diadedomèno enai kai to prìtupo th COM (Component Object Model) th Microsoft, sto opoo baszontai ìla sqedìn ta proðìnta th etaira aut  . Leitourgikˆ, h ulopohsh katanemhmènwn antikeimènwn baszetai ki aut  sth qr sh stubs, pou suntjentai autìmata apì kˆpoio eidikì metafrast . 1.4.6

Jemeli¸dei uphrese

Mèsa apì thn anˆptuxh kai qr sh katanemhmènwn susthmˆtwn ègine fanerì oti kˆpoie uphrese pazoun jemeliakì rìlo, kai enai aparathte gia th sÔnjesh diaforetik¸n, anexˆrthtwn uphresi¸n se megˆla kai perploka sust mata. Oi kuriìtere enai: • H uphresa eurethrou. • H uphresa diapsteush kai exousiodìthsh .

H uphresa eurethrou enai parìmoia me thn uphresa DNS twn diktÔwn. Kˆje uphrèth eggrˆfetai sthn uphresa eurethrou me èna perigrafikì ttlo   kˆpoio 4

Autì den enai aparathta alhjinì, pq. mpore na exantlhje h mn mh th stoba kai na apotÔqei h kl sh mia topik 

sunˆrthsh . Wstìso, oi gl¸sse programmatismoÔ den prosfèroun eÔqrhstou mhqanismoÔ diaqerish tètoiwn sfalmˆtwn.


1.5. EPILOGO

17

eurèw gnwstì ìnoma, kai tautìqrona apojhkeÔei th fusik  tou dieÔjunsh kai ˆlle sunafe plhrofore pou ja epitrèyoun se pelˆte na sundejoÔn me autìn. Sta paliìtera sust matapou gia lìgou sumbatìthta emfanzontai mèqri s mera, h uphresa aut   tan statik , dhl. ulopoioÔntan apì arqea sto dsko, ta opoa o diaqeirist  enì sust mato  tan upoqrewmèno na enhmer¸nei ìtan ˆllaze kˆpoia rÔjmish tou sust mato . S mera ìmw h uphresa aut  enai sqedìn pˆnta dunamik , dhl. h plhrofora apojhkeÔetai se hlektronikoÔ katalìgou (bˆsei dedomènwn, katalìgou LDAP klp.), mpore prospelaste apì pollˆ shmea kai na allaqte eÔkola kai kajolikˆ. H diapsteush enai qronobìra kai enoqlhtik  diadikasa gia kˆje qr sth. Se èna megˆlo katanemhmèno sÔsthma, enai praktikˆ adÔnath h diapsteush se kajèna uposÔsthma qwristˆ. Epiplèon, h ulopohsh enì asfaloÔ sust mato diapsteush kai exousiodìthsh enai exairetikˆ exeidikeumènh, dapanhr  kai euasjhth se sfˆlmata ergasa. Gi autoÔ tou lìgou , èqoun anaptuqje kentrikè uphrese diapsteush kai exousiodìthsh . H gnwstìterh tètoia uphresa enai h uphresa Kerberos, pou anaptÔqjhke sto MIT sta plasia tou progrˆmmato Athena sta mèsa tou '80.

1.5

Eplogo

Sto kefˆlaio autì exetˆsame to antikemeno twn katanemhmènwn susthmˆtwn apì trei pleurè ; leitourgikìthta, dom  kai ulopohsh. Skopì ma  tan na genikeÔsoume ti ènnoie ekene pou enai koinè sta perissìtera katanemhmèna sust mata, anexˆrthta apì to edo twn uphresi¸n pou prosfèroun. Sta epìmena kefˆlaia ja analÔsoume leptomer¸ ti perissìtere apì autè ti ènnoie . T¸ra pou exantl sate to kefˆlaio, mpore na jèlete na epistrèyete sthn arq  tou kai na d¸sete megalÔterh prosoq  stou polloÔ orismoÔ pou sunant sate. Epsh , dokimˆste na apant sete sti erwt sei pou ja brete diˆsparte mèsa sto kemeno. Se kˆje perptwsh, prospaj ste na skeftete paradegmata twn ennoi¸n pou sunantˆte, mèsa apì thn pera sa sth qr sh twn upologist¸n. Ja anakalÔyete ìti ta katanemhmèna sust mata brskontai pantoÔ.

Probl mata

1. Poia katanemhmèna sust mata qrhsimopoiete gia na epikoinwn sete me thn oikogèneiˆ sa ? (p.q., mhnÔmata SMS) 2. Upˆrqoun sust mata epikoinwna pou den baszontai se upologistè (p.q. to radiìfwno). Enai katˆ th gn¸mh sa katanemhmèna sust mata? 3. Oi parˆllhloi upologistè perilambˆnoun pollè CPUs pou ergˆzontai parˆllhla pˆnw se kˆpoio upologistikì prìblhma. Prìkeitai gia katanemhmèna sust mata?


18

KEFALAIO 1. EISAGWGH

4. Sto parˆdeigma th prospèlash tou katalìgou th biblioj kh (sel. 2), p¸ ja katatˆssate ti diˆfore diergase w pro thn arqitektonik  tri¸n epipèdwn? 5. Gnwrzete katanemhmèna sust mata peer-to-peer? Se poie efarmogè ? 6. Ti onomˆzoume arqitektonik  enì katanemhmènou sust mato ? Giat qrhsimopoioÔme ton ìro {arqitektonik }? Mporete na brete ennoiologikè analoge me thn arqitektonik  twn ktirwn? 7. P¸ katatˆssontai oi mhqanismo epikoinwna ? 8. Ti jumˆste apì to kemeno gia ti gl¸sse programmatismoÔ Occam kai Ada? 9. Ti diaforè fantˆzeste oti ja èqoun oi apomakrusmène kl sei sunart sewn apì ti koinè kl sei ? 10. Mporete na anafèrete uphrese eurethrou pou qrhsimopoiete kajhmerinˆ? 11. Apant ste thn prohgoÔmenh er¸thsh, allˆ perioristete se efarmogè logismikoÔ. Upˆrqoun tètoie uphrese sto kinhtì thlèfwnì sa ? ätan qrhsimopoiete to Internet?


Kefˆlaio 2 Ulopohsh Pelat¸n kai Uphret¸n H ulopohsh katanemhmènwn susthmˆtwn baszetai se dÔo diakritoÔ mhqanismoÔ tou leitourgikoÔ sust mato ; thn epikoinwna metaxÔ diergasi¸n kai thn poluepexergasa. Pˆnw se autoÔ tou mhqanismoÔ baszontai mhqanismo uyhlìterou epipèdou, ìpw oi apomakrusmène kl sei , ta katanemhmèna antikemena kai ˆlloi. Sto kefˆlaio autì ja embajÔnoume sto jèma twn mhqanism¸n ulopohsh katanemhmènwn susthmˆtwn, xekin¸nta apì tou basikoÔ mhqanismoÔ tou leitourgikoÔ sust mato , kai anebanonta se eppeda poluplokìthta kai afaresh . 2.1

Epikoinwna diergasi¸n

H epikoinwna metaxÔ diergasi¸n mpore na enai sundet  (on-line)   asÔndeth. Oi mhqanismo sundet  epikoinwna metafèroun dedomèna metaxÔ diergasi¸n pou ekteloÔntai tautìqrona, mèsw kˆpoia morf  sÔndesh . Antjeta, sthn asÔndeth epikoinwna oi epikoinwnoÔse diergase den enai aparait tw tautìqrone ; ta dedomèna apojhkeÔontai apì ton apostolèa se kˆpoia morf  mn mh , ap' ìpou anakt¸ntai apì tou paral pte . H epikoinwna metaxÔ diergasi¸n enai mia apì ti basikìtere uphrese enì leitourgikoÔ sust mato . Prin akìmh apì thn exˆplwsh twn diktÔwn upologist¸n, ta leitourgikˆ sust mata pareqan dunatìthte epikoinwna metaxÔ twn diergasi¸n pou ekteloÔntan sthn dia mhqan . àna sÔgqrono leitourgikì sÔsthma prosfèrei pollaploÔ trìpou sundet  kai asÔndeth epikoinwna . Se eppedo leitourgikoÔ sust mato , oi mhqanismo epikoinwna metaxÔ dier19


20

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

gasi¸n sun jw exasfalzoun mìnon to elˆqisto dunatì; th metaforˆ duadik¸n dedomènwn. Se lge peript¸sei (pq. metaforˆ duadik¸n arqewn) autì to eppedo epikoinwna enai arketì. Sthn pleionìthta wstìso twn peript¸sewn, oi epikoinwnoÔse diergase kwdikopoioÔn ta dedomèna tou me diaforetikì trìpo. €ra, gia na metadojoÔn ta dedomèna apì th mia diergasa sthn ˆllh, prèpei na kwdikopoihjoÔn se mia prosumfwnhmènh duadik  morf . Gia tou pio koinoÔ tÔpou dedomènwn, ìpw oi akèraioi arijmo (integers), to kemeno (text), oi arijmo kinht  upodiastol  (floating-point numbers) klp èqoun kajierwje diejn  prìtupa, kai sta katanemhmèna sust mata qrhsimopoietai kˆpoio apì autˆ. Gia pio perploke TÔpo dedomènwn Kemeno

Akèraioi Arijmo kinht  upodiastol  Poluplokìtere domè

Prìtupo ASCII

Sqìlia Aggliko qarakt re .

ISO 8859

15 kwdikopoi sei gia latinogene kai slabikè gl¸sse .

Unicode

Diˆfore kwdikopoi sei (UTF-8, UTF-16 klp) gia anaparˆstash 16-bit   32-bit qarakt rwn. De http://www.unicode.org/ Qrhsimopoietai apì to TCP/IP.

Network byte order IEEE-754

32-bit kai 64-bit morfè

XDR

Prìtupo th Sun Microsystems. De RFC-1832

XML

Prìtupo tou http://www.w3.org.

W3 C.

De

Pnaka 2.1: Sunhjismèna prìtupa duadik  morfopohsh dedomènwn domè dedomènwn, oi katanemhmène efarmogè sun jw uiojetoÔn kˆpoio de facto prìtupo,   akìmh dhmiourgoÔn dikè tou duadikè morfè . àna prìsfato prìtupo yhfiak  morfopohsh pio polÔplokwn dom¸n dedomènwn enai h XML (eXtended Markup Language). H eisagwg  th ègine eunoðkˆ dekt  pagkosmw , me kuriìterh perioq  efarmog¸n ston pagkìsmio istì (World Wide Web), allˆ èqei arqsei na qrhsimopoietai kai eurÔtera. 2.2

Diktuak  epikoinwna

Anamfbola, o pio genikì mhqanismì epikoinwna diergasi¸n enai h diktuak  epikoinwna, afoÔ epitrèpei th sÔndesh metaxÔ diergasi¸n pou ekteloÔntai se diaforetikˆ mhqan mata. Lìgw th genikìthtˆ th , h diktuak  epikoinwna enai pio perplokh apì ˆllou mhqanismoÔ topik  mìno epikoinwna , ìpw oi diasw-


2.2. DIKTUAKH EPIKOINWNIA

21

lhn¸sei (pipes) kai h koin  mn mh. H diktuak  epikoinwna apotele apì mình th terˆstio antikemeno, allˆ o megalÔtero ìgko twn leptomerei¸n mikr  mìno sqèsh èqei me ta katanemhmèna sust mata. Autì diìti sta katanemhmèna sust mata den endiafèrei to p¸ akrib¸ metaddontai ta dedomèna metaxÔ diergasi¸n, allˆ mìnon to poiˆ enai ta qarakthristikˆ (oi prodiagrafè ) th metˆdosh twn dedomènwn. Ma endiafèrei dhlad  to ti kˆnei o mhqanismì tou diktÔou, ìqi to p¸ to kˆnei. Gia to lìgo autì, h parousash th diktuak  epikoinwna pou akolouje periorzetai sthn programmatistik  pleurˆ mìno, me kˆpoia shmea embˆjunsh ìtan enai aparathto gia thn plhrèsterh epex ghsh th leitourgikìthta . O diktuakì programmatismì gnetai mèsw kˆpoia DPE1 (Diepaf  Programmatist  Efarmog¸n). H pio diadedomènh DPE enai ta sockets, pou suqnˆ anafèrontai kai w Berkeley sockets diìti prwtoemfansthkan sto 4.2BSD.2 S mera qrhsimopoioÔntai eurèw ta sockets tou 4.4BSD, parìlo pou pollˆ leitourgikˆ sust mata èqoun th dik  tou ulopohsh th DPE (pq. to Linux kai ta leitourgikˆ th Microsoft pou baszontai se WinNT). 2.2.1

Eisagwg  sta

sockets

Ta sockets perilambˆnoun 8 basikè kl sei , pou fanontai ston Pnaka 2.2:

1 2 3 4

Kl sh socket bind listen accept

5 6 7 8

connect send recv close

Leitourga Dhmiourge èna nèo socket. Dènei èna socket me kˆpoia topik  dieÔjunsh. Metatrèpei èna socket se akroat  gia sundèsei TCP. H diergasa emplèketai mèqri èna socket-akroat  na deqje sÔndesh. Xekinˆ sÔndesh mèsw socket. Stèlnei dedomèna mèsw enì socket. Lambˆnei dedomèna mèsw enì socket. Katarge mia upˆrqousa sÔndesh.

Pnaka 2.2: Oi basikè kl sei th DPE socket. H epikoinwna mèsw sockets gnetai me bˆsh kˆpoia prwtìkolla diktÔou. To pio diadedomèno prwtìkollo diktÔou enai to TCP/IP. Sthn pragmatikìthta prìkeitai gia dÔo prwtìkolla, to TCP (Transmission Control Protocol) kai to IP (Internet Protocol). To TCP enai prwtìkollo metˆdosh dedomènwn. Enai uyhlìterou epipèdou apì to IP kai qrhsimopoie to IP gia th metagwg  pakètwn. Enai upeÔjuno gia th dhmiourga mia sÔndesh duadik  ro  (byte stream) metaxÔ dÔo sockets. àna ˆllo prwtìkollo metˆdosh dedomènwn pou qrhsimopoie to IP enai to UDP (User Datagram Protocol). To UDP mpore na metafèrei duadikˆ mhnÔmata 1 2

Aggl:

API (Application Programmer Interface) U NIX tou University of California at Berkeley. BSD shmanei Berkeley Standard Distribution.

àkdosh tou


22

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

(datagrams) metaxÔ dÔo sockets, allˆ h metaforˆ aut  den enai oÔte axiìpisth (dhl. kˆpoia mhnÔmata mpore na qajoÔn) oÔte diatetagmènh (dhl. ta mhnÔmata mpore na fjˆsoun me seirˆ diaforetik  apì th seirˆ apostol  ). Ektì apì to TCP kai to UDP, upˆrqoun kai ˆlla prwtìkolla metˆdosh dedomènwn, allˆ den ja anaferjoÔme peraitèrw, afoÔ qrhsimopoioÔntai se eidikè mìno peript¸sei . To IP enai prwtìkollo metagwg  pakètwn, dhl. analambˆnei th metaforˆ pakètwn metaxÔ dÔo dieujÔnsewn. MporoÔme loipìn na upojèsoume (kai ètsi enai) thn Ôparxh diaforetik¸n prwtokìllwn, pou na sunergˆzontai me to TCP kai to UDP. Sthn pragmatikìthta, to dio to IP èqei pollè ekdìsei . To prwtìkollo pou qrhsimopoietai s mera (2003) eurÔtera enai pio swstˆ to IPv4 (èkdosh 4). àqei  dh protaje kai ulopoihje to IPv6 (epsh gnwstì w IPng apì ta arqikˆ th frˆsh next generation). Epsh , se pollè ekdìsei tou U NIX qrhsimopoietai èna prwtìkollo metaforˆ metaxÔ mìno topik¸n diergasi¸n, pou (elleyei kalÔterou onìmato ) anafèretai w unix socket protocol. Pollˆ ˆlla prwtìkolla metagwg  pakètwn èqoun anaptuqje katˆ kairoÔ , pq. to IPX th Novell, to X25 tou ISO, to AX.25 pou qrhsimopoietai se asÔrmata dktua, to Appletalk th Apple. Kˆpoia apì autˆ ta prwtìkolla de sunergˆzontai me to TCP kai/  to UPD, allˆ upˆrqoun ˆlla prwtìkolla metˆdosh dedomènwn pèra apì ta dÔo autˆ. Gia ta paradegmatˆ ma ja qrhsimopoi soume mìno TCP kai UDP, pˆnw apì IPv4 kai unix sockets. Kˆje prwtìkollo metagwg  pakètwn susqetzetai me kˆpoia oikogèneia dieu3 jÔnsewn (address family). Oi dieujÔnsei sto IPv4 enai lèxei twn 32 bit, pou sun jw ti grˆfoume san ta tèssera byte qwrismèna me telee , pq. 127.0.0.1. To IPv6 èqei w dieujÔnsei lèxei twn 128 bit. Gia unix sockets, oi dieujÔnsei enai diadromè arqewn (pq. /tmp/myprog.socket.432). Ja exetˆsoume ti leptomèreie twn dieujÔnsewn se megalÔtero bˆjo parakˆtw. H dhmiourga enì socket gnetai me thn kl sh socket(...). Katˆ th dhmiourga epilègoume to prwtìkollo metagwg  pakètwn, kai to prwtìkollo metˆdosh dedomènwn, pq. sock = socket(AF_INET, SOCK_STREAM)

H pr¸th parˆmetro epilègei to prwtìkollo metagwg  pakètwn kai h deÔterh to prwtìkollo metˆdosh dedomènwn. Gia thn epikoinwna metaxÔ dÔo sockets, prèpei na èqoun dhmiourghje amfìtere me ta dia prwtìkolla. H antistoiqa metaxÔ prwtokìllwn kai paramètrwn sth sunˆrthsh socket fanetai ston Pin. 2.3. Gia kˆje socket (ektì apì ta socket-akroatè ), to leitourgikì sÔsthma dhmiourge dÔo buffers, ènan gia eiserqìmena kai ènan gia exerqìmena dedomèna, ìpw deqnei to Sq. 2.1. Mèsw aut¸n twn buffers gnetai h apomìnwsh th diergasa apì to logismikì tou diktÔou. ätan prìkeitai na apostaloÔn dedomèna me thn kl sh send, autˆ antigrˆfontai ston send buffer, ektì an den upˆrqei q¸ro , opìte h diergasa emplèketai ¸spou na dhmiourghje q¸ro . Antstoiqa, ìtan prìkeitai na paralhfjoÔn dedomèna autˆ metafèrontai apì ton recv buffer sto q¸ro mn mh th 3

Genikˆ, enai dunatìn na susqetsoume perissìtere th mia oikogèneie dieujÔnsewn sto dio prwtìkollo, allˆ kˆti tètoio

den èqei ulopoihje potè gia ta diadedomèna prwtìkolla.


23

2.2. DIKTUAKH EPIKOINWNIA

Prwtìkollo TCP UDP IPv4 IPv6 unix sockets

änoma stajerˆ SOCK STREAM SOCK DGRAM AF INET AF INET6 AF UNIX

Pnaka 2.3: Antistoiqa prwtokìllwn kai onomˆtwn stajer¸n.   Diergasa Phr na L.S.   socket   recv() o recv buffer m\\\\\\  bbbbbb1 Dktuo  / send() send buffer    Sq ma 2.1: Ta buffer enì socket. diergasa , ektì an o recv buffer enai ˆdeio , opìte h diergasa emplèketai mèqri na paralhfjoÔn kˆpoia dedomèna. Ja exetˆsoume t¸ra th mèjodo epikoinwna me tou dÔo tÔpou socket, TCP kai UDP. Kaj¸ diabˆzete ta paradegmata, kalì enai na èqete tautìqrona dpla sa ta egqeirdia twn kl sewn tou Pnaka 2.2. Sto U NIX mporete na qrhsimopoi sete thn entol  man, pq. man listen

2.2.2

Epikoinwna me

TCP sockets

Sthn epikoinwna me TCP sockets prèpei pr¸ta na dhmiourghje mia sÔndesh metaxÔ dÔo sockets. H sÔndesh aut  diaqeirzetai th metˆdosh twn dedomènwn w ro . H epteuxh th sÔndesh gnetai mèsw enì trtou TCP socket, pou de summetèqei sthn kejeautì epikoinwna, parˆ mìno sth dhmiourga th sÔndesh . Autˆ ta sockets onomˆzontai socket-akroatè (listening sockets).4 Gia na exetˆsoume ti leptomèreie th sÔndesh me TCP sockets, ja ulopoi soume mia apl  uphresa, me ton uphrèth na dèqetai kai na tup¸nei èna m numa apì kˆje pelˆth. H ulopohsh tou uphrèth fanetai sto prìgramma 2.1, kai aut  tou pelˆth sto prìgramma 2.2.

(connection)

4

Suqnˆ ta

socket-akroatè anafèrontai w socket-uphrète (server sockets), kai ta aplˆ socket w socket-pelˆte . De

ja prèpei na sugqèontai me ti diergase -uphrète kai pelˆte .


24

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.1 àna aplì uphrèth me epikoinwna TCP. 1

from socket import *

2 3 4 5

lsock = socket(AF_INET, SOCK_STREAM) lsock.bind( (’127.0.0.1’, 12345) ) lsock.listen(3)

6 7 8

while 1: # endless loop s,addr = lsock.accept()

9 10 11 12 13 14 15 16

msg = ’’ while 1: c = s.recv(256) if not c: break msg += c s.close() print "Received message:",msg

A exetˆsoume to prìgramma 2.1. Sth gramm  1 eisˆgoume th biblioj kh th Python pou orzei th DPE twn sockets. Oi grammè 3 5 dhmiourgoÔn èna socketakroat  . Sth gramm  8, h kl sh th accept sto socket-akroat  mplokˆrei thn ektèlesh, e¸ ìtou èrjei mia athsh gia dhmiourga sÔndesh apì ton pelˆth. H athsh aut  èrqetai apì thn ektèlesh th connect, ìpw fanetai sth gramm  4 tou Prog. 2.2. H kl sh th accept epistrèfei èna nèo socket, se katˆstash sÔndesh me to socket tou pelˆth. To socket-akroat  de summetèqei sthn epikoinwna (grammè 10 14 tou progrˆmmato 2.1 kai 6 9 tou Prog. 2.2). Metˆ to tèlo th epikoinwna , h sÔndesh termatzetai me qr sh th close. O men pelˆth termatzei, en¸ o uphrèth tup¸nei to m numa pou èlabe, kai katìpin to socket-akroat  xanaemplèketai sthn accept, perimènonta ton epìmeno pelˆth. Endiafèron parousiˆzei h epikoinwna ro  metaxÔ twn dÔo sockets. H send (gramm  7 tou pelˆth) dèqetai w parˆmetro èna m numa, kai to metaddei. H paralab  tou mhnÔmato gnetai w ex  (grammè 11 14 tou uphrèth): h diergasa emplèketai sto recv mèqri na paralhfjoÔn kˆpoia bytes, opìte kai epistrèfei to Prìgramma 2.2 àna aplì pelˆth me epikoinwna TCP. 1

from socket import *

2 3 4

s = socket(AF_INET, SOCK_STREAM) s.connect( (’127.0.0.1’, 12345) )

5 6 7 8

msg = ’Hello friend!’ s.send(msg) s.close()


2.2. DIKTUAKH EPIKOINWNIA

25

Prìgramma 2.3 àna aplì uphrèth me epikoinwna UDP. 1

from socket import *

2 3 4

s = socket(AF_INET,SOCK_DGRAM) s.bind( (’127.0.0.1’, 12345) )

5 6 7 8

while 1: msg, sndaddr = s.recvfrom(1024) print "From ",sndaddr,":",msg

Prìgramma 2.4 àna aplì pelˆth me epikoinwna UDP. 1

from socket import *

2 3 4

s = socket(AF_INET,SOCK_DGRAM) s.sendto("Hello friend!",(’127.0.0.1’,12345))

polÔ 256 apì autˆ (autì shmanei h parˆmetro th recv). ätan o pelˆth klesei th dik  tou pleurˆ th sÔndesh , h recv epistrèfei qwr dedomèna (dhl. epistrèfei èna ˆdeio string). H sÔndesh èqei diakope kai o uphrèth mpore na klesei th dik  tou pleurˆ th sÔndesh . Me ˆlla lìgia, h anˆgnwsh apì mia sÔndesh TCP gnetai se aprosdiìristou m kou tm mata, kai epistrèfei èna kenì m numa mìno sto tèlo th sÔndesh .

2.2.3

Epikoinwna me

UDP sockets

Sthn epikoinwna me UDP sockets ta prˆgmata enai aploÔstera apì ìti sthn perptwsh tou TCP, diìti den dhmiourgetai sÔndesh metaxÔ twn epikoinwnoÔntwn sockets. A doÔme thn ulopohsh th apl  uphresa th prohgoÔmenh paragrˆfou. Ed¸ ta prˆgmata enai saf¸ aploÔstera. Af' enì blèpoume oti h ènnoia tou socket-akroat  den upˆrqei. Aplˆ dhmiourgoÔntai dÔo sockets, ìpou o pelˆth stèlnei èna m numa (datagram) me mia apl  kl sh th sendto kai o uphrèth to lambˆnei autoÔsio me kl sh th recvfrom. Blèpoume ìti me thn apousa sÔndesh , h metˆdosh enì mhnÔmato me thn entol  sendto prèpei na kajorzei th dieÔjunsh proorismoÔ, kai antstoiqa h paralab  me thn recvfrom epistrèfei kai th dieÔjunsh tou apostolèa. Parˆ ton aploÔstero programmatismì, ta UDP sockets èqoun mia seirˆ apì periorismoÔ , kˆpoiou apì tou opoou anafèrame parapˆnw: • Ta mhnÔmata èqoun mègisto m ko (sun jw merikˆ kbytes). • àna m numa mpore na qaje, qwr o apostolèa na mpore na anakalÔyei an èfjase.


26

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

• Ta mhnÔmata mpore na paralhfjoÔn me seirˆ ˆllh apì aut  pou stˆljhkan.

Oi parapˆnw lìgoi kajistoÔn ta UDP sockets ligìtero qr sima. Praktikˆ, qrhsimopoioÔntai mìno se eidikè peript¸sei . 2.2.4

DieujÔnsei sto

IP

Sta mikrˆ paradegmata pou parajèsame, qrhsimopoi same kˆpoie dieujÔnsei tou IPv4, qwr na exhg soume analutikˆ th morf  tou kai to p¸ autè prokÔptoun. Gia parˆdeigma, sth gramm  4 tou progrˆmmato 2.4: s.sendto("Hello friend!",(’127.0.0.1’,12345))

blèpoume th dieÔjunsh ('127.0.0.1',12345). Sto shmeo autì ja doÔme th dom  twn dieujÔnsewn tou IPv4, kai th shmasa tou sth DPE twn sockets. DieujÔnsei IPv4 Sto IPv4, mia dieÔjunsh enai aplˆ mia lèxh twn 32 bits. Sun jw oi dieujÔnsei autè parist¸ntai me to gnwstì sumbolismì me telee , pq. 127.0.0.1. Sto sumbolismì autì, kˆje èna apì tou 4 jetikoÔ akeraou antistoiqe se mia 8-bit lèxh (èna byte) th 32-bit dieÔjunsh , xekin¸nta apì ta pio shmantikˆ bits. Me ˆlla lìgia, o sumbolismì autì enai aplˆ èna trìpo anaparˆstash enì 32-bit jetikoÔ akeraou ìpw parakˆtw: a3 .a2 .a1 .a0 = 224 · a3 + 216 · a2 + 28 · a1 + a0 .

Parempiptìntw , h dieÔjunsh 127.0.0.1 an kei sthn omˆda dieujÔnsewn pou èqoun anateje katˆ sÔmbash sto yeudokanˆli brìqou; ì,ti stèlnetai se aut  th dieÔjunsh apì ti diergase tou upologist , xanagurzei sthn dia dieÔjunsh w esodo . Gia th dieÔjunsh aut  qrhsimopoietai to sumbolikì ìnoma INADDR LOOPBACK. Mia ˆllh eidik  dieÔjunsh enai h 0.0.0.0 pou paristˆnei thn aprosdiìristh (unspecified) dieÔjunsh. H mình nìmimh qr sh th apì pakèta diktÔou enai ìtan autˆ proèrqontai apì stajmoÔ pou arqikopoioÔn th diktuak  tou sÔndesh mèsw prwtokìllwn dunamik  anˆjesh dieujÔnsewn (BOOTP, DHCP klp.) ätan gnetai bind apì sockets se aut  th dieÔjunsh, o rìlo th enai autì tou wildcard5 kai qrhsimopoietai to sumbolikì ìnoma INADDR ANY. Klˆsei dieujÔnsewn Sti arqikè prodiagrafè tou prwtokìllou IPv4 oi dieujÔnsei qwrzontan se pènte klˆsei , kwdikopoihmène me tou qarakt re A, B, C, D, E. Oi klˆsei autè fanontai sto Sq. 2.2. Oi klˆsei autè qrhsimopoioÔntan gia thn paragwg  oikogenei¸n dieujÔnsewn kai thn anˆjes  tou se organismoÔ . Sugkekrimèna se ènan organismì dnontan èna network ID klˆsh A, B   C, anˆloga me ti anˆgke tou organismoÔ se dieujÔnsei . Sth sunèqeia o organismì anèjete ta antstoiqa host ID se upologistè 5

mpalantèr


27

2.2. DIKTUAKH EPIKOINWNIA

7 bits

24 bits

class A

0 network ID

host ID

class B

10

class C

110

class D

1110

multicast group

class E

11110

(reserved for future use)

14 bits

16 bits

network ID

host ID

21 bits

8 bits

network ID

host ID 28 bits

27 bits

Sq ma 2.2: Oi pènte klˆsei dieujÔnsewn IPv4. katˆ to dokoÔn. Aut  h mèjodo anˆjesh dieujÔnsewn egkatalefjhke sta mèsa th dekaeta tou '90. H klˆsh D qrhsimopoietai gia omadik  epikoinwna me th mèjodo multicast (bl. §2.4). H klˆsh E enai desmeumènh gia thn kˆluyh mellontik¸n teqnologi¸n. Euèlikte oikogèneie dieujÔnsewn Sta mèsa th dekaeta tou '90, h mèjodo twn klˆsewn gia thn anˆjesh dieujÔnsewn se organismoÔ antikatastˆjhke apì mia pio euèlikth mèjodo basismènh se mˆske . Sth mèjodo aut , qrhsimopoietai o sumbolismì a3 .a2 .a1 .a0 /m gia na kajorsei thn oikogèneia (dhl. to sÔnolo) twn dieujÔnsewn ekenwn pou ta m pio shmantikˆ apì ta 32 yhfa tou tautzontai me ta yhfa th dieÔjunsh a3 .a2 .a1 .a0 . Gia parˆdeigma, h oikogèneia dieujÔnsewn 147.27.1.0/24 perilambˆnei 256 dieujÔnsei me th genik  morf  147.27.1.x, gia 0 ≤ x ≤ 255. S mera, to network ID twn dieujÔnsewn enì organismoÔ paristˆnetai me ton parapˆnw sumbolismì kai antistoiqe se mia duadik  lèxh m yhfwn. To pleonèkthma th mejìdou aut  se sqèsh me th mèjodo twn klˆsewn enai ìti to mègejo mia oikogèneia dieujÔnsewn mpore na pˆrei gia tim  opoiad pote dÔnamh tou 2 ant gia mìnon 3 timè (224 , 216 , 28 gia ti klˆsei A, B, C antstoiqa). Ep paradegmati, to network ID twn dieujÔnsewn tou domain tuc.gr enai to 147.27.0.0/16, pou antistoiqe se 65536 dieujÔnsei . H katˆrghsh twn klˆsewn od ghse se metabolè stou mhqanismoÔ dromolìghsh tou DiadiktÔou. Sto RFC 1519 perigrˆfetai h basik  arqitektonik , h opoa apokaletai Classless Inter-Domain Routing (CIDR). Upˆrqoun kˆpoioi enallaktiko sumbolismo gia thn anaparˆstash oikogenei¸n dieujÔnsewn, pèra apì autìn pou parousiˆsame parapˆnw. àna suqnì sumboli-


28

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

smì qrhsimopoie telee ekatèrwjen tou /. Gia parˆdeigma, ant gia 147.27.0.0/16 ja grˆfame 147.27.0.0/255.255.0.0. Sthn perptwsh aut , to dex ìrisma enai mia 32-bit mˆska pou orzei ta bits ekena pou enai koinˆ se ìle ti dieujÔnsei mia oikogèneia dieujÔnsewn.6 àna ˆllo parìmoio sumbolismì ma epitrèpei, ant tou 147.27.0.0/16 na grˆyoume aplˆ 147.27/16. Genikˆ, gia m ≤ 8k , me thn èkfrash ak−1 .ak−2 . · · · .a0 /m paristˆnoume ta m pio shmantikˆ bits tou akeraou A=

k−1 X

2 k · ai ,

i=0

  enallaktikˆ th m-bit lèxh pou antistoiqe ston akèraio ⌊A/28k−m ⌋. Diepafè àna upologist  mpore na diajètei pollè diaforetikè diepafè diktuak  epikoinwna (interfaces), pq sto U NIX: • An diajètei sÔndesh Ethernet, tìte èqei mia diepaf  me to ìnoma eth0. • An diajètei diktuak  sÔndesh mèsw modem, tìte èqei mia diepaf  me ìnoma ppp0 (  slip0, anˆloga me to seiriakì prwtìkollo pou qrhsimopoie). • Sun jw parèqetai ap' to leitourgikì sÔsthma yeudokanˆli brìqou (loopback) gia topikè sundèsei , kai h diepaf  onomˆzetai lo.

Se kˆje diepaf  antistoiqe mia monadik  dieÔjunsh IP.7 €ra loipìn èna upologist  mpore na èqei pollè IP dieujÔnsei . àna upologist  pou èqei perissìtere apì ma diepafè exairoumènwn twn diepaf¸n loopback, onomˆzetai multihomed. Ex orismoÔ oi dromologhtè tou diktÔou (routers) enai multihomed. Wstìso, èna multihomed upologist  den enai autìmata kai router, dhl. den prowje automˆtw pakèta pou lambˆnei apì mia diepaf , an autˆ proorzontai gia ˆllh diepaf . Genikˆ, oi diepafè antistoiqoÔn se fusikˆ kanˆlia epikoinwna . Upˆrqoun dÔo megˆle kathgore tètoiwn kanali¸n: Shmeou-pro -shmeo: AutoÔ tou edou ta kanˆlia sundèoun akrib¸ dÔo shmea (ex ou kai to ìnoma). Sthn prˆxh tètoia kanˆlia mpore na ulopoioÔntai apì kal¸dia (hlektrikˆ, thlefwnikˆ mèsw modem, optikˆ)   asÔrmate zeÔxei (mikrokumatikè epgeie   doruforikè , upèrujre klp). Pollapl  prìsbash : Autˆ ta kanˆlia epitrèpoun tautìqronh ekpomp  kai akrìash apì polloÔ stajmoÔ (ex ou kai to ìnoma) kai ulopoioÔntai ete ensÔrmata (p.q. Ethernet, token ring) ete asÔrmata (p.q. WiFi). 6 7

Istorikˆ,  tan epitrept  h qr sh mh suneq¸n mask¸n, pq. 255.0.255.0. S mera, autè oi mˆske apagoreÔontai rhtˆ. S mera, kˆpoia leitourgikˆ sust mata epitrèpoun thn anˆjesh pollapl¸n diepaf¸n sto dio fusikì kanˆli (pq. sÔndesh

Ethernet).


29

2.2. DIKTUAKH EPIKOINWNIA

DieujÔnsei upodiktÔwn To RFC 950 orzei tra ierarqikˆ eppeda gia ton prosdiorismì th dieÔjunsh enì upologist . Autˆ enai: network ID: Antistoiqe sthn oikogèneia dieujÔnsewn pou apoddetai se ènan organismì. subnet ID: O kˆje organismì moirˆzei ti dieujÔnsei tou se mia seirˆ apì upodktua (subnets). host ID: Kˆje diepaf  pou summetèqei se èna upodktuo èqei to dikì th ID.

Kˆje èna apì ta tria eppeda suneisfèrei èna dedomèno arijmì apì bits sthn 32-bit dieÔjunsh IP mia diepaf  . Sth bibliografa apantˆtai o sumbolismì {net-id, subnet-id, host-id} gia thn anaparˆstash dieujÔnsewn. Parˆdeigma 1: Sto Poluteqneo Kr th (tuc.gr) èqei doje to network ID 147.27.0.0/16. Mèro aut¸n twn dieujÔnsewn antistoiqe sto subnet 147.27.7.0/24, èna upodktuo pou exuphrete ti anˆgke tou ergasthrou SoftLab. H dieÔjunsh 147.27.7.101 ja mporoÔse na parastaje kai w {147.27/16, 7/8, 101/8}. Mia pijan  diˆtaxh tou diktÔou me 4 upodktua fanetai sto Sq. 2.3. 147.27.12.132

147.27.12.13 147.27.12.42

147.27.1.200

147.27.1.201

147.27.1.0/24

147.27.12.0/24

147.27.18.0/24

147.27.14.0/24

147.27.18.1 147.27.14.32

147.27.18.3

147.27.14.34

Sq ma 2.3: Tèssera LAN upodktua tou diktÔou 147.27.0.0/16 sundedemèna me routers. Parˆdeigma 2: To RFC 1918 orzei tra network IDs pou mporoÔn na qrhsimopoihjoÔn apì idiwtikˆ dktua, dhl. oi dieujÔnsei autè den enai diajèsime sto pagkìsmio dktuo (Internet), opìte mporoÔn na qrhsimopoihjoÔn apì polloÔ diaforetikoÔ organismoÔ . Ta network IDs enai: • 10.0.0.0/8


30

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

• 172.16.0.0/12 • 192.168.0.0/16

JÔre (ports) Se ènan upologist , oi diepafè qrhsimopoioÔntai apì pollaplè sundèsei tautìqrona. Gia na diaforopoihjoÔn oi sundèsei autè , ta prwtìkolla TCP kai UDP qrhsimopoioÔn arijmoÔ jÔra (port numbers). Oi arijmo auto enai 16-bit jetiko akèraioi. àtsi, mia dieÔjunsh sÔndesh me TCP/IP   UPD/IP sqhmatzetai apì mia dieÔjunsh IP kai ènan arijmì jÔra , pq. h dieÔjunsh ('127.0.0.1',12345) pou edame prohgoumènw . Suqnˆ qrhsimopoietai o sumbolismì address:port, p.q. 127.0.0.1:12345. O mhqanismì twn jur¸n qrhsimpoietai gia thn eÔresh uphresi¸n; o uphrèth gia kˆje uphresa sundèetai sthn eurèw gnwst  jÔra (well-known port) gia thn uphresa aut . O pnaka 2.4 parajètei ti eurèw gnwstè jÔre gia kˆpoie sunhjismène uphrese . O katˆlogo twn eurèw gnwst¸n jur¸n gia diˆfore uUphresa FTP SSH TELNET SMTP DNS WWW Kerberos SNMP LDAP X11

JÔra 21 22 23 25 53 80 88 161 389 6000

Pnaka 2.4: Oi eurèw gnwstè jÔre gia kˆpoie uphrese . phrese thretai apì ton organismì IANA (Internet Assigned Numbers Authority). An enai epijumht  h sÔndesh me kˆpoio prwtìkollo se jÔra ˆllh apì thn eurèw gnwst , autì prèpei na doje w epiplèon plhrofora sti diˆfore efarmogè . Gia parˆdeigma, suqnˆ enai epijumht  h qr sh HTTP se jÔre ˆlle apì thn jÔra 80. àna sqetikì URL ja èmoiaze w ex  : http://localhost:8080/myserver to opoo ja sundeje mèsw HTTP me th dieÔjunsh 127.0.0.1:8080. Sto U NIX, oi arijmo jÔra 0 1023 enai desmeumènoi; mìno diergase tou superuser mporoÔn na sundejoÔn se autè . Mia sÔndesh sto TCP orzetai apì mia tetrˆda pou perigrˆfei ta dÔo ˆkra th sÔndesh : (ipaddr1, port1, ipaddr2, port2). Epeid  enai dunatìn na èqoume perissìtera apì èna TCP sockets sundedemèna sto dio zeugˆri (ipaddr, port) se mia mhqan , enai fanerì oti h katanom  twn pakètwn sta swstˆ sockets prèpei na baszetai


31

2.2. DIKTUAKH EPIKOINWNIA

kai sta tèssera stoiqea pou perigrˆfoun mia sÔndesh. Arke na diasfaliste oti de ja upˆrqoun dÔo tautìqrone sundèsei me dia perigraf . 2.2.5

RÔjmish th epikoinwna me

sockets

H basik  sumperiforˆ twn sockets mpore na rujmiste anˆloga me ti ekˆstote anˆgke , mèsw enì megˆlou arijmoÔ paramètrwn. Oi parˆmetroi autè qwrzontai se eppeda (levels), anˆloga me to eppedo tou prwtokìllou sto opoo epidroÔn. Ta basikìtera eppeda paramètrwn kai kˆpoie apì ti paramètrou fanontai ston Pnaka 2.5. Ta leitourgikˆ sust mata suqnˆ ulopoioÔn epiplèon paramètrou ,   paralepoun na ulopoi soun ˆlle . Eppedo

Parˆmetro

SOL_SOCKET

SO_BROADCAST SO_REUSEADDR SO_RCVBUF SO_SNDBUF SO_RCVLOWAT SO_SNDLOWAT IP_TOS TCP_NODELAY

IPPROTO_IP IPPROTO_TCP

Perigraf  Epitrèpei epikoinwna ekpomp  Epanaqrhsimopohsh topik  dieÔjunsh Mègejo buffer paralab  Mègejo buffer apostol  Qamhl  stˆjmh paralab  Qamhl  stˆjmh apostol  TÔpo epikoinwna kai proteraiìthta Apenergopohsh algìrijmou tou Nagle

Pnaka 2.5: Sunhjismène parˆmetroi rÔjmish gia sockets. H prìsbash sti paramètrou autè gnetai mèsw dÔo sunart sewn, twn getsockopt kai setsockopt. Gia parˆdeigma, gia na energopoi soume thn parˆmetro TCP_NODELAY gia to socket s, kaloÔme s.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)

en¸ gia na diabˆsoume thn tim  th , delayflag = s.getsockopt(IPPROTO_TCP, TCP_NODELAY)

Analutikìtera, oi parˆmetroi tou Pnaka 2.5 èqoun ¸ ex  : SO_BROADCAST

H parˆmetro aut  epitrèpei thn omadik  epikoinwna mèsw ekpomp  (broadcasting) apì to socket. H ekpomp  mpore na qrhsimopoihje mìno me UDP sockets kai mìno se diepafè pou to epitrèpoun, pq. Ethernet, token ring, klp. H epikoinwna me ekpomp  ja parousiaste argìtera pio analutikˆ. SO_REUSEADDR

H parˆmetro aut  epitrèpei se kˆpoio socket-akroat  na epanaqrhsimopoi sei mia dieÔjunsh (mèsw kl sh th bind) h opoa  dh qrhsimopoietai apì ˆlle sundedemène sockets.


32

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Upojèste thn akìloujh seirˆ gegonìtwn: 1. àna socket-akroat  dènetai se mia jÔra kai kale accept. 2. Mia athsh sÔndesh ftˆnei sto socket-akroat  kai dhmiourgetai sÔndesh mèsw tou socket pou epistrèfei h accept. 3. To socket-akroat  katastrèfetai allˆ to sundedemèno socket pou dhmioÔrghse paramènei kai metafèrei dedomèna. 4. àna nèo socket-akroat  prospaje na deje me bind sthn dia jÔra. To b ma 4 ja apotÔqei, ektì eˆn to nèo socket-akroat  energopoi sei thn parˆmetro SO_REUSEADDR. äla ta socket-akroatè ja prèpei na energopoioÔn thn parˆmetro aut . To parapˆnw prìblhma enai apì ti suqnìtere apore arqˆriwn programmatist¸n.

SO_RCVBUF kai SO_SNDBUF

Gia kˆje socket, to leitourgikì sÔsthma dhmiourge dÔo buffers, ènan gia eiserqìmena dedomèna kai ènan gia exerqìmena dedomèna. To mègejo twn buffers enai diajèsimo gia anˆgnwsh kai metabol  mèsw twn epilog¸n SO_RCVBUF kai SO_SNDBUF antstoiqa. IP_TOS

H parˆmetro aut  dhl¸nei to edo th epikoinwna pou ja gnei me autì to socket. H d lwsh aut  mpore na qrhsimopoihje apì to logismikì kai ulikì tou diktÔou gia beltistopohsh th epikoinwna . Oi pijanè timè th paramètrou aut  gia to IPv4 fanontai ston parakˆtw pnaka: Tim  IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_LOWCOST

Shmasa Elaqistopohsh kajustèrhsh Megistopohsh ro  dedomènwn Megistopohsh axiopista Elaqistopohsh kìstou

Gia parˆdeigma, mia sÔndesh metaforˆ megˆlwn arqewn ja prèpei na rujmiste sthn IPTOS_THROUGHPUT, en¸ mia sÔndesh pq. tou telnet ja prèpei na rujmiste w IPTOS_LOWDELAY ¸ste na apokrnetai ˆmesa sti enèrgeie tou qr sth. TCP_NODELAY

Se sundèsei pˆnw apì dktua eurea perioq  (WAN) pou stèlnoun pollˆ mikrˆ pakèta (pq. ìpw mia sÔndesh mèsw telnet) suqnˆ enai anepijÔmhto na upˆrqoun dromologhmèna pollˆ mikrˆ pakèta tautìqrona. O algìrijmo tou Nagle prospaje na periorsei thn katˆstash aut  perimènonta na lˆbei apìkrish gia


2.3. POLUPLEXIA EPIKOINWNIA ME

SOCKETS

33

èna mikrì pakèto prin stelei ˆllo mikrì pakèto Mikrˆ jewroÔntai ta pakèta pou enai mikrìtera apì to MSS (Maximum Segment Size), dhl. apì 0.5kbyte w 4kb anˆloga me to edo th sÔndesh . Se pollè efarmogè ìmw , aut  h kajustèrhsh enai anepijÔmhth, pq ìtan h epikoinwna enai pˆnw apì topikì dktuo. Gi autì, se efarmogè pelˆth-uphrèth ìpou pollaplè ait sei uphresa antallˆssontai metaxÔ pelat¸n kai uphret¸n, kalì enai na apenergopoietai o algìrijmo , jètonta thn parˆmetro TCP_NODELAY sthn tim  1. 2.3

Poluplexa epikoinwna me

sockets

Suqnˆ oi diergase se katanemhmèna sust mata prèpei na epikoinwn soun tautìqrona me perissìtere apì mia diergase . Upˆrqoun dÔo parˆgonte pou periplèkoun ton programmatismì aut  th leitourgikìthta : 1. To fainìmeno th emplok  th diergasa se kˆpoie kl sei twn sockets, kurw twn accept, send kai recv. Gia parˆdeigma, mpore mia diergasa na enai emplegmènh sth sunˆrthsh recv enì socket, en¸ kˆpoio ˆllo socket èqei ètoima dedomèna gia anˆgnwsh. 2. Akìmh kai qwr emplok , mia diergasa pou ektele upologismoÔ (pq. gia na exuphret sei kˆpoia athsh) ja agno sei eiserqìmena mhnÔmata apì ˆlle diergase (pq. akìmh kai ait sei gia sÔndesh). Oi dÔo auto parˆgonte enai diakrito metaxÔ tou . O pr¸to mpore na antimetwpiste me mhqanismoÔ poluplexa , pou ja exetˆsoume sth sunèqeia. O deÔtero parˆgonta den mpore na antimetwpiste qwr th qr sh poluepexergasa , pou ja ma apasqol sei argìtera. H prokajorismènh sumperiforˆ mia kl sh recv, send   accept orzei oti an aut  den enai dunatìn na epitÔqei ˆmesa, h diergasa emplèketai. Enai ìmw dunatìn na allˆxoume th sumperiforˆ aut  gia kˆpoio socket, me thn akìloujh entol : sock.setblocking(0)

Metˆ apì aut  thn entol , h sumperiforˆ gia autì to socket allˆzei w ex  : • An mia kl sh th recv den brei diajèsima dedomèna sto recv buffer tou socket, h sunˆrthsh epistrèfei sfˆlma (mèsw exception). • Mia kl sh th send ja apojèsei kˆpoion arijmì apì bytes (endeqomènw 0) gia apostol , kai ja epistrèyei amèsw ton arijmì autì. To prìgramma enai upeÔjuno na apostelei me epìmenh kl sh to upìloipo m numa. • An mia kl sh th accept den mpore na epistrèyei ˆmesa mia nèa sÔndesh, epistrèfei sfˆlma (mèsw exception).

Me lga lìgia, kama kl sh den emplèketai allˆ aplˆ epistrèfei me sfˆlma ìtan den mpore na exuphrethje. H epanaforˆ enì socket sthn prokajorismènh sumperiforˆ gnetai me thn kl sh


34

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

sock.setblocking(1)

H mh-emplekìmenh leitourga mpore na qrhsimopoihje sti peript¸sei ekene pou mia diergasa èqei th dunatìthta na ektelèsei upologistikì èrgo tautìqrona me thn epikoinwna. Wstìso, den uposthrzei ikanopoihtikˆ thn tautìqronh epikoinwna me pollˆ sockets. Gia kˆti tètoio, ja prepei h diergasa na dokimˆzei kuklikˆ ìla ta sockets gia ta opoa endiafèretai. Allˆ kˆti tètoio ja spatalˆ ˆskopa to qrìno th CPU. Qreiˆzetai loipìn kai èna mhqanismì poluplexa . O basikì mhqanismì poluplexa sto U NIX, pou èqei uiojethje kai apì ˆlla leitourgikˆ sust mata,8 enai h kl sh sust mato select. H kl sh aut  epitrèpei ton entopismì twn sockets ekenwn ta opoa mporoÔn na exuphret soun mia kl sh accept, send   recv qwr emplok . H kl sh aut  dèqetai 4 paramètrou kai epistrefei 3, w ex  : readyrd, readywr, readyex = select(testrd, testwr, testex, timeout)

Oi testrd, testwr kai testex enai lste apì sockets. H timeout enai mia dekadik  stajerˆ pou upodhl¸nei qrìno se deuterìlepta. H parapˆnw kl sh ja emplake mèqri na sumbe èna   perissìtera apì ta akìlouja: 1. Kˆpoio socket th lsta testrd èqei ètoima dedomèna gia anˆgnwsh. 2. Kˆpoio socket th lsta testwr èqei diajèsimo q¸ro gia eggraf  stoiqewn. 3. Kˆpoio socket th lsta testex enai se eidik  katˆstash. To ti akrib¸ shmanei autì de ja ma apasqol sei peraitèrw. 4. O qrìno katˆ ton opoo h diergasa  tan se emplok  xepèrase to timeout. 5. Kˆpoio apì ta sockets brsketai se katˆstash sfˆlmato (pq. to ˆllo ˆkro dièkoye th sÔndesh). H select epistrèfei trei lste apì sockets, ti readyrd, readywr kai readyex, pou enai uposÔnola twn readyrd, readyrd kai readyrd antstoiqa kai upodhl¸noun ta sockets ekena gia ta opoa mia kl sh ja epitÔqei. Mia dieukrnhsh: h send enai dunatìn na emplake akìmh kai se èna socket pou epistrèfetai apì th select. Wstìso, an to socket enai rujmismèno gia mh emplèkousa leitourga mèsw th setblocking, tìte egguhmèna ja epitÔqei na apostelei èna mh mhdenikì kommˆti twn dedomènwn th kl sh (fusikˆ, ìpw epame parapˆnw, h kl sh de ja emplake). H tètarth parˆmetro kl sh th select mpore na apaleifje. H perptwsh aut  isoduname me timeout = ∞. Sthn perptwsh tèlo pou kˆpoia apì ta stoiqea twn testrd kai testwr parousiˆzoun sfˆlma, h select epistrèfei me ta stoiqea autˆ na fanontai w ètoima gia leitourga. Mia kl sh th send   recv pˆnw se èna tètoio socket ja epistrèyei sfˆlma. Allˆ kai sthn perptwsh aut , h diergasa de ja emplake. 8

ìpw ta leitourgikˆ sust mata th

Microsoft gia parˆdeigma.


2.4. OMADIKH EPIKOINWNIA

35

H select sundèetai me dÔo akèraie paramètrou twn socket, ti SO_RCVLOWAT kai SO_SNDLOWAT . H SO_RCVLOWAT enai o arijmì twn bytes pou prèpei na brskontai ston receive buffer tou socket, gia na epistrèyei h select to socket w anagn¸simo. H parˆmetro aut  èqei arqikˆ thn tim  1, allˆ mpore kˆpoio na jèsei mia megalÔterh tim akìmh kai apì kl sh se kl sh, an kˆti tètoio tairiˆzei sth logik  th epikoinwna . Antstoiqa h SO_SNDLOWAT enai o elˆqisto diajèsimo q¸ro pou prèpei na upˆrqei sto send buffer tou socket gia na to epistrèyei h select w eggrˆyimo. H prokajorismènh tim  aut  th paramètrou enai 2048 gia TCP sockets. Fusikˆ, gia UDP sockets, kamiˆ apì ti paramètrou autè den èqei shmasa. 2.4

Omadik  epikoinwna

Oi dÔo basiko mhqanismo omadik  epikoinwna pou uposthrzontai apì to TCP/IP enai h ekpomp  (broadcasting) kai h pollapl  dianom  (multicasting). Istorikˆ prohg jhke h ekpomp , h opoa uposthrzetai pl rw apì to IPv4. Antjeta, h pollapl  dianom  enai pio prìsfath teqnik  kai den enai upoqrewtik  h upost rix  th apì to IPv4, parìlo pou sto IPv6 enai upoqrewtik . 2.4.1

Epikoinwna me ekpomp 

H epikoinwna me ekpomp  upìkeitai se merikoÔ periorismoÔ : 1. H ekpomp  prèpei na uposthrzetai apì to upˆrqon ulikì tou diktÔou. H pio suqn  morf  enai se sust mata pollapl  prìsbash ìpw to Ethernet. Den mpore na pragmatopoihje ekpomp  se kanˆlia epikoinwna shmeou-pro shmeo (pq. sÔndesh me modem). 2. H ekpomp  gnetai me th qr sh UDP sockets. Den upˆrqei dhlad  upost rixh gia ekpempìmenh ro  (to antstoiqo twn TCP sockets). Fusikˆ, h qr sh UDP upìkeitai se ìlou tou periorismoÔ axiopista tou prwtokìllou autoÔ. H epikoinwna me ekpomp  gnetai me th qr sh eidik¸n dieujÔnsewn ekpomp  addresses). Se ènan upologist , kˆje diepaf  tou pou uposthrzei ekpomp  diajètei kai mia antstoiqh dieÔjunsh. Genikˆ, oi dieujÔnsei ekpomp  apoteloÔntai apì dÔo mèrh: to pr¸to mèro , pou apoteletai apì ta pio shmantikˆ bit th dieÔjunsh th diepaf  , enai so me th dieÔjunsh upodiktÔou (subnet address). To deÔtero mèro èqei ìla ta bit tou 1. H entol  /sbin/ifconfig tou U NIX tup¸nei ti paramètrou th diepaf  . (broadcast

Parˆdeigma: Se èna tupikì upologist  tou topikoÔ diktÔou tou Panepisthmou, h entol  ifconfig epistrèfei ta parakˆtw: eth0 Link encap:Ethernet HWaddr 00:50:BF:4A:BC:4B inet addr:147.27.7.113 Bcast:147.27.7.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:334499 errors:0 dropped:0 overruns:0 frame:0


36

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

TX packets:239931 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:157648284 (150.3 MiB) TX bytes:158445820 (151.1 MiB) Interrupt:10 Base address:0x5000 lo

Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:4296 errors:0 dropped:0 overruns:0 frame:0 TX packets:4296 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1466712 (1.3 MiB) TX bytes:1466712 (1.3 MiB)

O upologist  èqei dÔo diepafè , ti eth0 (pou upodhl¸nei mia sÔndesh Ethernet se topikì dktuo), kai thn lo pou anafèretai sthn yeudodiepaf  brìqou. Blèpoume ìti h diepaf  eth0, me upodktuo 147.27.7.0/24, uposthrzei ekpomp  sth dieÔjunsh 147.27.7.255 ìpou ta 24 pr¸ta bits enai h dieÔjunsh upodiktÔou (ìpw orzetai apì thn tim  255.255.255.0 th paramètrou Mask) kai ta upìloipa bits enai monˆda. Ektì apì aut  th dieÔjunsh, mia ˆllh dieÔjunsh ekpomp  pou qrhsimopoietai se edikè peript¸sei enai h 255.255.255.255. Qrhsimopoietai ìtan èna pelˆth den gnwrzei ti paramètrou tou diktÔou, pq. ìtan èna nèo upologist  sundèetai se kˆpoio topikì dktuo kai prospaje na epikoinwn sei me kˆpoion uphrèth BOOTP   DHCP gia na tou apodoje dunamikˆ mia IP dieÔjunsh. Se aut  thn perptwsh, jewretai ìti to subnet tou upologist  enai to 0.0.0.0/0 kai h dieÔjunsh IP tou h INADDR ANY. H basik  idèa psw apì thn ekpomp  enai polÔ apl , kai paromoiˆzei me thn apl  epikoinwna UDP. H diergasa pou jèlei na apostelei plhrofora qrhsimopoie èna UDP socket gia na stelei datagrams sth dieÔjunsh ekpomp  kai se dedomèno port. Antstoiqa, ìla ta sockets pou epijumoÔn na lˆboun ti ekpempìmene plhrofore mporoÔn na diabˆsoun datagrams apì th dieÔjunsh ekpomp  kai to dedomèno port. Sto Prog. 2.5 fanetai o k¸dika gia ènan pelˆth pou qrhsimopoie ekpomp  gia na mil sei me ènan arijmì apì uphrète pou akoÔn sto dktuo. Parathr ste th qr sh th kl sh selectselect gia na klhje me timeout h sunˆrthsh recvfromselect.

2.4.2

Epikoinwna me pollapl  dianom 

äpw sthn perptwsh tou broadcast, ètsi kai sto multicast, h epikoinwna gnetai me trìpo parìmoio me thn apl  epikoinwna UDP, pou suqnˆ lègetai epikoinwna monodianom  (unicast). H basik  diaforˆ ègkeitai ston orismì tou sunìlou twn diepaf¸n pou summetèqoun sthn epikoinwna. Sthn epikoinwna broadcast, h dieÔjunsh ekpomp  perilambˆnei ìle ti diepafè pou an koun sto subnet sto opoo gnetai h ekpomp , kai mìnon autè . Den enai dunat  h exaresh kˆpoiwn diepaf¸n, ¸ste na mhn epibarÔnontai oi oikeoi upologistè . Epsh , den enai dunat  h summetoq  kìmbwn apì diafretikˆ subnets (pq. diaforetikˆ topikˆ dktua Ehternet).


37

2.4. OMADIKH EPIKOINWNIA

Prìgramma 2.5 Aplì parˆdeigma epikoinwna me ekpomp . Pelˆth 1 2 3 4 5 6 7 8 9 10 11 12

from socket import * from select import select s = socket(AF_INET, SOCK_DGRAM) s.setsockopt(SOL_SOCKET,SO_BROADCAST,1) s.setsockopt(SOL_SOCKET,SO_REUSEADDR, 1) s.bind( (’147.27.7.113’, 12543) ) s.sendto(’Hello to all the world!’, (’147.27.7.255’,12543)) while 1: rr,wr,er = select([s],[],[],1) if not rr: break msg, addr = s.recvfrom(4096) print "Reply ",repr(msg),"from",addr

Uphrèth 1 2 3 4 5 6 7 8

from socket import * s = socket(AF_INET, SOCK_DGRAM) s.setsockopt(SOL_SOCKET,SO_REUSEADDR, 1) s.bind( (’147.27.7.255’, 12543) ) while 1: msg, addr = s.recvfrom(4096) print repr(msg),"received from",addr s.sendto("Hello to you", addr)

Sthn epikoinwna multicast, oi periorismo tou broadcast arontai. Afenì , o orismì th omˆda diepaf¸n pou ja paralambˆnoun ta dianemìmena datagrams gnetai me pl rh akrbeia, afetèrou enai dunat  h dianom  datagrams se pollaplˆ subnets, akìmh kai se olìklhro to diadktuo. DieujÔnsei multicast Oi dieujÔnsei twn omˆdwn multicast (multicast groups) enai ìle class D dieujÔnsei IP, an koun dhlad  sthn oikogèneia dieujÔnsewn 224.0.0.0/4, pou perilambˆnei 228 dieujÔnsei . Se kˆje dieÔjunsh IP klˆsh D antistoiqe mia omˆda multicast, ìpou sumperilambˆnetai èna sÔnolo apì diepafè . Kˆje UDP datagram pou stèlnetai sth sugkekrimènh dieÔjunsh (se kˆpoio port), ja dianemhje se ìle ti diepafè pou summetèqoun sthn antstoiqh omˆda multicast kai ja mpore na lhfje apì kˆpoio UDP socket pou lambˆnei apì to port aut  th diepaf  . Parˆdeigma: Se mia omˆda multicast me dieÔjunsh 225.0.0.250 summetèqoun oi diepafè 147.27.1.200 kai 147.27.1.201 tou idou subnet. Kˆje pakèto UDP pou stèlnetai sto 225.0.0.250:8123 ja mpore na paralhfje apì ta 147.27.1.200:8123 kai 147.27.1.201:8123.


38

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prosoq , o apostolèa den enai aparathtoallˆ bèbaia epitrèpetaina summetèqei sto multicast group gia na dianemei datagrams sta mèlh tou group. Kˆpoie apì ti dieujÔnsei multicast enai desmeumène gia eidikè leitourge : • H dieÔjunsh 224.0.0.1 antistoiqe sto all-hosts group, sto opoo summetèqoun ìloi oi kìmboi enì upodiktÔou. • H dieÔjunsh 224.0.0.2 antistoiqe sto all-routers group, sto opoo summetèqoun ìloi oi dromologhtè multicast pou èqoun diepafè se èna upodktuo. • Oi dieujÔnsei th omˆda 224.0.0.0/24 onomˆzontai link-local (topik  sÔndesh ) kai enai desmeumène gia qr sh apì prwtìkolla diaqerish tou diktÔou. Oi dromologhtè multicast den prowjoÔn potè metaxÔ upodiktÔwn ta datagrams pou enai proorismèna sti dieujÔnsei autè .

Dromolìghsh multicast. ätan èna multicast group) apartzetai apì diepafè se diaforetikˆ LAN upodktua, tìte ja prèpei na gnetai pro¸jhsh twn datagrams pro to group apì dromologhtè pou uposthrzoun multicast (multicast routers). To prìblhma th dromolìghsh multicast enai akìmh anoiqtì ereunhtikˆ, qwr autì na shmanei ìti den upˆrqei upost rixh  dh, se pragmatikˆ proðìnta. Parìlo pou to prìblhma aforˆ kurw thn perioq  twn diktÔwn, enai arketˆ parìmoio me antstoiqa probl mata pou aforoÔn sust mata peer-to-peer kai empptei sta endiafèronta twn katanemhmènwn susthmˆtwn. Ulopohsh epikoinwna multicast H ulopohsh epikoinwna multicast gnetai mèsw pènte epiplèon socket options, dhlad  mèsw twn kl sewn setsockopt/getsockopt pou exetˆsame sthn §2.2.5. Oi pènte autè options fanontai ston Pin. 2.6. Option

ärisma

IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP IP_MULTICAST_IF

ip_mreq ip_mreq in_addr

IP_MULTICAST_TTL

u_char

IP_MULTICAST_LOOP

u_char

Perigraf  Prosq¸rhsh se group. Apoq¸rhsh apì group. Default diepaf  apostol  multicast. Time-to-live exerqìmenwn datagram. Epitrèpei/apotrèpei dia l yh .

Pnaka 2.6: Ta socket options pou ulopoioÔn multicast. H perigraf  twn orismˆtwn aut¸n èqei w ex  : IP ADD MEMBERSHIP/IP DROP MEMBERSHIP+. Me ta dÔo autˆ options rujmzetai h summetoq  mia diepaf  se multicast group. H qr sh th apaite w parˆmetro èna zeugˆri dieujÔnsewn IP, pou orzetai sth gl¸ssa C ìpw parakˆtw:


2.5. LEPTOMERIE KAI EPEKTASEI TH QRHSH

39

SOCKETS

s t r u c t ip mreq { struct in addr imr multiaddr ; /∗ m u l t i c a s t ∗/ struct in addr i m r i n t e r f a c e ; /∗ i n t e r f a c e ∗/ };

Oi dieujÔnsei autè antistoiqoÔn, h pr¸th sthn class D dieÔjunsh tou multicast group kai h deÔterh sth dieÔjunsh th diepaf  pou prosqwre   apoqwre apì to group. Enai epitreptì gia èna socket na prosteje se pollaplˆ groups, allˆ kai sto dio group mèsw pollapl¸n diepaf¸n (ìtan o upologist  enai multihomed). IP MULTICAST IF. Me ìrisma th dieÔjunsh IP mia diepaf  , kajorzetai ìti ìla ta datagrams pou stèlnontai mèsw tou socket se dieujÔnsei multicast ja anaqwroÔn apì thn prosdiorizìmenh diepaf . IP MULTICAST TTL. H parˆmetro TTL enai polÔ qrhsimh sth leitourga tou multicast, kaj¸ enai èna apì tou dÔo trìpou me tou opoou elègqou th metˆdosh twn multicast datagrams mèsa apì dromologhtè . Gia th metˆdosh twn datagrams qrhsimopoietai h tim  TTL pou perièqetai se ìla ta pakèta IP gia na epilege èna orzonta (scope). H tim  TTL=0 shmanei node-local scope, ìpou ta datagrams den ekpèmpontai potè apì mia diepaf . H tim  TTL=1 shmanei link-local scope, ìpou ta datagrams den prowjoÔntai apì tou dromologhtè multicast. Upˆrqoun akìmh ta ex  scope: site-local (TTL < 32), region-local (TTL < 64), continent-local (TTL < 128) kai global (TTL ≥ 128). To teleutao scope perilambˆnei ìlo to Diadktuo. Ta upìloipa tra den èqoun saf  orismì kai h qr sh tou epafetai stou diaqeiristè twn diktÔwn.

Ektì apì autì to mhqanismì, gia epikoinwna multicast entì twn orwn enì organismoÔ èqei desmeute h oikogèneia dieujÔnsewn 239.0.0.0/8 pou perièqei ti idiwtikè (sta ìria enì organismoÔ) dieujÔnsei multicast (se analoga me ti antstoiqe idiwtikè dieujÔnsei gia unicast epikoinwna, p.q. 192.168/16). Oi organismo den ja prèpei na prowjoÔn datagrams aut¸n twn groups èxw apì ta ìriˆ tou . O mhqanismì autì genikˆ onomˆzetai administrative scope (diaqeiristikì orzonta ). Ta parapˆnw sunoyzontai ston Pn. 2.7 IP MULTICAST LOOP. An h diepaf  apì thn opoa ekpèmpetai èna datagram pro èna multicast group, enai ki aut  mèlo tou group, tìte to datagram ja lhfje apì th diepaf . Aut  h sumperiforˆ enai parìmoia me thn perptwsh tou broadcast. Antjeta me to broadcast, to multicast parèqei th dunatìthta na apenergopoihje autì o mhqanismì .

Parˆdeigma mia apl  efarmog  pou qrhsimopoie multicast fanetai sto Prog. 2.6, pou enai parìmoio me to Prog. 2.5 pou qrhsimopoioÔse broadcast. 2.5

Leptomèrie kai epektˆsei th qr sh

sockets

Me ìsa èqoume pei mèqri t¸ra, enai efiktì o basikì programmatismì me th qr sh sockets. Ta shmea pou ja parajèsoume sth sunèqeia den enai anagkaa gia


40

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

scope node-local link-local site-local organization-local region-local continent-local global

TTL 0 1 2 . . . 31 32 . . . 63 64 . . . 127 128 . . . 255

administrative scope

224.0.0.0/24 239.255/16 239.192/14 224.0.1.0 w 238.255.255.255

Pnaka 2.7: Scope dieujテ馬sewn multicast.


2.5. LEPTOMERIE KAI EPEKTASEI TH QRHSH

SOCKETS

Prìgramma 2.6 Aplì parˆdeigma epikoinwna me pollapl  dianom . Pelˆth 1 2

import struct, select from socket import *

3 4

group, port = ’225.0.0.250’, 8123

5 6 7 8

s = socket(AF_INET, SOCK_DGRAM) ttl = struct.pack(’b’, 3) # Time-to-live s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)

9 10 11 12 13 14 15

s.sendto(’Hello to the group’, (group,port)) while 1: rr,wr,er = select.select([s],[],[],1) if not rr: break msg, addr = s.recvfrom(4096) print "Reply ",repr(msg),"from",addr

Uphrèth 1 2

import string, struct from socket import *

3 4

group, port = ’225.0.0.250’, 8123

5 6 7 8

s = socket(AF_INET, SOCK_DGRAM) s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) s.bind((’’, port))

9 10 11 12 13

b = map(int, string.split(group, ".")) group = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3] mreq = struct.pack(’ll’, htonl(group), htonl(INADDR_ANY)) s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)

14 15 16 17 18

while 1: msg, addr = s.recvfrom(4096) print repr(msg),"from",addr s.sendto("Hello to you", addr)

41


42

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

thn ulopohsh katanemhmènwn susthmˆtwn; antjeta, h qr sh tou mpore na duskoleÔei thn ulopohsh se kˆpoie peript¸sei . Anafèrontai ìmw gia dÔo lìgou . Pr¸ton, se kˆpoie peript¸sei mpore na fanoÔn qr sima, odhg¸nta se aploÔstere kai kalÔtere ulopoi sei . DeÔteron, kaj¸ qrhsimopoioÔntai suqnˆ sthn prˆxh, h gn¸sh tou apaitetai gia na mpore kane na diabˆsei upˆrqonta k¸dika. 2.5.1

Qr sh paramètrwn elègqou Eisìdou/Exìdou

Oi basikè kl sei E/E send kai recv, kaj¸ kai oi parallagè tou sendto, sendall kai recvfrom, dèqontai mia seirˆ apì proeraitikè paramètrou , pou bohjoÔn sthn aploÔsteush tou k¸dika. Oi shmantikìtere apì autè fanontai ston Pn. 2.8. Parˆmetro MSG DONTWAIT MSG PEEK MSG WAITALL

Perigraf  Orzei thn kl sh w mh-emplekìmenh. Den katanal¸nei ta anagnwsjènta dedomèna. Epistrèfei orismèno arijmì dedomènwn.

Pnaka 2.8: Parˆmetroi kl sewn E/E gia sockets. Analutikˆ, h perigraf  twn paramètrwn èqei w ex  : MSG DONTWAIT : H parˆmetro aut  orzei ìti h sugkekrimènh kl sh E/E ja ekteleste qwr emplok , ìpw  dh anafèrame sthn §2.3. H diaforˆ th apì th qr sh th mejìdou setblocking enai ìti oi epìmene kl sei pˆnw se autì to socket den ephreˆzontai. MSG PEEK : H parˆmetro aut  aforˆ mìno ti recv kai recvfrom. H kl sh ekteletai kanonikˆ. Wstìso, ta dedomèna pou epistrèfontai den afairoÔntai apì ton recv buffer tou socket, allˆ paramènoun eke gia na epistrafoÔn pˆli me thn epìmenh kl sh. H parˆmetro aut  sunduˆzetai kalˆ me thn MSG DONTWAIT. Gia parˆdeigma, an jèloume na elègxoume qwr emplok  ta arqikˆ perieqìmena tou recv buffer, mporoÔme na kalèsoume msg = sock.recv(8, MSG_DONTWAIT | MSG_PEEK)

MSG WAITALL : H parˆmetro aut  aforˆ mìno ti recv kai recvfrom. Qrhsimopoietai gia na dhl¸sei ìti h kl sh de ja prèpei na epistrèyei ligìtera dedomèna apì to orizìmeno mègisto. Se perptwsh pou den upˆrqoun arketˆ dedomèna ston buffer, h kl sh ja emplake perimènonta . Epistrof  ligìterwn dedomènwn apì ta zhtoÔmena shmanei ete ìti h sÔndesh termatsthke ete ìti sunèbh kˆpoio sfˆlma sto socket. 2.5.2

Socket Timeouts

Edame  dh th qr sh th kl sh select gia na ulopoi soume E/E me ti kl sei send/recv kai ti parallagè tou kˆnonta qr sh timeouts. Parìlo pou h sele-


43

2.6. POLUEPEXERGASIA

ct enai h pio diadedomènh mèjodo , upˆrqoun ˆlle dÔo mèjodoi pou mporoÔn na qrhsimopoihjoÔn. H pr¸th mèjodo enai h qr sh dÔo paramètrwn socket, parìmoiwn me autè pou orsthkan ston Pin. 2.5. Prìkeitai gia ti SO RCVTIMEO kai SO SNDTIMEO, oi opoe dèqontai w esodo to qrìno pou ja perˆsei gia timeout anˆgnwsh kai eggraf  antstoiqa. Gia parˆdeigma, o parakˆtw k¸dika orzei timeout 10 deuterolèptwn. # struct timeval { long seconds; long microseconds; } timeout = struct.pack(’ll’,10,0) sock.setsockopt(SOL_SOCKET, SO_RCVBUFFER, timeout)

H deÔterh mèjodo qrhsimopoie signals (bl. §2.7.1 kai sugkekrimèna to SIGALRM. Den ja thn parousiˆsoume ed¸, diìti plèon de qrhsimopoietai polÔ. Parat rhsh: Sthn Python, apì thn èkdosh 2.3 kai metˆ, ta socket objects uposthrzoun ti mejìdou settimeout kai gettimeout, pou mporoÔn na qrhsimopoihjoÔn ant twn parapˆnw mejìdwn. 2.5.3

Klesimo enì

socket

Gia to klesimo enì socket qrhsimopoi same th mèjodo close sta prohgoÔmena paradegmata. Wstìso, h mèjodo aut  èqei èna meionèkthma: klenei kai ti dÔo kateujÔnsei metˆdosh enì socket. Se kˆpoie peript¸sei , ja jèlame na mporoÔme na klesoume mia mìno kateÔjunsh, p.q. thn kateÔjunsh apostol  , allˆ ìqi thn ˆllh. Gia parˆdeigma, jewr ste mia sÔndesh ìpou o apostolèa sundèetai, apostèllei èna m numa, perimènei kai parnei apˆnthsh kai aposundèetai (ètsi, p.q., leitourge to prwtìkollo HTTP). Sthn perptwsh aut , metˆ thn apostol  tou mhnÔmato , ja prèpei na eidopoihje h ˆllh diergasa na m n perimènei gia epiplèon dedomèna. Autì mpore na gnei me èna merikì {klesimo} tou socket apì ton apostolèa. Aut  akrib¸ h dunatìthta prosfèretai apì th mèjodo shutdown(how). H parˆmetro how enai mia akèraia parˆmetro pou oi timè th èqoun to parakˆtw nìhma: Tim  0 1 2

Nìhma Klese w pro anˆgnwsh Klese w pro apostol  Klese w pro anˆgnwsh kai apostol  (isodÔnamo tou close)

Sto prohgoÔmeno parˆdeigma, metˆ thn apostol  tou mhnÔmato , o apostolèa ja mporoÔse na kalèsei shutdown(1), to opoo ja eidopoioÔse ton paral pth na mhn perimènei ˆlla dedomèna apì autì to socket. 2.6

Poluepexergasa

H poluepexergasa uposthrzei thn tautìqronh exuphrèthsh poll¸n ait sewn apì ton dio uphrèth. Jewrhtikˆ, h poluepexergasa den enai aparathth; arke h


44

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

qr sh poluplexa . Prˆgmati, pollè aplè diktuakè uphrese de qrhsimopoioÔn poluepexergasa, idw ìtan prìkeitai gia uphrese èntash eisìdou/exìdou (I/O bound), ìpw pq. oi uphrese telnet kai ftp. Wstìso, ìtan h uphresa enai èntash upologismoÔ (CPU bound), h ulopohsh qwr poluepexergasa gnetai apagoreutikˆ perplokh. Upˆrqoun dÔo basikè mèjodoi poluepexergasa : (a) me pollaplè diergase kai (b) me n mata. Istorikˆ prohg jhke h teqnik  twn pollapl¸n diergasi¸n, h opoa qrhsimopoietai kai s mera eurèw kai parousiˆzei kˆpoia pleonekt mata ènanti twn nhmˆtwn. H upost rixh nhmˆtwn apì ta leitourgikˆ sust mata  tan arqikˆ (sti arqè th dekaeta tou '90) astaj  , allˆ s mera enai mia ¸rimh teqnologa, me exairetik  upost rixh apì ta perissìtera leitourgikˆ sust mata, gi autì tenei na epikrat sei ènanti twn pollapl¸n diergasi¸n. Genikˆ, poluepexergasa onomˆzetai h ektèlesh upologism¸n apì pollaplè tautìqrone ergase (tasks). W ergasa ennooÔme thn akoloujiak  ektèlesh twn entol¸n kˆpoiou progrˆmmato . Se kˆje qronik  stigm , to prìgramma ektele mia sugkekrimènh entol , thn trèqousa entol . H Ôparxh pollapl¸n ergasi¸n uponnoe thn tautìqronh ektèlesh poll¸n treqous¸n entol¸n, mia anˆ ergasa. Ed¸ ja prèpei na dieukrinsoume ìti h Ôparxh pollapl¸n ergasi¸n den periorzetai mìno sthn perptwsh pou to ulikì uposthrzei poluepexergasa pq. èna upologist  me polloÔ epexergastè , allˆ kai sthn perptwsh th katanom  qrìnou me poluplexa (timesharing) enì epexergast . Aut  h genkeush ma epitrèpei na agno soume ti leptomèreie th qronodromolìghsh twn ergasi¸n. àna ˆllo shmeo sthn poluplexa qrìnou enai ìti h ektèlesh twn entol¸n mia gl¸ssa uyhloÔ epipèdou metafrˆzetai sqedìn pˆnta se perissìtere apì mia entolè mhqan  . Wstìso, h poluplexa tou epexergast  gnetai se eppedo entol¸n mhqan  . Autì shmanei oti akìmh kai me ènan epexergast , h ektèlesh twn entol¸n th gl¸ssa programmatismoÔ mpore na enai {tautìqronh}, ìpou ta eisagwgikˆ upodhl¸noun ìti mpore to sÔsthma na enai sth mèsh th ektèlesh perissotèrwn th mia entol¸n se kˆpoia dedomènh stigm . Sth genik  loipìn perptwsh poluepexergasa , èqoume pollaplè tautìqrone ergase . Kˆje ergasa (task) mpore na ulopoietai ete w diergasa (process), ete w n ma (thread) kˆpoia diergasa . H kˆje epilog  èqei ta pleonekt mata kai ta meionekt matˆ th . H ulopohsh me n mata epitrèpei thn eÔkolh kai gr gorh antallag  dedomènwn metaxÔ twn ergasi¸n, afoÔ ìle moirˆzontai ton dio q¸ro mn mh (address space). Antjeta, sthn ulopohsh me diergase h epikoinwna metaxÔ twn diafìrwn ergasi¸n prèpei na gnei mèsa apì mhqanismoÔ tou leitourgikoÔ sust mato . Sthn prˆxh, me ta perissìtera leitourgikˆ sust mata na uposthrzoun mhqanismoÔ koin  mn mh metaxÔ diergasi¸n, h taqÔthta den enai mikrìterh ap' ìti sthn ulopohsh me n mata, allˆ suqnˆ enai pio perplokh programmatistikˆ, diìti h koin  mn mh den uposthrzetai apì ti gl¸sse programmatismoÔ exsou me thn kanonik  mn mh th diergasa ; pq. sthn perptwsh pou h gl¸ssa programmatismoÔ diajètei garbage collection. Wstìso, h ulopohsh me diergase prosfèrei ˆlla pleonekt mata. Kat' arq n, enai adÔnato gia mia ergasa-diergasa na diabr¸sei idiwtik  mn mh mia ˆllh ergasa -diergasa (pq. exaita kˆpoiou bug). Epsh , oi ergase -diergase


2.6. POLUEPEXERGASIA

45

mporoÔn na diaforopoihjoÔn w pro ta pronìmia prìsbash pou tou parèqei to leitourgikì sÔsthma, kai na belti¸soun (kai aplopoi soun) thn asfˆleiˆ tou . Sthn polunhmatik  ulopohsh, ìla ta n mata èqoun ta dia pronìmia, pou klhronomoÔn apì th diergasa sthn opoa an koun. Ta pronìmia autˆ enai kat' anˆgkh ta elˆqista pronìmia pou mporoÔn na kalÔyoun ìle ti ergase . Praktikˆ, autì suqnˆ shmanei pronìmia superuser. Autì to shmeo istorikˆ apotèlese gnwst  adunama asfˆleia twn polunhmatik¸n ulopoi sewn. Tèlo , h ulopohsh me diergase epitrèpei th diaqerish tou katanemhmènou sust mato me ta tupopoihmèna ergalea pou parèqontai apì to leitourgikì sÔsthma gia th diaqerish diergasi¸n (scheduling, auditing, logging klp). H epilog  loipìn metaxÔ twn dÔo ulopoi sewn ja prèpei lˆbei upìyh th arketoÔ parˆgonte . Pèra apì tou parapˆnw, ˆlloi parˆgonte enai: • H sumbatìthta th kˆje teqnik  me biblioj ke kai ergalea pou qrhsimopoie h efarmog . • H forhtìthta (portability) tou k¸dika se diaforetikè platfìrme /leitourgikˆ sust mata. Genikˆ ta n mata pleonektoÔn s' autì to shmeo. • H upost rixh apì ta ergalea anˆptuxh (compilers, debuggers klp) pou ja qrhsimopoihjoÔn. • H empeira twn programmatist¸n. 2.6.1

Sugqronismì ergasi¸n

Se kˆje perptwsh, oi tautìqrona ekteloÔmene ergase enì uphrèth prèpei na sugqronzontai. Sthn perptwsh twn nhmˆtwn, o sugqronismì enai perissìtero suqnì , afoÔ ta n mata ja prèpei na sugqronzontai se kˆje prìsbash se koinè metablhtè . Parìmoie anˆgke sugqronismoÔ èqoun kai oi diergase pou qrhsimopoioÔn koin  mn mh. Allˆ kai qwr thn Ôparxh koin  mn mh , upˆrqei h anˆgkh sugqronismoÔ sthn koin  qr sh pìrwn, pq. ìtan oi ergase prospelaÔnoun tautìqrona to dio arqeo, zwgrafzoun sto dio parˆjuro th ojình   epikoinwnoÔn me to qr sth mèsw tou diou termatikoÔ. H pio suqn  mèjodo sugqronismoÔ enai h qr sh shmatoforèwn (semaphores), h opoa protˆjhke apì ton Dijkstra w lÔsh sto prìblhma tou krsimou tm mato (critical section). Argìtera, o arqikì orismì twn shmatoforèwn metabl jhke, ¸ste na dieukolÔnei thn ulopohs  tou se sÔgqrone arqitektonikè .9 Epsh , h dom  monitor protˆjhke apì ton Hoare to 1974 kai argìtera uiojet jhke apì pollè gl¸sse programmatismoÔ, me teleutaa th gl¸ssa Java (1996). Tèlo , suqn  mèjodo sugqronismoÔ enai h antallag  sÔgqronwn mhnumˆtwn metaxÔ diergasi¸n. Sth sunèqeia ja exetˆsoume pio leptomereiakˆ thn ulopohsh ergasi¸n me diergase kai n mata sto leitourgikì sÔsthma U NIX, se sunduasmì me tou mhqanismoÔ sugqronismoÔ th kˆje perptwsh . 9

H ergasa tou

Dijkstra dhmosieÔthke to 1968.


46

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

2.7

Pollaplè diergase kai sugqronismì

Ja xekin soume me thn ulopohsh ergasi¸n me diergase . Gia thn katanìhsh ìlwn twn zhthmawn ja anaferjoÔn pollè leptomèreie tou sust mato diergasi¸n. To U NIX qrhsimopoie ti ex  basikè kl sei gia to qeirismì nèwn diergasi¸n kai thn ektèlesh programmˆtwn: fork, wait/waitpid, execve kai exit. To sÔsthma diergasi¸n tou U NIX enai ektetamèno antikemeno kai kat' anˆgkh h parousas  ma ja af sei kˆpoia kenˆ shmea. Kˆje diergasa èqei ènan arijmì tautìthta diergasa , ATD (process id, pid).10 O ATD enai èna jetikì 16-bit arijmì . O ATD mia diergasa den allˆzei potè. Se kˆje stigm  duo diaforetikè diergase èqoun diaforetikoÔ ATD. Wstìso, to leitourgikì sÔsthma epanaqrhsimopoie tou ATD diergasi¸n pou termˆtisan gia metagenèstere diergase . Tupikˆ oi mikro ATD antiproswpeÔoun diergase tou pur na tou leitourgikoÔ sust mato ; to 0 an kei sto qronodromologht , kai to 1 sthn eidik  diergasa ekknhsh , gnwst  me to ìnoma init. Kai ˆlle mikrè timè an koun suqnˆ se diergase tou pur na. Kˆje diergasa èqei se kˆje stigm  mia ˆllh diergasa w gonèa (parent). O ATD tou gonèa mia diergasa anafèretai w ATGD (arijmì tautìthta gonik  diergasa ). O gonèa mia diergasa mpore na allˆxei sth diˆrkeia th zw  mia diergasa , an o arqikì gonèa termatsei prin apì to paid. Sthn perptwsh aut , o nèo gonèa th diergasa enai h diergasa me ATD 1, dhl. h init. O ATD mia diergasa epitrèfetai apì th sunˆrthsh getpid, o ATGD apì th sunˆrthsh getppid. Gia parˆdeigma, from os import getpid, getppid print "My pid is ",getpid() print "My parent’s pid is ",getppid()

H leitourga twn basik¸n kl sewn qeirismoÔ diergasi¸n perigrˆfetai parakˆtw ìpw autè orzontai sthn Python. fork()

H fork dhmiourge mia nèa diergasa. H nèa diergasa èqei w gonèa th diergasa sthn opoa kaletai h fork. H nèa diergasa dhmiourgetai w antgrafo tou gonèa tou th stigm  th kl sh : èqei antgrafo th mn mh (prìgramma, swrì , heap klp.), twn anoiqt¸n arqewn (arqea dskou, sockets klp.) kai ta dia pronìmia prìsbash . H mình diaforˆ enai ìti h nèa diergasa èqei diaforetikì ATD kai ATGD. H fork kaletai mia forˆ allˆ epistrèfei dÔo forè . Sth gonik  diergasa, epistrèfei ton ATD th nèa diergasa , en¸ sth nèa diergasa epistrèfei 0. Apì thn kl sh th fork kai metˆ oi dÔo diergase enai anexˆrthte . H fork enai o mìno trìpo dhmiourga nèwn diergasi¸n. To parˆdeigma tou Prog. 2.7 deqnei th leitourga th fork. ja tup¸sei pijan¸ ti parakˆtw grammè : 10

Oi arijmo tautìthta den enai pˆntote

arijmo,

klassikì parˆdeigma o arijmì astunomik  tautìthta .


47

2.7. POLLAPLE DIERGASIE KAI SUGQRONISMO

Prìgramma 2.7 Apl  qr sh th fork. 1

from os import fork,getpid,getppid

2 3 4 5 6 7 8 9

print "I am the pid = fork() if pid: print "I am else: print "I am print "Bye from

parent, pid = ", getpid()

still the parent, pid = ",getpid(),", child = ",pid the child, pid = ",getpid(),", parent = ", getppid() ",getpid()

I am the parent, pid = 1262 I am the child, pid = 1263 , parent = 1262 Bye from 1263 I am still the parent, pid = 1262 , child = Bye from 1262

1263

exit(status)

H exit, antjeta apì th fork, termatzei mia diergasa. Katˆ ton termatismì th , h diergasa mpore na orsei mia tim  exìdou. Profan¸ , h sunˆrthsh aut  den epistrèfei potè. Parˆdeigma: to parakˆtw prìgramma termatzei amèsw me tim  exìdou 4. from sys import exit exit(4)

H sÔmbash pou qrhsimopoietai gia ti timè exìdou enai h ex  : ìtan mia diergasa jèlei na dhl¸sei oti termˆtise kanonikˆ, epistrèfei tim  exìdou 0. Mh mhdenikè timè exìdou upodhl¸noun oti h diergasa termˆtise epeid  proèkuye kˆpoio sfˆlma, pq. èna compiler epistrèfei mh mhdenik  tim  ìtan to prìgramma to opoo metèfraze perièqei lˆjh. Sthn pragmatikìthta, upˆrqoun dÔo trìpoi na termatsei mia diergasa. O èna enai me qr sh th exit. O ˆllo enai na termatiste h diergasa apì to leitourgikì sÔsthma. Autì gnetai me apostol  sth diergasa kˆpoiou signal. Ta signals enai èna asÔgqrono mhqanismì epikoinwna metaxÔ diergasi¸n,   metaxÔ tou pur na kai diergasi¸n. H apostol  enì signal se mia diergasa gnetai me th sunˆrthsh kill. Gia parˆdeigma, h ektèlesh th from os import kill from signal import SIGTERM ... kill(pid, SIGTERM)

ja stelei sth diergasa pid to signal SIGTERM. Perissìtera gia ta signals ja anaferjoÔn argìtera.


48

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

wait() waitpid(pid, options)

Oi dÔo autè sunart sei qrhsimopoioÔntai apì gonikè diergase gia na prospelˆsoun thn tim  exìdou twn paidi¸n-diergasi¸n pou termˆtisan. Apì ti dÔo autè sunart sei , h waitpid enai h pio euèlikth. H kl sh th wait() isoduname me thn kl sh waitpid(-1, 0). Sthn aploÔsterh perptwsh, h waitpid emplèkei thn kaloÔsa diergasa mèqri na termatsei mia diergasa-paid pou prosdiorzetai apì thn parˆmetro pid. To nìhma th paramètrou allˆzei anˆloga me ti timè th : pid>0 Perimènei gia ton termatismì th diergasa me ATD so me pid. pid==-1 Perimènei gia ton termatismì opoioud pote paidioÔ. pid==0 Perimènei gia ton termatismì opoioud pote paidioÔ sthn dia omˆda diergasi¸n me thn kaloÔsa diergasa. pid<-1 Perimènei gia ton termatismì opoioud pote paidioÔ sthn omˆda diergasi¸n me Arijmì Tautìthta Omˆda Diergasi¸n -pid.

De ja suzht soume peretarw gia omˆde diergasi¸n (process groups). Blèpe thn tekmhrwsh tou U NIX. H parˆmetro options mpore ektì apì 0 na pˆrei thn tim  WNOHANG. Sthn perptwsh aut , h waitpid den emplèketai. An den upˆrqei kˆpoio paid pou na èqei  dh termatsei, epistrèfei sfˆlma. ätan h waitpid epistrèfei kanonikˆ, epistrèfei èna zugˆri tim¸n. To pr¸to mèlo tou zeÔgou enai o ATD tou paidioÔ pou termˆtise, kai to deÔtero enai o kwdikì termatismoÔ. O kwdikì termatismoÔ kwdikopoie thn plhrofora termatismoÔ, anˆloga me to an to paid termˆtise kanonikˆ (kal¸nta thn exit   lìgw l yh kˆpoiou signal. H apokwdikopohsh aut  th plhrofora apì to prìgramma gnetai me th bo jeia twn sunart sewn WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG. To parˆdeigma tou Prog. 2.8 deqnei th qr sh aut¸n twn sunart sewn. To parˆdeigma autì ja tup¸sei ti parakˆtw grammè : I forked child 1372 , wait returned 1372 Child exit status = 3 I forked child 1373 , wait returned 1373 Child died from signal 6

àna shmantikì shmeo sqetikˆ me ton termatismì diergasi¸n enai h perptwsh pou mia diergasa-paid termatzei, allˆ h gonik  diergasa den èqei kalèsei th waitpid gia na aniqneÔsei to gegonì . Gia na mh qaje h plhrofora tou trìpou termatismoÔ th diergasa (pou epistrèfetai apì th waitpid), to leitourgikì sÔsthma ja termatsei men th diergasa-paid, eleujer¸nonta th mn mh th , allˆ de ja th diagrˆyei apì ton katˆlogo twn diergasi¸n. Mia tètoia diergasa (termatismènh allˆ pou emfanzetai stin katˆlogo twn diergasi¸n) onomˆzetai zombie.


2.7. POLLAPLE DIERGASIE KAI SUGQRONISMO

49

Prìgramma 2.8 Qr sh th waitpid. 1 2 3

from sys import exit from os import * from signal import SIGABRT

4 5 6 7 8 9

def test(e): pid = fork() if not pid: if e >= 0: exit(e) else: kill(getpid(), SIGABRT)

10 11

chpid, ts = waitpid(-1,0)

12 13 14 15 16 17 18

print "I forked child ", pid, ", wait returned", chpid if WIFEXITED(ts): print "Child exit status = ",WEXITSTATUS(ts) elif WIFSIGNALED(ts): print "Child died from signal ", WTERMSIG(ts) print

19 20 21

test(3) test(-1)

Mia diergasa zombie ja diagrafe apì ton katˆlogo twn diergasi¸n mìno ìtan o gonèa th kalèsei th waitpid kai o kwdikì termatismoÔ th epistrafe. Parìlo pou oi diergase zombie den katalambˆnoun shmantikoÔ fusikoÔ pìrou tou sust mato (pq. mn mh), empodzoun thn anakÔklwsh apì to leitourgikì sÔsthma tou ATD tou . Kaj¸ upˆrqoun mìno perpou 65.000 ATD sto U NIX, o mh kajarismì twn diergasi¸n-zombies apotele shmantik  diarro  pìrwn.

execve(filename,argv,env)

H sunˆrthsh execve qrhsimopoietai gia thn ektèlesh programmˆtwn. Prèpei na toniste oti h sunˆrthsh aut  de dhmiourge mia nèa diergasa, allˆ antikajistˆ to trèqon prìgramma me èna nèo ektelèsimo, tou opoou h ektèlesh arqzei apì thn arq . H parˆmetro filename orzei thn apìluth diadrom  (pathname) tou arqeou pou ja ekteleste. H parˆmetro argv enai mia lsta me ta orsmata pou ja perastoÔn sto nèo ektelèsimo prìgramma. Tèlo , h parˆmetro env enai èna dictionary pou apeikonzei onìmata metablht¸n peribˆllonto se timè . Suqnˆ, oi parallagè th execve enai pio eÔqrhste : execl, execle, execlp, execv, execvp, execvpe. Gia ton orismì aut¸n twn parallag¸n apotanjete sthn tekmhrwsh th Python.


50

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

2.7.1

signals

Anafèrame prohgoumènw th qr sh signals w mejìdou termatismoÔ diergasi¸n. Sthn pragmatikìthta, h spoudaiìterh qr sh twn signals enai sthn asÔgqronh epexergasa gegonìtwn, gia ta opoa h diergase eidopoioÔntai apì to leitourgikì sÔsthma. To U NIX orzei dekˆde edh signals. Kˆpoia apì autˆ fanontai ston Pin. 2.9. signal SIGCHLD SIGPIPE SIGABRT SIGALRM SIGTERM SIGKILL SIGSTOP SIGCONT

Perigraf  allag  sthn katˆstash diergasa -paidioÔ eggraf  se kleist  ro  (pipe   socket) termatismì lìgw sfˆlmato kaletai me thn kl sh alarm(time) termatismì ˆmeso termatismì stamˆthma th diergasa sunèqish th diergasa

Prokaj.enèrgeia agnoetai termatismì termatismì termatismì termatismì termatismì stamˆthma sunèqish/agnoetai

Pnaka 2.9: Kˆpoia signals tou U NIX. Kˆpoie parathr sei : SIGCHLD To signal autì stèlnetai se mia diergasa ìtan kˆpoio paid th termatsei. SIGPIPE To signal autì stèlnetai se mia diergasa pou prospaje na grˆyei se kˆpoio pipe   socket to opoo enai kleistì   se katˆstash sfˆlmato . Shm: h Python qeirzetai apì mình th autì to s ma, kai epistrèfei m numa lˆjou . SIGABRT To signal autì isoduname me kl sh th sunˆrthsh abort(). SIGTERM To signal enai to default th entol  kill tou U NIX. SIGKILL To signal autì termatzei ˆmesa mia diergasa. H diergasa den mpore na mplokˆrei   na qeiriste to s ma (bl. parakˆtw). SIGSTOP To signal autì stamatˆ ˆmesa (qwr na termatzei) mia diergasa. H diergasa den mpore na mplokˆrei   na qeiriste to s ma. SIGCONT ätan stale se mia stamathmènh diergasa, h diergasa epanekkinetai. Se mia ekteloÔmenh diergasa, h prokajorismènh sumperiforˆ enai na agnohje. H diergasa mpore na egkatast sei qeirist  gi autì to s ma (pq. mia stamathmènh diergasa editor mpore na xanazwgrafsei sto termatikì ìtan suneqiste).

H megˆlh euelixa pou ma prosfèroun ta signals ofeletai sto ìti (gia ta perissìtera) h diergasa mpore na orsei mia sunˆrthsh-qeirist , h opoa kaletai autìmata ìtan lhfje to antstoiqo signal. Gia parˆdeigma, mia diergasa de qreiˆzetai na kale periodikˆ th sunˆrthsh waitpid gia na kajarsei termatismèna paidiˆ


2.7. POLLAPLE DIERGASIE KAI SUGQRONISMO

51

Prìgramma 2.9 Qr sh signals kai waitpid. 1 2 3

from sys import exit from os import * from signal import *

4 5 6

count_start = 0 count_term = 0

7 8 9 10 11 12 13 14 15 16 17 18 19

def CHLD_handler(sig, frm): global count_term while 1: try: pid, ts = waitpid(-1,WNOHANG) count_term += 1 if WIFEXITED(ts): print "Child",pid,"exited, status = ",WEXITSTATUS(ts) elif WIFSIGNALED(ts): print "Child",pid,"died from signal ",WTERMSIG(ts) except: # no child is dead return

20 21 22 23 24 25

def run(e): pid = fork() if not pid: if e >= 0: exit(e) else: kill(getpid(), SIGABRT)

26 27 28 29 30

signal(SIGCHLD, CHLD_handler) for i in xrange(-3,3): count_start += 1 run(i)

31 32 33

while count_term<count_start: # wait for all children to die pass

th , allˆ mpore na egkatast sei ènan qeirist  gia to SIGCHLD, to opoo ja kaletai asÔgqrona ìtan ìntw upˆrqei kˆpoio termatismèno paid. àna parˆdeigma fanetai sto Prog. 2.9. 2.7.2

Sugqronismì metaxÔ diergasi¸n

O sugqronismì metaxÔ diergasi¸n sto U NIX apaitetai ìtan oi diergase jèloun ete na perimènoun gia kˆpoio sumbˆn, ete ìtan jèloun na qrhsimopoi soun kˆpoio koinì pìro, pq. na prospelˆsoun kˆpoio arqeo. Gia parˆdeigma, to arqeo pou perièqei ta eiserqìmena emails enì qr sth mpore na prospelaÔnetai tautìqrona apì diaforetikè diergase ; an mìli èqei fjˆsei


52

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

kˆpoio m numa, h diergasa l yh (pq. smtpd) ja to prosjèsei sto arqeo mhnumˆtwn tou qr sth. Wstìso, mpore thn dia stigm  o qr sth na prospelaÔnei to arqeo autì gia na diabˆsei ta mhnÔmatˆ tou, ektel¸nta mia diergasa anagn¸sth. An den upˆrqei kˆpoia morf  sugqronismoÔ metaxÔ twn dÔo diergasi¸n, enai pijanì na metaferjoÔn sto qr sth lanjasmène plhrofore (pq. èna hmitelè m numa). Upˆrqoun diˆforoi mhqanismo sugqronismoÔ, pou anaptÔqjhkan se diaforetikè ekdìsei tou U NIX. O pio diadedomèno mhqanismì enai autì tou kleid¸mato arqewn tou dskou. Dustuq¸ , kai gia to kledwma arqewn, upˆrqoun diˆforoi mhqanismo. Ed¸ ja parousiˆsoume ton aplÔstero mhqanismì, pou uposthrzetai eurèw , kai proèrqetai apì to 4.2BSD. Upˆrqoun dÔo edh kleid¸mato : to apokleistikì (exclusive) kai to koinì (shared). Suqnˆ autˆ ta edh anafèrontai kai ¸ kledwma eggraf  kai anˆgnwsh antstoiqa. ätan mia diergasa kleid¸sei apokleistikˆ kˆpoio arqeo, tìte opoiad pote ˆllh diergasa ja prèpei na perimènei na xekleidwje prin kleid¸sei aut  to arqeo. Wstìso, mia diergasa pou ja kleid¸sei koinˆ to arqeo den empodzei kai ˆlle diergase na to kleid¸soun koinˆ, empodzei ìmw to apokleistikì kledwma. To skeptikì psw apì ta dÔo autˆ edh kleid¸mato enai ìti h tautìqronh anˆgnwsh tou arqeou apì pollè diergase den enai prìblhma, allˆ mìnon h perptwsh pou kˆpoia diergasa allˆzei to arqeo tautìqrona me kˆpoia ˆllh pou to prospelaÔnei (ete gia anˆgnwsh ete gia eggraf ). Sto Prog. 2.10 fanetai èna aplì parˆdeigma qr sh tou kleid¸mato arqewn w mejìdou sugqronismoÔ.

2.7.3

Diergase -damone

Sto U NIX, h kˆje diergasa mpore na sqetzetai me èna termatikì pou onomˆzetai termatikì elègqou (controlling terminal), me to opoo pragmatopoie esodo/èxodo mèsa apì ti gnwstè kl sei read kai writekai ti kl sei bibliojhk¸n pou baszontai se autè . Pèra apì aut  th qr sh, to leitourgikì sÔsthma mpore na stelei signals sth diergasa, ìtan o qr sth pat sei kˆpoia eidikˆ pl ktra (pq. Control-C gia na diakìyei thn ektèlesh). O mhqanismì tou termatikoÔ elègqou enai arketˆ perploko , kai de ja suzhthje perissìtero. Anaferìmaste se autìn epeid  suqnˆ sthn ulopohsh uphret¸n enai anepijÔmhth h Ôparxh autoÔ tou mhqanismoÔ. Pollo uphrète enai diergase pou ekkinoÔntai katˆ thn ekknhsh tou leitourgikoÔ sust mato kai termatzoun me ton termatismì tou kai de ja prèpei na sundèontai me kˆpoio termatikì. Sto U NIX oi diergase pou de sundèontai me kˆpoio termatikì elègqou onomˆzontai diergase -damone (daemon processes). H dhmiourga mia diergasa damona gnetai me prosektik  qr sh th fork, kai ˆllwn kl sewn tou U NIX, ti opoe de ja exhg soume peraitèrw. Parajètoume aplˆ sto Prog. 2.11 mia sunˆrthsh th Python, h opoa dhmiourge èna damona. H sunˆrthsh aut  dèqetai èna proairetikì ìrisma, to opoo prèpei na enai arqeo. An to ìrisma autì doje, ja qrhsimopoietai apì to prìgramma w stdout kai stderr. Se autì to arqeo ja tup¸nei h entol  print, kai ja anafèrontai tuqìn sfˆlmata.


2.8. NHMATA KAI SUGQRONISMO

53

Prìgramma 2.10 Sugqronismì metaxÔ dÔo diergasi¸n me kledwma arqeou. 1

import sys, os, fcntl, time

2 3

filename = "lockfile"

4 5 6

f = open(filename,"w") f.write("")

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

def do_crit(times,delay): pid = os.fork() if pid: print "Started child",pid return pid fd = os.open(filename,os.O_RDWR) for i in xrange(times): fcntl.flock(fd,fcntl.LOCK_EX) print "Process",os.getpid(),"locking" time.sleep(delay) # CRITICAL SECTION print "Process",os.getpid(),"unlocking" fcntl.flock(fd,fcntl.LOCK_UN) time.sleep(delay) # NON-CRITICAL SECTION os.close(fd) sys.exit(0)

23 24 25 26 27 28 29

fcntl.flock(f.fileno(), fcntl.LOCK_EX) do_crit(5,1) do_crit(5,1.5) fcntl.flock(f.fileno(), fcntl.LOCK_UN) f.close()

30 31

for i in xrange(2): os.wait()

2.8

N mata kai sugqronismì

Se kanonikè sunj ke , mia diergasa (process) tautzetai me mia ergasa (task). Suqnˆ anaferìmaste sthn ektèlesh tou progrˆmmato me to ìnoma n ma elègqou (thread of control), se analoga me to n ma (  ton mto) th Ariˆdnh , pou qrhsimopohse o Jhsèa gia na xanabre to drìmo tou èxw apì to LabÔrinjo. To n ma elègqou enai me ˆlla lìgia to istorikì th ektèlesh tou progrˆmmato , kai enai demèno sth dom  tou progrˆmmato (akoloujiakè entolè , brìqoi klp). H basik  idèa psw apì thn polunhmatik  epexergasa enai h tautìqronh Ôparxh pollapl¸n nhmˆtwn elègqou mèsa sthn dia diergasa, pou xetulgontai tautìqrona, se diaforetikˆ shmea tou progrˆmmato . AfoÔ ìla ta n mata ekteloÔntai mèsa sthn dia diergasa, èqoun ìla prìsbash sthn dia mn mh kai stou diou pìrou tou leitourgikoÔ sust mato (anoiqtè roè arqewn, sockets k.o.k.).


54

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.11 Daimonopohsh tou progrˆmmato . 1 2

def daemon_init(logfile = None): import sys, os, signal

3 4 5 6 7 8

nullfd = os.open("/dev/null",os.O_RDWR) if logfile: logfd = logfile.fileno() else: logfd = nullfd

9 10 11

# fork, parent exits if os.fork()!=0: sys.exit(0)

12 13 14

# become session leader os.setsid()

15 16 17 18

# ignore SIGHUP and fork again, parent dies signal.signal(signal.SIGHUP, signal.SIG_IGN) if os.fork()!=0: sys.exit(0)

19 20 21 22

# setup a clean slate os.umask(0) os.chdir(’/’)

23 24 25 26 27

# reset standard I/O os.dup2(nullfd,0) os.dup2(logfd,1) os.dup2(logfd,2)

28 29 30 31 32 33 34

# testing if __name__==’__main__’: import sys, os daemon_init(open("logfile","a")) print "From daemon",os.getpid() raise Exception,"Foo bar"

H basik  arq  ulopohsh twn nhmˆtwn enai h qr sh poll¸n stoib¸n ektèlesh (runtime stacks) mèsa sthn dia diergasa. Sthn mononhmatik  epexergasa, h katˆstash th ektèlesh tou progrˆmmato mpore na perigrafe apì ta perieqìmena th (monadik  ) stoba ektèlesh kai ta perieqìmena twn kataqwrht¸n (registers) tou epexergast  thn kˆje qronik  stigm . Autˆ ta dÔo maz (h stoba kai oi kataqwrhtè ) onomˆzontai plasio ergasa (task context). Sthn polunhmatik  perptwsh loipìn èqoume pollˆ plasia ergasi¸n. An ìla ta n mata ekteloÔntai ston dio epexergast , autì prèpei na katanemei to qrìno tou metaxÔ twn diafìrwn plaiswn (context switching). An qrhsimopoioÔntai pollaplo epexergastè (pq. se ènan upologist  pou uposthrzei symmetric multiprocessing), ja prèpei na


2.8. NHMATA KAI SUGQRONISMO

55

qronodromologoÔntai ta upˆrqonta plasia stou diajèsimou epexergastè . Axzei na shmei¸soume th diaforˆ twn plaiswn ergasi¸n pou perigrˆyame, me ta gnwstˆ ma apì ta Leitourgikˆ Sust mata plasia diergasi¸n (process contexts). àna plasio diergasa , perilambˆnei olìklhrh th mn mh th diergasa (ìqi mìno th stoba ektèlesh ), tou kataqwrhtè , kaj¸ epsh kai ìlou tou pìrou pou qrhsimopoie h diergasa. H allag  plaisou metaxÔ diergasi¸n enai loipìn pio qronobìra diadikasa ap' ìti h allag  plaisou metaxÔ nhmˆtwn. Sta paliìtera leitourgikˆ sust mata, o qrìno tou epexergast  katanèmontan anˆ diergasa. Oi pr¸te polunhmatikè ulopoi sei den  tan parˆ biblioj ke pou ulopoioÔsan pollaplˆ plasia nhmˆtwn, kai ìpou h allag  plaisou ginìtan me ènan apì tou parakˆtw trìpou : • Non-preemptive: Mèsw entol¸n sto prìgramma. O programmatist  eis gage kl sei mia sugkekrimènh sunˆrthsh me onìmata ìpw sched   yield se sugkekrimèna shmea tou progrˆmmato (pq. w teleutaa entol  mèsa se kˆpoio brìqo). Aut  h mèjodo den eqe megˆlh ap qhsh, gia profane lìgou . • Preemptive: Mèsw kˆpoiou asÔgqronou mhqanismoÔ (pq. signals), h diergasa kˆje lge entolè ˆllaze autìmata plasio.

To meionèkthma aut  th prosèggish fˆnhke ìtan emfansthkan upologistè poll¸n epexergast¸n. Sti mhqanè autè  tan epijumht  h tautìqronh dromolìghsh twn nhmˆtwn th dia diergasa se diaforetikoÔ epexergastè . Allˆ kˆti tètoio apaitoÔse allagè sto leitourgikì sÔsthma. Oi diˆforoi kataskeuastè dhmioÔrghsan dikˆ tou , asÔmbata (se eppedo k¸dika) sust mata, kai aut  h polumorfa kajustèrhse thn eurÔterh diˆdosh twn nhmˆtwn. S mera, h teqnologa twn nhmˆtwn èqei pia wrimˆsei. Oi perissìteroi kataskeuastè U NIX èqoun uiojet sei to prìtupo POSIX Threads (pou anafèretai suqnˆ w PThreads), en¸ ta Windows NT kai oi apìgono tou uposthrzoun èna polÔ parìmoio (kai exairetik  poiìthta ) sÔsthma. Upˆrqoun de ¸rime biblioj ke oi opoe epitrèpoun th suggraf  polunhmatikoÔ k¸dika, portable metaxÔ ìlwn twn platform¸n. 2.8.1

Basik  qr sh twn nhmˆtwn

Upˆrqoun diˆfore DPE gia n mata. Eme ja epikentrwjoÔme sth qr sh twn antikeimenostraf¸n bibliojhk¸n th Python. H DPE pou ja perigrˆyoume enai parìmoia me biblioj ke se ˆlle gl¸sse programmatismoÔ (C++, Java, . . .) kai sumbat  se eppedo antikeimènwn me thn prìtuph biblioj kh tou POSIX (h opoa fusikˆ enai biblioj kh th C). Kˆje n ma antistoiqzetai me kˆpoio antikemeno th klˆsh Thread. H dhmiourga enì n mato dèqetai w parˆmetro mia opoiad pote sunˆrthsh kai mia akolouja paramètrwn. H ektèlesh tou n mato xekinˆ me thn ektèlesh th sunˆrthsh aut  me ti dedomène paramètrou , kai termatzei ìtan h sunˆrthsh aut  epistrèfeiete kanonikˆ, ete lìgw kˆpoiou exception pou den qeirsthke kane .


56

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Antstoiqa me thn kl sh waitpid gia diergase , h kl sh th mejìdou t.join() enì n mato t emplèketai mèqri na termatiste to n ma. Wstìso, upˆrqei kai h ènnoia twn nhmˆtwn-daimìnwn, h opoa enai h ex  : h diergasa termatzetai ìtan èqoun termatiste ìla ta mh-daimonikˆ n mata. Me ton termatismì th diergasa , ta daimonikˆ n mata termatzontai. Sto Prog. 2.12 fanetai mia apl  qr sh n mato . Prìgramma 2.12 àna tetrimmèno parˆdeigma dhmiourga n mato . 1

from threading import *

2 3 4

def myfunc(): print "Myfunc called"

5 6 7 8

print "Main thread" thr = Thread(target=myfunc) thr.start()

9 10 11

thr.join() print "End main thread"

Oi mhqanismo sugqronismoÔ nhmˆtwn pou parèqontai apì th biblioj kh th Python enai: • locks, gnwstˆ kai ¸ primitive locks • reentrant locks (rlocks) • shmatofore (semaphores) • condition variables • event objects locks

àna lock brsketai se mia apì ti katastˆsei {desmeumèno} kai {eleÔjero}. ätan klhje h mèjodo acquire se èna eleÔjero lock, autì desmeÔetai apì to kalìn n ma. H mèjodo release eleujer¸nei èna lock pou èqei desmeute apì to kalìn n ma. Prosoq : àna n ma mpore na eleujer¸sei mìno locks desmeumèna apì to dio. Dete tou shmatofore an qreiˆzeste kˆti diaforetikì. àna lock mpore na enai desmeumèno se èna mìno n ma th forˆ. An h mèjodo acquire klhje gia èna desmeumèno lock, tìte ja emplake ¸spou na gnei dunat  h dèsmeush tou lock sto kalìn n ma.


2.8. NHMATA KAI SUGQRONISMO

57

H diaforˆ twn primitive kai reentrant locks enai ìti se èna primitive lock kˆje kl sh th acquire prèpei na akoloujetai apì mia kl sh th release. Se èna reentrant lock to dio n ma (kai mìnon autì) mpore na kalèsei thn acquire perissìtere forè . Gia na eleujerwje èna reentrant lock, prèpei h release na klhje ìse forè kl jhke h acquire (allˆ pˆnta apì to dio n ma). Shmatofore Oi shmatofore enai èna apì tou pr¸tou mhqanismoÔ sugqronismoÔ. àna shmatoforèa diajètei ènan (eswterikì) metrht . O metrht  arqikopoietai se mia mh arnhtik  tim . O shmatoforèa diajètei (ìmoia me ta locks) dÔo mejìdou , ti acquire kai release. H mèjodo release auxˆnei to metrht  katˆ èna. H mèjodo acquire mei¸nei to metrht , ìtan autì enai megalÔtero tou 0. ätan o metrht  enai 0, h acquire emplèketai, ¸spou na mpore na ekteleste. O Dijkstra qrhsimopohse ta onìmata P (s) kai V (s) gia ti acquire kai release antstoiqa, apì ta arqikˆ twn lèxewn passeren (pèrna) kai vrijgeven (eleujèrwse) stˆ Ollandikˆ, pou  tan h mhtrik  tou gl¸ssa. H parˆmetro s sti parapˆnw kl sei enai h akèraia metablht  metrht . Suqnˆ ja dete sth bibliografa ti parakˆtw {ulopoi sei } gia ti dÔo autè leitourge : Prìgramma 2.13 Lanjasmèno allˆ diadedomèno yeudok¸dika orismoÔ twn P kai V . P(s):: while s <= 0: pass s = s-1 V(s):: s = s+1

ìpou oi kl sei twn P (s) kai V (s) ekteloÔntai atomikˆ (atomically). To ti akrib¸ shmanei autì sun jw af netai sth diasjhsh tou anagn¸sth. Se autì to biblo ja melet soume se bˆjo autì to er¸thma. Ed¸, aplˆ ja anafèroume ìti o parapˆnw yeudok¸dika enai paraplanhtikì , kai de ja prèpei na ma mperdeÔei. àna ˆmeso sumpèrasma apì ta parapˆnw, enai ìti oi shmatofore enai isqurìtero mhqanismì apì ta locks, diìti afenì den èqoun tou periorismoÔ twn locks sto poiì mpore na kalèsei ti acquire kai release, kai afetèrou enai pio genikì : èna lock mpore na exomoiwje apì èna shmatoforèa arqikopoihmèno me 1 (suqnˆ auto oi shmatofore onomˆzontai duadikobinary semaphores). €ra prokÔptei to aplì er¸thma: giat na qreiazìmaste ta locks, me tou periorismoÔ tou ? H apˆnthsh enai oti h ulopohsh twn shmatoforèwn se sÔgqrone arqitektonikè epexergast¸n kai mn mh enai polÔ akribìterh se arijmì entol¸n apì ta aplˆ locks. Oi kl sei twn P kai V se eleÔjera locksh suqnìterh perptwshmporoÔn na ulopoihjoÔn me elˆqistou kÔklou mhqan  , en¸ oi shmatofore apaitoÔn polloÔ kÔklou mhqan  anˆ kl sh.


58

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Condition variables

àna condition variable susqetzetai me kˆpoio lock, aplì   reentrant, kai diajètei dÔo mejìdou : ti wait kai notify. Mìno èna n ma pou èqei desmeÔsei to lock mpore na ti kalèsei. ätan klhje h wait, ekteloÔntai atomikˆ dÔo b mata: (a) to lock eleujer¸netai kai (b) h ektèlesh tou n mato emplèketai. ätan kˆpoio n ma tn kalèsei th notify, tìte kˆpoio ˆllo n ma tw pou enai emplegmèno apì kl sh th wait apemplèketai apì th wait kai pospaje na desmeÔsei to lock. Prosoq ; h kl sh th notify ègine me to lock desmeumèno apì to n ma tn , ˆra to n ma tw den xekinˆ amèsw , allˆ afoÔ to tn eleujer¸sei to lock. Upˆrqei epsh kai h mèjodo notifyAll h opoa apemplèkei ìla ta n mata pou enai emplegmèna sth wait. Fusikˆ, ta n mata autˆ ja emplakoÔn ìla sto lock tou condition variable. Ta condition variables enai isodÔnama me tou shmatofore , ne thn ènnoia ìti èna shmatoforèa mpore na ulopoihje apì condition variables, kai antstrofa. DÔo tètoie aploðkè ulopoi sei qwr elègqou sfalmˆtwnfanontai sto Prog 2.14. 2.8.2

Teqnikè sugqronismoÔ nhmˆtwn

Oi mhqanismo sugqronismoÔ nhmˆtwn pou perigrˆyame pio pˆnw enai arketˆ aplo gia na mporoÔn na ulopoihjoÔn me mikrì kìsto se sÔgqronou epexergastè . Me bˆsh autoÔ , mporoÔn na ulopoihjoÔn periplokìteroi mhqanismo, h qr sh twn opown mpore na aplousteÔsei ton k¸dika th efarmog  . Ja exetˆsoume parakˆtw kˆpoiou apì tou pio dhmofile . Monitors

H dom  twn condition variables protˆjhke apì ton Hoare san upomhqanismì mia genikìterh dom  me to ìnoma monitor. àna monitor omoiˆzei polÔ me èna antikemeno, afoÔ perièqei topikˆ peda (attributes) kai mejìdou . àqei ìmw tou ex  periorismoÔ . • Ta peda enai idiwtikˆ (private). • To monitor perièqei epsh èna reentrant lock, kai mhdèn   perissìtera condition variables, pou ìla susqetzontai me to dio lock, autì tou monitor. • Tèlo , h kl sh kˆje mejìdou tou monitor desmeÔei to lock me thn esodo kai to apodesmeÔei me thn èxodo th kl sh .

àqoume  dh sunant sei èna parˆdeigma monitor, sthn ulopohsh th klˆsh

SemaphoreByCondition sto Prog. 2.14. Mia ˆllh qr sh monitor ja gnei sto

Prog 2.15 pou ulopoie th dom  bounded buffer pou ja exetˆsoume parakˆtw. H gl¸ssa Java qrhsimopoie ta monitors polÔ ektetamèna: kˆje antikemeno th Java enai dunˆmei èna monitor. Bèbaia, sÔmfwna me ton austhrì orismì twn monitors, autì den enai swstì; mìno ta antikemena ekena pou ìla ta peda tou


2.8. NHMATA KAI SUGQRONISMO

59

enai private kai ìle oi (non-private) mèjodoi enai synchronized plhroÔn ton akrib  orismì.11 Bounded buffers

Edame sth suz ths  ma gia ta sockets, ìti to leitourgikì sÔsthma desmeÔei dÔo buffers gia kˆje socket, ènan gia eiserqìmena kai ènan gia exerqìmena dedomèna. Ta buffers autˆ epitrèpoun thn asÔgqronh epikoinwna mèsw sockets. H genkeush autoÔ tou mhqanismoÔ enai gnwst  w sÔsthma paragwg¸n-katanalwt¸n (producer-consumer system). àstw oti èqoume mia opoiad pote dom  dedomènwn, sthn opoa mporoÔme na eisˆgoume kai na exˆgoume stoiqea èna-èna. Epsh , h dom  ma èqei kˆpoio mègisto mègejo (se arijmì stoiqewn). Ed¸ den kˆnoume kamiˆ upìjesh gia th seirˆ exagwg  twn stoiqewn. Aut  mpore na enai dia me th seirˆ eisagwg  , antstofh me th seirˆ eisagwg  , na exartˆtai apì ta stoiqea tou buffer (pq. kˆje forˆ exˆgetai to mikrìtero) k.o.k. To prìblhma paragwg¸n-katanalwt¸n enai to akìloujo: jèloume na sugqronsoume diˆfora n mata, kˆpoia apì ta opoa jèloun na eisˆgoun stoiqea sto buffer kai kˆpoia na exˆgoun, me ton periorismì ìti de ja prèpei na xeperaste to mègisto mègejo tou buffer. äsa n mata epiqeiroÔn na eisˆgoun se gemˆto buffer ja emplèkontai, ¸spou na dhmiourghje q¸ro . Epsh , emplèkontai ìsa n mata jèloun na exˆgoun stoiqea apì èna ˆdeio buffer, mèqri na eisaqjoÔn dedomèna. H dom  aut  sunantiètai polÔ suqnˆ se pragmatikˆ sust mata. Sto Prog. 2.15 fanetai mia ulopohsh bounded buffer w monitor. H dom  dedomènwn pou qrhsimopoietai gia buffer enai mia apl  ourˆ FIFO (First In First Out). Parathr ste ìti se autì to monitor èqoume dÔo condition variables pou moirˆzontai to dio lock. Gia na dokimˆsete thn ourˆ tou Prog. 2.15 mporete na qrhsimopoi sete ton k¸dika tou Prog. 2.16. Anagn¸ste kai Grafe Perigrˆfonta to sugqronismì metaxÔ diergasi¸n, anaferj kame stou dÔo trìpou kleid¸mato enì arqeou: to apokleistikì kai to koinì. Kat' analoga mporoÔme na sugqronsoume n mata mèsw enì mhqanismoÔ reader/writer lock. Gia parˆdeigma, se mia bˆsh dedomènwn, kˆje er¸thsh qr sth ekteletai apì èna diaforetikì n ma. An dÔo erwt sei aplˆ diabˆzoun ènan pnaka sthn kÔria mn mh, mporoÔn na ektelestoÔn tautìqrona, ja prèpei ìmw na apokleistoÔn tautìqrone prospelˆsei pou epiqeiroÔn na grˆyoun sta keliˆ autoÔ tou pnaka. Gia na ulopoi soume tètoiou tÔpou sugqronismì suqnˆ katafeÔgoume se locks anagnwst¸n/grafèwn (reader/writer locks). àna tètoio lock ja èqei, ant th mejìdou acquire, dÔo mejìdou , ti acquire_sh (apì th lèxh shared) kai acquire_excl (apì th lèxh exclusive). Epeid  o kˆje grafèa èqei apokleistik  qr sh tou lock, en¸ oi anagn¸ste mporoÔn na ton moirastoÔn, sun jw efarmìzoume tou trei parakˆtw periori11

Oi anagn¸ste pou den gnwrzoun

Java mporoÔn na agno soun olìklhrh thn parˆgrafo aut .


60

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

PrÏgramma 2.14 Allhlolopohsh shmatoforèa kai condition variable. 1

from threading import *

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

class SemaphoreByCondition: def __init__(self, n=1): assert n>=0 self.count = n self.cond = Condition() def acquire(self): try: self.cond.acquire() while self.count <= 0: self.cond.wait() self.count -= 1 finally: self.cond.release() def release(self): try: self.cond.acquire() self.count += 1 self.cond.notify() finally: self.cond.release()

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

class ConditionBySemaphore: def __init__(self, lock=None): if lock is None: self.lock = Lock() else: self.lock = lock self.waiters = [] def acquire(self): self.lock.acquire() def release(self): self.lock.release() def wait(self): sem = Semaphore(0) self.waiters.append(sem) self.lock.release() sem.acquire() self.lock.acquire() def notify(self): if self.waiters: self.waiters.pop().release() def notifyAll(): while self.waiters: self.waiters.pop().release()


2.8. NHMATA KAI SUGQRONISMO

PrĂŹgramma 2.15 Mia ulopohsh bounded buffer w monitor. 1

from threading import *

2 3 4 5 6 7 8

class BoundedFIFO: def __init__(self, n): assert n>0 self.queue = [None]*n self.empty = 1 self.getpos = self.putpos = 0

9 10 11 12 13

# this is a monitor with 2 condition variables self.lock = RLock() self.putcond = Condition(self.lock) self.getcond = Condition(self.lock)

14 15 16 17 18 19 20 21 22 23 24 25

def put(self, e): try: self.lock.acquire() while not self.empty and self.getpos==self.putpos: self.putcond.wait() self.queue[self.putpos] = e self.putpos = (self.putpos+1) % len(self.queue) self.empty = 0 self.getcond.notify() finally: self.lock.release()

26 27 28 29 30 31

def get(self): try: self.lock.acquire() while self.empty: self.getcond.wait()

32 33 34 35

e = self.queue[self.getpos] self.getpos = (self.getpos+1) % len(self.queue) if self.getpos==self.putpos: self.empty=1

36 37 38 39 40

self.putcond.notify() return e finally: self.lock.release()

61


62

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.16 àna aplì prìgramma producer/consumer. 1 2 3

def producer(q,no_elem): for i in xrange(no_elem): q.put(i) q.put(None)

4 5 6 7 8 9 10 11

def consumer(q): count = 0 while 1: e = q.get() if e is None: break count += 1 print "Consumed",count,"elements"

12 13 14 15 16 17 18 19 20

def run(q, nelem): print "Producer-consumer run on %d elements:"%nelem prod = Thread(name="Producer",target = producer,args=[q,nelem]) cons = Thread(name="Consumer",target = consumer,args=[q]) prod.start() cons.start() cons.join() prod.join()

21 22

run(BoundedFIFO(100), 10000)


2.8. NHMATA KAI SUGQRONISMO

63

smoÔ , se mia eurestik  prospˆjeia na moirˆsoume to qrìno tou lock exsou metaxÔ anˆgnwsh kai graf  : 1. ätan èna grafèa enai se anamon , ìloi oi metèpeita anagn¸ste mpanoun se anamon . 2. ätan ìloi oi anagn¸ste telei¸soun, kˆpoio grafèa se anamon  èqei proteraiìthta ènanti twn anagnwst¸n se anamon . 3. ätan èna grafèa telei¸sei, oi anagn¸ste se anamon  èqoun proteraiìthta ènanti grafèwn se anamon . Sto Prog. 2.17 deqnoume mia apl  ulopohsh aut¸n twn locks, h opoa den perilambˆnei èlegqo sfalmˆtwn. Sugqronismì me ranteboÔ O sugqronismì me ranteboÔ prwtoemfansthke sth gl¸ssa Ada. H basik  idèa psw apì to mhqanismì autì enai h sÔgqronh epikoinwna metaxÔ dÔo nhmˆtwn se rìlou pelˆth kai uphrèth antstoiqa. Me ˆlla lìgia, to n ma-pelˆth kale mia sunˆrthsh kai lambˆnei thn epistrefìmenh tim , allˆ h ektèlesh th sunˆrthsh gnetai apì to n ma-uphrèth kai katˆ th diˆrkeia th ektèlesh to n ma pelˆth enai se emplok . Upˆrqoun orismène peript¸sei ìpou mia tètoia ulopohsh protimˆtai   enai anagkaa. Programmatistikˆ, o mhqanismì pou eqe protaje sthn Ada basizìtan sth dom  entry. àna entry enai parìmoio me mia sunˆrthsh, me thn ènnoia ìti dèqetai paramètrou kai orzetai apì èna kommˆti k¸dika. Wstìso, h kl sh enì entry apì èna n ma tc den ektele ˆmesa ton k¸dika pˆnw sti dosmène paramètrou , allˆ emplèkei to tc ¸spou kˆpoio ˆllo n ma ta na deqje (accept) th sugkekrimènh kl sh tou entry, na thn ektelèsei kai na epistrèyei to apotèlesma sto n ma tc . O k¸dika tou Prog. 2.18 epexhge kˆpw kalÔtera. Parathr ste ìti sth gramm  6 to ìnoma greet xanadhl¸netai w entry sth sunˆrthsh greet pou orsthke sti prohgoÔmene seirè . Sth gramm  10 h entry greet kaletai me parˆmetro, kai sthn epìmenh gramm  tup¸netai h tim  pou epistrèfei. Tèlo , sth gramm  15 brsketai h kl sh th accept gia to entry autì. To prìgramma autì ja tup¸sei ti parakˆtw grammè : Thread Thread Thread Thread Thread

Client Server Server Client Server

: : : : :

calling entry foo Accepting entry foo Hello Vasilis Entry returned ’FOO’ Done

H ro  th ektèlesh twn dÔo nhmˆtwn paristˆnetai sto Sq. 2.4. O mhqanismì selector epitrèpei thn kl sh th accept gia pollaplˆ entries. O selector èqei mia mèjodo me to ìnoma accept, me thn opoa dhl¸netai èna arijmì apì entries. Tèlo kaletai h mèjodo select tou selector, h opoa emplèketai mèqri kˆpoio apì ta dhlwmèna entries na klhje apì kˆpoio n ma. Tìte, to entry gnetai


64

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Server

Client

ret=greet(’Vasilis’) greet.accept() greet(’Vasilis’)

return "GREET"

print "Entry returned",ret

Sq ma 2.4: Sqhmatik  parˆstash th ro  ektèlesh dÔo nhmˆtwn katˆ thn pragmatoposh ranteboÔ.


2.8. NHMATA KAI SUGQRONISMO

65

Prìgramma 2.17 Ulopohsh lock anagnwst¸n/grafèwn. 1

from threading import *

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

class RWLock: def __init__(self): self.state = 0 # takes values -1=EX, 0=free, >0=SH self.readers = self.writers = 0 self.lock = Lock() self.rc = Condition(self.lock) self.wc = Condition(self.lock) def acquire_sh(self): try: self.lock.acquire() if self.state>=0 and not self.writers: self.state += 1 else: self.readers += 1 self.rc.wait() finally: self.lock.release() def acquire_excl(self): try: self.lock.acquire() if self.state==0: self.state = -1 else: self.writers += 1 self.wc.wait() finally: self.lock.release() def release(self): try: self.lock.acquire() if self.state==-1: if self.readers: self.state, self.readers = self.readers, 0 self.rc.notifyAll() elif self.writers: self.writers -= 1 self.wc.notify() else: self.state = 0 elif self.state>0: self.state -= 1 if self.state==0 and self.writers: self.writers, self.state = self.writers-1, -1 self.wc.notify() finally: self.lock.release()


66

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.18 Parˆdeigma ranteboÔ metaxÔ dÔo nhmˆtwn. 1 2 3

def greet(s): print "Thread",currentThread().getName(),": Hello",s return "GREET"

4 5 6

# turn greet into an entry of function greet greet = entry(greet)

7 8 9 10 11

def client_thread(): print "Thread",currentThread().getName(),": calling entry greet" ret = greet(’Vasilis’) print "Thread",currentThread().getName(),": Entry returned",repr(ret)

12 13 14 15 16

def server_thread(): print "Thread",currentThread().getName(),": Accepting entry greet" greet.accept() print "Thread",currentThread().getName(),": Done"

17 18 19 20 21 22 23

t1 = Thread(name="Client",target=client_thread) t2 = Thread(name="Server",target=server_thread) t1.start() t2.start() t1.join() t2.join()


2.8. NHMATA KAI SUGQRONISMO

67

Prìgramma 2.19 Mia ulopohsh buffer me th qr sh ranteboÔ kai select. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

class ActiveQueue: def __init__(self, n): assert n>0 self.queue = [None]*n self.getpos = self.putpos = 0 self.empty = 1 self.put = entry(self.add) self.get = entry(self.remove) thread=Thread(name="Buffer",target=self.run_queue) thread.setDaemon(1) thread.start() def add(self,e): self.queue[self.putpos] = e self.putpos = (self.putpos+1) % len(self.queue) self.empty = 0 def remove(self): ret = self.queue[self.getpos] self.getpos = (self.getpos+1) % len(self.queue) if self.getpos==self.putpos: self.empty=1 return ret def full(self): return not self.empty and self.getpos==self.putpos def run_queue(self): while 1: s = selector() if not self.empty: s.accept(self.get) if not self.full(): s.accept(self.put) s.select()


68

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

accepted apì to n ma pou kˆlese th mèjodo select. San èna parˆdeigma qr sh autoÔ tou mhqanismoÔ dete to Prog. 2.19, to opoo ulopoie mia parallag  tou producer/consumer me th qr sh bounded buffer, pou enai gnwst  me to ìnoma producer/buffer/consumer. Basikˆ, sthn parallag  aut  èqoume to sugqronismì twn paragwg¸n kai twn katanalwt¸n me th qr sh enì epiplèon n mato , to opoo n ma diaqeirzetai ton buffer. O k¸dika tou Prog. 2.19 ulopoie ènan tètoio buffer, o opoo mpore na dokimaste apì ti routne tou Prog. 2.16 pou paratèjhke parapˆnw. Parathr ste sti grammè 7 8 th dhmiourga dÔo entries pˆnw se dÔo mejìdou th klˆsh . Oi grammè 9 11 dhmiourgoÔn èna n ma damona to opoo ja dèqetai ti kl sei twn dÔo entry. H qr sh tou selector fanetai sti grammè 24 27. Tèlo , sta Prog. 2.20 2.21 parajètoume ton k¸dika gia thn ulopohsh se Python twn mhqanism¸n tou ranteboÔ, me th d lwsh dÔo klˆsewn, twn entry kai selector. 2.8.3

Proqwrhmènh qr sh nhmˆtwn

H anˆptuxh tou mhqanismoÔ twn nhmˆtwn èlabe q¸ra katˆ th dekaeta tou 1980, me kuriìtero knhtro thn ulopohsh twn pr¸twn tìte diktuak¸n efarmog¸n pelˆthuphrèth. Qreiˆsthkan kˆpoia qrìnia ¸spou na wrimˆsoun oi ulopoi sei , allˆ apì ti arqè th dekaeta tou '90 h teqnologa èqei stajeropoihje kai apotele th bˆsh (apì pleurˆ poluepexergasa ) twn katanemhmènwn efarmog¸n. Apì thn pleurˆ th ulopohsh tou , ta n mata diakrnontai se dÔo edh: N mata sust mato : Ta n mata autˆ dhmiourgoÔntai kai dromologoÔntai apì to leitourgikì sÔsthma. N mata qr sth: Ta n mata autˆ ulopoioÔntai apì k¸dika th dia th diergasa . O pur na tou LS de gnwrzei tpote gi autˆ. Ta n mata sust mato dromologoÔntai me krit ria pou lambˆnoun upìyh tou to sunolikì fìrto tou sust mato . Gia parˆdeigma, se sust mata me pollaploÔ epexergastè (p.q. SMP–symmetric Multiprocessing), enai dunat  h tautìqronh ektèlesh ˆnw tou enì nhmˆtwn th dia diergasa . Gi autì ta n mata sust mato protim¸ntai se efarmogè uyhl¸n apait sewn. To kÔrio pleonèkthma twn nhmˆtwn qr sth enai h qamhl  katanˆlwsh pìrwn (kurw RAM) anˆ n ma pou enai dunatì na epiteuqje me prosektik  ulopohsh. àtsi, enai dunatì na uposthriqjoÔn ekatontˆde qiliˆde n mata qr sth anˆ diergasa, en¸ ta n mata sust mato spˆnia mporoÔn na xeperˆsoun ti merikè qiliˆde . Apì thn ˆllh, h periplokìthta th ulopohsh nhmˆtwn qr sth mpore na auxhje dramatikˆ, eidikˆ sthn apofug  th emplok  olìklhrh th diergasa ìtan èna n ma kale mia emplekìmenh kl sh tou LS. Pollˆ sust mata prosfèroun th dunatìthta mikt  qr sh nhmˆtwn kai twn dÔo eid¸n. Fusikˆ, h axiopohsh aut¸n twn dunatot twn auxˆnei shmantikˆ thn poluplokìthta twn efarmog¸n. H tˆsh th teqnologa ta teleutaa qrìnia odhge sthn epikrˆthsh twn nhmˆtwn sust mato , afoÔ oi ulopoi sei èqoun afenì klesei to ˆnoigma me ta n mata


2.8. NHMATA KAI SUGQRONISMO

69

Prìgramma 2.20 Ulopohsh twn mhqanism¸n ranteboÔ se Python: H klˆsh entry. 1

from threading import *

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

class entry: def __init__(self, func): self.func = func self.call = None self.clilock = Lock() self.cond = Condition() self.notify_call = self.cond.notify self.ret = None self.exc = None def __call__(self,*args,**kwargs): try: self.clilock.acquire() self.cond.acquire() self.call = (self.func, args, kwargs) self.notify_call() self.cond.wait() if self.exc: raise self.exc else: return self.ret finally: self.cond.release() self.clilock.release() def accept(self): try: self.cond.acquire() while not self.call: self.cond.wait() call, self.call, self.exc = self.call, None, None try: self.ret = apply(*call) except Exception,e: self.exc = e self.cond.notify() finally: self.cond.release()


70

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.21 Ulopohsh twn mhqanism¸n ranteboÔ se Python: H klˆsh selector. 1

from threading import *

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

class selector: def __init__(self): self.cond = Condition() self.entry_list = [] self.ready_list = [] def __isready(self, e): try: self.cond.acquire() self.ready_list.append(e) self.cond.notify() finally: self.cond.release() def accept(self, e): try: self.cond.acquire() e.cond.acquire() e.notify_call = lambda cb=self.__isready, entry=e: cb(entry) self.entry_list.append(e) if e.call is not None: self.ready_list.append(e) finally: e.cond.release() self.cond.release() def select(self): if not self.entry_list: raise RuntimeError,"Empty select" try: self.cond.acquire() while not self.ready_list: self.cond.wait() finally: self.cond.release()

35 36 37 38 39 40 41 42 43

for e in self.entry_list: e.cond.acquire() e.notify_call = e.cond.notify e.cond.release() selentry = self.ready_list[0] del self.entry_list[:] del self.ready_list[:] selentry.accept()


71

2.8. NHMATA KAI SUGQRONISMO

SOCKETS

CPU

CPU

CPU

Process

Sq ma 2.5: Sqhmatik  anaparˆstash th ˆmesh epexergasa me n mata. qr sth w pro thn katanˆlwsh pìrwn, kai afetèrou h mewsh tou kìstou tou ulikoÔ anèdeixe arnhtikˆ to auxhmèno kìsto ulopohsh twn nhmˆtwn qr sth. Sto shmeo autì axzei na exetˆsoume se megalÔtero bˆjo ta zht mata pou aforoÔn thn ulopohsh polunhmatik¸n efarmog¸n. Ja jewr soume thn tupik  perptwsh enì uphrèth, opoo èqei na exuphret sei èna megˆlo arijmì apì pelˆte . Basikˆ, h qr sh nhmˆtwn gnetai gia: • thn anamon  se emplekìmene kl sei qwr na emplèketai olìklhrh h diergasa, • thn parˆllhlh axiopohsh apì th diergasa pollapl¸n pìrwn (p.q. CPUs, dskoi), kai • th beltwsh th apokrisimìthta (responsivenes) tou sust mato .

Me bˆsh ta krit ria autˆ h katanom  tou upologistikoÔ fìrtou se n mata mpore na akolouj sei kˆpoio apì ta parakˆtw montèla. JewroÔme ìti h efarmog  ma èqei m anoiqtˆ kanˆlia E/E (p.q. sockets) kai qrhsimopoie n pìrou (p.q. CPUs). €meso montèlo Sto montèlo autì èqoume èna n ma gia kˆje kanˆli E/E. Ta n mata autˆ enallˆssontai metaxÔ E/E, ìpou emplèkontai gia megˆlo mèro tou qrìnou tou , kai upologismoÔ, ìpou qrhsimopoioÔn kˆpoio pìro gia èna suneqìmeno qronikì diˆsthma. To n ma pou ektèlese thn E/E enai upeÔjuno kai gia th diekperawsh tou upologismoÔ. To montèlo paristˆnetai sqhmatikˆ sto Sq. 2.5. Montèlo nhmˆtwn ergasa Stì montèlo autì o qeirismì th E/E diaqwrzetai pl rw apì thn upologistik  epexergasa. Ta tm mata autˆ analambˆnoun diaforetikˆ n mata. Ta men


72

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN Worker Thread pool SOCKETS

CPU Task Queue

CPU

CPU

Process

Sq ma 2.6: Sqhmatik  anaparˆstash th epexergasa me n mata ergasa . onomˆzontai n mata E/E (I/O threads) kai ta de n mata ergasa (worker threads). Ta n mata E/E trofodotoÔn ta n mata ergasa me nèe ergase , mèsw mia dom  apomonwt . To Sq. 2.6 paristˆnei sqhmatikˆ th leitourga. To ˆmeso montèlo enai elkustikì diìti sthn prˆxh elaqistopoie thn poluplokìthta th ulopohsh . To meionèkthmˆ tou enai oti qrhsimopoie gia upologismì ènan arijmì nhmˆtwn pou exartˆtai mìno apì ti apait sei E/E th efarmog  . Se efarmogè me shmantikì kìsto upologismoÔ,   me megˆlh plhj¸ra nhmˆtwn, h ulopohsh aut  mpore na apobe problhmatik  gia thn eÔrujmh leitourga tou sust mato . Sti peript¸sei autè , h qr sh twn nhmˆtwn ergasa mpore na axiopoi sei kalÔtera tou upologistikoÔ pìrou . Miktˆ montèla Sthn prˆxh, suqnˆ oi efarmogè efarmìzoun èna miktì montèlo, me mèro th epexergasa na diekperai¸netai apì ta n mata E/E kai èna krsimo mèro na anatjetai sta n mata ergasa . Gia parˆdeigma, ètsi ulopoioÔntai pollè bˆsei dedomènwn: dhmiourgetai èna n ma anˆ sÔndesh, to opoo diekperai¸nei olìklhrh thn epexergasa twn erwt sewn. Wstìso, h prospèlash stou dskou tou sust mato gnetai apì qwristˆ n mata ergasa , ¸ste na exasfaliste kalÔterh topikìthta kai seiriakìthta th prospèlash (blèpe pq. ton Shore server apì to U. of Wisconcin at Madison). 2.9

Ulopohsh uphret¸n

Parousiˆzoume t¸ra tou enallaktikoÔ trìpou ulopohsh uphret¸n me sundet  epikoinwna, basismènh se sockets. To basikì z thma pou diaforopoie ti e-


2.9. ULOPOIHSH UPHRETWN

73

pilogè ma enai h apathsh tautìqronh exuphrèthsh poll¸n pelat¸n apì ton uphrèth. Gia aplìthta, jewroÔme ìti pelˆth sundèetai me èna monadikì socket me ton uphrèthìsa ja poÔme isqÔoun kai se pio polÔploke katastˆsei . Sunoptikˆ, èqoume ta akìlouja endeqìmena ulopohsh . • Iterative server. Sthn perptwsh aut  exuphretetai èna mìno pelˆth th forˆ. • Multiplexed server. Pollo sundedemènoi pelˆte mporoÔn na exuphretoÔntai tautìqrona, mèsw poluplexa . • Concurrent server. Kˆje pelˆth uposthrzetai apì èna task. àqoume dÔo peript¸sei : – Process-based. Gia kˆje pelˆth qrhsimopoietai mia diergasa. – Thread-based. Gia kˆje pelˆth qrhsimopoietai èna n ma.

Kˆje èna apì autˆ ta endeqìmena ja analuje parakˆtw. Axzei na shmei¸soume ìti h ulopohsh twn pelat¸n de ja ma apasqol sei idiatera, kaj¸ genikˆ enai polÔ aploÔsterh apì thn ulopohsh uphret¸n. 2.9.1

Genik  dom  enì uphrèth

Se adrè grammè , o uphrèth enai upeÔjuno na dèqetai kai na exuphrete ait sei sÔndesh apì tou pelˆte . O trìpo exuphrèthsh th kˆje sÔndesh ma aforˆ mìno w pro thn upost rixh poluepexergasa . Sta paradegmata pou akoloujoÔn ja jewr soume th sunˆrthsh handleClient, h opoa ulopoie to qeirismì mia sÔndesh . JewroÔme ìti h sÔndesh enai TCP/IP (sundèsei UDP mporoÔn genikˆ na antimetwpistoÔn eukolìtera). H metablht  lsock pou emfanzetai sta akìlouja paradegmata ja jewretai w socket-akroat  pou èqei  dh gnei bind me to port sto opoo akoÔei o uphrèth . 2.9.2

Iterative server

Aut  enai h aploÔsterh morf  uphrèth kai den prosfèrei kamiˆ upost rixh se poluepexergasa. Mìno èna pelˆth mpore na enai sundedemèno se kˆje qronik  stigm . Pelˆte pou zhtoÔn sÔndesh en¸ exuphretetai  dh kˆpoio ˆllo pelˆth , ja perimènoun. An o arijmì twn ait sewn gia nèa sÔndesh xeperˆsei èna orismèno ìrio, peraitèrw ait sei ja aporrifjoÔn apì ton phrÔna tou LS. O mègisto arijmì twn ait sewn pou mpore na brskontai se anamon  sun jw kajorzetai apì thn kl sh listen tou socket-akroat . Sthn prˆxh, mia tètoia ulopohsh de qrhsimopoietai potè. O k¸dika tou Prog. 2.22 dnetai gia filologikoÔ kajarˆ lìgou . Se autìn fanetai mìno èna aplì loop pou enallaktikˆ kale accept se èna socket-akroat  kai katìpin kale th sunˆrthsh handleClient, pou ulopoie thn exuphrèthsh th sÔndesh .


74

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

Prìgramma 2.22 K¸dika exuphrèthsh enì iterative server. 1 2 3

while 1: sock, addr = lsock.accept() handleClient(sock, addr)

2.9.3

Process-based concurrent server

Sth mèjodo aut , kˆje sÔndesh exuphretetai apì mia diaforetik  diergasa. H arqik  dhmiourga sÔndesh gnetai sth basik  diergasa tou server. ätan dhmiourghje mai nèa sÔndesh, metˆ thn epistrof  th accept, h basik  diergasa kale th fork kai dhmiourge mia nèa diergasa-paid, h opoa ja analˆbei thn exuphrèthsh th nèa sÔndesh . O k¸dika aut  th ulopohsh fanetai sto Prog. 2.23. Prìgramma 2.23 K¸dika exuphrèthsh enì process-based concurrent server. 1

import os, socket, errno

2 3

#... set up sighandler for SIGCHLD

4 5 6 7 8 9 10 11 12

def Accept(lsock): while 1: try: # if accept() returns ok, just return return lsock.accept() except socket.error, e: # if it is interrupted by EINTR, loop if e[0]!=errno.EINTR: raise

13 14 15 16 17 18 19 20

while 1: sock, addr = Accept(lsock) if os.fork()==0: ret = handleClient(sock, addr) os._exit(ret); else: sock.close()

Kˆpoia prˆgmata prèpei na proseqjoÔn sthn parapˆnw ulopohsh. • H kl sh sock.close() sthn teleutaa gramm  tou Prog. 2.23 enai aparathth, an den jèloume na èqoume diarro  pìrwn. SÔmfwna me thn tekmhrwsh tou U NIX, h kl sh th fork ja klwnopoi sei th ro  sock apì th diergasa-gonèa sth diergasa-paid. Upoqrewtikˆ, ja prèpei h close na klhje kaisti dÔo diergase . • Parìlo pou de fanetai sto Prog. 2.23, ja prèpei na upˆrqei trìpo na kaletai h wait apì th diergasa-gonèa gia kˆje paid pou termatzei epeid 


2.9. ULOPOIHSH UPHRETWN

75

olokl rwse thn epikoinwna tou me ton antstoiqo pelˆth. O swstì trìpo gia kˆti tètoio enai h qr sh signals, ìpw  dh kalÔyame sto Prog. 2.9. • H qr sh SIGCHLD shmanei ìti kˆpoie kl sei th mejìdou lsock.accept() ja prokalèsoun exception me kwdikì sfˆlmato EINTR (gia leptomèreie dete thn tekmhrwsh tou U NIX). To sfˆlma autì den ofeletai se kˆpoia dusleitourga, allˆ sto ex  qarakthristikì tou U NIX: ìtan mia diergasa èqei emplake se kˆpoia kl sh kai dèqetai kˆpoio signal, metˆ thn ektèlesh tou signal handler (kai an autì epistrèyei kanonikˆ), h mplokarismènh kl sh epistrèfei me kwdikì sfˆlmato EINTR. Sto POSIX, h kl sh sigaction uposthrzei mia shmaa me to ìnoma SA RESTART, h opoa mpore na qrhsimopoihje gia na apenergopoi sei autì to mhqanismì, allˆ gia lìgou sumbatìthta kalì enai na mh baszetai kane se aut n. 2.9.4

Preforking

Se uphrète me arketˆ barÔ fìrto ergasa , h suneq  dhmiourga kai termatismì diergasi¸n mpore na apobe arnhtik  gia th sunolik  apìdosh tou sust mato . Mia polÔ sunhjismènh teqnik  gia na mei¸sei thn epibˆrunsh aut  enai h epanaqrhsimopohsh mia diergasa apì perissìterou apì ènan pelˆte . àna arijmì apì diergase proetoimˆzetai arqikˆ kai tjetai se anamon  pelat¸n. Kˆje nèo pelˆth anatjetai se mia apì ti diergase autè . An afiqjoÔn tautìqrona perissìteroi pelˆte apì ti proetoimasmène diergase , nèe diergase dhmiourgoÔntai. An antjeta o arijmì twn adran¸n diergasi¸n enai megˆlo , kˆpoie mporoÔn na termatistoÔn gia na mhn katalambˆnoun pìrou tou sust mato . H teqnik  aut  onomˆzetai preforking. To kÔrio z thma sthn ulopohsh aut  th lÔsh enai o sugqronismì metaxÔ ìlwn twn proetoimasmènwn diergasi¸n sth dhmiourga nèwn sundèsewn mèsw th accept. Upˆrqoun diˆforoi trìpoi na ulopoihje kˆti tètoio. Gia aplìthta, jewr ste ìti o arijmì twn diergasi¸n enai stajerì . Arqikˆ, h gonik  diergasa dhmiourge to socket-akroat . Katìpin, dhmiourgoÔntai me epanalhptik  kl sh fork oi proetoimasmène diergase . äle tou klhronomoÔn to socket-akroat . Katìpin, ìle tou ekteloÔn ton parakˆtw k¸dika: while 1: enter_critical_section() sock, addr = lsock.accept() leave_critical_section() handleClient(sock,addr)

Oi duo sunart sei pou orzoun to critical section ston parapˆnw k¸dika mporoÔn na tÔqoun diaforetik¸n ulopoi sewn: • Ken  ulopohsh! Sthn perptwsh aut , perissìtere apì mia diergase mpore na emplakoÔn sthn accept (ˆra èqoume parabash tou critical section). Aut  h lÔsh ja ekteleste swstˆ, allˆ den enai idiatera epijumht , gia ton ex  lìgo: kˆje forˆ pou fjˆnei apì kˆpoion pelˆth mia nèa athsh sÔndesh , to LS xupnˆ ìle ti diergase pou enai emplegmène sthn kl sh


76

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

accept, allˆ amèsw xanakoimzei ìle ektì apì mia apì autè .12 €ra, an èqoume proetoimˆsei pollè diergase , to kìsto mpore na enai arketì. • Mia apl  lÔsh mpore na enai h ex  : h gonik  diergasa dhmiourge èna proswrinì, kenì arqeo, to opoo klhronomoÔn ta paidiˆ. Katìpin, ta paida ulopoioÔn amoibao apokleismì sto critical section qrhsimopoi¸nta file locks (bl. Prog. 2.10). Aut  h lÔsh protimˆtai apì thn prohgoÔmenh, giat prosfèrei kalì sugqronismì. • Mia ˆllh lÔsh enai h qr sh semaphores (pq. se pollè ekdìsei tou U NIX uposthrzontai semaphores me ti sunart sei semget, semop kai semctl. H lÔsh aut  enai parìmoia me thn prohgoÔmenh. 2.9.5

Thread-based concurrent server

H pio dhmofil  s mera mèjodo baszetai sth qr sh nhmˆtwn. Gia kˆje sÔndesh dhmiourgetai èna nèo n ma, to opoo kaletai na exuphret sei th nèa sÔndesh, ektel¸nta th handleClient. O basikì k¸dika ulopohsh th mejìdou fanetai sto Prog. 2.24. Prìgramma 2.24 K¸dika exuphrèthsh enì thread-based concurrent server. 1 2 3 4

while 1: sock, addr = lsock.accept() thr = Thread(target=handleClient, args=(sock,addr)) thr.start()

H qr sh nhmˆtwn èqei ki aut  kˆpoia shmea prosoq  : • Se antistoiqa me ti diergase , kˆje termatizìmenomh daimonikìn ma prèpei na {kajariste} me kl sh th join, diaforetikˆ spataliètai mn mh kai pijan¸ kai ˆlloi pìroi tou sust mato . àna ˆllo pìro pou suqnˆ ufstatai diarro , enai ta sockets pou to prìgramma {xeqnˆ} na klesei. • Parìlo pou to kìsto dhmiourga n mato enai mia toulˆqiston tˆxh megèjou mikrìtero apì to kìsto dhmiourga diergasa , se polÔ uyhl¸n apait sewn efarmogè enai pijanì na wfele h qr sh prethreading (kat' analoga me to preforking). To prìblhma bebaw tou sugqronismoÔ nhmˆtwn w pro thn kl sh th accept enai saf¸ eukolìtero apì ìti gia ti diergase . 2.10

Epikoinwna pelˆth-uphrèth

Se sust mata pelat¸n-uphret¸n h epikoinwna metaxÔ diergasi¸n akolouje to prìtupo athsh -apìkrish (request-response – RR), ìpou o pelˆth apeujÔnei 12

Aut  h sumperiforˆ enai gnwst  sth bibliografa w to prìblhma tou {kopadioÔ pou kalpˆzei} (

blem).

thundering herd pro-


77

2.10. EPIKOINWNIA PELATH-UPHRETH

ston uphrèth èna m numa athsh kai perimènei ¸spou na lˆbei èna m numa apìkrish . Sthn tupik  perptwsh, h epikoinwna aut  enai sÔgqronh, dhl. o pelˆth emplèketai mìli stelei thn athsh, ¸spou na èrjei h apìkrish apì ton uphrèth. H perptwsh aut  fanetai sto parakˆtw sq ma:

Client

time

send request blocked

Server receive request process send reply

receive reply Parallagè . Diˆfore parallagè tou basikoÔ protÔpou athsh -apìkrish èqoun protaje gia eidikè efarmogè . • Mia parallag  enai h asÔgqronh athsh-apìkrish. S' aut n, o pelˆth suneqzei thn epexergasa afoÔ stelei thn athsh, kai mpore na stelei nèa athsh protoÔ lˆbei thn apìkrish th prohgoÔmenh . H l yh th apˆnthsh gnetai sun jw me ènan apì tou ex  trìpou : (a) o pelˆth elègqei periodikˆ gia th l yh th apˆnthsh (polling),   (b) o pelˆth eidopoietai gia thn ˆfixh apˆnthsh me kˆpoio mhqanismì diakop  (p.q. U NIX signals). To kÔrio pleonèkthma th parallag  aut  enai h apìdosh, afoÔ o pelˆth den emplèketai anatia. • Se kˆpoie efarmogè upˆrqoun ait sei pou den apaitoÔn apìkrish. Sti peript¸sei autè enai dunat  h beltwsh th apìdosh tou sust mato an apaleifje h upoqrèwsh apìkrish (èstw ken  ) apì ton uphrèth. Autè oi peript¸sei sthn prˆxh ulopoioÔntai me qr sh anaxiìpistwn kanali¸n (p.q. UDP sockets). • ätan qrhsimopoioÔntai anaxiìpista kanˆlia emfanzetai h anˆgkh epibebawsh th l yh th apìkrish apì ton pelˆth. Aut  h perptwsh genikeÔei to prìtupo athsh -apìkrish sto prìtupo athsh -apìkrish -epibebawsh (request-response-acknowledgement – RRA).

Parˆdeigma. H kajièrwsh mia nèa sÔndesh TCP metaxÔ dÔo upologist¸n gnetai me mia antallag  RRA, pou enai gnwst  kai w 3-way handshake. Sthn perptwsh aut , pelˆth enai o upologist  tou opoou to socket ektele connect. 2.10.1

Prwtìkolla epikoinwna pelˆth-uphrèth

Prwtìkollo enai h yhfiak  gl¸ssa sthn opoa ekfrˆzontai oi antalassìmene plhrofore .


78

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

H poluplokìthta enì prwtokìllou mpore na kumanetai apì stoiqei¸dh  apl  perigraf  th morf  (format) twn dedomènwnw terˆstia, pq. mpore to prwtìkollo na baszetai se kˆpoia prohgmènh majhmatik  logik . Ta prwtìkolla enai suqnˆ ierarqikˆ, dhl. epektenoun ˆlla prwtìkolla me epiplèon shmasiologikˆ (semantics). Gia parˆdeigma, h perigraf  th morf  twn dedomènwn suqnˆ baszetai se gnwstè kwdikopoi sei . H dèsmeush enì sust mato se èna prosektikˆ orismèno kai tekmhriwmèno prwtìkollo enai eggÔhsh poiìthta gia to sÔsthma, afoÔ epitrèpei thn anexˆrthth anˆptuxh pelat¸n kai uphret¸n apì anexˆrthtou programmatistè , se diaforetikoÔ qrìnou kai me anomoiogene leitourgikìthte . S mera, ta pio shmantikˆ katanemhmèna sust mata baszontai se diejn¸ gnwstˆ kai apodektˆ prwtìkolla. Mpore kane na ta brei w Internet RFCs sto diadktuo, p.q. sto diktuakì tìpo http://www.faqs.org/rfcs. H perigraf  enì prwtokìllou prèpei na parèqei epark  plhrofora gia thn ulopohsh tou, qwr na qreiˆzetai na anatrèxei kane se ulopoi sei apì ˆllou (p.q. ulopoi sei anaforˆ ). Sthn prˆxh kˆti tètoio enai mìno merik¸ efiktì. Sun jw h perigraf  kathgoriopoietai sta ex  tra eppeda: Suntaktikì (syntax): Perigrˆfetai pl rw h morf  twn mhnumˆtwn pou ja antallagoÔn, ¸ste na enai efikt  h kwdikopohsh kai apokwdikopohsh mhnumˆtwn, dhlad  h sÔnjesh kai anˆgnwsh twn dedomènwn se eppedo bits. Gia parˆdeigma, kajorzetai to endianness gia th metaforˆ duadikˆ kwdikopoihmènwn akerawn arijm¸n. Shmasiologikì (semantics): Perigrˆfetai shmasiologikˆ to nìhma twn mhnumˆtwn kai prodiagrˆfontai oi periorismo swst  ektèlesh . Gia parˆdeigma, kajorzetai ìti èna m numa athsh tÔpou A prèpei na akoloujetai apì èna m numa apìkrish tÔpou A. Pragmatistikì (pragmatics): Prosdiorzontai oi pleurè tou prwtokìllou pou ˆptontai zhthmˆtwn ektèlesh kai epikoinwna . Gia parˆdeigma, orzetai h sumperiforˆ tou prwtokìllou se perptwsh esfalmènh epikoinwna (parabiˆsei prwtokìllou)   apotuqa sthn epikoinwna (p.q. ta sunist¸mena timeouts). €llo parˆdeigma enai h prodiagraf  qr sh pollapl¸n kanali¸n (p.q. sockets) gia thn ulopohsh tou prwtokìllou. 2.10.2

SÔnodoi

Se mia akolouja antallag¸n athsh -apìkrish metaxÔ tou diou zeÔgou pelˆthuphrèth enai suqnˆ epijumht  h diat rhsh katˆstash apì ti diergase , ¸ste to apotèlesma metagenèsterwn antallag¸n exartˆtai apì ti prohghjese . Sthn perptwsh aut  lème ìti h akolouja antallag¸n apotele mia sÔnodo (session). Ta dedomèna pou diathroÔntai apì antallag  se antallag  apartzoun thn katˆstash (state) th sunìdou. Oi sÔnodoi apoteloÔn mèro tou prwtokìllou (kurw shmasiologikì) kai prodiagrˆfontai apì (a) thn perigraf  th katˆstash pou diathroÔn (peda kai tÔpoi


2.11. ANIQNEUSH KAI ANTIMETWPISH SFALMATWN

79

twn dedomènwn) kai (b) apì ti metabolè pou epifèroun sthn katˆstash oi diˆforoi tÔpoi ait sewn-apokrsewn. Parˆdeigma. Sto prwtìkollo FTP pou qrhsimopoietai gia th metaforˆ arqewn, qrhsimopoioÔntai sÔnodoi. Mia sÔnodo FTP diathre ta parakˆtw dedomèna: • To qr sth th sunìdou. Autì orzetai katˆ thn ènarxh th sunìdou apì ton pelˆth, akolouj¸nta mia diadikasa diapsteush me password. Oi qr ste èqoun diaforetikˆ pronìmia prìsbash kai metaforˆ arqewn. • Ton trèqonta katˆlogo (directory) th sÔndesh . Autì qrhsimopoietai me trìpo anˆlogo me ton trèqonta katˆlogo diergasa . • Paramètrou metaforˆ arqewn pou aforoÔn kwdikoposh (arqea keimènou   duadikˆ).

Ta prwtìkolla pou uposthrzoun sunìdou suqnˆ orzoun kai mia sten  sqèsh metaxÔ th sunìdou kai kˆpoiou kanalioÔ epikoinwna . Gia parˆdeigma, ta prwtìkolla telnet kai FTP tautzoun th sÔnodo me to socket pou qrhsimopoietai gia thn epikoinwna. H sÔnodo xekinˆ me th sÔndesh tou socket kai termatzetai me to klesimì tou. Ta prwtìkolla pou den uposthrzoun sunìdou onomˆzontai suqnˆ kai stateless (qwr katˆstash). To pio diadedomèno stateless prwtìkollo enai to HTTP. Wstìso, gia na mporoÔn na ulopoihjoÔn sÔnodoi apì ti efarmogè pou epikoinwnoÔn pˆnw apì HTTP (p.q. web applications), èqei prodiagrafe o mhqanismì twn cookies. Ta cookies mporoÔn na qrhsimopoihjoÔn (metaxÔ ˆllwn) gia thn ulopohsh sunìdwn allˆ èqoun arketˆ megalÔterh euelixa w mhqanismì . 2.11

Anqneush kai antimet¸pish sfalmˆtwn

Sta katanemhmèna sust mata enai ousi¸dh apathsh h anoq  tou se sfˆlmata. An doÔme ta katanemhmèna sust mata w sullogè apì pollaplè epikoinwnoÔse diergase , diakrnoume dÔo tÔpou sfalmˆtwn, ta topikˆ sfˆlmata, dhlad  sfˆlmata se kˆpoia apì ti diergase , kai ta sfˆlmata epikoinwna , pou emfanzontai sta kanˆlia pou sundèoun ti diˆfore diergase . Ta sfˆlmata epikoinwna sun jw fèrnoun sto mualì kˆpoio prìblhma diktuak  fÔsew . Gia sundet  epikoinwna aut  enai ìntw h pio suqn  perptwsh. Se kanˆlia asÔndeth epikoinwna mporoÔn na parousiastoÔn kai ˆllwn tÔpwn sfˆlmata. An, gia parˆdeigma, dÔo diergase epikoinwnoÔn mèsw koinoÔ arqeou dskou, sfˆlma epikoinwna mpore na enai h exˆntlhsh tou eleÔjerou q¸rou tou dskou. Sth sunèqeia wstìso ja asqolhjoÔme kurw me sfˆlmata epikoinwna . H antimet¸pish enì sfˆlmato apì to upìloipo katanemhmèno sÔsthma propojètei th dunatìthta anqneush tou sfˆlmato , dhl. prosdiorismì tou probl mato kai tou shmeou ìpou sunèbh. Kˆti tètoio den enai pˆnta efiktì me energhtikì trìpo, dhlad  me energhtikì prodiorismì th katˆstash tou sust mato . Gi autì, shmantikì ergaleo anqneush sfalmˆtwn enai h jèspish qronik¸n periorism¸n


80

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

gia thn ektèlesh sugkekrimènwn bhmˆtwn, me th qr sh projesmi¸n (timeouts). H qr sh projesmi¸n epitrèpei omoiìmorfh kai apl  anqneush kai estiasmènwn sfalmˆtwn, p.q. jìrubo se kˆpoio epikoinwniakì kanˆli, uperfìrtwsh kˆpoiou apomakrusmènou upologist , klp, allˆ kai sfˆlmata logik  katˆ th leitourga tou sust mato , pq. deadlock metaxÔ kˆpoiwn diergasi¸n. O mhqanismì twn prosjesmi¸n enai aparathto ìtan to kanˆli epikoinwna enai anaxiìpisto, afoÔ tìte den mporoÔme na diakrnoume thn perptwsh diakop  th sÔndesh apì thn apl  ap¸leia dedomènwn. Sthn pragmatikìthta, axiìpista kanˆlia ìpw ta TCP sockets ulopoioÔntai pˆnw se anaxiìpista me algìrijmou basismènou se projesme . 2.11.1

Anqneush sfalmˆtwn se

sockets

Upˆrqoun pollˆ kai diaforetik¸n eid¸n sfˆlmata pou mpore na parousiastoÔn katˆ thn epikoinwna me sockets. Mia pl rh antimet¸pish tou jèmato ja apaitoÔse èna biblo apì mình th . Ed¸ ja perioristoÔme se merikè genikè pleurè tou jèmato , kurw me skopì na dieukolÔnoume thn anˆptuxh genikoÔ skopoÔ. Se sugkekrimène efarmogè (pq. asÔrmath epikoinwna , kinht  thlefwna ) apaitoÔntai polÔ pio edikeumène teqnikè . PolÔ qondrikˆ, ta sfˆlmata epikoinwna qwrzontai sti parakˆtw kathgore : • Sfˆlmata katˆ th sÔndesh. • AniqneÔsima sfˆlmata epikoinwna • Mh aniqneÔsima sfˆlmata epikoinwna .

Sfˆlmata katˆ th sÔndesh Gia parˆdeigma, se mia sÔndesh TPC/IP h kl sh th connect mpore na epistrèyei ta parakˆtw sfˆlmata: ETIMEOUT: An o pelˆth den lˆbei apìkrish sthn aths  tou gia sÔndesh metˆ apì èna kajorismèno qrìno (sun jw 75 sec) epistrèfetai autì to sfˆlma. M numa: connection timed out. ECONNREFUSED: An o pelˆth apopeiraje na sundeje se kˆpoia dieÔjunsh kai jÔra sthn opoa den upˆrqei socket-akroat  , epistrèfetai ˆmesa m numa sfˆlmato connection refused. EHOSTUNREACH: An katˆ thn prospˆjeia sÔndesh , o mhqanismì tou diktÔou anafèrei adunama èuresh diadrom  pro ton proorismì sÔndesh , metˆ apì kajorismèno qrìno (sun jw 75 sec) epistrèfetai to m numa sfˆlmato no route to host.

H kl sh th accept mpore na epistrèyei to sfˆlma ECONNABORTED, ìtan mia sÔndesh kˆpoiou pelˆth den oloklhrwje epituq¸ .


2.11. ANIQNEUSH KAI ANTIMETWPISH SFALMATWN

81

AniqneÔsima sfˆlmata epikoinwna Pollˆ edh sfalmˆtwn epikoinwna ofelontai se astoqa ulikoÔ   diaqeiristikè politikè pou apagoreÔoun thn epikoinwna. Ta prwtìkolla IPv4 IPv6 uposthrzoun èna mhqanismì anqneush tètoiwn sfalmˆtwn, o opoo enai gnwstì me to ìnoma ICMP. Ta gnwstˆ ma progrˆmmata ping kai traceroute enai dÔo apì ti efarmogè pou qrhsimopoioÔn to prwtìkollo autì. Programmatistikˆ, ta sfˆlmata pou ja epistrèyei to sÔsthma se perptwsh anqneush sfˆlmato sthn epikoinwna perilambˆnoun ta 4 edh th prohgoÔmenh paragrˆfou, kai epiplèon to sfˆlma EMSGSIZE, to opoo epistrèfetai ìtan kˆpoio datagram èqei mègejo megalÔtero apì autì pou mpore na metafèrei to dktuo sto sugkekrimèno proorismì. Mh aniqneÔsima sfˆlmata epikoinwna Genikˆ, h anaforˆ se mh aniqneÔsima sfˆlmata epikoinwna aforˆ orismène mìno peript¸sei . An anaferìmaste se epikoinwna TCP/IP, ìla ta sfˆlmata enai katˆ mia ènnoia aniqneÔsima; to prwtìkollo ja epistrèyei sfˆlma ETIMEOUT sthn perptwsh pouanexart tw lìgouh epikoinwna diakope gia pˆnw apì èna prokajorismèno qronikì diˆsthma. Mia perptwsh mh aniqneÔsimou sfˆlmato se TCP/IP enai h perptwsh ìpou h diergasa perimènei na lˆbei stoiqea, allˆ de lambˆnei tpote gia kˆpoio diˆsthma. H perptwsh aut  enai adieukrnisth apì thn perptwsh mh aniqneÔsimh diakop  th epikoinwna . Mpore ìmw na antimetwpiste merik¸ mèsw mhqanism¸n {l yh sfugmoÔ}: periodikˆ, stèlnetai èna kenì pakèto ston proorismì kai anamènetai apˆnthsh. An aut  de lhfje, h epikoinwna jewretai diakopesa. Sthn perptwsh tou UDP, ta prˆgmata enai pio perploka, diìti to UDP den uposthrzei to dio kˆpoio mhqanismì anqneush sfalmˆtwn epikoinwna . Gia parˆdeigma, an stale èna datagram se kˆpoio proorismì pou den enai prosbˆsimo , akìmh ki an o phrÔna enhmerwje gia thn apotuqa sthn epikoinwna, genikˆ h diergasa de ja lˆbei kˆpoio m numa sfˆlmato (oi lìgoi xefeÔgoun apì to jèma tou kefalaou autoÔ). 2.11.2

Ulopohsh athsh -apìkrish me anoq  se sfˆlmata

Sthn perptwsh pou èna sÔsthma athsh -apìkrish ulopoietai pˆnw apì UDP, ja prèpei na ulopoihjoÔn mhqanismo pou ja exasfalzoun axiopista, parˆ thn anaxiìpisth fÔsh th epikoinwna . Sugkekrimèna apaitoÔntai dÔo mhqanismo: • Mhqanismì projesmi¸n (timeouts) kai epanametˆdosh (retransmission), o opoo ja exasfalsei apì thn perptwsh ap¸leia datagrams. • Mhqanismì akoloujiak  arjmhsh twn mhnumˆtwn, ¸ste na exasfaliste h antistoqish apokrsewn me ti swstè ait sei , eidikˆ sthn perptwsh pou h seirˆ l yh twn mhnumˆtwn diafèrei apì th seirˆ metˆdosh .

H akoloujiak  arjmhsh enai genikˆ apl  diadikasa, upì thn propìjesh ìti den ja upˆrqei knduno apì wrap around tou metrht . Oi dÔo epikoinwnoÔse


82

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN

pleurè prèpei na diathroÔn mia morf  istorikoÔ me ti teleutae apostolè , ¸ste se perptwsh ap¸leia   anadiˆtaxh twn datagrams na mporoÔn na epanalˆboun thn epikoinwna. Duskolìterh enai h antimet¸pish th ap¸leia datagrams. Sthn apl  perptwsh, o mhqanismì leitourge me grammik  anametˆdosh (linear retransmit). H athsh metaddetai kai o pelˆth anamènei èna sugkekrimèno qrìno, pou onomˆzetai Retransmission Time Out (RTO). An o qrìno perˆsei qwr na èqei ftˆsei apìkrish, epanametaddetai h athsh. Autì epanalambˆnetai ènan arijmì apì forè , prin h diergasa egkataleyei. To prìblhma me thn parapˆnw lÔsh enai h ektmhsh tou qrìnou RTO. Gia na prosdioriste mia stajer  tim  ja prèpei na enai gnwst  h fÔsh tou diktÔou metaxÔ twn epikoinwnous¸n pleur¸n. Akìmh ki an aut  enai gnwst , o katallhlìtero qrìno RTO enai sunˆrthsh tou qrìnou Round Trip Time (RTT) pou enai mia metablht  posìthta. Mia lÔsh pio euèlikth apì th grammik  anametˆdosh prèpei na epanupologzei to katˆllhlo RTO periodikˆ. H akìloujh mèjodo ektmhsh tou RTO protˆjhke apì ton Jacobson kai èqei uiojethje apì to TCP allˆ enai genikìtera qr simo . H mèjodo apaite thn periodik  mètrhsh tou RTT (bl. parakˆtw). Se kˆje mètrhsh Tr , enhmer¸noume dÔo statistikoÔ ektimhtè , tou Ts kai Tv , ìpw parakˆtw: 1 Ts ← Ts + δ 8 1 Tv ← Tv + (|δ| − Tv ) 4 ìpou δ = Tr − Ts . O qrìno RTO ektimˆtai w RT O = Ts + 4Tv

Duì parathr sei : 1. O qrìno Ts onomˆzetai smoothed RTT, en¸ o qrìno Tv onomˆzetai RTT variance. 2. äle oi stajerè sti parapˆnw prˆxei enai dunˆmei tou 2, ¸ste oi pol/smo kai diairèsei na mporoÔn na ulopoihjoÔn me olsjhsh. P¸ ìmw mporoÔme na metr soume to qrìno RTT (Tr ) ¸ste na efarmìsoume ton parapˆnw algìrijmo? Mia apl  mèjodo enai h akìloujh: kˆje m numa athsh sfragzetai me mia qronosfragda apì ton apostolèa. To m numa apìkrish pou antistoiqe sthn athsh aut  antigrˆfei aut  th qronosfragda akrib¸ . àtsi, o pelˆth mpore na ektim sei to qrìno RTT qwr na upˆrqei anˆgkh qr sh koin  bˆsh qrìnou me ton uphrèth,   anˆgkh gia sugqronismì twn rologi¸n. O uphrèth den enai aparathto na gnwrzei to qrìno autì: pˆnta ja apantˆ ìso pio ˆmesa mpore sta mhnÔmata tou pelˆth. àna teleutao shmeo tou mhqanismoÔ projesma /anametˆdosh enai h ekjetik  opisjoq¸rhsh (exponential backoff). H mèjodo ektmhsh tou RTO pou perigrˆfhke parapˆnw ma dnei thn arqik  tim  tou RTO. Wstìso, me kˆje anametˆdosh tou


2.11. ANIQNEUSH KAI ANTIMETWPISH SFALMATWN

83

diou datagram h projesma anamon  ja prèpei na diplasiˆzetai: an sthn pr¸th metˆdosh  tan sh me RTO, sth deÔterh ja enai sh me 2 RTO, sthn epìmenh ja enai sh me 4 RTO k.o.k. Mia teleutaa parat rhsh aforˆ to prwtìkollo RRA (Request-Response-Acknowledge). Sto prwtìkollo autì, o rìlo tou trtou mhnÔmato acknowledge enai na d¸sei thn eukaira ston server na kajarsei mèro tou istorikoÔ tou.


84

KEFALAIO 2. ULOPOIHSH PELATWN KAI UPHRETWN


Kefˆlaio 3 Sust mata Apomakrusmènwn Kl sewn Istorikˆ, oi pr¸te teqnologe logismikoÔ gia anˆptuxh katanemhmènwn susthmˆtwn  tan aplè biblioj ke pou olokl rwnan tou mhqanismoÔ epikoinwna kai poluepexergasa tou leitourgikoÔ sust mato se aplè domè ; pareqan domè ìpw ourè mhnumˆtwn, shmatofore , basik  poluplexa k.o.k. ìpw kai kˆpoie stoiqei¸dei uphrese eurethrou kai ekknhsh (bootstrapping). An kai bohjoÔsanse sqèsh me thn apeujea qr sh mhqanism¸n tou leitourgikoÔ sust mato , oi biblioj ke èpasqan sto ex  :  tan tautìqrona polÔ qamhloÔ epipèdou gia thn anˆptuxh katanohtoÔ kai xekˆjarou k¸dika, allˆ polÔ uyhloÔ epipèdou gia na exasfalsoun metafersimìthta (portability). Epsh , me to na krÔboun th fusik  pleurˆ tou prwtokìllou epikoinwna , èkanan dÔskolh th sunt rhsh (maintainance) twn susthmˆtwn, eidikˆ sth sunergasa metaxÔ diergasi¸n ulopoihmènwn se diaforetikè gl¸sse programmatismoÔ. Gia na antepexèljei ta meionekt mata autˆ h èreuna strˆfhke sth dhmiourga eidikeumènwn glwss¸n programmatismoÔ, ìpou h prospˆjeia  tan na brejoÔn oi suntaktikè domè kai h antstoiqh shmasa (semantics) pou na ekfrˆzoun me komyì kai xekˆjaro trìpo ti basikè teqnikè epikoinwna , poluepexergasa kai sugqronismoÔ. Sta plasia autˆ anaptÔqjhkan dekˆde gl¸sse programmatismoÔ. Kˆpoie apì autè (ìpw pq. h gl¸ssa Ada) br kan shmantik  qr sh sthn anˆptuxh pragmatik¸n susthmˆtwn, ˆlle parèmeinan mìno jewrhtikè kataskeuè (ìpw pq. h gl¸ssa CSP). H èreuna epektˆjhke se ìlo to eÔro twn glwss¸n programmatismoÔ, ìpw o logikì programmatismì (pq. Concurrent Prolog, PARLOG),   o sunarthsiakì programmatismì (pq. Concurrent Lisp, Multilisp, ParAlfl). Diereun jhkan ìloi oi basiko mhqanismo epikoinwna , ìpw sÔgqronh epikoinwna (pq. 85


86

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

Occam), asÔgqronh epikoinwna (pq. NIL, GYPSY), ranteboÔ (Ada, Concurrent C), apomakrusmène kl sei (DP, LYNX), antikeimenostrafe mèjodoi (EPL, Emerald, Sloop), sugqronismì me transactions (Argus, Aeolus). To praktikì meionèkthma th qr sh eidik¸n glwss¸n programmatismoÔ enai gnwstì: h periorismènh upost rixh apì ergalea (debuggers, editors klp) kai biblioj ke , kaj¸ kai to kìsto exoikewsh twn programmatist¸n; gi autì h prosèggish aut  èqei egkataleifje. Wstìso, h epirro  th prospˆjeia aut  sth shmerin  teqnologa enai terˆstia. Oi gl¸sse autè dieukìlunan th melèth twn katanemhmènwn susthmˆtwn se jewrhtikì kai praktikì eppedo. Sunèdesan nohmatikˆ ta katanemhmèna sust mata me ˆlle perioqè , ìpw h parˆllhlh epexergasa kai oi bˆsei dedomènwn. Anèdeixan nèa jewrhtikˆ montèla poluplokìthta . Tèlo , mèsa apì th sugkritik  melèth twn dom¸n kai mhqanism¸n pou protˆjhkan, anadeqjhkan autè pou epètreyan thn metexèlixh th teqnologa sthn uiojèthsh twn antikeimenostraf¸n teqnologi¸n pou qrhsimopoioÔntai s mera. To montèlo pou epikrˆthse metˆ thn pˆrodo twn eidik¸n glwss¸n programmatismoÔ  tan autì twn apomakrusmènwn kl sewn (Remote Procedure Call   gia suntoma RPC). H empeira me ti eidikè gl¸sse programmatismoÔ èdeixe ìti enai ikanì na uposthrxei ti anˆgke th anˆptuxh logismikoÔ megˆlh klmaka . To qarakthristikì tou pleonèkthma enai h sumbatìthtˆ tou me ti diadedomène gl¸sse programmatismoÔ genikoÔ skopoÔ, ìpw oi C, C++, Java k.a. Mèsa apì to montèlo autì anadeqjhke h arqitektonik  pelˆth-uphrèth, h opoa epikrˆthse mèqri ta mèsa tou '90. Sthn dia qronik  perodo h teqnologa logismikoÔ metasqhmatizìtan me thn enswmˆtwsh tou antikeimenostrafoÔ programmatismoÔ. H epdrash twn antikeimenostraf¸n mejìdwn anˆptuxh sthn arqitektonik  pelˆthuphrèth katastˆlaxe gr gora sthn parakˆtw antistoiqa:

klˆsh antikemeno

↔ ↔

uphresa uphrèth

Se sunduasmì me to mhqanismì RPC, h antistoiqa epektenetai w ex  : mèjodo

apomakrusmènh kl sh

Oi trei parapˆnw antistoiqe apoteloÔn mia apl  perigraf  th shmerin  teqnologa twn katanemhmènwn antikeimènwn. Sth sunèqeia ja anaferjoÔme ektenèstera sti apomakrusmène kl sei . äla ta zht mata pou ja perigrˆyoume isqÔoun, me prìsjeth genikˆ poluplokìthta, kai gia katanemhmèna antikemena, ta opoa ja exetˆsoume se bˆjo . 3.1

Apomakrusmène kl sei

H teqnik  twn apomakrusmènwn kl sewn ulopoie to montèlo athsh -apìkrish . An kai genikìterh apì autì, arqikˆ anaptÔqjhke sto montèlo client-server. H basik  arq  enai h ex  : oi ait sei tou pelˆth pro ton uphrèth programmatzontai w kl sei sunart sewn (procedure calls) sth diergasa tou pelˆth. H ektèlesh wstìso th kl sh lambˆnei q¸ra sth diergasa tou uphrèth. H kl sh mpore na èqei side-effects ston uphrèth (p.q. na enhmer¸sei kˆpoio arqeo), allˆ kai na epistrèyei kˆpoia tim  ston pelˆthete kanonik  ektèlesh ete sfˆlmato .


3.1. APOMAKRUSMENE KLHSEI

87

Orismì : Apomakrusmènh kl sh enai mia kl sh pou kaletai se mia diergasa, ekteletai se mia ˆllh, kai epistrèfei thn tim  epistrof  kanonik    sfˆlma sthn arqik  diergasa. Oi sunart sei pou kaloÔntai mèsw apomakrusmènwn kl sewn onomˆzontai apomakrusmène sunart sei (remote procedures.) Ektèlesh apomakrusmènwn kl sewn. O mhqanismì ektèlesh mia apomakrusmènh kl sh èqei ta ex  b mata (blèpe kai Sq. 3.1): 1. Sth diergasa tou pelˆth, o k¸dika kale mia apomakrusmènh sunˆrthsh, pern¸nta kˆpoia orsmata. 2. Ta orsmata th kl sh , maz me ton arijmì tautìthta th sunˆrthsh e1 xwterikeÔontai (externalized), dhl. kwdikopoioÔntai se akolouja duadik¸n dedomènwn, me kajorismèno trìpo (bl. §2.1). 3. Entopzetai h diergasa-uphrèth pou antistoiqe sthn kaloÔmenh apomakrusmènh sunˆrthsh. H epilog  diergasa mpore na exartˆtai apì ti timè twn orismˆtwn. 4. H exwterikeumènh kl sh metaddetai w m numa ston uphrèth, kai o pelˆth emplèketai, perimènonta apˆnthsh. Se perptwsh pou parousiaste sfˆlma sthn epikoinwna, h kl sh epistrèfei me èndeixh sfˆlmato . 5. O uphrèth lambˆnei th exwterikeumènh kl sh kai eswterikeÔei (internalize)2 ta orsmata, dhl. ta anaparˆgei se katˆllhlh eswterik  morf . A shmeiwje ìti ta orsmata pou parˆgontai apì thn eswterkeush den èqoun anagkastikˆ thn dia anaparˆstash me autˆ pou exwterkeuse o pelˆth , p.q. èna array mpore na eswterikeuje w lsta. 6. O uphrèth kale t¸ra thn kl sh me ta eswterikeumèna orsmata. H kl sh mpore na gnei me th dhmiourga nèou n mato   mèsw nèa diergasa . 7. H kl sh th sunˆrthsh termatzetai kai endeqomènw epistrèfei kˆpoia tim . O uphrèth exwterikeÔei thn tim  epistrof  an upˆrqei kai epistrèfei me m numˆ tou ston pelˆth anafèronta pèra th ektèlesh . 8. O pelˆth apemplèketai, eswterikeÔei thn tim  epistrof  (an upˆrqei) kai epistrèfei sto prìgramma. Ta parapˆnw b mata apoteloÔn th basik  diadikasa apomakrusmènh kl sh , se polÔ adrè grammè . Upˆrqoun mia seirˆ apì zht mata pou prèpei na suzhthjoÔn leptomerèstera: • Oi epitrepto tÔpoi orismˆtwn. Gia parˆdeigma, p¸ metaqeirizìmaste èna ìrisma tÔpou pointer? 1 2

Sun¸numoi ìroi enai oi Antstoiqoi ìroi enai oi

marshalled kai serialized. Sthn Python qrhsimopoietai o ìro pickled. unserialize kai unmarshall.


88

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

client proxy

server

call

externalize arguments locate server transfer request

wrapper receive request internalize arguments

wait

execute call externalize response

receive response

transfer response

interalize return return from call

Sq ma 3.1: Ta b mata mia apomakrusmènh kl sh . • H akrib  diadikasa entopismoÔ th diergasa -uphrèth pou ja exuphret sei thn kl sh, allˆ kai epilog  th mejìdou epikoinwna . • H sumperiforˆ tou sust mato katˆ thn emfˆnish blab¸n kai oi trìpoi qeirismoÔ. • Parallagè sth diadikasa kl sh , p.q. asÔgqrone kl sei kai omadikè kl sei . • Oi trìpoi upost rixh tautìqronwn kl sewn. • Zht mata asfˆleia , diapsteush kai exousiodìthsh . • H mejodologa kai ta ergalea anˆptuxh logismikoÔ pou ulopoioÔn ìla ta parapˆnw.

Ta zht mata autˆ ja ma apasqol soun parakˆtw. 3.2

Logismikì apomakrusmènwn kl sewn

Sqedìn kamiˆ gl¸ssa programmatismoÔ genikoÔ skopoÔ, ìpw oi C, C++, Java, FORTRAN, Python, BASIC klp., den uposthrzei to mhqanismì twn apomakrusmènwn kl sewn sto basikì th eppedo. Wstìso, o mhqanismì mpore na uposthriqje


3.2. LOGISMIKO APOMAKRUSMENWN KLHSEWN

89

apì ìle ti gl¸sse , me th qr sh prìsjetou logismikoÔ, to opoo onomˆzetai middleware. Sth aploÔster  tou morf , to middleware pou uposthrzei RPC apoteletai apì: 1. àna tm ma pou asqoletai me thn eswterkeush kai exwterkeush dedomènwn kai th dhmiourga ait sewn-apokrsewn, kai 2. àna tm ma pou asqoletai me th metaforˆ dedomènwn kai energopohsh twn kl sewn. Se metafrazìmene gl¸sse (compiled languages), suqnˆ to pr¸to tm ma ulopoietai katˆ th metˆfrash tou progrˆmmato (compile time), en¸ to deÔtero ulopoietai w biblioj kh katˆ to qrìno ektèlesh (runtime). 3.2.1

Diepafè uphresi¸n

Mia uphresa ulopoihmènh me teqnologa RPC, prosfèretai mèsw mia   perissìterwn apomakrusmènwn sunart sewn, oi opoe sunolikˆ apoteloÔn th diepaf  th uphresa (service interface). Sthn perptwsh th arqitektonik  client-server, oi sunart sei autè ulopoioÔntai kai ekteloÔntai ston uphrèth, en¸ kaloÔntai apì tou pelˆte . Se arqitektonikè omìbajmwn (peer-to-peer) oi sunart sei autè ulopoioÔntai apì ìle ti omìbajme diergase . H ènnoia th diepaf  diafèrei apì thn ènnoia th uphresa . Enai dunatì na upˆrqoun perissìtere apì mia diepafè gia thn dia uphresa. Autì parathretai suqnˆ gia lìgou sumbatìthta ; h beltiwmènh èkdosh mia uphresa prosfèretai mèsa apì mia ananewmènh diepaf , allˆ h palaiìterh diepaf  uposthrzetai epsh (qwr bèbaia kal  prìsbash sta nèa qarakthristikˆ th uphresa ). Upˆrqei epsh diaforˆ metaxÔ diepaf  kai prwtokìllou. H diepaf  enai mia d lwsh uyhloÔ epipèdou twn apomakrusmènwn sunart sewn pou apartzoun mia uphresa, en¸ to prwtìkollo enai h leptomer  prodiagraf  ulopohsh twn apomakrusmènwn kl sewn. Se orologa glwss¸n programmatismoÔ, mia diepaf  antistoiqe sth d lwsh epikefalda mia   perissotèrwn sunart sewn kai to prwtìkollo ston trìpo ulopohsh (p.q. apì k¸dika mhqan  ) twn kl sewn gia mia sugkekrimènh arqitektonik . Enai loipìn pijanì, h dia diepaf  mia uphresa na ulopoietai apì pollaplˆ prwtìkolla. 3.2.2

Esw/exwterkeush katˆ to qrìno metˆfrash

H mình plhrofora pou apaitetai gia thn paragwg  tou aparathtou k¸dika gia thn esw/exwterkeush dedomènwn se apomakrusmène sunart sei enai h upograf  (signature) th apomakrusmènh sunˆrthsh . P.q. h parakˆtw d lwsh sunˆrthsh se C/C++ perièqei ìlh thn plhrofora pou apaitetai. int foo(int a, char* b, double c);


90

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

Prìgramma 3.1 Stubs gia th sunˆrthsh foo sth gl¸ssa C. 1 2 3 4 5 6

/∗ c l i e n t stub ∗/ / ∗ some c o d e ∗ / # d e f i n e FUNCODE foo 1003 i n t f o o ( i n t a , char ∗ b , d o u b l e c ) { int ret ; s e r i a l i z e r ∗s = c r e a t e s e r i a l i z e r ( ) ;

7

serialize int (s , a ); serialize string (s , b ); serialize double (s , c ); s = s e n d r e q u e s t ( FUNCODE foo , s ) ; u n s e r i a l i z e i n t ( s , &r e t ) ; destroy serializer (s );

8 9 10 11 12 13 14

return r e t ;

15 16

}

17 18 19 20

/∗ server stub ∗/ t yp ed ef void (∗ d i s p a t c h e r ) ( s e r i a l i z e r ∗ , s e r i a l i z e r ∗ ) ; dispatcher dispatch table [ ];

21 22 23 24 25 26 27

void d i s p a t c h f o o ( s e r i a l i z e r ∗ s i n , s e r i a l i z e r ∗ s o u t ) { int a ; char ∗ b ; double c ; int ret ;

28 29 30 31 32 33 34 35

u n s e r i a l i z e i n t ( s i n , &a ) ; u n s e r i a l i z e s t r i n g ( s i n , &b ) ; u n s e r i a l i z e d o u b l e ( s i n , &c ) ; r e t = foo ( a , b , c ) ; s e r i a l i z e i n t ( s out , r e t ) ; } d i s p a t c h t a b l e [ FUNCODE foo ] = d i s p a t c h f o o ;

H paragwg  tou aparathtou k¸dika gnetai se dÔo mèrh, pou onomˆzontai stubs, èna gia ton pelˆth (client stub) kai èna gia ton uphrèth (server stub). Mia pijan  ulopohsh twn stubs gia thn parapˆnw sunˆrthsh foo fanetai sto Prog. 3.1. Sth diergasa pelˆth sundèetai mia sunˆrthsh, pou fèrei to ìnoma th apomakrusmènh sunˆrthsh foo, o orismì th opoa den ulopoie bèbaia th leitourgikìthta th uphresa ; to èrgo th enai na exwterikeÔsei ti timè twn paramètrwn th kl sh me trìpo katˆllhlo gia metˆdosh. Autì epiteletai apì ton serializer. Katìpin, kaletai h sunˆrthsh send request, me parˆmetro ton kwdikì th antstoiqh sunˆrthsh FUNCODE foo h opoa ulopoie th metˆdosh th athsh kl sh kai th l yh th apˆnthsh . Metˆ th l yh th apˆnthsh , h tim  epistro-


91

3.2. LOGISMIKO APOMAKRUSMENWN KLHSEWN

f  eswterikeÔetai kai epistrèfetai. H sunˆrthsh aut , pou katˆ kˆpoio trìpo energe w antiprìswpo th apomakrusmènh sunˆrthsh sth diergasa-pelˆth, onomˆzetai proxy (plhrexoÔsio ). O k¸dika twn proxy sunart sewn apotele mèro tou client stub. Sth diergasa uphrèth, ta kaj konta tou server stub enai summetrikˆ kai ta epitele mia eidik  sunˆrthsh wrapper ( {peritÔligma} ) me to ìnoma dispatch foo. H sunˆrthsh aut  èqei upograf  anexˆrthth apì aut n th sunˆrthsh foo pou peritulgei: void (*)(serializer *, serializer*)

H dieÔjunsh th sunˆrthsh aut  apojhkeÔetai se ènan pnaka pou organ¸netai me kleid ton kwdikì th antstoiqh apomakrusmènh sunˆrthsh (ed¸, th stajerˆ FUNCODE foo). To sÔsthma runtime pou lambˆnei thn antstoiqh athsh kl sh , anazhte th sunˆrthsh ston pnaka autìn kai thn kale. Ta kaj konta {peritÔlixh } aforoÔn basikˆ th diaqerish twn paramètrwn kl sh kai epistrof  . Oi parˆmetroi th kl sh eswterikeÔontai se topikè metablhtè kai kaletai me autè h pragmatik  sunˆrthsh foo. Me to pèra th kl sh , exwterikeÔetai kai epistrèfetai h tim  epistrof  . 3.2.3

Gl¸sse OrismoÔ Diepaf¸n

Sun jw , h paragwg  twn stubs gnetai apì eidikì compiler, o opoo dèqetai w esodo èna arqeo pou perigrˆfei ti upografè twn apomakrusmènwn sunart sewn, ekfrasmène se mia gl¸ssa katˆllhlh gia dhl¸sei . Ston parakˆtw k¸dika fanetai h d lwsh mia tètoia sunˆrthsh , me to ìnoma hello. 1 2 3 4 5

program rpcdemo { version hello1 { string hello ( string ) = 1; } = 1; } = 3800000;

O k¸dika autì akolouje ta prìtupa tou sust mato Sun RPC, enì apì ta paliìtera sust mata RPC, pou to anèptuxe sta tèlh tou '80 h etaira Sun Microsystems. Sthn pragmatikìthta, o parapˆnw k¸dika orzei mia diepaf  me to ìnoma rpcdemo, kaj¸ kai mia èkdosh th diepaf  me to ìnoma hello1, h opoa perilambˆnei mia mìno apomakrusmènh sunˆrthsh. Se mia tupik  perptwsh, o parapˆnw k¸dika ja  tan apojhkeumèno se èna arqeo me epèktash .x p.q. sto rpcdemo.x. H paragwg  twn katˆllhlwn stubs gia th gl¸ssa C gnetai apì èna prìgramma me to ìnoma rpcgen. % rpcgen rpcdemo.x % ls rpcdemo* rpcdemo.h rpcdemo.x

rpcdemo_clnt.c

rpcdemo_svc.c

To prìgramma rpcgen ja parˆgei tra arqea, to rpcdemo.h pou perièqei dhl¸sei stajer¸n kai sunart sewn, to rpcdemo clnt.c pou perièqei to client stub kai to rpcdemo svc.c pou perièqei to server stub.


92

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

H gl¸ssa pou dèqetai to prìgramma rpcgen enai mia apl  gl¸ssa orismoÔ dieLanguage), pou suntomografetai w IDL apì ta arqikˆ twn agglik¸n lèxewn. Upˆrqoun pollè gl¸sse orismoÔ diepaf¸n; sun jw kˆje platfìrma RPC èqei th dik  th IDL. Se kˆje tètoia platfìrma RPC upˆrqei kai o antstoiqo IDL compiler (tètoio enai to prìgramma rpcgen) o opoo metafrˆzei k¸dika IDL se antstoiqa stubs gia diˆfore gl¸sse programmatismoÔ. paf¸n (Interface Definition

3.2.4

Esw/exwterkeush me

reflection

Se pollè gl¸sse programmatismoÔ, ìpw pq. h Python kai h Java, enai dunatì o qeirismì dedomènwn apì genikì k¸dika (generic code), pou den perièqei sugkekrimènh plhrofora gia tou tÔpou twn dedomènwn pou qeirzetai. H dunatìthta aut  onomˆzetai reflection (katoptrismì ). H Ôparxh reflection se mia gl¸ssa dnei th dunatìthta na ulopoihje mhqanismì RPC qwr th qr sh IDL compiler. O mhqanismì ulopoie me genikì k¸dika dÔo stubs: sth meriˆ tou pelˆth qrhsimopoietai to generic proxy en¸ sthn pleurˆ tou uphrèth to generic wrapper. Autìmath esw/exwterkeush ätan mia gl¸ssa uposthrzei reflection, enai efikt  h ulopohsh mia genikoÔ skopoÔ biblioj kh esw/exwterkeush . Sthn Python h biblioj kh aut  ulopoietai apì to module Pickle. To module autì mpore na esw/exwterikeÔsei tou perissìterou basikoÔ tÔpou th Python, sumperilambanomènwn twn apl¸n arijmhtik¸n kai alfarijmhtik¸n tÔpwn, kaj¸ kai twn tuple, list kai dict. Mpore epsh na esw/exwterikeÔsei opoiod pote {kanonikì} antikemeno, dhlad  kˆje antikemeno pou ìla ta peda tou enai esw/exwterikeÔsima. Gia antikemena me eidikè apait sei , o programmatist  mpore na orsei katˆllhle mejìdou , ìpw p.q. ti __getstate__/__setstate__, me ti opoe mpore na elègxei th diadikasa esw/exwterkeush . Ulopohsh RPC me reflection Ektì apì thn autìmath esw/exwterkeush, mia ˆllh qr simh dunatìthta pou prosfèrei to reflection enai h dunatìthta orismoÔ kl sewn me metablhtì arijmì paramètrwn, ìpw kai h kl sh sunˆrthsh me genikoÔ tÔpou paramètrou (p.q. èna tuple apì antikemena). O k¸dika pou emfanzetai sta Prog. 3.2 kai Prog. 3.3 ulopoie ta client kai server stubs antstoiqa gia ènan polÔ aplì mhqanismì RPC. (Shm. O k¸dika qrhsimopoie to bohjhtikì k¸dika pou emfanzetai sto Prog. 3.4). To generic proxy ulopoietai w mia klˆsh pou kˆje instance th antistoiqe se mia apomakrusmènh sunˆrthsh. H kˆje apomakrusmènh sunˆrthsh prosdiorzetai apì thn IP dieÔjunsh tou server pou thn ulopoie kai apì èna string pou qrhsimeÔei w ìnoma gia th sunˆrthsh. H klˆsh aut  ulopoie th mèjodo __call__, pou kaletai ìtan kˆpoio antikemeno th klˆsh qrhsimopoietai w sunˆrthsh. H esw/exwterkeush twn paramètrwn kai th tim  epistrof  gnetai me th qr sh tou module Pickle, sugkekrimèna twn sunart sewn loads kai dumps.


3.2. LOGISMIKO APOMAKRUSMENWN KLHSEWN

Prìgramma 3.2 Generic proxy sth gl¸ssa Python. 1

import s y s , p i c k l e , s o c k e t , pymsg

2 3 4 5 6 7 8

class rpc proxy : def init ( s e l f , funcode , i p a d d r ) : s e l f . funcode , s e l f . i p a d d r = funcode , i p a d d r c a l l ( s e l f , ∗ a r g s , ∗∗ k w a r g s ) : def r e q u e s t = ( s e l f . funcode , args , kwargs ) r e q u e s t m s g = p i c k l e . dumps ( r e q u e s t )

9 10 11 12 13

s o c k = pymsg . c o n n e c t t o s e r v e r ( s e l f . i p a d d r ) pymsg . s e n d m s g ( sock , r e q u e s t m s g ) r e p l y m s g = pymsg . r e c v m s g ( s o c k ) sock . c l o s e ( )

14 15 16 17

rettype , r e t = pickle . loads ( reply msg ) i f r e t t y p e ==1: r a i s e r e t e l s e : return r e t

18 19 20 21 22 23

# ∗∗∗ Example ∗∗∗ n a m e == ’ m a i n ’ : if # d e f i n e remote procedures h e llo = rpc proxy ( ’ h e llo ’ , ( ’ 127.0.0.1 ’ , 9182)) divide = rpc proxy ( ’ divide ’ , ( ’ 127.0.0.1 ’ , 9182))

24 25 26 27

# rpc c a l l : normal r e t u r n p r i n t h e l l o ( ’ vsam ’ ) print divide (10 ,3)

28 29 30 31 32 33 34 35

# rpc c a l l : e x c e p t i o n try : print divide (1 ,0) except Exception , e : print ” Exception returned : ” , e try : print divide (1 ,3 ,4) except Exception , e : print ” Exception returned : ” , e

93


94

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

Prìgramma 3.3 Generic wrapper sth gl¸ssa Python. 1

import s y s , p i c k l e , pymsg

2 3 4 5

d e f u n k n o w n r e m o t e p r o c ( ∗ a r g s , ∗∗ k w a r g s ) : r a i s e NameError , ” r e m o t e p r o c e d u r e n o t f o u n d ” d i s p a t c h t a b l e = {}

6 7 8 9

def rpc wrapper ( request msg ) : request = pickle . loads ( request msg ) funcode , args , kwargs = r e q u e s t

10

func = d i s p a t c h t a b l e . g e t ( funcode , unknown remote proc ) try : r e t t y p e , r e t = 0 , f u n c ( ∗ a r g s , ∗∗ k w a r g s ) except : rettype , r e t = 1 , sys . exc info ( ) [ 1 ]

11 12 13 14 15 16

reply = ( rettype , ret ) r e p l y m s g = p i c k l e . dumps ( r e p l y ) return reply msg

17 18 19 20 21

# ∗∗∗ Example ∗∗∗

22 23 24 25 26

if

n a m e == ’ m a i n ’ : # d e f i n e remote procedures d e f h e l l o ( name ) : r e t u r n ” H e l l o ”+name d i s p a t c h t a b l e [ ’ h e l l o ’ ]= h e l l o

27 28 29

def d i v i d e ( x , y ) : return x / y d i s p a t c h t a b l e [ ’ d i v i d e ’ ]= d i v i d e

30 31 32 33 34 35 36

# start server d e f h a n d l e r p c ( sock , a d d r ) : r e q = pymsg . r e c v m s g ( s o c k ) resp = rpc wrapper ( req ) pymsg . s e n d m s g ( sock , r e s p ) pymsg . s e r v e f o r e v e r ( 9 1 8 2 , h a n d l e r p c )


3.2. LOGISMIKO APOMAKRUSMENWN KLHSEWN

95

Prìgramma 3.4 Bohjhtikì k¸dika gia ta Prog. 3.2 kai 3.3, pou ulopoie to module pymsg. 1 2

import s o c k e t from s t r u c t import pack , unpack , c a l c s i z e

3 4 5 6

def e n c o d e l e n ( l ) : return pack ( ’ l ’ , s o c k e t . h t o n l ( l ) ) d e f d e c o d e l e n ( lm ) : r e t u r n s o c k e t . n t o h l ( u n p a c k ( ’ l ’ , lm ) [ 0 ] ) c l a s s P r o t o c o l V i o l a t i o n ( E xcept i on ) : pass

7 8 9 10 11 12 13 14 15 16

# r e c e i v e e x a c t l y n b y t e s from t h e s o c k e t d e f r e c v n ( sock , n ) : msg = ’ ’ w h i l e l e n ( msg)<n : s = sock . r ecv ( n ) i f len ( s )==0: raise ProtocolViolation , ” socket closed ” msg += s r e t u r n msg

17 18 19

d e f s e n d m s g ( sock , msg ) : s o c k . s e n d a l l ( e n c o d e l e n ( l e n ( msg ) ) + msg )

20 21 22

def recv msg ( sock ) : r e t u r n r e c v n ( sock , d e c o d e l e n ( r e c v n ( sock , c a l c s i z e ( ’ l ’ ) ) ) )

23 24 25 26 27

def c o n n e c t t o s e r v e r ( addr ) : s = s o c k e t . s o c k e t ( s o c k e t . AF INET , s o c k e t . SOCK STREAM) s . connect ( addr ) return s

28 29 30 31 32 33 34 35

def s e r v e f o r e v e r ( port , r e q u e s t h a n d l e r ) : l s o c k = s o c k e t . s o c k e t ( s o c k e t . AF INET , s o c k e t . SOCK STREAM) lsock . bind ( ( ’ ’ , p o r t ) ) lsock . l i s t e n (1) while True : sock , a d d r = l s o c k . a c c e p t ( ) r e q u e s t h a n d l e r ( sock , a d d r )

To generic wrapper ulopoietai w sunˆrthsh, h opoa èqei w kaj kon ton entopismì kai thn kl sh th katˆllhlh apomakrusmènh sunˆrthsh sto dispatch_table me bˆsh to ìnoma pou perièqetai sthn athsh. Sti eujÔne tou wrapper perilambˆnetai kai o qeirismì th tim  epistrof  kai h sÔllhyh ìpoiou tuqìn exception epistrèfei h apomakrusmènh sunˆrthsh. H ulopohsh pou paratjetai ed¸ enai stoiqeiwd¸ apl , akatˆllhlh gia qr sh se efarmogè , afoÔ den perilambˆnei mhqanismoÔ elègqou kai auxhmènh apìdosh ìpw auto pou ja perigrafoÔn sth sunèqeia tou kefalaou autoÔ.


96

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

Mhqanismo sth Java H gl¸ssa Java parousiˆzei megˆlo endiafèron sta katanemhmèna sust mata. Enai qarakthristikì ìti, en¸ prìkeitai gia metafrazìmenh (compiled) gl¸ssa, entoÔtoi uposthrzei reflection. Enai loipìn efikt  h ulopohsh mhqanism¸n RPC kai me tou dÔo trìpou pou parousiˆsthkan parapˆnw. Prˆgmati, h Sun (h etaira pou prowje th Java) prosfèrei mia seirˆ apì platfìrme RPC, pou baszontai se èna sunduasmì apì teqnikè : CORBA: H platfìrma aut  enai kajarˆ basismènh se stubs paragìmena apì ton IDL compiler. MBeans: H lÔsh aut  ulopoie pl rw dunamik  dunatìthta RPC. Java RMI: O mhqanismì autì enai ubridikì : en¸ qrhsimopoietai IDL compiler gia thn paragwg  stubs, wstìso upˆrqei shmantik  allhlepdrash me ti biblioj ke autìmath esw/exwterkeush th Java (o mhqanismì onomˆzetai Object Serialization). O sunduasmì autì epitrèpei pio euèlikto pèrasma paramètrwn.

3.3

Orsmata se apomakrusmène kl sei

Apì thn pleurˆ tou programmatist , ja  tan epijumht  h katˆ to dunatìn omoiìmorfh sumperiforˆ metaxÔ kanonik¸n kai apomakrusmènwn kl sewn, ¸ste na enai eukolìterh h ulopohsh pelat¸n, allˆ kai uphret¸n. àna basikì shmeo diaforˆ metaxÔ aut¸n twn dÔo eid¸n kl sewn enai to pèrasma paramètrwn. 3.3.1

Jewrhtikˆ stoiqea kai anaparˆstash tÔpwn

ProtoÔ analÔsoume peraitèrw ta zht mata pou aforoÔn ta orsmata sti apomakrusmène kl sei , ja upenjumsoume ta basikˆ stoiqea glwss¸n programmatismoÔ pou aforoÔn ta zht mata autˆ. Aplo tÔpoi Sthn pio apl  perptwsh, oi parˆmetroi mia kl sh enai timè kˆpoiou aploÔ floting point, enums, qarakt re , strings, k.l.p. Ta strings mporoÔn na jewrhjoÔn w arrays qarakt rwn (ìpw p.q. sti gl¸sse C, C++, FORTRAN),   na enai autìnomoi tÔpoi (ìpw p.q. sti gl¸sse Java, Python klp.) äloi auto oi tÔpoi èqoun saf¸ kajorismène timè . Katatˆssontai epsh se tÔpou stajeroÔ m kou (p.q. 32-bit akèraioi, floating point) kai metablhtoÔ m kou (p.q. strings, akèraioi metablhtoÔ m kou ). Gia na sumbolsoume tou aploÔ tÔpou , sun jw qrhsimopoioÔme aplˆ onìmata, p.q. int32, string, double, klp. tÔpouakèraioi,


3.3. ORISMATA SE APOMAKRUSMENE KLHSEI

97

Suntijèmenoi tÔpoi àna suntijèmeno tÔpo (composite type) orzetai w èna monodiˆstato array, struct   union pou ta stoiqea tou enai ete aplo ete ˆlloi suntijèmenoi tÔpoi. àstw t, t1 , t2 , . . . suntijèmenoi tÔpoi. Me t[] sumbolzetai to monodiˆstato array me stoiqea tÔpou t (o tÔpo autì lègetai tÔpo bˆsh base typetou array). Me < t1 , t2 , . . . , tk > sumbolzetai to struct k pedwn me stoiqea twn antstoiqwn tÔpwn, en¸ me {t1 , t2 , . . . , tk } sumbolzetai antstoiqa to union. Gia parˆdeigma, h èkfrash < string, {int, string}, double[][] >

orzei èna struct me tra peda, me tÔpou antstoiqa string, union enì int   string kai disdiˆstatou array apì double. Eidikˆ gia ta arrays upˆrqei èna leptì shmeo pou anafèretai sto mègejo pou autˆ mpore na èqoun. O orismì pou d¸same parapˆnw den periorzei to m ko tou array. Antjeta, ja mporoÔsame na orsoume ton tÔpo array w t[n], ìpou h upoqrewtik  parˆmetro n antistoiqe sto m ko tou array. Wstìso, èna tètoio tÔpo enai apìluta antstoiqo me èna struct n stoiqewn tÔpou t. Enallaktikˆ, ja mporoÔse na oriste ìti to n ja enai to mègisto m ko tou array. Kai autì o orismì èqei apodeiqje sthn prˆxh na mhn prosfèrei shmantikˆ pleonekt mata. Anadromiko tÔpoi àna basikì periorismì twn suntijèmenwn tÔpwn enai ìti o orismì tou den mpore na enai anadromikì . Gia parˆdeigma, enai adÔnato na orsei kane ton tÔpo {sundedemènh lsta} ¸ suntijèmeno tÔpo. Gia kˆti tètoio, qreiˆzetai h dunatìthta na sunjèsoume tÔpou me anadromikè ekfrˆsei . P.q. èna orismì th {lsta akerawn} ja mporoÔse na enai o ex  : intlist = {null, < int, intlist >}.

Sto parˆdeigma autì, qrhsimopoietai o tÔpo null pou enai èna aplì tÔpo me mia mìno tim , thn opoa sumbolzoume sun jw me to sÔmbolo ⊥. àtsi, o tÔpo {lsta akerawn} {isoÔtai} me to union dÔo tÔpwn, tou null kai enì struct pou to 2o pedo tou enai lsta akerawn!! Katˆ anˆlogo trìpo mporoÔme na orsoume èna duadikì dèntro me string kleidiˆ: tree = {null, < string, tree, tree >}.

Oi tÔpoi pou orzontai apì anadromikè exis¸sei ìpw oi parapˆnw, onomˆzontai types).

anadromiko tÔpoi (recursive

Klˆsei Ston antikeimenostraf  programmatismì emfanzetai h gnwst  ma ènnoia th klˆsh . Oi klˆsei enai kai autè tÔpoi, pou oi timè tou onomˆzontai antikemena. Oi klˆssei mpore na enai aplo tÔpoi (p.q. sthn Java oi klˆsei Object, Integer


98

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

kai String), suntijèmenoi   anadromiko tÔpoi. Kˆje antikemeno èqei tautìthta, OID (apì ta arqikˆ tou object identity), h opoa de metabˆlletai katˆ th diˆrkeia Ôparxh tou antikeimènou. Se kˆpoie gl¸sse programmatismoÔ, tautìthta tou antikeimènou jewretai h jèsh pou autì enai apojhkeumèno sthn kÔria mn mh. àna ˆllo qarakthristikì gn¸risma twn klˆsewn enai h upost rixh mejìdwn elègqou tou kÔklou zw  (life cycle) twn antikeimènwn, me pio gnwstoÔ tou constructors kai destructors. Anaforè 3.3.2

Pèrasma orismˆtwn

Jumzoume kˆpoie basikè ènnoie apì ti gl¸sse programmatismoÔ. Kˆje tÔpo mpore na pˆrei ènan arijmì apì timè . Oi timè autè onomˆzontai r-values. Oi timè enai apojhkeumène sth mn mh. Mia jèsh mn mh pou apojhkeÔei kˆpoio r-value onomˆzetai l-value. Paradegmata l-values enai oi metablhtè , ta keliˆ enì array, ta peda enì struct, to dio to struct klp. Se kˆje scope orzetai èna arijmì apì onìmata metablht¸n kai se kˆje ìnoma antistoiqe kˆpoio l-value. Ta orsmata mia sunˆrthsh enai metablhtè th sunˆrthsh kai qrhsimopoioÔntai apì to s¸ma th sunˆrthsh gia anˆgnwsh kai eggraf  tim¸n. W metablhtè , ja èqoun ki autè kˆpoio l-value, to opoo ja perièqei kˆpoio r-value. Se kˆje kl sh, ta orsmata arqikopoioÔntai. Se kˆje ìrisma dnetai èna l-value to opoo apojhkeÔei kˆpoio r-value. O akrib  trìpo arqikopohsh diafèrei anˆmesa sti diˆfore gl¸sse programmatismoÔ, en¸ kˆpoie gl¸sse uposthrzoun pˆnw apì ènan trìpo arqikopohsh . Arqikopohsh orsmato w tim  (call-by-value) Sthn perptwsh aut , pou enai kai h aploÔsterh, to kˆje ìrisma th kl sh antiproswpeÔei èna proswrinì l-value, to opoo upˆrqei mìno katˆ th diˆrkeia ektèlesh th sunˆrthsh . To l-value autì arqikopoietai me èna r-value pou apojhkeÔetai se autì prin thn kl sh. Metˆ thn olokl rwsh th kl sh kai akrib¸ prin aut  epistrèyei, to l-value autì apeleujer¸netai kai h apojhkeumènh se autì tim  katastrèfetai. Se pollè gl¸sse programmatismoÔ (p.q. Python, C, Java) aut  enai h monadik  mèjodo perˆsmato orismˆtwn se kl sei . Sti gl¸sse autè , h sunˆrthsh den epistrèfei ˆmesa kamiˆ tim  ektì apì thn tim  epistrof  . Fusikˆ, h sunˆrthsh mpore na epistrèyei èmmesa kˆpoia tim , mèsw kˆpoia global metablht  . Pèrasma orsmato w anaforˆ (call-by-reference) Mia enallaktik  mèjodo perˆsmato orismˆtwn se mia kl sh enai h kl sh me anaforˆ. Sth mèjodo aut , to ìrisma th kl sh arqikopoietai se kˆpoio upˆrqon l-value apì to scope tou kaloÔnta k¸dika. Katˆ sunèpeia, kˆje metabol  (p.q. apoj keush) sthn metablht  tou orsmato , ja diathrhje kai metˆ ton termatismì th kl sh kai ja enai diajèsimh ston kaloÔnta k¸dika.


3.3. ORISMATA SE APOMAKRUSMENE KLHSEI

99

To pleonèkthma aut  th mejìdou ènanti th mejìdou call-by-value ègkeitai sto ìti epitrèpei thn epistrof  pollapl¸n tim¸n apì mia sunˆrthsh, apojhkeÔonta ti se l-values tou kaloÔnto scope. Parˆdeigma. H gl¸ssa C++ uposthrzei call-by-reference. àstw ìti èqoume ton k¸dika: 1 2

v o i d f o o ( i n t& x ) { x ++; b a r ( x ) ; } v o i d b a r ( i n t& a ) { a ++; }

3 4 5 6

... i n t x =3; foo ( x ) ; / ∗ x w i l be 5 ∗ /

H sunˆrthsh foo dèqetai èna akèraio ìrisma by reference to opoo auxˆnei katˆ 1 kai to pernˆ epsh by reference sth sunˆrthsh bar. Reference mèsw pointers. Enallaktikˆ, se gl¸sse pou uposthrzoun pointers, ìpw p.q. h gl¸ssa C, mporoÔme na exomoi¸soume to pèrasma me anaforˆ enì orsmato , allˆzonta ton tÔpo tou orsmato apì ton arqikì tÔpo t ston tÔpo pointer se t. Sthn prˆxh, h qr sh pointers apì mia gl¸ssa programmatismoÔ prosfèrei praktikˆ ofèlh parìmoia me th dunatìthta call-by-reference.3

Pèrasma orsmato me ìnoma (call-by-name) H mèjodo aut  efarmìzetai se elˆqista sust mata. Sthn kaloÔmenh sunˆrthsh dnetai kˆpoio sumbolikì (suqnˆ alfarijmhtikì) ìnoma, to opoo h kaloÔmenh sunˆrthsh mpore na qrhsimopoi sei gia na prospelˆsei (mèsw kˆpoiou mhqanismoÔ anaz thsh , p.q. enì hash table) thn antstoiqh tim . Enai dunatì na qrhsimopoihje to ìnoma kai gia thn epistrof  tim¸n apì thn kl sh. Pèrasma orsmato me antigraf  (call-by-copy) H mèjodo aut  prospaje na prosomoi¸sei to pèrasma me anaforˆ, gia qr sh se katanemhmèna sust mata. Prwto-emfansthke sthn Ada san enallaktik  mèjodo tou call-by-reference. Enai epsh gnwst  w call-by-value-result. Enai h pio klassik  mèjodo se katanemhmèna sust mata. Sth mèjodo aut , ìpw kai sthn call-by-value, ìla ta orsmata mia kl sh antiproswpeÔoun proswrinˆ l-values, ta opoa dhmiourgoÔntai amèsw prin thn ektèlesh th kl sh kai apodesmeÔontai amèsw metˆ. Wstìso, h arqikopohsh tou gnetai me diaforetikì trìpo. H ektèlesh th kl sh gnetai se trei fˆsei : 1. Fˆsh copy-in. Arqikˆ, desmeÔetai q¸ro gia ta l-values gia ìla ta orsmata. Katìpin, gia kˆpoiaìqi aparait tw ìlaapì ta orsmata, ta antstoiqa l-values arqikopoioÔntai me katˆllhla r-values. 2. Ekteletai to s¸ma th sunˆrthsh kanonikˆ. 3

Wstìso, oi

pointers jewroÔntai apì kˆpoiou anepijÔmhto mhqanismì gia mia gl¸ssa programmatismoÔ.


100

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

3. Fˆsh copy-out, katˆ thn opoa, gia kˆpoia apì ta orsmata, oi apojhkeumène r-values antigrˆfontai se jèsei (l-values) tou kaloÔnto scope. Katìpin, apodesmeÔontai ìla ta l-values twn orismˆtwn. Oi sunart sei th Ada, ìpw kai twn ˆllwn mhqanism¸n pou qrhsimopoioÔn aut  th mèjodo, uposthrzoun tri¸n eid¸n orsmata: in orsmata, pou parnoun timè katˆ to copy-in, allˆ den ìpw sthn perptwsh call-by-value. out orsmata, pou antistoiqoÔn se l-values tou kaloÔnto scope. Ta orsmata autˆ den arqikopoioÔntai katˆ th fˆsh copy-in, allˆ oi timè tou antigrˆfontai sta antstoiqa l-values tou kaloÔnto scope katˆ to copy-out. in-out orsmata, pou prosomoiˆzoun me ti out paramètrou , me th diaforˆ ìti parnoun arqik  tim  apì to kalìn scope katˆ to copy-in. 3.3.3

Ulopohsh apomakrusmènwn kl sewn me

call-by-copy

H mèjodo call-by-copy enai epijumht  gia apomakrusmène kl sei , kaj¸ prosomoiˆzei arketˆ kalˆ, w pro ta apotelèsmatˆ th , me th mèjodo call-by-reference se sumbatikè kl sei . Parìlo pou h mèjodo uposthrzetai apì arketè platfìrme apomakrusmènwn kl sewn, oi perissìtere jètoun periorismoÔ , kurw w pro thn perptwsh twn orismˆtwn pou perièqoun pointers. Gia na entopsoume to prìblhma, ja ergastoÔme me to ex  parˆdeigma: èqoume mia apomakrusmènh kl sh pou dèqetai èna ìrisma inout, tÔpou intlist: intlist = {null, < int, intlist >}.

O tÔpo autì ulopoietai eÔkola me th qr sh pointers, apì èna aplì struct. Sto parakˆtw diˆgramma fanetai mia tètoia lsta intlist m kou 4, h opoa enai apojhkeumènh sth metablht  L. L

1

2

3

4

àstw ìti èqoume mia apomakrusmènh kl sh Foo, me upograf  void Foo(inout intlist l)

Ekteletai h kl sh Foo(L) kai h ulopohsh th Foo epifèrei ti parakˆtw allagè stou kìmbou th lsta :

L

1

2

5

3

4


101

3.4. EKTELESH APOMAKRUSMENWN KLHSEWN

Dhlad , o kìmbo 2 ˆllaxe gia na deqnei sto nèo kìmbo 5, kai o kìmbo 4 ˆllaxe gia na deqnei ston kìmbo 3. To endiafèron shmeo arqzei ed¸: poiè apì autè ti metabolè ja antigrafoÔn psw (copy-out) ston kaloÔnta k¸dika? Asfal¸ , an h kl sh ma den  tan katanemhmènh allˆ topik , to er¸thma ja  tan tetrimmèno: ìle oi metabolè ja  tan oratè ston kaloÔnta, lìgw koin  mn mh . Wstìso, sthn perptwsh th apomakrusmènh kl sh , oi ìpoie metabolè antigrafoÔn ston kaloÔnta, ja ofelontai sthn ulopohsh th fˆsh copy-out apì ta stubs. Se pragmatikˆ sust mata katanemhmènwn kl sewn èqoun ulopoihje oi parakˆtw parallagè : • Kamiˆ metabol  th lsta L den epistrèfetai. To skeptikì enai ìti h Foo den allˆzei thn tim  (pointer) pou enai apojhkeumènh sth metablht  L. Oi upìloipe metabolè ja qajoÔn. Aut  h ulopohsh den enai kajìlou ikanopoihtik  prosèggish th call-by-reference. Apì pleurˆ leitourga , enai sqedìn tautìshmh me call-by-value. • Epistrèfetai h metabol  ston kìmbo 2 kaj¸ kai o nèo kìmbo 5. Wstìso, h metabol  ston kìmbo 3 den epistrèfetai. €ra, metˆ thn epistrof  th Foo, o kal¸n k¸dika ja èqei thn parakˆtw katˆstash: L

1

2

5

3

4

H mèjodo aut  diaforopoietai apì thn call-by-reference, allˆ enai h mèjodo pou ulopoioÔn ìla sqedìn ta sust mata RPC pou uposthrzoun pointers, me kuriìtero to DEC RPC. • Epistrèfontai ìle oi metabolè . Aut  h lÔsh enai h plèon ikanopoihtik  kai prìsfata ulopoi jhke kai melet jhke apì tou Tilevich kai Smaragdakis sto NRMI, èna sÔsthma apomakrusmènwn kl sewn gia th gl¸ssa Java. Ta peirˆmata me to NRMI deqnoun ìti h mèjodo aut  enai ikanopoihtikˆ gr gorh kai apl  sthn ulopohsh. Enai mˆlista egguhmèno ìti enai apìluta isodÔnamh me thn call-by-reference sth sunhjismènh perptwsh pou (a) o kal¸n (client) ekteletai mononhmatikˆ, kai (b) o server den apojhkeÔei antikemena prosbˆsima apì ta orsmata mia kl sh , metˆ to pèra th kl sh . 3.4

Ektèlesh apomakrusmènwn kl sewn

Ja melet soume t¸ra kˆpoia basikˆ zht mata ektèlesh apomakrusmènwn kl sewn pou aforoÔn thn epikoinwna meetaxÔ pelˆth kai uphrèth, kaj¸ kai thn poluepexergasa ston uphrèth. 3.4.1

SÔnodoi

àna shmantikì shmeo ulopohsh aforˆ thn upost rixh sunìdwn se sust mata RPC. Oi sÔnodoi enai shmantikè kai sta sust mata autˆ, an mh ti ˆllo gia thn


102

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

upost rixh asfˆleia apì thn efarmog . Mia sÔnodo mpore na xekin sei me th diapsteush tou qr sth pou gia logariasmì tou, kai me qr sh twn pronomwn tou, ja ektelestoÔn oi kl sei . Dustuq¸ , oi sÔnodoi den uposthrzontai me aplì trìpo apì ta sust mata RPC. Apì th fÔsh tou, èna mhqanismì sunìdou ulopoietai w katˆstash (session state) pou diathretai metaxÔ diadoqik¸n antallag¸n. Antjeta, h ènnoia th sunˆrthsh , ˆra kai aut  th apomakrusmènh sunˆrthsh , enai polÔ epijumhtì na enai stateless: na mhn diathre katˆstash metaxÔ diadoqik¸n kl sewn. O basikì lìgo aforˆ sti duskole pou parousiˆzei h autìmath diaqerish tou session state. Gia parˆdeigma, èna z thma aforˆ th susqètish metaxÔ sunìdou kai diktuak  sÔndesh . Sti basikè uphrese Internet (p.q. FTP, telnet) pou uposthrzoun sunìdou , h diˆrkeia zw  th sunìdou tautzetai me th diˆrkeia zw  mia sÔndesh TCP/IP. An h sÔndesh termatiste, o server (kai o client) termatzei th sÔnodo. Gia aplè , interactive efarmogè (ìpw  tan oi pr¸te uphrese Internet), kˆti tètoio eparke. Wstìso, se polÔploke kai apaithtikè efarmogè RPC, kˆti tètoio enai uperbolikˆ perioristikì. To prìblhma th upost rixh sunìdwn lÔnetai me komyì trìpo apì thn teqnologa katanemhmènwn antikeimènwn, pou ja melethje sto epìmeno kefˆlaio.

3.4.2

Epikoinwna

H ektèlesh mia apomakrusmènh kl sh perilambˆnei th metaforˆ tou mhnÔmato th athsh apì ton client pro ton server kai th metaforˆ th apˆnthsh pro thn antjeth kateÔjunsh. Diˆfore parallagè epikoinwna client/server èqoun  dh melethje sthn §2.10. Oi epilogè autè efarmìzontai kai sthn perptwsh apomakrusmènwn kl sewn, me eidikˆ pleonekt mata kai meionekt mata. Mia basik  parˆmetro ulopohsh epikoinwna enai h epilog  tou prwtokìllou metaforˆ dedomènwn. H epilog  tou TCP enai s mera h pio sun jh , allˆ sto pareljìn pollè platfìrme eqan basiste se UDP, gia na petÔqoun kalÔterh apìdosh. Gia parˆdeigma, h klassik  ulopohsh tou U NIX NFS (Network File System) (pou qrhsimopoie to Sun RPC) eqe basiste sto UDP, kurw gia lìgou apìdosh . Wstìso, h shmerin  exèlixh tou TCP to kˆnei polÔ pio katˆllhlo gia metaforˆ megˆlwn posot twn dedomènwn. àtsi, h èkdosh 3 tou NFS uposthrzei plèon epikoinwna TCP, parìlo pou gia lìgou sumbatìthta uposthrzetai kai to UDP. An uiojethje to TCP w to prwtìkollo epikoinwna , ja prèpei na prodiagrafe h sqèsh metaxÔ sundèsewn kai kl sewn. Sthn pio apl  perptwsh, kˆje kl sh dhmiourge mia nèa sÔndesh, h opoa katargetai me thn epistrof  th kl sh . Wstìso, aut  h mèjodo eisˆgei mia epiplèon kajustèrhsh sthn ektèlesh th kl sh , afoÔ to TCP apaite mia epiplèon antallag  mhnumˆtwn. àtsi, to overhead epikoinwna gia mia kl sh gnetai so me 2RTT (Round-Trip Times). Mia lÔsh enai h epanaqrhsimopohsh mia sÔndesh apì diadoqikè kl sei . Aut  h lÔsh enai sumbat  kai me thn upost rixh sunìdwn. Allˆ akìmh ki an den uposthrzontai sÔnodoi, h lÔsh èqei pleonèkthma.


3.4. EKTELESH APOMAKRUSMENWN KLHSEWN

103

Qr sh http Mia lÔsh pou èqei uiojethje apì thn teqnologa Web Services enai h qr sh tou http gia thn antallag  athsh /apìkrish . To basikì pleonèkthma aut  th epilog  enai oi perissìteroi diaqeiristè diktÔwn epitrèpoun sto prwtìkollo http na perˆsei mèsa apì ta firewalls, en¸ ˆlla prwtìkolla kìbontai. Sunèpeie th uiojèthsh tou http enai: 1. To http enai stateless prwtìkollo. Katˆ sunèpeia, h ulopohsh sunìdwn enai apodesmeumènh apì to mhqanismì epikoinwna kai prèpei na basiste se ˆlle mejìdou (pq. cookies). 2. Kˆje kl sh dhmiourge mia nèa sÔndesh TCP/IP. 3. To prwtìkollo uposthrzei asfal  epikoinwna mèsw SSL. 4. Oi kl sei mporoÔn na anametadojoÔn apì web proxy servers. 3.4.3

Poluepexergasa

àna shmantikì z thma sthn ektèlesh apomakrusmènwn kl sewn aforˆ thn upost rixh poll¸n kl sewn tautìqrona. Oi basikè epilogè enai antstoiqe me tou mhqanismoÔ pou èqoume melet sei sto §2.9 sqetikˆ me thn ulopohsh uphret¸n. Sugkekrimèna: • An mìno mia kl sh mpore na ekteletai ana pˆsa stigm , èqoume iterative server. H lÔsh aut  aplopoie thn ulopohsh twn apomakrusmènwn kl sewn, allˆ enai problhmatik  w pro thn poluepexergasa. Kl sei pou afknuntai en¸ ekteletai mia ˆllh kl sh, ja prèpei na tejoÔn se anamon    na aporrifjoÔn apì to sÔsthma. • H kl sh mpore na uposthriqje apì pollaplè diergase , ìpou kˆje tautìqronh kl sh ekteletai se mia qwrist  diergasa. Gia lìgou apìdosh , ja prèpei mˆllon na ulopoihje preforking, ¸ste na meiwje to overhead gia sÔntome kl sei . H lÔsh aut  parèqei apl  ulopohsh se kˆpoie peript¸sei , wstìso s mera uposthrzetai elˆqista. • H pio sunhjismènh perptwsh upost rixh enai h upost rixh poluepexergasa apì pollaplˆ n mata. Ed¸ upˆrqoun diˆfore parallagè . – Sthn aploÔsterh perptwsh, gia kˆje kl sh pou fjˆnei dhmiourgetai èna nèo n ma, to opoo katastrèfetai me to pèra th kl sh . – Mia apl  beltistopohsh enai h epanaqrhsimopohsh nhmˆtwn. Diathretai èna pool apì anenergˆ n mata. Gia kˆje nèa kl sh, desmeÔetai èna apì ta n mata autˆ kai analambˆnei na thn ektelèsei. An den upˆrqei diajèsimo n ma, dhmiourgetai èna nèo n ma. – Sthn perptwsh pou o server dèqetai megˆlo arijmì apì sÔntome kl sei , to montèlo nhmˆtwn ergasa tou §2.8.3 mpore na epitÔqei kalÔterh apìdosh. àna h perissìtera n mata E/E (lga n mata arkoÔn)


104

KEFALAIO 3. SUSTHMATA APOMAKRUSMENWN KLHSEWN

analambˆnoun na paralambˆnoun mhnÔmata kl sewn kai ta topojetoÔn se mia ourˆ. Ta n mata ergasa diabˆzoun apì thn ourˆ kai ekteloÔn diadoqikˆ kl sei , eisˆgonta mhnÔmata epistrof  se mia deÔterh ourˆ. àna   perissìtera n mata E/E enai upeÔjuna gia th metˆdosh twn mhnumˆtwn aut¸n. To pleonèkthma aut  th lÔsh enai o mikrì arijmì nhmˆtwn pou apaitetai, elaqistopoi¸nta to overhead.


Kefˆlaio 4 Katanemhmèna Antikemena Sta mèsa th dekaeta tou '80 xeknhse mia nèa, epanastatik  gia thn perodo ekenh, prosèggish ston programmatismì: o antikeimenostraf  programmatismì . Oi pr¸te antikeimenostrafe gl¸sse programmatismoÔ  tan h Smalltalk kai h C++, pou apoteloÔse epèktash th gl¸ssa C. Mèqri ti arqè th dekaeta tou '90  tan pia safè ìti o antikeimenostraf  programmatismì upereqe pollaplˆ tou klassikoÔ, domhmènou programmatismoÔ gia thn anˆptuxh polÔplokwn efarmog¸n. Ta katanemhmèna sust mata eqan  dh diadoje polÔ w tìte, allˆ me kÔria teqnologa anˆptuxh to basikì mhqanismì RPC, o opoo prìsfere mìno th dunatìthta apomakrusmènwn sunart sewn, kˆti pou den tariaze kalˆ me thn antikeimenostraf  prosèggish. àgine fanerì ìti h klassik  teqnologa RPC ja èprepe na metexeliqje se mia teqnologa pio tairiast  me èna antikeimenostrafè peribˆllon. Gia to skopì autì, dhmiourg jhke to Object Management Group (OMG), èna consortium me mèlh ti megalÔtere etairee plhroforik  tou kìsmou, pou anèlabe na d¸sei sthn teqnologa RPC èna pio antikeimenostrafè proswpeo. àtsi dhmiourg jhke h teqnologa CORBA: Common Object Request Broker Architecture. To prìtupo autì, pou exelssetai mèqri kai s mera, den enai tpote ˆllo apì mia epèktash th idèa twn apomakrusmènwn sunart sewn, oi opoe plèon antimetwpzontai w mèjodoi enì antikeimènou. Mpore apì ˆpoyh mhqanismoÔ na mhn upˆrqoun spoudae diaforè metaxÔ twn paliìterwn apomakrusmènwn kl sewn kai twn katanemhmènwn antikeimènwn, wstìso h teqnologa twn katanemhmènwn antikeimènwn apodeqjhke polÔ dhmofil  , antikajist¸nta sqedìn oloklhrwtikˆ ti klassikè teqnologe RPC. Mìno prìsfata, h eisagwg  twn Web Services epanèfere se qr sh mia sqetikˆ ligìtero antikeimenostraf  teqnologa. 105


106 4.1

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Basikè ènnoie

Se èna sÔsthma katanemhmènwn antikeimènwn h basik  prˆxh epikoinwna enai h apomakrusmènh kl sh kˆpoia mejìdou kˆpoiou antikeimènou. àtsi, se antistoiqa me ta sust mata RPC èqoume ta sust mata RMI: Remote Method Invocation. Se antikeimenostrafe gl¸sse programmatismoÔ, ta sust mata RMI epiqeiroÔn na prosfèroun th dunatìthta apomakrusmènh kl sh mejìdou se kanonikˆ antikemena th gl¸ssa . Sun jw , ta antikemena prèpei na ikanopoioÔn kˆpoiou periorismoÔ , prokeimènou na mporoÔn na deqjoÔn apomakrusmène kl sei . Gia parˆdeigma, sthn Java ìla ta antikemena pou dèqontai apomakrusmène kl sei prèpei na ulopoioÔn to Java interface java.rmi.Remote. Epsh , ìla ta orsmata twn mejìdwn tou ja prèpei na èqoun Serializable tÔpou . H perigraf  twn susthmˆtwn RMI èqei dÔo kentrikoÔ ˆxone : • To data model (montèlo dedomènwn, epsh gnwstì kai w object model) pou perigrˆfei programmatistikˆ qarakthristikˆ d lwsh klˆsewn, tÔpwn dedomènwn klp. • To distribution model (montèlo katanom  ) pou exetˆzei jèmata leitourgikìthta th sÔndesh kai epikoinwna metaxÔ katanemhmènwn antikeimènwn.

4.1.1

Object brokers

Oi diergase pou summetèqoun se èna sÔsthma RMI mporoÔn ete na stegˆzoun katanemhmèna antikemena, ete aplˆ na kaloÔn katanemhmèna antikemena (ete kai ta duo). Se kˆje perptwsh, h allhlepdrash me katanemhmèna antikemena prosfèretai mèsa apì object brokers (meste antikeimènwn) . Kˆje diergasa èqei to dikì th object broker. H basik  leitourga enì object broker enai h paroq  leitourgikìthta RMI sth diergasa tou: analambˆnei thn ektèlesh ìlwn twn bhmˆtwn apomakrusmènwn kl sewn, ìpw èqoun perigrafte sto Kef. 3. Wstìso, oi shmerino object brokers parèqoun leitourge pou xepernoÔn ta ìria th apl  ulopohsh RMI, ìpw gia parˆdeigma location transparency, diaqerish kÔklou zw  twn antikeimènwn kai persistence. Location transparency. H ènnoia th diafˆneia (transparency) enai jemeli¸dh sta katanemhmèna sust mata (blèpe §1.2). Location transparency (diafˆneia jèsh ) enai h dunatìthta kl sewn RMI se antikemena pou h jèsh tou (h diergasa pou ta stegˆzei) den enai gnwst  ston kaloÔnta k¸dika.

Diaqerish kÔklou zw  . Lifecycle management enai h dunatìthta diaqerish th dhmiourga (construction), katastrof  (destruction), energopohsh kai apenergopohsh (activation/deactivation), antigraf  (copy) kai metanˆsteush (migration metaknhsh se ˆllh jèsh) antikeimènwn.


107

4.1. BASIKE ENNOIE

caller

implementation

Proxy object

Object skeleton

Object Broker

Object Broker IPC

Sq ma 4.1: H diadrom  mia kl sh RMI. Persistence. Ta antikemena pou uposthrzoun oi sumbatikè gl¸sse programmatismoÔ enai transient (ef mera): h zw  tou den diarke pèra apì ton termatismì th diergasa pou ta dhmioÔrghse. Mia qrhsimìtath dunatìthta enai h upost rixh persistent (epmonwn) antikeimènwn, pou mporoÔn na apojhkeÔsoun kai thn katˆstas  tou kai thn tautìthtˆ tou se mìnimh mn mh, ¸ste na epanalopoihjoÔn se diergase ˆlle apì aut n sthn opoa dhmiourg jhkan. 4.1.2

Interfaces

Se antistoiqa me thn ènnoia th diepaf  uphresi¸n (service interfaces) se RPC, èqoume diepafè antikeimènwn object interfaces. Ta object interfaces ja prèpei na diaqwristoÔn apì ti klˆsei (object classes), an kai oi leitourge paromoiˆzoun ta interfaces enai anˆloga twn abstract classes sth C++. H diaforˆ enai h ex  : h klˆsh enì antikeimènou prosdiorzei thn ulopohsh tou (p.q., ulopohsh twn mejìdwn tou), en¸ to interface prosdiorzei mìnon th mèjodo epikoinwna me to antikemeno. Kat' analoga, se apomakrusmène sunart sei diaforopoioÔme thn upograf  (interface) apì thn ulopohsh (class) th sunˆrthsh . O orismì twn interfaces pou ulopoioÔn ta katanemhmèna antikemena gnetai se mia katˆllhlh Interface Definition Language (IDL). Se orismène peript¸sei , h IDL mpore na enai enswmatwmènh se mia sumbatik  gl¸ssa programmatismoÔ, p.q. sthn perptwsh tou Java RMI. Se kˆje perptwsh, ta arqea orismoÔ diepaf¸n trofodotoÔntai se katˆllhlou compilers gia na paraqjoÔn client kai server stubs pou ulopoioÔn ti interface-specific leitourge kai th sÔndesh me ton object broker. 4.1.3

Ulopohsh

RMI

H ulopohsh th basik  dunatìthta RMI akolouje th basik  idèa gia aplì RPC. Sto Sq. 4.1 fanetai h diadrom  pou akolouje mia kl sh RMI apì ton kaloÔnta k¸dika mèqri to shmeo ulopohsh th antstoiqh mejìdou. àstw ìti o k¸dika mia diergasa jèlei na kalèsei th mèjodo foo enì katanemhmènou antikeimènou x pou ulopoie to interface I. H kl sh ja akolouj sei ta parakˆtw b mata:


108

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Apomakrusmène kl sei RPC service interface proxy function wrapper function

Katanemhmèna antikemena RMI object interface proxy object skeleton object

Pnaka 4.1: Antistoiqa orologa kai ennoi¸n metaxÔ RPC kai RMI. 1. O kal¸n k¸dika kale topikˆ mia mèjodo me to dio ìnoma, foo, se èna topikì (mh katanemhmèno) antikemeno, pou onomˆzetai proxy object. H klˆsh autoÔ tou antikeimènou orzetai sto client stub tou interface I. 2. H mèjodo foo tou proxy object exwterikeÔei ta orsmata th kl sh kai maz me thn tautìthta tou proxy object dhmiourge mia athsh, thn opoa paraddei ston object broker. 3. O object broker entopzei ton omìbajmì tou object broker pou diaqeirzetai to kaloÔmeno antikemeno x kai tou metafèrei thn athsh. 4. Ston server, h paralhfjesa athsh metatrèpetai se kl sh th mejìdou foo se èna antikemeno pou onomˆzetai skeleton object. H klˆsh autoÔ tou antikeimènou orzetai sto server stub tou interface I. O rìlo tou skeleton object enai na metafèrei thn kl sh sthn ulopohsh tou katanemhmènou antikeimènou. 5. H antstrofh diadrom  akoloujetai gia thn paralab  th epistrof  th kl sh . Se antistoiqa me thn teqnologa RPC, suqnˆ uposthrzetai (mèsw reflection) h dunamik  dunatìthta RMI. 4.2

CORBA

H eisagwg  th arqitektonik  CORBA ègine to 1991, apì mia omˆda sthn opoa summeteqan ti megalÔtere etaire logismikoÔ pagkosmw . H arqitektonik  protupopoi jhke me skopì thn ulopohsh apì anexˆrthtou kataskeuastè logismikoÔ kai amèsw uiojet jhke san de facto prìtupo apì polÔ megˆlou organismoÔ (to Amerikanikì Pentˆgwno  tan metaxÔ twn pr¸twn). O prosanatolismì th arqitektonik  bassthke se merikè aplè kateujÔnsei : • Upost rize èna kajarˆ antikeimenostrafè montèlo dedomènwn. • Upost rize thn dialeitourgikìthta (interoperability) metaxÔ efarmog¸n ulopoihmènwn se diˆfore gl¸sse programmatismoÔ, kaj¸ kai proðìntwn apì diaforetikoÔ kataskeuastè . • Dièjete ta prìtupˆ th dwreˆn sto koinì kai enjˆrrune thn epèktash kai ulopohs  tou se pragmatikˆ proðìnta.


4.2.

CORBA

109

To apotèlesma twn parapˆnw enai mia polÔ ektetamènh, dhmofil  kai teqnikˆ prohgmènh, pou apotele ènan apì tou pul¸ne th upodom  katanemhmènwn susthmˆtwn. Upˆrqoun dekˆde ulopoi sei th CORBA, apì etaire , ereunhtikˆ kèntra, panepist mia klp., pollè apì autè open source, ˆlle ìqi. Mpore na qrhsimopoihje se ìla sqedìn ta leitourgikˆ sust mata kai sunergˆzetai me dekˆde gl¸sse programmatismoÔ. àqei epektaje gia efarmog  se sust mata embedded kai real-time, kai qrhsimopoietai se ìla ta edh twn efarmog¸n, apì parajurikˆ sust mata GUI (p.q., sto Gnome) mèqri terˆstie plhroforiakè efarmogè (p.q., sto sÔsthma TAXIS tou Upourgeou Oikonomik¸n). Sth sunèqeia dnetai mia sÔntomh, uyhloÔ epipèdou perigraf  th arqitektonik  . Leptomerèsterh teqnik  perigraf  mpore na bre kane sto Parˆrthma B. 4.2.1

Montèlo dedomènwn

To montèlo dedomènwn th CORBA sthrzetai sthn OMG IDL . Gia na uposthrxei th d lwsh ploÔsiwn se leitourgikìthta interfaces, h OMG IDL prosfèrei èna isqurìtato montèlo dedomènwn, to opoo èqei exeliqje arketˆ apì thn pr¸th èkdosh th IDL to 1991. Merikˆ apì ta qarakthristikˆ tou enai: • Interfaces pou uposthrzoun klhronomikìthta, attributes, encapsulated tÔpou klp. • Orgˆnwsh tou q¸rou onomˆtwn mèsw ierarqik¸n modules. • Upost rixh exceptions gia to qeirismì sfalmˆtwn. • PloÔsia upost rixh se tÔpou , sumperilambanomènwn suntijèmenwn tÔpwn (arrays, sequences, structs kai unions), enums, poll¸n tÔpwn arijmhtik¸n dedomènwn (16-byte floating-point, fixed-precision decimals), anadromik¸n tÔpwn (apì thn èkdosh 2.3 kai metˆ), tÔpwn native. • Call-by-copy pèrasma paramètrwn. Dustuq¸ , mìno polÔ apl  upost rixh gia anadromikoÔ tÔpou . • Dunatìthta asÔgqronwn kl sewn (oneway operations). • Upost rixh dunamik  kl sh kai reflection.

Me th qr sh katˆllhlwn IDL compilers, phgao k¸dika IDL mpore na metafraste se stubs gia mia plhj¸ra glwss¸n programmatismoÔ. H OMG èqei dhmosieÔsei mia seirˆ apì language mappings, dhlad  prìtupa gia thn paragwg  stubs, gia ti ex  gl¸sse : Ada, C, C++, COBOL, CORBAScript, Java, PL/1, Python kai Smalltalk. Pollè ˆlle gl¸sse uposthrzontai apì IDL compilers gia tou opoou den èqoun dhmosieute prìtupa.


110 4.2.2

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Arqitektonik 

H arqitektonik  th CORBA baszetai se ènan object broker pou apoteletai apì ta ex  mèrh: ORB: Se kˆje diergasa upˆrqei èna Object Request Broker , pou o rìlo tou enai o entopismì katanemhmènwn antikeimènwn kai h metaforˆ kl sewn RMI pro autˆ. Ed¸ ulopoioÔntai ta ex  basikˆ prwtìkolla tou CORBA: • To GIOP (General Inter-ORB Protocol) pou perigrˆfei thn exwterik  anaparˆstash dedomènwn IDL kai th morf  twn mhnumˆtwn pou antallˆssontai metaxÔ ORBs. • To IIOP (Internet Inter-ORB Protocol) pou perigrˆfei thn ulopohsh epikoinwna TCP/IP metaxÔ ORBs. OA: Se kˆje ORB upˆrqei èna   perissìteroi Object Adapters. O rìlo twn Object adapters enai h {prosarmog } metaxÔ ORB kai twn ulopoi sewn twn katanemhmènwn anikeimènwn. To basikìtero kaj kon tou enai h efarmog  mia politik  poluepexergasa (anˆjesh se n mata klp) twn kl sewn pro ta antikemena pou diaqeirzontai. H OMG èqei protupopoi sei dÔo Object Adapters: • O Basic Object Adapter (BOA)  tan o pr¸to OA pou protupopoi jhke. Prosdiorzei basik  mìno leitourgikìthta. • O Portable Object Adapter (POA) enai o pio sÔgqrono protupopoihmèno OA. Uposthrzei diˆfore prohgmène dunatìthte prosarmog  antikeimènwn, ìpw persistence, autìmath energopohsh antikeimènwn kai eÔkolh diaqerish.

H arqitektonik  CORBA uposthrzei mia seirˆ apì prohgmène leitourge kai uphrese . • Epitrèpei th dunamik  dhmiourga kl sewn RMI mèsw tou mhqanismoÔ Dynamic Invocation Interface (DII). • Epitrèpei antstoiqa th dunamik  energopohsh kl sewn, mèsw tou mhqanismoÔ Dynamic Skeleton Interface. • Epitrèpei to gefÔrwma metaxÔ diaforetik¸n ORBs, kaj¸ kai metaxÔ entel¸ diaforetik¸n object brokers. Gia parˆdeigma, sÔndesh me DEC RPC kai Microsoft COM/DCOM. • Uposthrzei asÔgqronh epikoinwna basismènh se mhnÔmata. • Parèqei prìtupa mhqanism¸n gia fault tolerance. • Epitrèpei kruptografik  prostasa kai asfˆleia sthn epikoinwna.


4.2.

CORBA

4.2.3

111

Basikè uphrese

Ektì apì to montèlo dedomènwn kai th basik  arqitektonik , to prìtupo CORBA perilambˆnei ta CORBAservices, mia ektetamènh sullog  apì basikè uphrese prosanatolismène se plhroforiakˆ sust mata. Kˆje mia apì autè ti uphrese prodiagrˆfetai mèsw th IDL se eppedo k¸dika, allˆ den parèqontai reference ulopoi sei . Oi kuriìtere apì ti uphrese autè enai:

• Naming service. Mia uphresa pou epitrèpei ton entopismì katanemhmènwn antikeimènwn me th bo jeia onìmato .

• Event and Notification service. Mia uphresa pou analambˆnei thn eidopohsh antikeimènwn ìtan sumboÔn gegonìta. Oi eidopoi sei mporoÔn na akoloujoÔn ete to push ete to pull montèlo.

• Security service. Prodiagrˆfei basikè uphrese asfˆleia : diapsteush qrhst¸n, exousiodìthsh kai èlegqo prìsbash , auditing kai non-repudiation.

• Trading service. Enai mia uphresa katalìgou: epitrèpei ton entopismì katanemhmènwn antikeimènwn bˆsei tim¸n kˆpoiwn pedwn tou , parìmoia me mia bˆsh dedomènwn. Uposthrzetai o sunduasmì poll¸n trading servers gia thn apˆnthsh erwt sewn.

• Transaction and concurrency control service. Oi uphrese autè mporoÔn na qrhsimopoihjoÔn apì ˆlle uphrese gia na parˆsqoun suntonismène dosolhye metaxÔ poll¸n katanemhmènwn antikeimènwn.

• Persistent object service. Parèqei leitourge apoj keush , orgˆnwsh , anaz thsh kai anˆkthsh gia persistent antikemena.


112

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

4.2.4

Parˆdeigma ulopohsh

Hello world

Prìgramma 4.1

6

module HelloWorld { const string Message = "Hello CORBA World!"; interface HelloWorldIF { string hello_world(); }; };

1

#### Calling HelloWorld

1 2 3 4 5

2 3 4

from Fnorb.orb import CORBA import sys, HelloWorld

5 6 7 8 9 10 11

1

orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) stringified_ior = open(’Server.ref’).read() server = orb.string_to_object(stringified_ior) if server is None: raise ’Nil object reference!’ print server.hello_world() ####

Creates a HelloWorld object

2 3 4

from Fnorb.orb import BOA, CORBA import sys, HelloWorld, HelloWorld_skel

5 6 7 8 9

class HelloWorldServer(HelloWorld_skel.HelloWorldIF_skel): def hello_world(self): print HelloWorld.Message return HelloWorld.Message

10 11 12 13 14

try: print ’Initialising the ORB...’ orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) boa = BOA.BOA_init(sys.argv, BOA.BOA_ID)

15 16 17

# Create an object reference (’fred’ is the object key). obj = boa.create(’fred’, HelloWorldServer._FNORB_ID)

18 19 20 21

# Create an instance of the implementation class. impl = HelloWorldServer() boa.obj_is_ready(obj, impl)

22 23 24 25

f = open(’Server.ref’, ’w’) f.write(orb.object_to_string(obj)) f.flush()

26 27 28 29

boa._fnorb_mainloop() except KeyboardInterrupt: print "Server done"


4.3.

JAVARMI

113

4.3

JavaRMI

4.4

Domè ulopohsh katanemhmènwn antikeimènwn

H anˆptuxh mia katanemhmènh efarmog  xekinˆ apì to stˆdio tou sqediasmoÔ. O sqediasmì mia katanemhmènh efarmog  perilambˆnei ton prosektikì prosdiorismì twn interfaces kai twn sunaf¸n dhl¸sewn pou ja qrhsimopoihjoÔn gia thn ulopohs  th . O sqediasmì mia katanemhmènh efarmog  enai mia dÔskolh diadikasa pou apaite gn¸sh kai empeira. Akìmh duskolìtero enai o sqediasmì epektˆsimwn efarmog¸n, dhlad  efarmog¸n pou mporoÔn na prosarmostoÔn se mellontikè anˆgke qwr rizikè allagè . Parìlo pou enai adÔnaton na parateje mia pl rh mejodologa sqediasmoÔ efarmog¸n sta plasia enì kefalaou, akìmh ki an kˆti tètoio  tan efiktì, ja  tan amfibìlou qrhsimìthta . Wstìso, h pera èqei anadexei mia seirˆ apì basikˆ prìtupa sqediasmoÔ (design patterns) pou kalÔptoun pollè koinè peript¸sei problhmˆtwn se antikeimenostraf  sust mata. Parajètoume loipìn ed¸ kˆpoia apì autˆ, me thn katanìhsh ìti den apoteloÔn panˆkeia, allˆ apì thn ˆllh ja prèpei na upˆrqoun kalo lìgoi gia na agnohjoÔn apì ton sqediast . 4.4.1

Basikè odhge

Ta parakˆtw shmea enai genikè odhge pou aforoÔn ton antikeimenostraf  programmatismì. • Orste ta interfaces apì thn optik  gwna th kl sh tou (dhl. tou client) kai ìqi th ulopohs  tou (dhl. tou server). • Ta attributes dhl¸noun dedomèna kai ta onomˆzontai me ousiastikˆ (p.q. salary). Oi mèjodoi dhl¸noun enèrgeia kai onomˆzontai me r mata (p.q. increaseSalary). • Qrhsimopoi ste klhronomikìthta metaxÔ dÔo klˆsewn ìtan sundèontai me th sqèsh {to x enai èna y } (x is a y ), pq. Car is a Vehicle. Mhn qrhsimopoiete attributes gia to skopì autì. • Mhn qrhsimopoiete klhronomikìthta gia na dhl¸sete sqèsh {to x èqei èna y } (x has a y ), pq. Car has a LicenceNumber. Qrhsimopoi ste attributes gia to skopì autì.

Wstìso, kˆpoia prˆgmata enai polÔ diaforetikˆ se katanemhmène efarmogè apì ìti se antikeimenostraf  sust mata. • Jumhjete ìti ta interfaces den enai klˆsei , allˆ ulopoioÔntai apì katanemhmèna antikemena. Kˆti pou ja mporoÔse na ulopoihje w klˆsh se C++ ja mpore na ulopoihje ete san interface ete san struct sthn IDL. • Oi mèjodoi enì interface antistoiqoÔn katanemhmène kl sei kai kˆje katanemhmènh kl sh kostzei arketˆ akribˆ katˆ thn ektèlesh. Prospaj ste na sumpt xete kˆpoie leitourge se kl sei an enai efiktì.


114 4.4.2

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Sqediasmì gia sunìdou

H sÔnodo enai èna qrhsimìtato prìtupo sth sqedash katanemhmènwn susthmˆtwn. ätan metaxÔ enì pelˆth kai enì antikeimènou prèpei na upˆrxoun pollaplè kl sei oi opoe den enai anexˆrthte , ja prèpei h sqedash na ulopoie sunìdou . Klassikì parˆdeigma perptwsh pou prèpei na sqediaste w sÔnodo enai h ektèlesh mia diadikasa me pollaplˆ b mata, pou xekinˆ me th diapsteush tou qr sth. Gia parˆdeigma, upojèste ìti ulopoioÔme mia uphresa ektupwt . O ektupwt  ma apaite diapsteush me th qr sh user name kai password gia ìle ti leitourge . 1

exception NoAuth {};

2 3 4 5 6 7 8

struct AuthData { string user, pass; }; typedef sequence<octet> PrintData; typedef unsigned long JobId; const JobId NullJob = 0;

9 10 11 12 13 14 15

interface Printer { attribute string name; JobId submit(in AuthData login, in string job_name, in PrintData prn) raises(NoAuth); ... };

H upobol  ergasi¸n gia ektÔpwsh enai mia eÔkolh diadikasa me thn parapˆnw sqedash. àstw ìmw ìti jèloume na prosjèsoume ston ektupwt  ma th dunatìthta diaqerish twn eggrˆfwn pou perimènoun gia ektÔpwsh. Ja mporoÔsame loipìn na ulopoi soume kˆpoie kl sei , ìpw parakˆtw: 1 2 3 4 5 6 7 8 9

interface Printer { attribute string name; JobId submit(in AuthData login, in string job_name, in PrintData prn) raises(NoAuth); void pause_job(in AuthData login, in JobId job) raises(NoAuth); void resume_job(in AuthData login, in JobId job) raises(NoAuth); void cancel_job(in AuthData login, in JobId job) raises(NoAuth); };

Gr gora gnetai antilhptì ìti me th mèjodo aut  ja prèpei na epanalambˆnoume th diapsteus  ma se kˆje b ma. H mèjodo aut  èqei mia seirˆ apì meionekt mata, w pro thn asfˆleia (suneq¸ apostèlletai to password ma pˆnw apì to dktuo) kai thn apìdosh (gia kˆje kl sh ja gnetai èlegqo tou password). H lÔsh sto prìblhmˆ ma enai h qr sh sunìdwn. H dhmiourga sunìdwn ulopoietai eÔkola me to prìtupo sqedash pou enai gnwstì w Session Factory: 1

interface PrintSession {


4.4. DOME ULOPOIHSH KATANEMHMENWN ANTIKEIMENWN

2 3 4 5 6 7

115

JobId submit(in string job_name, in PrintData prn); void pause_job(in JobId job); void resume_job(in JobId job); void cancel_job(in JobId job); void finish(); };

8 9 10 11 12

interface Printer { attibute string name; PrintSession session(in AuthData login) raises(NoAuth); };

Sugkrnete ton k¸dika autìn me thn prohgoÔmenh ulopohsh. H lÔsh me th qr sh sunìdou enai pio lit , eukolìterh sthn ulopohsh kai qwr probl mata asfˆleia kai apìdosh . Apì thn pleurˆ th ulopohsh , h kl sh th mejìdou session tou Printer ja dhmiourg sei kai ja epistrèyei èna nèo katanemhmèno antikemeno. To antikemeno autì ja mpore na qrhsimopoihje gia mia akolouja kl sewn, me teleutaa thn kl sh finish. H finish katastrèfei to antikemeno kai apeleujer¸nei tou pìrou pou eqan desmeuje gia thn ulopohs  tou. Metˆ thn kl sh th , kˆje ˆllh kl sh ja epistrèyei sfˆlma. H qr sh sunìdou èqei wstìso èna mh amelhtèo meionèkthma. An èna pelˆth amel sei na kalèsei th finish kai termatsei, ja upˆrxei leak (diarro ) twn pìrwn pou èqei desmeÔsei aut  h ˆqrhsth plèon sÔnodo . Gia na exasfalistoÔme apì aut  thn perptwsh, ja prèpei na ulopoihje kˆpoio mhqanismì anˆkthsh gia ta antikemena sunìdwn. Tètoioi mhqanismo enai polÔplokoi kai sthn ulopohsh kai sth qr sh apì pelˆte . Autì enai o lìgo pou enai epijumhtè oi stateless ulopoi sei , pou den apaitoÔn tètoiou mhqanismoÔ . àna sqetikˆ sunhjismèno mhqanismì enai autì th enoikash (lease) anafor¸n (  genikˆ, pìrwn). H idèa enai mia parallag  twn timeouts. ätan mia sÔnodo dhmiourgetai, h qr sh tou antstoiqou object reference ddetai se kˆje pelˆth gia mia sugkekrimènh qronik  perodo. An h perodo aut  perˆsei qwr o pelˆth na anane¸sei to lease, tìte to reference katastrèfetai apì ton server (enai sth diakritik  euqèreiˆ tou). 4.4.3

Stateless

uphrese

Suqnˆ h qr sh sunìdwn enai kak  epilog , ìpw deqnei o parakˆtw (kakì ) k¸dika : 1 2 3 4 5 6 7

interface ChangePasswordSession { void changePassword(in string newpass); void finish(); }; interface ChangePasswordService { ChangePasswordSession session(in AuthData login) raises(NoAuth); };


116

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

H ulopohsh th parapˆnw uphresa me th qr sh sunìdou enai ˆqrhsth, afoÔ den èqei nìhma h epanalhptik  kl sh th changePassword, perplokh, diìti ja prèpei na exasfaliste apì leaks h ulopohsh, arg , diìti gia thn ektèlesh mia leitourga apaitoÔntai 3 kl sei (session, changePassword, finish). Fusikˆ, to parapˆnw parˆdeigma enai teqnhtì, allˆ deqnei ta meionekt mata pou mpore na parousiˆsei h lÔsh me sunìdou . H swst  ulopohsh th parapˆnw uphresa prèpei na gnei me stateless trìpo. 1 2 3 4 5

interface ChangePasswordService { void changePassword(in AuthData login, in string newpass) raises(NoAuth); };

Pìte mia uphresa ja prèpei na ulopoihje san stateless kai pìte me sunìdou ? Enai koin  h ˆpoyh ìti oi stateless ulopoi sei prèpei na protim¸ntai. An wstìso h upost rixh sunìdwn me kˆpoio trìpo enai aparathth, oi gn¸me diqˆzontai. Orismènoi uposthrzoun thn ulopohsh sunìdwn ìpw dexame sthn prohgoÔmenh enìthta. €lloi wstìso isqurzontai ìti oi sÔnodoi w qwristˆ katanemhmèna antikemena ja prèpei na apofeÔgontai pˆsh jusa. àna trìpo na prosomoiwje h ulopohsh sunìdwn apì stateless servers enai h qr sh cookies (me trìpo anˆlogo me autìn pou qrhsimopoietai sto HTTP): 1 2 3 4

struct Cookie { long long cookieid; long timestamp; };

5 6 7 8 9 10 11 12 13 14 15

interface Printer { attribute string name; Cookie session(in AuthData login) raises(NoAuth); JobId submit(inout Cookie c, in string job_name, in PrintData prn) raises(NoAuth); void pause_job(inout Cookie c, in JobId job) raises(NoAuth); void resume_job(inout Cookie c, in JobId job) raises(NoAuth); void cancel_job(inout Cookie c, in JobId job) raises(NoAuth); void releaseCookie(in Cookie c); };

H parapˆnw parallag  tou antstoiqou k¸dika th prohgoÔmenh enìthta jewretai apì polloÔ pio epijumht  apì thn ulopohsh sunìdwn. Enai polÔ an¸terh lÔsh apì thn epanalambanìmenh diapsteush th prohgoÔmenh enìthta , kai sthn apìdosh kai sthn asfˆleia. Apì logik  pleurˆ , h lÔsh twn Cookies enai parìmoia me aut n twn sunìdwn, afoÔ ki ed¸ ja apaithje h qr sh lease gia to cookie. Apì thn ˆllh pleurˆ gia èna aplì interface ìpw to parapˆnw, ta cookies mpore na enai pio lightweight lÔsh kai ˆra na epitugqˆnoun kalÔterh apìdosh. Se pio polÔploka interfaces wstìso, h lÔsh twn sunìdwn ja prèpei na protimhje.


4.4. DOME ULOPOIHSH KATANEMHMENWN ANTIKEIMENWN

4.4.4

117

Klhronomikìthta

Ta perissìtera antikeimenostraf  montèla dedomènwn uposthrzoun klhronomikìthta. H klhronomikìthta bohjˆ thn ierarqik  exeidkeush th leitourgikìthta enì katanemhmènou antikeimènou. Gia parˆdeigma, sthn enìthta §4.4.2 dhl¸same th diepaf  PrintSession, h opoa perièqei mia seirˆ apì operators sqetikoÔ me ton ektupwt , sun to operation finish, pou termatzei to session. Mia pio swst  ulopohsh tou PrintSession ja diaq¸rize ta dÔo autˆ zht mata, ta opoa sthn pragmatikìthta den sqetzontai. 1 2 3

interface Session { void finish(); };

4 5 6 7 8 9 10

interface PrintSession : Session { JobId submit(in string job_name, in PrintData prn); void pause_job(in JobId job); void resume_job(in JobId job); void cancel_job(in JobId job); };

11 12 13 14 15

interface Printer { attribute string name; PrintSession session(in AuthData login) raises(NoAuth); };

T¸ra pou h leitourgikìthta tou session èqei diaqwriste apì th leitourgikìthta tou ektupwt , ta dÔo uposust mata mporoÔn na anaptuqjoÔn anexˆrthta. àtsi, upˆrqei pia h dunatìthta epanaqrhsimopohsh twn interfaces. 1 2 3

interface Session { void finish(); };

4 5 6 7 8

interface PrintSession : Session { // as before ... };

9 10 11 12 13

interface ScannerSession : Session { // manage a scanner ... };

14 15 16 17

interface Scanner { ScannerSession session(in AuthData login) raises(NoAuth); };

Ston parapˆnw k¸dika h diepaf  Session epanaqrhsimopoietai apì èna nèo edo session, aut  th forˆ me èna scanner.


118

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Mia ˆllh qrhsimìthta th klhronomikìthta enai h upost rixh epektˆsewn sto sÔsthma, qwr na qreiˆzontai eurÔtere allagè ston k¸dika. Gia parˆdeigma, èstw ìti sthn epìmenh èkdosh tou logismikoÔ lambˆnetai h apìfash na uposthriqjoÔn pio euèlikte sÔnodoi. An h allag  ulopoihje sto Session interface, tìte ektì apì tou servers pou upoqrewtikˆ ja prèpei na allˆxoun, ja prèpei epsh na allˆxoun ìloi oi pelˆte pou qrhsimopoioÔn PrintSessions (autì ja sumbe epeid  ja allˆxoun ta stubs tou Session). Me th qr sh klhronomikìthta , mpore na apofeuqje h anabˆjmish gia kˆpoiou pelˆte . 1 2 3

interface ExtSession : Session { /// new stuff here ... };

4 5 6 7

interface PrintExtSession : PrintSession { // no change here };

Me ti parapˆnw dhl¸sei , ta arqikˆ stubs tou PrintSession paramènoun ametˆblhta. Fusikˆ, oi nèe ulopoi sei server ja epistrèfoun antikemena tÔpou PrintExSession, allˆ autˆ ja enai prospelˆsima apì ta paliˆ client stubs qwr prìblhma. 4.4.5

Eppedo afaresh

àna suqnì pedo sfalmˆtwn katˆ th sqedash diepaf¸n enai h epilog  tou epipèdou afaresh , dhlad  th leptomèreia pou emfanzetai stou orismoÔ twn interfaces. Lˆjh mporoÔn na gnoun kai pro ti dÔo kateujÔnsei : ete pio sugkekrimène , ete pio afhrhmène diepafè apì ìso prèpei. Sto parˆdeigma th prohgoÔmenh enìthta , orsame ti diepafè Printer kai Scanner, oi opoe epistrèfoun amfìtere èna session. Mia enallaktik  ulopohsh ja mporoÔse na enai h parakˆtw: 1 2 3 4 5 6

interface Session { void finish(); }; interface SessionFactory { Session session(in AuthData login) raises(NoAuth); };

7 8

interface PrinterSession : Session { /* as before */ };

9 10 11 12

interface Printer : SessionFactory { attribute string name; };

13 14

interface ScannerSession : Session { /* as before */ };

15 16

interface Scanner : SessionFactory { };


4.4. DOME ULOPOIHSH KATANEMHMENWN ANTIKEIMENWN

119

Sthn parapˆnw sqedash uponoetai o ex  periorismì : h kl sh th session se antikemena tÔpou Printer ja epistrèfei mìno antikemena PrinterSession kai antstoiqa gia kl sh se Scanner ja epistrèfetai ScannerSession. Periorismo autoÔ tou tÔpou onomˆzontai sumbˆsei sqedash (design contracts). Wstìso, aut  h sÔmbash den enai emfan  apì ton parapˆnw k¸dika, en¸ enai emfan  ston k¸dika th prohgoÔmenh enìthta . Poia apì ti dÔo sqediˆsei enai protimìterh? Asfal¸ , h emfˆnish periorism¸n tÔpwn ston k¸dika enai epijumht . Wstìso, kalÔterh enai h sqedash th trèqousa enìthta , diìti se aut n anagnwrzetai mia basik  koin  pleurˆ twn Scanner kai Printer: kai ta dÔo antikemena parˆgoun Sessions. H d lwsh th SessionFactory pou fanetai parapˆnw de ja  tan efikt  qwr thn apaleif  th sÔmbash sqedash . H Ôparxh th SessionFactory ma prosfèrei shmantikì pleonèkthma. Gia parˆdeigma, oi pelˆte pou jèloun na prospelˆsoun kai Printer kai Scanner antikemena de qreiˆzetai na ulopoi soun kl sei th session ei diploÔn. 4.4.6

Iterators

Prokeimènou na ulopoihje mazik  metaforˆ dedomènwn me apomakrusmène kl sei , enai epijumht  h dunatìthta tmhmatik  metaforˆ se pollˆ b mata. Gia parˆdeigma, an prìkeitai na stale ston ektupwt  èna arqeo megèjou 50 MBytes, ja enai kalì na mhn stale me mia kl sh, allˆ me pollaplè kl sei , pou kˆje mia tou ja metafèrei mèqri p.q. 32kbytes. To kˆje tm ma twn 32 kbytes onomˆzetai block. Sti gl¸sse programmatismoÔ, ta antikemena pou prosfèroun aut  th leitourga onomˆzontai Iterators. Sthn klassik  perptwsh, èna Iterator èqei dÔo mejìdou : 1 2 3 4 5

typedef sequence<octet, 32768> Block; interface Iterator { Block getNext(); boolean hasMore(); };

Oi mèjodoi autè kaloÔntai enallˆx apì to prìgramma, p.q. me ton ex  trìpo: 1 2 3

while iter.hasMore(): block = iter.getNext() process(block)

H parapˆnw ulopohsh enai akatˆllhlh gia katanemhmèna antikemena. Afenì , oi dÔo kl sei ja prèpei na enopoihjoÔn se mia (afoÔ kaloÔntai enallˆx, kˆti tètoio enai efiktì). Epsh , o Iterator pou fanetai parapˆnw enai katˆllhlo gia l yh dedomènwn, en¸ sto parˆdeigma tou Printer ma endiafèrei h apostol . Tèlo , sto parapˆnw parˆdeigma o Iterator enai katanemhmèno antikemeno. Kˆti tètoio den apaitetai sun jw . 1 2 3 4

typedef sequence<octet, 32768> Block; interface PrintSession { JobId submit(in string job_name); void putData(in JobId job, in Block nextBlock, boolean hasMore);


120

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

5

void void void void

6 7 8 9 10

pause_job(in JobId job); resume_job(in JobId job); cancel_job(in JobId job); finish();

};

Ston parapˆnw k¸dika, h putData kaletai epanalhptikˆ metafèronta diadoqikˆ dedomèna. H teleutaa kl sh jètei th shmaa hasMore se false, opìte apeleujer¸nontai kai tuqìn pìroi pou enai desmeumènoi ston Iterator. Antstoiqh ulopohsh mpore na qrhsimopoihje kai gia sunìdou me th mèjodo twn cookies. 4.4.7

Antimet¸pish sfalmˆtwn

àna apì ta pio krsima shmea sto sqediasmì mia diepaf  enai h upost rixh th anaforˆ sfalmˆtwn apì thn pleurˆ th efarmog  . Oi trei qruso kanìne sthn perptwsh aut  enai: 1. Epektasimìthta. Sqediˆste to sÔsthma ètsi ¸ste na mporoÔn na prostejoÔn epiplèon edh sfalmˆtwn argìtera. 2. Eppeda leptomèreia . Mh dnete ìlh thn plhrofora se èna makrÔ m numa keimènou. Kathgoriopoi ste kai kwdikopoi ste ierarqikˆ ta sfˆlmata, kai dhmiourg ste domè pou epitrèpoun ston qr sth na {trup sei} se bajÔtera eppeda leptomèreia an jèlei. Mhn dnete ˆsqeth gia tou pelˆte plhrofora, gia na katagrˆfete ti leptomèreie , ulopoi ste logs. Allˆ, mhn krÔbete sqetik  plhrofora. 3. Sqediˆste gia sfˆlmata. Sta katanemhmèna sust mata ta sfˆlmata enai polÔ suqnˆ kai de ja prèpei na antimetwpzontai pio drastikˆ apì ìso enai anagkao, p.q., an kˆpoio sfˆlma den enai moirao, de ja prèpei na aqrhsteÔei to antikemeno. Autì endeqomènw na ephreˆsei ti epilogè sthn ulopohsh twn diepaf¸n. àna KAKO parˆdeigma sqediasmoÔ gia thn antimet¸pish sfalmˆtwn fanetai parakˆtw, me didaktikˆ sqìlia: 1 2 3 4

/* Enums are good only if the program can use them in a switch statement. */ enum PrintingError_t { PE_PAPEROUT, PE_INKOUT, PE_PAPERJAM, PE_OTHER };

5 6 7 8 9 10 11

exception PrintingError_ex { PrintingError_t errcode; string errmsg; boolean job_aborted; // don’t use flags, use enum boolean job_paused; };

12 13

// Don’t use multiple exception types lightly!


4.5. METAKINHSH KWDIKA

14 15 16 17 18

121

enum PrinterConnenctError_t { PC_POWEROFF, PC_NETERROR }; exception PrinterConnectError_ex { PrinterConnError_t errcode; string errmsg; // job is always aborted

19 20

};

àna polÔ kalÔtero parˆdeigma sqediasmoÔ (ìmoio me to prohgoÔmeno) enai to ex  : 1 2 3 4

// maybe useful enum ErrorCode_t { PE_PAPEROUT, PE_INKOUT, PE_PAPERJAM, PE_OTHER, PC_POWEROFF, PC_NETERROR };

5 6 7

// probably useful enum PrintJobStatus_t { PJS_ABORTED, PJS_PAUSED };

8 9 10 11 12 13 14

// just one exception exception PrintError_ex { ErrorCode_t errcode; string errmsg; PrintJobStatus_t jobstatus; };

4.5

Metaknhsh k¸dika

Sto prìtupo CORBA, h antallag  plhrofora metaxÔ katanemhmènwn antikeimènwn kai pelat¸n aforˆ dedomèna. Se kˆpoie peript¸sei , aut  h dunatìthta den eparke gia na prosfèrei thn apaitoÔmenh euelixa kai prosarmostikìthta. Mia diaforetik  praktik  enai h upost rixh metakinoÔmenou k¸dika (mobile code). H kinhtikìthta k¸dika mpore na oriste w h dunatìthta dunamikoÔ orismoÔ th jèsh ektèlesh gia tm mata tou k¸dika th efarmog  . H idèa th metaknhsh k¸dika den enai prìsfath; èna parˆdeigma apì thn teqnologa twn mainframe upologist¸n enai h apomakrusmènh ektèlesh dèsmh remote batch job execution). €llo parˆdeigma enai h qr sh th PostScript gia thn epikoinwna me ektupwtè . Wstìso, o metakinoÔmeno k¸dika sti peript¸sei autè den enai tm ma tou {sklhroÔ pur na} tou k¸dika mia efarmog  . àna trto parˆdeigma enai h apostol  perplokwn erwt sewn SQL se sqesiakè bˆsei dedomènwn. Mia ˆllh sqetik  teqnologa enai h apodhma diergasi¸n (process migration). H teqnologa aut  qrhsimopoietai ektetamèna se cluster computing kai epitrèpei sti diergase enì cluster na metakinoÔntai apì kìmbo se kìmbo. Sthn perptwsh aut , oi stìqoi enai h kalÔterh exisorrìphsh tou fìrtou metaxÔ twn kìmbwn kaj¸ kai h anoq  se sfˆlmata. Katˆ sunèpeia, o mhqanismì apodhma ulopoietai diafan¸ w pro thn apodhmoÔsa diergasa. Se katanemhmèna sust mata, o skopì kai h qr sh th knhsh k¸dika enai suqnˆ diaforetikì .


122

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

• H jèsh tou metakinoÔmenou k¸dika enai gnwst  sto sÔsthma kai h metaknhsh gnetai upì ton èlegqo th efarmog  (se antjesh me thn apodhma diergasi¸n se clusters). • H exisorrìphsh fortou suqnˆ den enai o kÔrio lìgo gia thn metaknhsh, parìlo pou orismène forè autì isqÔei. O suqnìtero lìgo enai h kalÔterh euelixa sth sumperiforˆ tou sust mato .

Se antikeimenostraf  katanemhmèna sust mata, enai sunhjismèno na miloÔme gia kinhtikìthta antikeimènwn. àna metakinoÔmeno antikemeno mobile object mpore na metaferje apì ton èna upologist  ston ˆllo. H dunatìthta aut  den propojètei metaknhsh k¸dika; an ìloi oi upologistè tou diktÔou èqoun antgrafo tou k¸dika th klˆsh tou antikeimènou, arke na metaferje h katˆstash tou antikeimènou mìnon. Se mia genikìterh perptwsh wstìso, o k¸dika mpore na mhn enai diajèsimo , opìte ja prèpei na knei metaknhs  tou. Mia proqwrhmènh kathgora susthmˆtwn metakinoÔmenou k¸dika enai ta sust mata metakinoÔmenwn praktìrwn (mobile agents). W prˆktora (ìqi anagkastikˆ metakinoÔmeno ) jewretai mia ergasa pou ektele mia seirˆ apì polÔploke enèrgeie gia logariasmì kˆpoiou pelˆth. Ston parapˆnw orismì perilambˆnontai sust mata paroq  basik¸n uphresi¸n, pq., leitourgikˆ sust mata, bˆsei dedomènwn, web servers) allˆ kai sust mata pio exeidikeumèna, pq., sÔsthma prostasa apì ioÔ , sÔsthma kataq¸rhsh e-mail, klp. àna metakinoÔmeno prˆktora èqei th dunatìthta na metafèrei ton eautì touk¸dika kai dedomènase ˆllou upologistè ). Ta teleutaa qrìnia, shmantikì endiafèron èqei estiaste se eufue prˆktore (intelligent agents), oi opooi baszontai se teqnikè apì thn perioq  th Teqnht  NohmosÔnh . €lle kathgore teqnologi¸n praktìrwn enai oi katanemhmènoi prˆktore (distributed agents, prˆktore pou ulopoioÔntai w katanemhmène efarmogè ), oi autìnomoi prˆktore (autonomous agents, sust mata pou energoÔn gia megˆle periìdou autìnomaqwr anjr¸pinh parèmbash) kai oi sunergˆsimoi prˆktore (collaborative agents, sust mata pou mporoÔn na sunergastoÔn euèlikta me pleiˆda ˆllwn susthmˆtwn). Se megˆlo bajmì, oi teqnologe autè enai akìmh sto stˆdio th episthmonik  èreuna . 4.5.1

Probl mata asfˆleia

To megˆlo empìdio sthn eurÔterh qr sh metaferìmenou k¸dika enai to prìblhma th asfˆleia pou dhmiourgetai apì thn ektèlesh mh èmpistou k¸dika. Se pollè efarmogè to prìblhma autì den ufstatai, allˆ se anoiqtˆ sust mata sunergasa enai polÔ oxÔ. H taktikˆ epanalambanìmenh diˆdosh i¸n kai worms mèsw ektelèsimwn pou stèlnontai me e-mail enai adiˆyeusto mˆrtura gia to mègejo tou probl mato . H pio diadedomènh sthn prˆxh lÔsh sto prìblhma th asfˆleia enai h teqnik  sandboxing. Sthn teqnik  aut , o k¸dika pou metakin jhke apì mia mh èmpisth phg  ekteletai mèsa se èna peribˆllon ektèlesh pou periorzei sto elˆqisto ti dunatìthtè tou. Periorismo pou tjentai perilambˆnoun tou parakˆtw:


4.5. METAKINHSH KWDIKA

123

• Apagìreush na ekkin sei nèe diergase . • Periorismènh katanˆlwsh qrìnou CPU kai mn mh . • Apagìreush genik  kl sh sunart sewn E/E pˆsh fÔsew (arqea, sockets, mhqanismo sugqronismoÔpq. signals, klp.) H epikoinwna tou k¸dika epitrèpetai mìno mèsw eidikˆ ulopoihmènwn APIs. • Apagìreush th qr sh reflection.

Gia parˆdeigma, h platfìrma th Java parèqei èna polÔ euèlikto sÔsthma adeiodìthsh , to opoo mpore na periorsei epilektikˆ ti dunatìthte tou ekteloÔmenou k¸dika anˆ pˆsa qronik  stigm . Proof-Carrying Code

Mia teqnik  pou brsketai s mera sto stˆdio th èreuna protenei thn enswmˆtwsh ston metaferìmeno k¸dika mia majhmatik  apìdeixh , h opoa na apodeinÔei ìti ìtan o k¸dika autì ekteleste, ja èqei kal  sumperiforˆ, pq. ja èqei mikr  katanˆlwsh CPU   mn mh , de ja prospelˆsei mn mh ektì th topik  tou mn mh , de ja kalèsei entolè E/E k.o.k. O paral pth ja mpore na elègxei thn orjìthta th apìdeixh se sqetikˆ sÔntomo qrìno (anˆlogo tou m kou th ) kai an th bre swst , na epitrèyei thn ektèlesh tou se èna peribˆllon qwr periorismoÔ . 4.5.2

Teqnologe diadiktÔou kai metaforˆ k¸dika

Javascript

H teqnologa Javascript den èqei kama sqèsh me th gl¸ssa Java, oÔte me thn etaira Sun. Prìkeitai gia ma script gl¸ssa programmatismoÔ pou sunhjèstera fort¸netai kai ekteletai mèsw istoseldwn. Parìlo pou h sunhjèsterh qr sh th gl¸ssa enai h ulopohsh dunamik  sumperiforˆ gia istoselde , den upˆrqei periorismì apì thn dia th gl¸ssa gia kˆti tètoio. Antjeta, prìkeitai gia mia antikeimenostraf  gl¸ssa uyhloÔ epipèdou pou mpore jewrhtikˆ na qrhsimopoihje genikìtera. Gia na exasfalsoun asfˆleia twn dedomènwn twn qrhst¸n tou , oi web browsers pou uposthrzoun Javascript jètoun shmantikoÔ periorismoÔ sthn ektèlesh th Javascript. Istorikˆ, oi paliìtere ekdìsei twn dhmofil¸n web browsers èjetan sqetikˆ lgou kai sthn prˆxh aneparke periorismoÔ , me apotèlesma na brejoÔn apì tou hackers pollè ekmetalleÔsime mèjodoi parabash . Wstìso, h wrmansh th teqnologa sto shmeo autì èqei exaleyei plèon tou perissìterou kindÔnou . Ja anafèroume kˆpoiou apì tou periorismoÔ pou qrhsimopoi jhkan katˆ kairoÔ pro thn kateÔjunsh aut , qwr na d¸soume pollè leptomèreie . Periorismènoi pìroi ektèlesh . àna basikì allˆ aploðkì periorismì tjetai sto qrìno ektèlesh kˆje kommatioÔ k¸dika Javascript: tou epitrèpetai na ektelèsei mìnon lga ekatommÔria b mata, metˆ apì ta opoa diakìptetai h ektèles  tou. O periorismì autì etèjh ¸ste na mhn mpore èna kakìboulo prìgramma na


124

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

epibradÔnei shmantikˆ thn ektèlesh twn upìloipwn ergasi¸n. Sumplhrwmatikˆ, periorzetai kai h mègisth mn mh pou mpore na desmeute. Epsh , apagoreÔetai h prìsbash se topikˆ arqea, se mn mh ˆllwn programmˆtwn kai sti uphrese tou leitourgikoÔ sust mato (dktuo, dhmiourga kai èlegqo diergasi¸n, qeirismì qrhst¸n, klp). Periorismì dia proèleush (same-origin policy). Ta progrˆmmata Javascript fort¸nontai stou web browsers mèsa apì to mhqanismì fìrtwsh istoseldwn. Maz me thn trèqousa selda pou fort¸netai ston web browser, fort¸netai kai ekteletai èna arijmì apì enswmatwmèna (embedded) progrˆmmata. Genikˆ, katˆ thn ektèles  tou , ta progrˆmmata autˆ èqoun mìnon prìsbash se dedomèna th trèqousa selda ,   sqetik¸n seldwn: aut¸n pou proèrqontai apì thn dia phg  me thn trèqousa selda. Ta dedomèna autˆ mpore na enai diajèsima w cookies, anoiqtè selde se ˆlla parˆjura klp. O èlegqo proèleush koin  proèleush metaxÔ seldwn ulopoietai me sÔgkrish twn domains kai twn prwtokìllwn twn antstoiqwn URLs. Gia parˆdeigma, oi selde me URLs http://www.tuc.gr/page.html kai http://www.tuc.gr/otherpage.html jewretai ìti proèrqontai apì thn dia phg . Wstìso, ta parakˆtw URLs de jewroÔntai apì thn dia phg : URL http://www.tuc.gr:8080/page.html http://noc.tuc.gr/page.html ftp://www.tuc.gr/file.zip

Aita apìrriyh ˆllh jÔra ˆllo domain ˆllo prwtìkollo

Data tainting. Genikˆ akoÔgetai kˆpw perioristikì na apagoreÔei kane thn prìsbash se ìla ta dedomèna pou proèrqontai apì ˆllh phg . Autì pou kurw ma endiafèrei enai na mhn upˆrxei diarro  euasjhtwn dedomènwn ektì tou web browser, allˆ sw autì na mpore na epiteuqje me kˆpoia pio anoiqt  politik  apì ton periorismì th dia proèleush . Mia endiafèrousa mèjodo enai o stigmatismì dedomènwn (data tainting), pou prwtoeis qjh ston Netscape Navigator 3. H mèjodo aut  anajètei ston programmatist  thn eujÔnh na stigmatsei gia kˆje selda ta euasjhta dedomèna th (basikˆ, antikemena Javascript). Me thn kl sh th sunˆrthsh taint(x) se èna antikemeno x, to antikemeno apoktˆ to stgma th phg  proèleus  tou. äla ta ekteloÔmena progrˆmmata Javascript mporoÔn na èqoun prìsbash se ìla ta dedomèna, allˆ an kˆpoio prìgramma prospelˆsei stigmatismèna dedomèna pou proèrqontai apì ˆllh phg , stigmatzetai kai to dio. äla ta dedomèna pou autì to prìgramma ja dhmiourg sei apì to shmeo autì kai pèra enai epsh stigmatismèna me to stgma th arqik  phg  . Gia na prostateujoÔn ta stigmatismèna dedomèna, apagoreÔetai se stigmatismèna progrˆmmata Javascript na ektelèsoun opoiad pote epikoinwna me ton èxw kìsmo. H mèjodo tou stigmatismoÔ den eqe megˆlh ap qhsh, diìti epibˆrune ton programmatist  me thn eujÔnh na stigmatsei ta euasjhta dedomèna. Argìtera, h teqnik  egkatalefjhke pro qˆrin tou periorismoÔ dia proèleush . Ed¸ ja ana-


4.6. ENERGOPOIHSH KAI

PERSISTENCE

ANTIKEIMENWN

125

fèroume ìti o periorismì dia proèleush enai ousiastikˆ isodÔnamo me to na jewre kane stigmatismèna ìla ta dedomèna. Java applets

Ta Java Applets enai èna prìtupo metakinoÔmenou k¸dika gia qr sh sto diadktuo. Ta applets enai grafikˆ antikemena th Java pou sun jw emfanzontai enswmatwmèna se kˆpoia istoselda. àna antikemeno applet dhmiourgetai apì mia klˆsh Java pou mpore na metaferje mèsw athsh http. H kuriìterh qr sh twn applets enai h ulopohsh grafik¸n diepaf¸n gia efarmogè diadiktÔou. àna antikemeno applet empptei ston orismì tou mobile agent pou dìjhke prohgoumènw , afoÔ mpore na s¸sei thn katˆstas  tou kai na metaferje se ˆllo Java VM. Ta applets qrhsimopoioÔn to mhqanismì sandboxing th Java gia na prosfèroun uyhlì eppedo asfˆleia . àna applet pou parel fjh apì ton web browser kai ekteletai mèsa se autìn èqei exairetikˆ meiwmèna dikai¸mata prìsbash se pìrou tou sust mato . Den èqei th dunatìthta prìsbash sto sÔsthma arqewn, den mpore na epikoinwn sei me ˆlle diergase , oÔte na enhmerwje gia ˆlla sumbˆnta   paramètrou tou sust mato . Mpore na ulopoi sei stoiqea grafik  diepaf  mèsa ston browser. Mpore epsh na epikoinwn sei diktuakˆ, mìnon ìmw me to web site apì to opoo pro lje. Pèra apì thn parapˆnw default sumperiforˆ, upˆrqei h dunatìthta apì to qr sth na energopoi sei epilektikˆ sugkekrimène dunatìthte se sugkekrimèna edh applets gia ta opoa èqei eparke eggu sei asfˆleia . Yhfiakˆ upogegrammèno k¸dika Mia dièxodo stou austhroÔ periorismoÔ ektèlesh pou tjentai ston metakinoÔmeno k¸dika enai h qr sh yhfiak¸n upograf¸n. Me th qr sh kruptografik¸n mejìdwn enai dunatìn na bebaiwje h gnhsiìthta th proèleush enì progrˆmmato (Java applet   JavaScript script). O qr sth enì web browser mpore na dhl¸sei thn empistosÔnh tou se kˆpoie phgè proèleush k¸dika kai na qalar¸sei tou periorismoÔ ektèlesh katˆ perptwsh gia k¸dika apì ti phgè autè . H mèjodo aut  qrhsimopoietai suqnìtera se peribˆllonta intranets entì organism¸n, gia na epitrape h qr sh pio euèliktwn efarmog¸n web. 4.6

Energopohsh kai

persistence

antikeimènwn

Se pollè katanemhmène efarmogè parousiˆzetai h anˆgkh na uposthriqje èna megˆlo arijmì katanemhmènwn antikeimènwn, qwr ìmw na enai ìla tou se qr sh suneq¸ . Pijanì parˆdeigma enai èna katanemhmèno sÔsthma arqewn, ìpou to kˆje arqeo ulopoietai san katanemhmèno antikemeno. àna server mpore na apojhkeÔei ekatommÔria arqea, allˆ mìnon merikè dekˆde ,   to polÔ ekatontˆde apì autˆ na enai se qr sh anˆ pˆsa stigm . Se tètoie peript¸sei , h katanˆlwsh pìrwn apì ton object broker mpore na beltiwje dramatikˆ an autì den diathre katˆstash (sthn kÔria mn mh) gia ìla


126

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

ta antikemena pou uposthrzei, allˆ gia lga mìnon: ekena ta opoa prìsfata prospelˆsjhkan apì kˆpoio pelˆth. Ta antikemena autˆ ja enai energˆ, dhlˆdh ètoima na uposthrxoun peraitèrw kl sei , en¸ ta upìloipa ja enai anenergˆ; h katˆstas  tou ja enai apojhkeumènh sth deutereÔousa mn mh,   se kˆpoia bˆsh dedomènwn, apì ìpou ja mpore na fortwje ìtan qreiaste na energopoihje pˆli to antstoiqa antikemeno. O mhqanismì pou parèqei thn parapˆnw dunatìthta onomˆzetai activator. Apì th meriˆ tou client èna tètoio mhqanismì mpore na leitourge diafan¸ (transparently), ìpou ta antikemena energopoioÔntai apì ton object broker ìtan zhthjoÔn. Oi sÔgqronoi object brokers suqnˆ prosfèroun upost rixh gia activators. Sthn arqitektonik  CORBA parèqetai h dunatìthta sti efarmogè na parˆsqoun to dikì tou activator, allˆ uposthrzontai mhqanismo dieukìlunsh , mèsw politik¸n. H sunolik  diaqerish anatjetai stou object adaptors. To prìtupo tou POA (pou èqei antikatast sei to paliìtero BOA) perigrˆfei analutikˆ to mhqanismì autì. Sto Java RMI prosfèretai èna antstoiqo mhqanismì . 4.6.1

Energopohsh antikeimènwn

àna endiafèron z thma enai h anaparˆstash twn anenerg¸n antikeimènwn. Sto parˆdeigma pou anafèrjhke prohgoumènw , ìpou ta anenergˆ antikemena antistoiqoÔn se arqea, den apaitetai kˆpoia eidik  anaparˆstash. älh h aparathth plhrofora energopohsh enì antikeimènou prosfèretai apì to sÔsthma arqewn. Se ˆlle peript¸sei , enai epijumht  h ˆmesh anaparˆstash kˆpoia plhrofora gia kˆje antikemeno. Kˆti tètoio mpore na uposthriqje mèsw enì mhqanismoÔ marshalling, ìpou h anagkaa plhrofora gia thn epanenergopohsh twn antikeimènwn apojhkeÔetai se deutereÔousa mn mh. Parat rhsh: h plhrofora mpore na perilambˆnei kai thn katˆstash twn antikeimènwn, allˆ kai ton k¸dika ulopohsh twn mejìdwn tou , o opoo na prèpei na fortwje dunamikˆ. Se kˆje perptwsh wstìso, apaitetai èna mhqanismì anafor¸n (object references) pou na uposthrzei ton entopismì tou apenergopoihmènou antikeimènou. Gia parˆdeigma, sthn perptwsh pou ta antikemena antistoiqoÔn se arqea, ja prèpei, to object reference pou stèlnetai se mia kl sh RMI, na mpore na metafraste apì ton activator sto path name tou antstoiqou arqeou. Genikˆ, kˆje antikemeno ja prèpei na èqei èna monadikì diakritikì ObjectID, pou o pelˆth ja stèlnei w tm ma tou reference kai pou ja mpore na prosdiorsei th jèsh tou antstoiqou antikeimènou. Mia pijanìthta ulopohsh ja  tan qrhsimopoihjoÔn ObjectIDs (OIDs) pou na enswmat¸noun to path name. Wstìso, èna path name enai sun jw arketˆ megˆlo se mègejo kai den prosfèrei oikonomik  kwdikopohsh th plhrofora . Mia ˆllh pijanìthta enai h qr sh kˆpoiou file id tou sust mato (pq., sto U NIX tou i-node number) pou na tautopoie to arqeo. Ta ObjectIDs pou enswmat¸noun kˆpoiou edou {fusik  dieÔjunsh} th plhrofora onomˆzetai physical OIDs . Mia ˆllh prosèggish enai h qr sh logical OIDs. Autˆ enai aplˆ kleidiˆ pou parnoun timè aujarete , qwr kˆpoia idiaterh shmasa (pq. akoloujiakoÔ akeraou ). To sÔsthma diathre epsh èna mhqanismì metˆfrash twn logical OIDs se


4.6. ENERGOPOIHSH KAI

PERSISTENCE

ANTIKEIMENWN

127

physical OIDs, pou mporoÔn na qrhsimopoihjoÔn gia na entopsoun thn plhrofora. To leitourgikì pleonèkthma pou prosfèroun oi logical OIDs enai h dunatìthta na allˆxei h jèsh (ˆra, to physical OID) th prosferìmenh plhrofora , afoÔ se aut  thn perptwsh h allag  mpore na katagrafe sto mhqanismì metˆfrash . Sthn perptwsh pou qrhsimopoioÔntai physical OIDs, an allˆxei h jèsh kˆpoia plhrofora ja dhmiourghjoÔn {xekrèmaste } anaforè (dangling OIDs). 4.6.2

Persistence

àna antikemeno pou h diˆrkeia zw  tou periorzetai sta ìria th diergasa pou to dhmioÔrghse onomˆzetai transient. Tètoia enai ta sumbatikˆ antikemena sti perisssìtere gl¸sse programmatismoÔ. Wstìso, enai qr sima se pollè efarmogè kai ta persistent antikemena, dhlad  antikemena pou mporoÔn na apojhkeutoÔn se mìnimh mn mh, ¸ste na epiz soun pèra apì ta ìria th diergasa pou ta dhmioÔrghse. O mhqanismì tou persistence sqetzetai me th dunatìthta activation. Sto parˆdeigma twn antikeimènwn pou antistoiqoÔn se arqea, ìla autˆ ta antikemena enai persistent. Se ˆlle peript¸sei , ta persistent antikemena ja prèpei na apojhkeutoÔn ˆmesa. Gia na exuphrethjoÔn autè oi anˆgke , èqoun kataskeuaste sust mata persistent object stores se pollè antikeimenostrafe gl¸sse programmatismoÔ. Akìmh perissìtere dunatìthte apì ta persistent object stores prosfèrontai apì bˆsei dedomènwn pou mporoÔn na apojhkeÔoun antikemena. Oi bˆsei dedomènwn prosfèroun, pèra apì apoj keush, uphrese proqwrhmènh anaz thsh , kaj¸ kai ektèlesh dosolhyi¸n (transactions). Upˆrqoun dÔo basikè teqnologe : • Oi object-oriented databases (antikeimenostrafe bˆsei dedomènwn) enai bˆsei pou to montèlo dedomènwn tou enai amig¸ antikeimenostrafè . Oi bˆsei autè prosfèroun kalÔterh enswmˆtwsh twn dedomènwn se polÔplokou upologismoÔ . Wstìso, den èqoun polÔ isqurè dunatìthte erwt sewn (querying) kai parousiˆzoun duskole sthn anabˆjmish twn dedomènwn kai sthn apìdosh. • Oi object-relational databases (antikeimeno-sqesiakè bˆsei dedomènwn) enai sust mata pou sthrzontai se aplè , sqesiakè bˆsei gia th diaqerish twn dedomènwn, allˆ h prospèlash sth sqesiak  bˆsh gnetai mèsa apì èna front end pou dèqetai ait sei ekfrasmène se mia antikeimenostraf  gl¸ssa (pq. ODMG OQL—object query language) kai ti metasqhmatzei se sqesiak  (pq., SQL).

S mera, oi object-relational teqnologe èqoun epikrat sei kai prosfèrontai se megˆlh gkˆma dunatot twn kai tim¸n. Mia apì ti pio gnwstè teqnologe enai ta Enterprize Java Beans, pou enai mèro tou protÔpou J2EE—Java2 Enterprize Edition. Uposthrzetai apì pˆra pollˆ proðìnta anexˆrthtwn kataskeuast¸n w basikì mhqanismì se Java-based application servers.


128 4.7

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Epikoinwna

publish/subscribe

H epikoinwna diergasi¸n mèsw RPC enai sundet  (on-line) epikoinwna. Periorzetai se metaforˆ dedomènwn metaxÔ ergasi¸n pou enai tautìqrona energè kai èqoun arket  plhrofora h mia gia thn ˆllh, ¸ste na mporoÔn na sundejoÔn diktuakˆ. Se arketè efarmogè h zeÔxh metaxÔ ergasi¸n prèpei na gnei apì qalarìterou mhqanismoÔ , ete epeid  oi ergase den tautzontai qronikˆ, ete epeid  de gnwrzoun arketˆ gia na sundejoÔn apeujea . àqoun protaje pollo mhqanismo, o kajèna w katallhlìtero gia kˆpoia dedomènh kathgora efarmog¸n. Oi Eugster et al. [4℄ katatˆssoun tou mhqanismoÔ autoÔ anˆloga me thn aposÔzeuxh pou epitugqˆnoun, w pro trei ˆxone ; aposÔzeuxh sto qrìno, q¸ro kai sugqronismì. Tou kuriìterou mhqanismoÔ apì autoÔ ja melet soume sthn enìthta aut . 4.7.1

Basikè ènnoie

Sthn epikoinwna publish/subscribe diakrnoume dÔo ˆkra: ton publisher (ekdìth) kai ton subscriber (sundromht ). H epikoinwna enai monìdromh; plhrofora metafèretai apì ton publisher ston subscriber. Autì brsketai se antjesh me to prìtupo request/response ìpou kˆje epikoinwna enaien gèneiamfdromh. H plhrofora pou metafèretai se kˆje epikoinwna anafèretai ete w event (gegonì ) ete aplˆ w m numa. O ìro event upodhl¸nei ìti o paral pth th plhrofora den enai aparathta oÔte gnwstì oÔte monadikì . Oi diˆfore parallagè mhqanism¸n publish/subscribe katatˆssontai w pro thn aposÔzeuxh pou epitugqˆnoun. AposÔzeuxh sto qrìno: Oi epikoinwnoÔse diergase den leitourgoÔn tautìqrona. Mpore o publisher na apostelei kˆpoio event en¸ o subscriber enai aposundedemèno . Antstoiqa, o subscriber mpore na lˆbei kˆpoio event ìtan o publisher èqei pia termatiste. AposÔzeuxh sto q¸ro: Oi epikoinwnoÔse diergase de gnwrzoun se kanèna shmeo h mia thn Ôparxh   thn tautìthta th ˆllh . H epikoinwna gnetai mèsw mia uphresa events (event service), h opoa pazei to rìlo tou mesolabht . AposÔzeuxh sto sugqronismì: Oi diergase leitourgoÔn entel¸ asÔgqrona w pro th metaforˆ th plhrofora . O publisher den emplèketai ¸spou na lhfje to staljèn event. Epsh , o subscriber den emplèketai ¸spou na paralhfje kˆpoio event, allˆ eidopoietai asÔgqrona (p.q., mèsw callbacks   signals) gia thn Ôparx  event. H klassik  epikoinwna Request/Response pou melet same mèqri t¸ra (RPC, RMI klp) enai suzeugmènh w pro ìle ti diastˆsei : qrìno, q¸ro kai sugqronismì. Eidikˆ gia to sugqronismì, edame ìti uposthrzetai apì diˆforou mhqanismoÔ èna asÔgqrono w pro ton publisher trìpo epikoinwna (p.q. CORBA oneway operations). àna mhqanismì pou qrhsimopoietai se kˆpoie peript¸sei gia asÔgqronh epikoinwna Request/Response enai to notification (eidopohsh). àna request, pèra


4.7. EPIKOINWNIA

PUBLISH/SUBSCRIBE

129

apì to dio tou to perieqìmeno (p.q. kl sh kai orsmata RMI) sunodeÔetai kai apì thn tautìthta mia sunˆrthsh callback, h opoa kaletai gia na lhfje to response. Enallaktikˆ, h sunˆrthsh callback enai dunatìn na klhje pollè forè , epistrèfonta diaforetikì response kˆje forˆ. Sthn perptwsh aut  èqoume epikoinwna suzeugmènh se q¸ro kai qrìno allˆ aposuzeugmènh se sugqronismì. 4.7.2

Tuple spaces

Sthn epikoinwna me Distributed Shared Memory (DSM) oi diergase epikoinwnoÔn apojhkeÔonta kai diabˆzonta dedomèna se kˆpoio mhqanismì koin¸n dedomènwn. Pèra apì epikoinwna, o mhqanismì mpore na qrhsimopoihje kai gia sugqronismì twn diergasi¸n. O stìqo enai na ulopoihje èna sÔsthma pou na prosomoi¸nei thn epikoinwna diergasi¸n me koin  mn mh, qwr ìmw ton periorismì oi diergase na ekteloÔntai ston dio upologist . Kˆpoie ulopoi sei DSM qrhsimopoioÔn to mhqanismì virtual memory tou ulikoÔ gia thn ulopohsh DSM. €lla sust mata DSM baszontai se epikoinwna mèsw enì tuple space (q¸ro pleiˆdwn). O mhqanismì autì prwtoparousiˆsthke sth gl¸ssa programmatismoÔ Linda (bl. Gelernter [6℄) kai ulopoietai se arketˆ sust mata, ìpw to JavaSpaces (mèro th platfìrma Jini pou ja melet soume argìtera). Sta sust mata autˆ, h koin  mn mh ulopietai w èna sÔnolo apì tuples, me to opoo oi diergase allhlepidroÔn mèsw tri¸n kl sewn: out(t): H sunˆrthsh aut  eisˆgei to tuple t sto tuple space. in(t): H sunˆrthsh aut  exˆgei kai epistrèfei èna tuple. To t sthn kl sh aut  enai èna template, dhl. èna tuple me kˆpoia apì ta peda kenˆ. To epistrefìmeno tuple ja tairiˆzei me to t se ìla ta mh kenˆ peda tou t. read(t): Parìmoia kl sh me thn in allˆ to epistrefìmeno tuple paramènei sto tuple space (den exˆgetai).

Oi kl sei in kai read mporoÔn na qrhsimopoihjoÔn kai gia sugqronismì metaxÔ twn diergasi¸n, afoÔ emplèkontai mèqri na breje katˆllhlo tuple gia epistrof . àtsi, o mhqanismì autì enai aposuzeugmèno sto q¸ro kai to qrìno, allˆ ìqi sto sugqronismì. 4.7.3

Ourè mhnumˆtwn

àna exairetikˆ diadedomèno mhqanismì epikoinwna enai oi ourè mhnumˆtwn. H basik  idèa psw apì autì to mhqanismì enai apl : o publisher stèlnei èna m numa se mia ourˆ mhnumˆtwn, en¸ antstoiqa o subscriber diabˆzei mhnÔmata pou brskontai se kˆpoia ourˆ. Oi ourè enai q¸roi apoj keush twn mhnumˆtwn, ìqi aplˆ mhqanismo diabbash . Prosfèroun, katˆ perptwsh, dunatìthte mìnimh apoj keush , acknowledgements th l yh mhnunmˆtwn kai kurw apostol /l yh me dosolhye (transactional send/receive). H upost rixh dosolhyi¸n, kai mˆlista katanemhmènwn dosolhyi¸n (bl. Kef. 8) enai to kÔrio diakritikì twn our¸n mhnumˆtwn.


130

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA

Oi ourè mhnumˆtwn enai uphrese kai h epikoinwna me autè gnetai me kˆpoion apì tou mhqanismoÔ pou anafèrame w t¸ra (pq. mèsw RMI). San mhqanismì epikoinwna , oi ourè mhnumˆtwn prosfèroun aposÔzeuxh kai sto qrìno kai sto q¸ro kaien gèneisto sugqronismì. Kaj¸ upˆrqoun kai qrhsimopoioÔntai se ìle ti pijanè parallagè , suqnˆ o ìro qrhsimopoietai gia na qarakthrsei mia oikogèneia susthmˆtwn (proðìntwn), metaxÔ twn opown diakrnontai to MQSeries th IBM, to Advanced Queueing (AQ) th Oracle, diˆfore ulopoi sei tou protÔpou Java Message Service (JMS), k.a. Suqnˆ, ta sust mata autˆ anafèrontai w Message Oriented Middleware (MOM). Gia to logismikì epiqeir sewn (bussiness software) oi ourè mhnumˆtwn enai apì ti basikìtere upodomè logismikoÔ, maz me ti bˆsei dedomènwn. H dhmofila tou ofeletai a. sto ìti mporoÔn na apomon¸soun ta sust mata logismikoÔ sta ìria twn diaforetik¸n tmhmˆtwn th epiqerhsh kai b. me thn upost rixh dosolhyi¸n elaqistopoioÔn thn pijanìthta ap¸leia mhnumˆtwn lìgw pt¸sh diafìrwn uposusthmˆtwn. Parˆdeigma. Sto kèntro mhqanogrˆfhsh enì Panepisthmou stèlnontai ait sei apì ta tm mata tou idrÔmato gia to ˆnoigma logariasm¸n se foithtè pou parakoloujoÔn sugkekrimèna maj mata. H paralab  aut¸n twn ait sewn gnetai mèsw mia ourˆ mhnumˆtwn, h opoa apojhkeÔei axiìpista ìsa mhnÔmata lambˆnei. Epeid  h apostol  mhnÔmato uposthrzei transactions, to sÔsthma enai anjektikì se sfˆlmata; to foithtolìgio enì tm mato sugqronzei ta transactions th ourˆ kai th bˆsh dedomènwn tou ¸ste na mh qˆnontai mhnÔmata se perptwsh pt¸sh tou. Apì thn ˆllh meriˆ, h paralab  apì thn ourˆ kai epexergasa twn mhnumˆtwn aut¸n gnetai sto qrìno pou boleÔei to mhqanografikì kèntro (p.q. mìno Deutèra kai Pèmpth). Mpore to ˆnoigma tou logariasmoÔ na gnei me transactional trìpo, ¸ste kai ed¸ na mhn qˆnontai mhnÔmata. MetaxÔ twn tmhmˆtwn kai tou mhqanografikoÔ kèntrou, ta logismikˆ ekteloÔntai pl rw aposuzeugmèna se q¸ro, qrìno kai sugqronismì. Programmatismì me message queues Oi ourè mhnumˆtwn uposthrzoun èna API to opoo perièqei ti parakˆtw kl sei : Diaqerish qrhst¸n: Ta sust mata uposthrzoun th diapsteush qrhst¸n kai ton èlegqo twn dikaiwmˆtwn tou pˆnw sti diˆfore ourè . To teleutao sun jw gnetai me èna sÔsthma rìlwn (roles). Diaqerish our¸n: Dhmiourga/katastrof  our¸n, backup, rÔjmish twn pìrwn tou sust mato (sun jw oi ourè ulopoioÔntai pˆnw se kˆpoia bˆsh dedomènwn).


4.7. EPIKOINWNIA

PUBLISH/SUBSCRIBE

131

Metaforˆ mhnumˆtwn: Oi kl sei SEND(msg, queue kai RECEIVE(queue) analambˆnoun thn apostol  kai l yh mhnumˆtwn apì ti ourè . Prosfèretai h dunatìthta kˆpoiwn epektˆsewn: 1. Mpore h apostol  mhnÔmato na zhthje me acknowledgement, dhl. na katagrafe kai na apostale eidopohsh ìtan kˆpoio paralˆbei to m numa pou estˆlh. 2. Mpore h l yh mhnÔmato na gnei me sÔgqronh kl sh (blocking), ìpou uposthrzontai kai timeouts, allˆ kai asÔgqrona, mèsw callbacks. 3. Ektì apì th l yh mhnumˆtwn, uposthrzetai kai to BROWSING mia ourˆ , h exètash dhl. twn perieqomènwn th qwr na paralambˆnontai ta mhnÔmata. Dosolhye : UlopoioÔntai me ti entolè BEGIN, COMMIT kai ROLLBACK. Mèsa se èna transaction ekteletai mia seirˆ apì kl sei SEND kai RECEIVE. Se perptwsh ROLLBACK, ta mhnÔmata pou estˆlhsan me thn kl sh th SEND ja afairejoÔn apì ti ourè , en¸ ìsa paral fjhkan kai afairèjhkan apì ti ourè , ja epanatopojethjoÔn. Domhmèna mhnÔmata: Kl sei pou mporoÔn na qrhsimopoihjoÔn gia na orsoun domhmèna mhnÔmata, pou perièqoun peda me tÔpo (typed fields) kai idiìthte (properties). To sÔsthma mpore katìpin na qrhsimopoi sei thn plhrofora aut  me diˆforou trìpou : 1. Ta peda qrhsimopoioÔntai suqnˆ gia filtrˆrisma mhnumˆtwn, dhl. thn epilektik  l yh kˆpoiwn mhnumˆtwn anˆloga me ta perieqìmena twn pedwn tou . 2. Oi idiìthte (properties) qrhsimopoioÔntai apì to sÔsthma gia th diamìrfwsh politik¸n leitourga . Oi poio koinè idiìthte enai (a) apostolèa (b) proteraiìthte (g) diˆrkeia zw  mhnÔmato klp. Epsh , kˆje m muma èqei èna monadikì Message ID, me to opoo mpore na gnei anaforˆ se autì apì ˆlla mhnÔmata (p.q. w "sqetikoÔ").


132

KEFALAIO 4. KATANEMHMENA ANTIKEIMENA


Kefˆlaio 5 Uphrese onomˆtwn kai katalìgou H leitourgikìthta enì katanemhmènou sut mato katanèmetai se mia seirˆ apì uphrese . Kˆpoie apì autè ti uphrese enai ˆmesa prospelˆsime sto qr sth, en¸ ˆlle èqoun eswterikì rìlo sth leitourga tou sust mato . Gia parˆdeigma, h web efarmog  anaz thsh ston katˆlogo th biblioj kh (§1.1) enswmat¸nei ènan web server pou diaqeirzetai istoselde kai enai prospelˆsimo sto qr sth, kaj¸ kai th bˆsh dedomènwn th biblioj kh , h opoa den enai prospelˆsimh sto qr sth, allˆ kaletai apì ton web server. P¸ ìmw ta dÔo autˆ sust mata, o web server kai h bˆsh dedomènwn gnwrzoun to èna thn Ôparxh tou ˆllou? Mia apl  lÔsh ja  tan h qr sh enì arqeou rujmsewn (configuration file) apì kˆje mia efarmog . Oi diaqeiristè tou sust mato ja mporoÔn na sunjèsoun èna sÔsthma apì sunergazìmena exart mata (components) (p.q. ton web server, th bˆsh dedomènwn klp) katagrˆfonta sta arqea rujmsewn ti katˆllhle plhrofore (diktuakè dieujÔnsei , diajèsima prwtìkolla, plhrofore diapsteush user names kai passwords, klp) pou ja epitrèpoun sti efarmogè na sunergˆzontai. Se mikroÔ megèjou efarmogè , h lÔsh aut  enai apotelesmatik  kai apl  sthn ulopohsh. Wstìso, gia pio polÔploke efarmogè , h lÔsh aut  gr gora gnetai apagoreutikˆ akrib : an qreiaste na allˆxoun oi rujmsei pou aforoÔn kˆpoio component tou sust mato , p.q. th bˆsh dedomènwn, ja prèpei oi allagè na katagrafoÔn sta configuration files ìlwn twn ˆllwn components. 133


134

KEFALAIO 5. UPHRESIE ONOMATWN KAI KATALOGOU

An èqoume N components, kai to arqeo rujmsewn tou kajenì perièqei rujmsei gia ta upìloipa N − 1 components, tìte to mègejo ìlwn twn rujmsewn enai anˆlogo tou N 2 . To prìblhma autì enai eidik  perptwsh enì genikoÔ probl mato pou enai gnwstì san Prìblhma N-se-N (N-to-N problem)). Mia lÔsh sto N-se-N prìblhma ja  tan na up rqe èna kentrikì arqeo rujmsewn sto opoo ja  tan apojhkeumène ìle oi rujmsei mia efarmog  . Allˆ ki aut  h lÔsh meionekte sthn prˆxh. To monadikì autì arqeo, ja prèpei na antigrafe se ìlou tou upologistè pou filoxenoÔn kommˆtia tou sust mato , opìte h t rhsh th sunèpeia metaxÔ ìlwn twn antigrˆfwn kajstatai polÔ dusqer  . Ta parapˆnw fainìmena èginan antilhptˆ apì ti pr¸te hmère th dhmiourga tou Internet. Arqikˆ, to Internet apartizìtan apì merikè dekˆde upologistè , diaskorpismènou se panepist mia kai kubernhtikè uphrese twn HPA. Gia na mhn enai upoqrewmèno kˆje qr sth na jumˆtai ti diktuakè IP dieujÔnsei ìlwn aut¸n twn upologist¸n, up rqe se kˆje upologist  to arqeo /etc/hosts, to opoo perieqe thn antistoiqa sumbolik¸n onomˆtwn se diktuakè dieujÔnsei . ätan up rqe kˆpoia allag  sto dktuo, ìloi oi kìmboi eidopoioÔntan kai ananèwnan to arqeo autì. Wstìso, kaj¸ o arijmì twn diktuwmènwn upologist¸n ˆrqise na auxˆnei, ègine safè ìti h lÔsh aut  den exuphretoÔse kajìlou. àtsi, genn jhke h uphresa onomˆtwn tou diadiktÔou, to gnwstì ma Domain Name Service (DNS). Kˆje efarmog  pou  jele na epikoinwn sei me kˆpoio upologist  me gnwstì sumbolikì ìnoma, qrhsimopoioÔse pr¸ta thn uphresa DNS gia na metafrˆsei to sumbolikì ìnoma se diktuak  dieÔjunsh. àtsi, kˆje upologist  qreiazìtan pia na èqei apojhkeumènh topikˆ mìno ma diktuak  dieÔjunsh, aut n th uphresa DNS. Sth sunèqeia ja melet soume ta basikˆ stoiqea twn uphresi¸n onomˆtwn, ja kˆnoume mia sÔntomh episkìphsh th uphresa DNS kai tèlo ja anaferjoÔme se èna suggenikì allˆ pio genikì edo uphresi¸n, sti uphrese katalìgou (directory services). 5.1

Uphrese onomˆtwn

Oi uphrese onomˆtwn pou upˆrqoun s mera apoteloÔn metexèlixh tou DNS kai èqoun kentrik  jèsh sth dom  kˆje katanemhmènou sust mato . En¸ arqikˆ ulopoi jhkan gia na uposthrzoun ti anˆgke th diktuak  epikoinwna metaxÔ twn efarmog¸n, s mera mporoÔn na uposthrxoun eurÔtere anˆgke twn efarmog¸n. 5.1.1

Q¸roi onomˆtwn

àna q¸ro onomˆtwn (namespace) enai aplˆ èna sÔnolo tim¸n (sun jw alfarijmhtik¸n, allˆ ìqi pˆntote) pou upakoÔei se kˆpoiou suntaktikoÔ kanìne . Gnwsto se ìlou q¸roi onomˆtwn enai:


5.1. UPHRESIE ONOMATWN

135

• To sÔnolo twn suntaktikˆ swst¸n diktuak¸n dieujÔnsewn DNS (p.q. softnet. tuc.gr). • To sÔnolo twn diktuak¸n dieujÔnsewn IP (p.q. 147.27.1.200). • To sÔnolo twn suntaktikˆ swst¸n dieujÔnsewn email. • To sÔnolo twn suntaktikˆ swst¸n dieujÔnsewn diadiktÔou (URLs). • klp.

H dom  twn onomˆtwn enì namespace den enai tuqaa, allˆ enai tètoia ¸ste na uphrete tou skopoÔ th . Gia parˆdeigma, oi dieujÔnsei IP apoteloÔntai apì tèsseri akeraou twn 8 bit (ant p.q. gia ènan 32-bit arijmì), diìti ètsi dieukolÔnetai h katanom  tou se hosts kai subnets. Antstoiqa, ta sumbolikˆ onìmata tou DNS èqoun mia ierarqik  alfarijmhtik  morf , ìnoma1.ìnoma2.· · · .ìnomaN, h opoa afenì dieukolÔnei thn apomnhmìneus  tou apì anjr¸pou kai af' etèrou dieukolÔnei th diaqeris  tou . Me ton ìro diaqerish enì q¸rou onomˆtwn ennooÔme th diadikasa me thn opoa gnetai h anˆjesh onomˆtwn se pìrou (upologistè , uphrese , arqea, klp). Profan¸ , h diadikasa anˆjesh den mpore na enai anexèlegkth, diìti tìte upˆrqei h pijanìthta na qrhsimopoietai to dio ìnoma gia diaforetikoÔ pìrou , me arnhtikè sunèpeie gia thn akeraiìthta kai thn asfˆleia tou sust mato . Sthn pio apl  perptwsh, h diaqerish enì q¸rou onomˆtwn gnetai apì èna ˆtomo,   mia mikr  omˆda apì stenoÔ sunergˆte . Wstìso, h apìdosh onomˆtwn se megˆlh klmaka q¸rou , pq. se ìlou tou upologistè tou pagkìsmiou istoÔ, den enai dunatìn na gnei kentrikˆ. Akìmh ki an upojèsoume ìti ja mporoÔse na upˆrxei kˆpoio kentrikì organismì diaqerish pou na mpore na antapexèljei ston ìgko th douleiˆ , ja dhmiourgoÔse gr gora prostribè kai diafwne politik  fÔsew (gia na peisjete, analogistete to z thma th qr sh tou onìmato Makedona>>). Katˆ sunèpeia, ja prèpei h diadikasa diaqerish na enai apokentrwmènh. H qr sh ierarqik¸n q¸rwn onomˆtwn bohjˆ na luje to prìblhma th sunèpeia se apokentrwmène diadikase diaqerish . Gia parˆdeigma, o kentrikì server tou ergasthrou onomˆzetai panoramix.softnet.tuc.gr. äla ta onìmata me katˆlhxh .gr ta diaqeirzetai mia ellhnik  kratik  arq , sthn opoa èqei doje h eujÔnh twn onomˆtwn aut¸n apì ton pagkìsmio organismì diaqerish onomˆtwn IANA (Internet Assigned Names Authority). Me th seirˆ th , h ellhnik  arq  anajètei upoomˆde onomˆtwn se diˆforou fore   idi¸te . Gia parˆdeigma, sto Poluteqneo Kr th (kai sugkekrimèna sto NOC) èqei anateje h diaqerish twn onomˆtwn pou telei¸noun se .tuc.gr. To NOC me th seirˆ tou anèjese sto ergast rio SoftLab th diaqerish twn onomˆtwn pou telei¸noun se .softnet.tuc.gr. O diaqeirist  tou ergasthrou tèlo , anèjese to ìnoma panoramix.softnet.tuc.gr ston kentrikì server tou ergasthrou. Oi upo-omˆde onomˆtwn onomˆzontai domains. 5.1.2

Uniform Resource Identifiers (URIs)

Ta URIs apoteloÔn mia oikogèneia onomˆtwn pou arqikˆ eis qjhke gia na onomatsei pìrou sto web, allˆ s mera qrhsimopoietai kai se pollè ˆlle teqnologe .


136

KEFALAIO 5. UPHRESIE ONOMATWN KAI KATALOGOU

To basikì knhtro psw apì thn eisagwg  tou  tan na parˆsqoun ènan omoiìmorfo (uniform) mhqanismì tautopohsh pìrwn, me thn plèon afhrhmènh ènnoia th lèxh pìro . àtsi, w pìroi mporoÔn na jewrhjoÔn (pèra apì pìrou prospelˆsimou apì to diadktuo), ˆnjrwpoi, organismo, ènnoie , teqnikˆ prìtupa, klp. Gia parˆdeigma, to URI http://www.w3.org/2001/XMLSchema onomatzei to prìtupo XMLSchema, èna prìtupo pou perigrˆfei th morfopohsh eggrˆfwn XML. Mèqri s mera, den upˆrqei kˆpoia kentrik  diaqerish tou URI namespace. To mìno koinì stoiqeo twn URIs enai to eniao sunaktikì tou . Arqikˆ, to suntaktikì perigrˆfhke sto RFC 1738, allˆ apì tìte èqoun upˆrxei pollè anajewr sei . To pio prìsfato (2005) suntaktikì perigrˆfetai sto RFC 3986. Paradegmata URIs enai ta parakˆtw: ftp://ftp.is.co.za/rfc/rfc1808.txt http://www.ietf.org/rfc/rfc2396.txt ldap://[2001:db8::7]/c=GB?objectClass?one mailto:John.Doe@example.com news:comp.infosystems.www.servers.unix tel:+1-816-555-1212 telnet://192.0.2.16:80/ urn:oasis:names:specification:docbook:dtd:xml:4.1.2

To prìtupo twn URIs èqei exeidikeute se dÔo oikogèneie : ta gnwstˆ se ìlou ma URLs (Uniform Resource Locators), kaj¸ kai sta URNs (Uniform Resource Names). Den upˆrqei kˆpoio suntaktikì   ˆllo kanìna pou na diaqwrzei èna URL apì èna URN, h mình diaforopohsh enai w pro th qr sh tou . Ta URLs qrhsimopoioÔntai gia na perigrˆyoun th diktuak  topojesa kˆpoiou pìrou sto Internet, en¸ ta URNs qrhsimopoioÔntai gia thn tautopohsh tou pìrou, qwr na perièqoun plhrofore jèsh . To skeptikì enai ìti to URL pou antistoiqe se kˆpoion pìro mpore na allˆxei, an o pìro metakinhje, en¸ to URN enì pìrou den upodhl¸nei kˆpoia dieÔjunsh, ˆra de metabˆlletai. Autˆ bèbaia enai kˆpw jewrhtikˆ; to an èna URI enai URN   URL enai asafè kai upokeimenikì z thma, qwr idiaterh praktik  shmasa. Gia perissìtere leptomèreie , parapèmpeste sta RFCs. 5.1.3

Arqitektonik  uphresi¸n onomˆtwn

Sthn aploÔsterh perptwsh, se èna katanemhmèno sÔsthma upˆrqei mìno èna name server, o opoo gnwrzei ta onìmata ìlwn twn pìrwn tou sust mato , kai h dieÔjuns  tou enai eurèw gnwst  (well known). Sthn perptwsh aut , h metˆfrash tou onìmato kˆpoiou pìrou gnetai eÔkola. Wstìso, gia tou lìgou pou anafèrame parapˆnw sqetikˆ me th diaqerish twn namespaces, sti perissìtere peript¸sei upˆrqoun perissìteroi tou enì name servers, pou o kajèna tou enai gn¸sth enì sugkekrimènou domain tou q¸rou onomˆtwn. ProkÔptei ètsi to prìblhma th anaz thsh enì onìmato . Se kˆje perptwsh, kˆje kìmbo tou diktÔou gnwrzei èna mìno name server, ton topikì (local) nameserver, kai anafèretai se autìn ìtan jèlei na metafrˆsei kˆpoio ìnoma. An o topikì


5.1. UPHRESIE ONOMATWN

137

name server gnwrzei to ìnoma autì, aplˆ apantˆ thn er¸thsh. Sthn antjeth perptwsh, enai upeÔjuno na parapèmyei to qr sth se kˆpoio ˆllo name server, kai autì me th seirˆ tou parakˆtw klp. H diadikasa aut  onomˆzetai name resolution kai mpore na ulopoihje me diˆforou trìpou . Oi pio sunhjismènoi enai oi parakˆtw: Iterative resolution O name server pou den mpore na metatrèyei kˆpoio ìnoma, epistrèfei sto qr sth th diktuak  dieÔjunsh kˆpoiou ˆlloun name server, o opoo enai pio katˆllhlo . O qr sth epanalambˆnei thn er¸ths  tou ston nèo name server mìno tou. O kÔklo autì epanalambˆnetai ìse forè qreiaste.

H mèjodo aut  epibarÔnei diktuakˆ to qr sth, allˆ dieukolÔnei to name server. Enai katˆllhlh gia anoiqtˆ peribˆllonta, ìpou oi qr ste enai kalˆ diktuwmènoi oi dioi. H mèjodo aut  qrhsimopoietai sto DNS. Recursive resolution O name server pou den mpore na metatrèyei kˆpoio ìnoma, analambˆnei o dio na epikoinwn sei me kˆpoion pio katˆllhlo name server, prowj¸nta thn er¸thsh tou qr sth. ätan lˆbei apˆnthsh, thn epistrèfei o dio sto qr sth.

Me th mèjodo aut , o qr sth elafrÔnetai apì to diktuakì fìrto. H mèjodo qrhsimopoietai eurèw se dktua epikoinwni¸n. Fusikˆ, sthn prˆxh enai pijanì na upˆrqei sunduasmì twn parapˆnw dÔo mejìdwn. Epsh , ìtan enai bˆsimo na upojèsei kane ìti ta onìmata den allˆzoun polÔ suqnˆ, mpore na qrhsimopoi sei caching gia na aux sei thn apìdosh. Swst  qr sh tou caching mpore na mei¸sei to kìsto tou resolution dramatikˆ. 5.1.4

Orgˆnwsh tou q¸rou onomˆtwn

äpw epame, an jèloume na upˆrqei sunèpeia kai asfˆleia sto sÔsthmˆ ma , to dio ìnoma de ja prèpei na anafèretai se parapˆnw apì ènan diaforetikoÔ pìrou . Wstìso, to antjeto, dhlad  to na èqei kˆpoio pìro perissìtera apì èna onìmata, den dhmiourge prìblhma, antjeta, suqnˆ enai epijumht . Suqnˆ qrhsimopoioÔme ton ìro yeud¸numa (aliases), gia na dhl¸soume ìti kˆpoio pìro mpore na èqei perissìtera apì èna onìmata, parìlo pou den enai aparathto kˆpoio apì autˆ ta onìmata na enai to {pragmatikì}. An upojèsoume ìti èqoume mia uphresa pou metafrˆzei onìmata tÔpou A se onìmata tÔpou B, mporoÔme na diakrnoume ta aliases se dÔo kathgore : hard aliases pou metafrˆzoun onìmata tÔpou A se onìmata tÔpou B. soft aliases pou metafrˆzoun onìmata tÔpou A se onìmata tÔpou A (!). To nèo ìnoma mpore na enai ete hard alias ete èna ˆllo soft alias. Autì o tÔpo aliases enai pio perploko sthn ulopohsh apì ton prohgoÔmeno, diìti ja prèpei kˆje alusda metafrˆsewn (apì alias se alias) na katal gei pˆntote se kˆpoio ìnoma tÔpou B. Wstìso, ta soft aliases enai pio euèlikta apì ta hard


138

KEFALAIO 5. UPHRESIE ONOMATWN KAI KATALOGOU

aliases: an allˆxei to ìnoma tÔpou B tou pìrou, ta soft aliases den qreiˆzetai na allaqjoÔn. 5.2

H uphresa

DNS

H uphresa DNS enai s mera o sunektikì istì pou sundèei to Internet, prosfèronta anaz thsh diktuak¸n plhrofori¸n gia tou upologistè pou to apartzoun. AnaptÔqjhke arqikˆ apì ton Mockapetris (RFC 1034) to 1987, gia na antikatast sei to prohgoÔmeno sÔsthma, pou basizìtan sthn antigraf  enì kentrikoÔ arqeou. Ta kuriìtera meionekt mata tou palioÔ sust mato  tan ta ex  : • Den  tan scalable. H sunt rhsh, enhmèrwsh kai antigraf  tou kentrikoÔ arqeou eqe terˆstio kìsto ìtan o arijmì twn upologist¸n sto Internet aux jhke. • Oi perissìteroi organismo  jelan na diaqeirzontai oi dioi to q¸ro onomˆtwn tou . • Den upost rize epiplèon plhrofore pèra apì ti diktuakè dieujÔnsei twn upologist¸n. 5.2.1

O q¸ro onomˆtwn tou

DNS

O q¸ro onomˆtwn enai ierarqikì kai apartzetai apì mia akolouja sumboloseir¸n, qwrismènwn me telee . Kˆje sumboloseirˆ apoteletai apì latinikou qarakt re , arijmhtikˆ yhfa, kaj¸ kai merikˆ epiplèon sÔmbola. Oi telee qrhsimopoioÔntai gia na kajorsoun thn ierarqik  dom  tou q¸rou onomˆtwn. H ierarqa twn onomˆtwn mpore na parastaje san èna dèntro, pou kˆje kìmbo tou onomˆzetai domain. H rza th ierarqa onomatzetai me to kenì alfarijmhtikì. àtsi, to apìluto ìnoma (absolute name) enì upologist  tou ergasthrou enai p.q. panoramix.softnet.tuc.gr.

(prosèxte ìti telei¸nei se telea !). Xekin¸nta apì th rza tou dèntrou th ierarqa , to ìnoma antistoiqei sto monopˆti “” → gr → softnet → panoramix. To ìnoma autì enai epsh èna domain, dhl. mpore na epektaje peraitèrw, an kai sthn prˆxh kˆti tètoio to apofeÔgoume. Suqna, ant na qrhsimopoi soume to apìluto ìnoma enì pìrou, qrhsimopoioÔme kˆpoio sqetikì ìnoma (relative name), to opoo o upologist  ma èqei rujmiste na metafrˆzei se apìluto ìnoma, prosjètonta to epjema kˆpoiou domain. Gia parˆdeigma, an jèlete na brete th dieÔjunsh toun panoramix apì kˆpoion upologist  tou ergasthrou, arke na ton prosdiorsete me to ìnoma “panoramix”. An ìmw brskeste se kˆpoion upologist  tou Poluteqneou, ektì tou ergasthrou, mporete na ton anazht sete (an fusikˆ upˆrqei h katˆllhlh rÔjmish) me to ìnoma “panoramix.softnet”.


5.2. H UPHRESIA

TÔpo eggraf  A NS CNAME WKS PTR HINFO MX TXT

139

DNS

Perigraf  IP Address kˆpoiou upologist  to ìnoma tou NameServer kˆpoiou domain Canonical NAME pou antistoiqe se autì to alias Well Known Services uphrese pou prosfèrontai se kˆpoio domain domain name Pointer antistoiqe mia IP dieÔjunsh se kˆpoio ìnoma (antstrofh anaz thsh) Host INFO h arqitektonik  kai to leitourgikì sÔsthma kˆpoiou upologist  Mail eXchange to ìnoma tou diaqeirist  email tou domain TeXT alfarijmhtikì pou qrhsimopoietai gia sqìlia

Pnaka 5.1: Oi pio suqno tÔpoi eggraf¸n sto sÔsthma DNS. Epsh , to DNS uposthrzei soft aliases. Gia parˆdeigma, to ìnoma mail. softnet.tuc.gr. enai èna alias gia to panoramix.softnet.tuc.gr. Gia na aplopoi sei th diaqerish twn aliases to DNS orzei ìti kˆje soft alias prèpei na metafrˆzetai se kˆpoio hard alias. Ta hard aliases sto DNS onomˆzontai canonical names (CNAME). Pèra apì th metˆfrash dieujÔnsewn, enai dunatìn na parèqetai epiplèon plhrofora gia kˆje domain. Genikˆ, se kˆje domain antistoiqe mia mikr  bˆsh dedomènwn, pou apoteletai apì eggrafè diafìrwn tÔpwn. Kˆpoioi apì tou tÔpou autoÔ fanontai ston Pin. 5.1. O organismì IANA èqei kajier¸sei polÔ perissìterou tÔpou . 5.2.2

Arqitektonik  tou

DNS

Gia na uposthrxei thn katanom  twn dedomènwn se polloÔ anexˆrthtou upologistè , to DNS akolouje mia arqitektonik  peer-to-peer. H sunolik  plhrofora tou DNS qwrzetai se z¸ne (zones) H plhrofora pou perièqetai se mia z¸nh aforˆ kˆpoio sugkekrimèno domain, kai pèra apì diktuakè dieujÔnsei upologist¸n perigrˆfei ˆlla stoiqea tou, ìpw pq. uphrese pou prosfèrontai sto domain, tou name servers anexˆrthtwn upo-domains, tou name servers tou parent domain, diaqeiristikè plhrofore pou aforoÔn to caching, enallaktikoÔ name servers gia autì to domain (pou prosfèroun anoq  se sfˆlmata) klp. Se kˆje DNS server enai apojhkeumènh h plhrofora enì   perissìterwn zones. Gia kˆje zone upˆrqoun toulˆqiston dÔo name servers pou kaloÔntai aujente (authoritative), stou opoou mpore kane na basiste ìti perièqoun enhmerwmène plhrofore . To DNS uposthrzei iterative name resolution, kai h epikoinwna me ton server mpore na basiste ete se UDP mhnÔmata, ete se TCP sundèsei . Sth deÔterh perptwsh, enai dunatìn na qrhsimopoihje h dia TPC sÔndesh gia pollaplè erwt sei , ¸ste na meiwje to overhead th dhmiourga nèa sÔdesh .


140

KEFALAIO 5. UPHRESIE ONOMATWN KAI KATALOGOU

5.2.3

Qr sh tou

DNS apì ti

efarmogè

Lìgw th jemeli¸dou shmasa tou sth diktuak  epikoinwna, to DNS enai prospelˆsimo apì k¸dika pou upˆrqei sti tupikè diktuakè biblioj ke tou sust mato . Oi sunart sei autè enopoioÔn w èna bajmì diˆforou mhqanismoÔ gia name resolution kai h kÔria qr sh tou enai h metatrop  diˆforwn sumbolik¸n onomˆtwn se kwdikoÔ pou qrhsimopoioÔntai sth dhmiourga sockets. Pèra apì th metatrop  onomˆtwn se dieujÔnsei , uposthrzetai h metatrop  gia address families, socket types, protocols kai services. Sto Unix, h aparathth plhrofora gia ti metatropè autè enai apojhkeumènh se dÔo apì arqea sust mato , ta /etc/protocols kai /etc/services. Epsh , o resolver tou sust mato (pou mpore na perilambˆnei diˆforou mhqanismoÔ gia th metatrop  onomˆtwn se dieujÔnsei ), rujmzetai apì dÔo arqea: ta /etc/host.conf kai /etc/resolv.conf. Gia perissìtere leptomèreie parapèmpeste sthn tekmhrwsh tou sust mato . Sthn Python, h biblioj kh aut  enai prospelˆsimh mèsw mia seirˆ sunart sewn sto socket module, oi kuriìtere twn opown fanontai ston Pin. 5.2. Sunˆrthsh gethostbyname gethostbyaddr getfqdn getaddrinfo

Perigraf  Metatrèpei to ìnoma enì upologist  se IP address Metatrèpei mia IP address se alfarijmhtikì ìnoma upologist  (reverse resolution) Metatrèpei kˆpoio alias sto pl re ìnoma (Fully Qualified Domain Name) enì upologist  H sunˆrthsh aut  sunduˆzei mia seirˆ apì ˆlle sunart sei kai parèqei se ètoimh morf  ta orsmata pou ja perastoÔn sti sunart sei /mejìdou socket, bind kai connect. Kaletai me to epijumhtì zeugˆri dieÔjunsh /uphresa sto opoo jèloume na sundejoÔme, p.q. getaddrinfo(’panoramix’,’http’)

Pnaka 5.2: Oi kuriìtere sunart sei gia name resolution sthn Python.

5.3

Uphrese katalìgou

Oi uphrese onomˆtwn periorzontai w pro to edo th plhrofora pou parèqoun kai den enai arketˆ euèlikte gia na uposthrxoun th diaqerish tou configuration enì katanemhmènou sust mato . To basikì tou meionèkthma enai ìti oi plhrofore pou apojhkeÔoun akoloujoÔn èna statikì sq ma (sugkekrimèna attributes anˆ pìro). H rÔjmish enì katanemhmènou sust mato ìmw mpore na apaite polÔ pio aujareth (ad hoc) plhrofora. Epsh , suqnˆ h anaz thsh kˆpoiou pìrou de gnetai me bˆsh to ìnoma tou pìrou, allˆ me bˆsh kˆpoia apì ta


141

5.3. UPHRESIE KATALOGOU

qarakthristikˆ tou (p.q. fˆqnw th dieÔjunsh tou ektupwt  pou h jèsh tou na enai to {Mhqanografikì Kèntro}). Gia na exuphrethjoÔn oi parapˆnw anˆgke , anaptÔqjhkan oi uphrese katalìgou (directory services). Mpore kˆpoio na jewr sei ìti mia uphresa katalìgou enai mia ubridik  ènwsh mia sqesiak  bˆsh dedomènwn kai mia uphresa onomˆtwn. äpw kai h sqesiak  bˆsh, h uphresa katalìgou epitrèpei thn apoj keush poiklh plhrofora , kaj¸ kai thn anaz thsh me polÔploka krit ria. Epsh , ìpw kai sti uphrese onomˆtwnkai se antidiastol  me ti bˆsei dedomènwn, h plhrofora pou enai apojhkeumènh se mia uphresa katalìgou mpore na enai katanemhmènh se anexˆrthtou servers, pou tou diaqeirzontai anexˆrthtoi organismo, allˆ upìkeintai tautìqrona kai se mia ierarqa, ¸ste oi anazht sei na mporoÔn na epektajoÔn se pollaploÔ servers ìpote apaitetai. Oi uphrese katalìgou apoteloÔn s mera kombik  teqnologa gia thn anˆptuxh megˆlwn katanemhmènwn efarmog¸n. H diˆdosh th qr sh tou , epètreye th metexèlixh th basik  arqitektonik  tri¸n epipèdwn, sthn uphresiostraf  arqitektonik  (service-oriented architecture (SOA)). Sthn klassik  arqitektonik  tri¸n epipèdwn, h efarmog  èqei mia sqetikˆ ˆkampth ˆkampth dom : apoteletai apì sugkekrimèna epimèrou sust mata kai kˆje epimèrou sÔsthma èqei sugkekrimènh jèsh kai rìlo sto sunolikì sÔsthma. An kˆpoio apì ta epimèrou sust mata den enai diajèsimo, h sunolik  efarmog  dusleitourge Sthn uphresiostraf  arqitektonik , h efarmog  èqei polÔ pio qalar  dom . Kˆje epimèrou uposÔsthma gnwrzei mìnon to edo twn uphresi¸n pou qreiˆzetai gia na leitourg sei, allˆ den enai desmeumèno na qrhsimopoi sei sugkekrimèna sust mata gia na lˆbei ti uphrese autè . Antjeta, ìpote qreiˆzetai kˆpoia uphresa apeujÔnetai se mia (sugkekrimènh) uphresa katalìgou kai anazhte pijanˆ sust mata pou kalÔptoun ti anˆgke tou. àtsi, h sÔnjesh mia efarmog  gnetai exairetikˆ euèlikth. Upˆrqoun pollè ulopoi sei uphresi¸n katalìgou pou qrhsimopoioÔntai eurèw . Oi pio dhmofile enai h uphresa LDAP (Lightweight Directory Access Protocol), pou bassthke sthn pio paliˆ (kai pio perplokh) uphresa X.500, h uphresa JNDI (Java Naming and Directory Interface, èna prìtupo Java API pou enopoie thn prìsbash se uphrese onomˆtwn kai katalìgou, kai h uphresa Microsoft Active Directory Service (AD) pou qrhsimopoietai sta dktua pou baszontai sta prìtupa th Microsoft. Suqnˆ, oi uphrese katalìgou anafèrontai w uphrese yellow pages, se antidiastol  me ti uphrese onomˆtwn pou anafèrontai w white pages. H onomasa aut , pou parapèmpei stou gnwstoÔ ma thlefwnikoÔ katalìgou , kajier¸jhke pr¸ta sta proðìnta th Sun. 5.3.1

Uphrese anakˆluyh

(discovery services)

àna edo uphresa sqetikì me ti uphrese katalìgou enai oi uphrese anakˆluyh . Prìkeitai gia eidik  perptwsh mia uphresa katalìgou, h opoa apartzetai apì polloÔ mikroÔ servers, pou o kajèna tou brsketai enswmatwmèno mèsa se kˆpoio uposÔsthma. Gia parˆdeigma, oi suskeuè pou eisèrqontai se èna aujìrmhto diktuakì peribˆllon (spontaneous network) (sto opoo sundèon-


142

KEFALAIO 5. UPHRESIE ONOMATWN KAI KATALOGOU

tai kai aposundèontai dunamikˆ kai aujìrmhta) auto-organ¸nontai se kˆpoia dom  peer-to-peer, gia na sqhmatsoun mia eniaa uphresa katalìgou pou parèqei plhrofore gia ìle tou . ätan èna nèo sÔsthma eisèrqetai sto dktuo, anakoin¸nei thn parousa tou mèsw an¸numh poluekpomp  , ¸ste na gnwrsei kai na gnwriste apì ta upìloipa sust mata. Parˆdeigma tètoia uphresa enai h uphresa Jini th etaira Sun.


Kefˆlaio 6 Asfˆleia

143


144

KEFALAIO 6. ASFALEIA


Kefˆlaio 7 Katanemhmènoi Algìrijmoi Sto Kef. 2 exetˆsame analutikˆ ti teqnikè tou poluprogrammatismoÔ pou ma epitrèpoun na ulopoioÔme uphrète . Sthn apl  perptwsh pou ulopoioÔme èna katanemhmèno sÔsthma w w sÔsthma enì uphrèth,   èstw w sÔnolo apì anexˆrthtou metaxÔ tou uphrète , oi parapˆnw teqnikè enai eparke . Wstìso, h ulopohsh lgo pio polÔplokwn susthmˆtwn den mpore na basiste mìno sti teqnikè autè . Prˆgmati, pollè apì ti uphrese   leitourge pou exetˆsame mèqri t¸ra ìpw p.q. uphrese onomˆtwn kai katalìgwn (Kef. 5), katanemhmène sunalagè (§4.7.3), katanemhmèno garbage collection, enai dÔskolo   adÔnato na ulopoihjoÔn swstˆ me aplè mejìdou . Oi katanemhmènoi algìrijmoi epikentr¸nontai se probl mata ulopohsh polÔplokwn upologism¸n ìpw oi parapˆnw, se katanemhmèna sust mata. Sqediˆzontai ex arq  me tètoio trìpo ¸ste na mporoÔn na ektelestoÔn swstˆ se pollaploÔ upologistè pou èqoun diaforetikè dunatìthte se taqÔthta, topik  mn mh kai diktuak  sÔndesh. H orjìthtˆ tou diathretai akìmh kai se pertpwsh astoqa tou ulikoÔ (anˆloga me ti paradoqè pou gnontai sth sqedas  tou ). Wstìso, h anˆptux  tètoiwn algìrijmwn enai praktikˆ mia dÔskolh upìjesh, akìmh kai gia aplˆ sqetikˆ probl mata. Sto kefˆlaio autì ja gnei mia eisagwg  sti basikè ènnoie pou dièpoun th sqedash katanemhmènwn algìrijmwn kai ja parousiastoÔn kˆpoioi apì tou pio basikoÔ . Se epìmena kefˆlaia, ja epektajoÔme se pio polÔplokou algìrijmou gia ti spoudaiìtere kathgore katanemhmènwn efarmog¸n. 7.1

Montèla katanemhmènou ulikoÔ

Sth melèth twn mh-katanemhmènwn algorjmwn qrhsimopoietai to montèlo th mhqan  RAM (Random Access Machine), mia ideat  mhqan  pou prosomoiˆzei 145


146

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

sthn arqitektonik  von Neumann, pou enai h kuriìterh arqitektonik  tou ulikoÔ twn shmerin¸n upologist¸n. Me bˆsh autì to jewrhtikì montèlo enai dunat  h anˆptuxh algìrijmwn gia diˆfora basikˆ probl mata kai h melèth twn idiot twn pou endiafèroun, ìpw p.q. h asumptwtik  poluplokìthta th ektèlesh tou se qrìno (b mata th mhqan  RAM) kai mn mh. Sta katanemhmèna sust mata enai exsou aparathth h uðojèthsh jewrhtik¸n montèlwn tou ulikoÔ. Wstìso, h poikilomorfa tou ulikoÔ sta katanemhmèna sust mata enai shmantikˆ megalÔterh, me apotèlesma na mhn upˆrqei èna monadikì montèlo, allˆ pollˆ. Sunèpeia autoÔ enai ìti, gia to dio upologistikì prìblhma, ja prèpei na anaptuqjoÔn perissìteroi tou enì algìrijmoi, èna gia kˆje montèlo ulikoÔ. Genikˆ, jewroÔme ìti to katanemhmèno sÔsthma apoteletai apì n diergase , P1 , . . . , Pn . Kˆje diergasa enai èna prìgramma pou èqei kˆpoie topikè metablhtè (topik  mn mh) kai epikoinwne me ti ˆlle diergase katˆ thn ektèlesh tou algìrijmou. Orismì 1

H

katˆstash (state)

kˆje diergasa

registers

Pi

apartzetai apì ta perieqìmena

program counters, stack pointer), kai genikˆ ìlh th plhrofora pou apaitetai gia na qarakthriste pl rw h sumperiforˆ th Pi se kˆje qronik  stigm . twn topik¸n metablht¸n th , twn

elègqou (p.q.

Ta diˆfora montèla katanemhmènou ulikoÔ diaforopoioÔntai w pro tou parakˆtw basikoÔ ˆxone : Epikoinwna: Edame dÔo basikˆ montèla epikoinwna , th sundet  (me mhnÔmata) kai thn asÔndeth (me koin  mn mh). Sta katanemhmèna sust mata meletˆme kurw montèla me sundet  epikoinwna. Parìlo pou h sundet  epikoinwna den enai aparathta diktuak , sunhjzetai na onomˆzoume ta montèla autˆ diktuakˆ montèla kai tou antstoiqou algìrijmou diktuakoÔ algìrijmou (network algorithms). Mia basik  ènnoia pou qrhsimopoietai suqnˆ enai h ènnoia tou kanalioÔ (channel). To kanˆli montelopoie dÔo paramètrou th epikoinwna : (a) th diasÔndesh (connectivity) twn diergasi¸n, kai (b) th metaforˆ dedomènwn w autìnomh diadikasa. Ta kanˆlia enai ki autˆ diergase tou sust mato (mh upologistikè ), pou epikoinwnoÔn sÔgqrona me ti diergase P1 , . . . , Pn . Katˆ thn ektèlesh, to kˆje kanˆli èqei katˆstash (state) pou metabˆlletai sto qrìno, ìpw oi diergase Pi èqoun katˆstashta perieqìmena th topik  tou mn mh pou metabˆlletai ki aut  sto qrìno. Sugqronismì : En¸ se ènan upologist  h sÔgqronh leitourga enai o kanìna , sta katanemhmèna sust mata enai h exaresh; ta perissìtera montèla enai asÔgqrona. O sugqronismì metaxÔ diaforetik¸n diergasi¸n enai duskolìtero apì ìti ja permene kane . äqi mìno oi diergase mpore na ekteloÔntai me diaforetikè (kai ˆgnwste , metaballìmene ) sqetikè taqÔthte , allˆ h katˆstash gnetai akìmh duskolìterh lìgw tou mh problèyimou, genikˆ, qarakt ra th epikoinwna (p.q. rujmì leitourga twn kanali¸n).


147

7.1. MONTELA KATANEMHMENOU ULIKOU

Sfˆlmata leitourga : Mia jemeli¸dh diaforˆ twn katanemhmènwn algìrijmwn enai ìti ja prèpei na enai se jèsh na leitoug soun,   toulˆqisto na mhn agno soun, thn pijanìthta astoqa tou ulikoÔ sth diˆrkeia th ektèles  tou . Oi astoqe ulikoÔ sto katanemhmèno ulikì enai tˆxei megèjou pio suqnè apì ìti stou sumbatikoÔ upologistè . àna algìrijmo de ja prèpei na arnetai na leitourg sei se perptwsh merik  astoqa . Epsh , upˆrqoun pollo diaforetiko trìpoi astoqa : Astoqe pou gnontai antilhptè ˆmesa kai ˆlle pou den gnontai, opìte ja prèpei o algìrijmo na profulˆssei thn akeraiìthtˆ tou me èmmeso trìpo. Astoqe mpore na parousiastoÔn ete sti diergase ete sthn epikoinwna; kˆpoia montèla periorzoun ti astoqe mìno sti dergase , en¸ ta kanˆlia jewroÔntai axiìpista. Ja exetˆsoume t¸ra ta kuriìtera montèla katanemhmènou ulikoÔ, w pro tou parapˆnw ˆxone . 7.1.1

SÔgqrono montèlo koin  mn mh (synchronous

shared mem-

ory model) To montèlo autì qrhsimopoietai eurÔtata gia na montelopoi sei parˆllhlou upologistè . Enai gnwstì kai w montèlo PRAM (Parallel Random-Access Machine). O klˆdo th melèth algorjmwn sto montèlo autì (oi legìmenoi parˆllhloi algìrijmoi (parallel algorithms) enai èna apì tou pio ploÔsiou gnwstikoÔ klˆdou th epist mh upologist¸n. Upˆrqoun pollè parallagè tou basikoÔ montèlou, pou prospajoÔn na exeidikeÔsoun th sumperiforˆ tou ulikoÔ. Parˆ th megˆlh shmasa tou se ˆlla probl mata, oi parˆllhloi upologistè de ja ma apasqol soun perissìtero sto biblo autì, diìti den èqoun isqur  epirro  se katanemhmèna sust mata. O kÔrio lìgo gi autì enai ìti sthn pleionìthtˆ tou , oi parˆllhloi algìrijmoi den ikanopoioÔn ti apait sei twn katanemhmènwn susthmˆtwn gia diafˆneia (transparency). 7.1.2

AsÔgqrono montèlo koin  mn mh (asynchronous

shared-

memory model) To asÔgqrono montèlo koin  mn mh  tan istorikˆ èna apì ta pr¸ta montèla pou melet jhkan, sta plasia th poluepexergasa sta leitourgikˆ sust mata. Qwr na to èqoume prosdiorsei, èqoume  dh melet sei se prohgoÔmeno kefˆlaio to tupikì parˆdeigma qr sh tou: polunhmatikoÔ algìrijmou kai domè sugqronismoÔ (Kef. 2). Sto asÔgqrono montèlo koin  mn mh , kˆje diergasa Pi ektele to prìgrammˆ th èqonta prìsbash kai sta topikˆ th dedomèna allˆ kai se èna sÔnolo apì koinè metablhtè . To basikì prìblhma sto montèlo autì enai o sugqronismì th prìsbash sti koinè metablhtè ¸ste na apofeÔgontai race conditions. Gia to skopì autì qreiˆzontai mhqanismo pou na lÔnoun to prìblhma tou amoibaou apokleismoÔ (mutual exclusion).


148

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

Pèra apì th megˆlh praktik  tou shmasa, to montèlo autì èqei kai exèqousa jèsh sth jewrhtik  melèth twn katanemhmènwn algìrijmwn kai th poluepexergasa . Apotele mia komy  kai lit  majhmatik  platfìrma ìpou mporoÔn na oristoÔn me majhmatik  austhrìthta basikè ènnoie , ìpw h atomikìthta, ta invariants, h dikaiosÔnh (fairness), h adiablhtìthta (safety), h prìodo (progress) klp. (bl. 1.2.4 kai Kef. 13). 7.1.3

SÔgqrono diktuakì montèlo (synchronous

network model)

Èsw to pio aplì sthn anˆlush apì ìla ta montèla katanemhmènwn susthmˆtwn, me pollè efarmogè , eidikˆ se ulikì epikoinwni¸n. Ja perigrˆyoume to montèlo autì, akolouj¸nta se genikè grammè tou orismoÔ th Nancy Lynch [10℄. Sto basikì montèlo, oi diergase Pi enai organwmène se ènan grˆfo G. Oi korufè tou grˆfou enai oi diergase P1 , . . . , Pn . O grˆfo mpore na enai mh-kateujunìmeno ,   (exsou suqnˆ) kateujunìmeno . Oi diergase epikoinwnoÔn me mhnÔmata pou stèlnoun stou getonè tou (sebìmenoi thn kateujuntikìthta twn akm¸n, ìtan upˆrqei). Oi kateujunìmene akmè tou grˆfou onomˆzontai kanˆlia (channels)   links. Sthn perptwsh mh kateujunìmenou grˆfou, se kˆje akm  antistoiqoÔn dÔo kanˆlia, èna pro kˆje kateÔjunsh. Ta kanˆlia enai kateujunìmena sto montèlo autì; èqoun ˆkro apostol  kai ˆkro l yh . To kˆje kanˆli èqei qwrhtikìthta to polÔ enì mhnÔmato anˆ pˆsa stigm . H ektèlesh enì algìrijmou sto montèlo autì gnetai se gÔrou (rounds), pou ekteloÔntai apì ìle ti diergase sugqronismèna. Se kˆje gÔro, ekteloÔntai ta ex  dÔo b mata. 1. Sto pr¸to b ma, h kˆje diergasa stèlnei se kˆpoia (  kai ìla) apì ta exerqìmena kanˆlia th apì èna m numa. 2. Sto deÔtero b ma, h diergasa diabˆzei apì kˆje eiserqìmeno kanˆli th ta perieqìmenˆ tou, an upˆrqoun. Katìpin, epexergˆzetai ìla ta mhnÔmata pou èlabe kai anane¸nei ti topikè metablhtè th . Ta parapˆnw b mata ekteloÔntai sugqronismèna metaxÔ tou , dhl. pr¸ta oloklhr¸netai to b ma 1 se ìle ti diergase kai metˆ ekteletai to b ma 2. Sthn arq  th ektèlesh tou algìrijmou, ìla ta kanˆlia enai ˆdeia kai oi topikè metablhtè twn diergasi¸n arqikopoihmène katˆllhla. To tèlo th ektèlesh èrqetai ìtan ìle oi diergase brskontai se mia katˆstash sthn opoa kamiˆ de ja epikoinwn sei me ti ˆlle , oÔte ja metablhjoÔn oi topikè metablhtè tou . Astoqe th ektèlesh . Upˆrqoun diˆfore peript¸sei astoqa pou mporoÔn na sumboÔn. Mpore na upˆrxei astoqa se kˆpoia diergasa, opìte h diergasa mpore na stamat sei thn apostol  mhnumˆtwn. Epsh , mpore mia diergasa na èqei merik  astoqa; na apostèllei se kˆje kÔklo mìnon merikˆ apì ta mhnÔmata pou ja èprepe na stelei. Kai sta kanˆlia mpore na upˆrxei astoqa, opìte ta kanˆlia pou astoqoÔn qˆnoun mhnÔmata.


149

7.1. MONTELA KATANEMHMENOU ULIKOU

7.1.4

AsÔgqrono diktuakì montèlo (asynchronous

network model)

Oi pio geniko, allˆ kai pio polÔplokoi katanemhmènoi algìrijmoi enai oi asÔgqronoi diktuako algìrijmoi. äpw sto sÔgqrono diktuakì montèlo, oi diergase enai organwmène kai pˆli se ènan grˆfo, allˆ aut  th forˆ h l yh mhnumˆtwn mpore na gnei ana pˆsa stigm , kai oi diergase apostèlloun mhnÔmata me to dikì th rujmì h kajemiˆ. Ja perigrˆyoume t¸ra èna pio sugkekrimèno montèlo asÔgqronwn diktuak¸n algìrijmwn, akolouj¸nta kai pˆli th douleiˆ th Lynch [10℄. àna asÔgqrono diktuakì algìrijmo apartzetai apì tou k¸dike twn diergasi¸n Pi . O k¸dika kˆje diergasa Pi apoteletai apì èna sÔnolo apì enèrgeie (actions). Oi enèrgeie enai mikrˆ kommˆtia k¸dika, to kajèna apì ta opoa upojetikˆ ekteletai se èna {b ma},   me ˆlla lìgia se mia qronik  monˆda. Oi enèrgeie mia diergasa qwrzontai se trei kathgore : ti enèrgeie eisìdou (input actions), ti enèrgeie exìdou (output actions) kai ti eswterikè enèrgeie (internal actions). Oi enèrgeie eisìdou enai upeÔjune gia th l yh mhnumˆtwn kai oi enèrgeie exìdou gia thn apostol  tou . Kai oi enèrgeie eisìdou kai oi enèrgeie exìdou mporoÔn na ekteloÔn upologismoÔ ektì apì epikoinwna. Oi eswterikè enèrgeie aplˆ ekteloÔn upologismoÔ ; de summetèqoun sthn epikoinwna. Anˆloga me thn katˆstash th diergasa Pi , kˆpoie apì ti enèrgeie mpore na enai epitreptè (enabled) kai kˆpoie ìqi. Genikˆ, gia kˆje enèrgeia A, upˆrqei mia sunj kh pA , dhl. mia boolean sunˆrthsh twn topik¸n metablht¸n th diergasa , pou prèpei na enai alhj  gia na enai h enèrgeia epitrpet , dhl. gia na mpore na ekteleste. Eidikˆ gia ti enèrgeie eisìdou, h sunj kh tou enai pˆnta alhj  ( true ), dhl. enai suneq¸ epitreptè kai mporoÔn na ektelestoÔn anˆ pˆsa stigm .

111 000 P1

C1

C2

0000 1111 0 1 0 1 0 1 1 0 0 1 0 1

1 0 0 1 0 1

P2

P3

Sq ma 7.1: àna parˆdeigma asÔgqronou diktuakou algìrijmou me 3 diergase , P 1, P 2, P 3, kai 2 kanˆlia, C1, C2. Ta bèlh tou grˆfou upodeiknÔoun suzeugmène enèrgeie . Prosèxte ìti sthn perptwsh tou kanalioÔ C2 èqoume omadik  epikoinwna. H epikoinwna metaxÔ twn diergasi¸n Pi sto asÔgqrono diktuakì montèlo den gnetai apeujea , allˆ mèsw kanali¸n. Ta kanˆlia enai kai autˆ diergase , dhl. apoteloÔntai apì enèrgeie . Ta kanˆlia èqoun mìno mia enèrgeia eisìdou kai mia enèrgeia exìdou, en¸ mpore na èqoun kai eswterikè enèrgeie . Kˆje enèrgeia exìdou mia diergasa Pi enai sundedemènh me thn enèrgeia eisìdou kˆpoiou kanalioÔ, kai


150

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

antstrofa, h enèrgeia eisìdou kˆje kanalioÔ enai suzeugmènh me kˆpoia enèrgeia exìdou kˆpoia diergasa Pi . Antstoiqa, kˆje enèrgeia eisìdou th Pi enai suzeugmènh me kˆpoia enèrgeia exìdou kˆpoiou kanalioÔ. Wstìso, oi enèrgeie exìdou kˆpoiou kanalioÔ epitrèpetai na enai suzeugmène me perissìtere apì ma enèrgeie eisìdou se diaforetikè diergase , ¸ste na uposthrzetai ètsi h dunatìthta omadik  epikoinwna . Kai sto asÔgqrono diktuakì montèlo, h ektèlesh gnetai se kÔklou . Se kˆje kÔklo ektèlesh , kˆje diergasa kai kˆje kanˆli èqei ènan arijmì apì apì epitreptè enèrgeie , kˆpoie apì ti opoe enai suzeugmène . Apì ti epitreptè enèrgeie , exìdou   eswterikè , ìlwn twn diergasi¸n, epilègetai me mh-nteterministikì trìpo kai ekteletai mia enèrgeia. An epilege kai ekteleste enèrgeia exìdou, ekteloÔntai kai ìle oi suzeugmène me aut n enèrgeie eisìdou, oi opoe dèqontai san esodo to m numa pou metèdwse h enèrgeia exìdou. Astoqe th ektèlesh Oi astoqe ektèlesh pou mporoÔn na sumboÔn genikˆ qwrzontai se astoqe sti diergase (mia diergasa stamatˆ na ekteletai) kai astoqe sthn epikoinwna. Eidikˆ gia ti astoqe epikoinwna , sun jw ti montelopoioÔme me diˆfora kanˆlia pou perilambˆnoun enèrgeie astoqa , p.q. ap¸leia mhnumˆtwn. Sthn perptwsh pou den upˆrqei astoqa, to pio sunhjismèno edo kanalioÔ stou asÔgqronou diktuakoÔ algìrijmou enai to axiìpisto kanˆli FIFO (reliable FIFO channel). äpw lèei kai to ìnomˆ tou, to kanˆli autì den qˆnei mhnÔmata, allˆ kai paraddei ta mhnÔmata ston paral pth me thn dia seirˆ pou autˆ estˆlhsan. Enai èna arketˆ kalì montèlo mia TCP sÔndesh . Gia th montelopohsh diˆforwn peript¸sewn astoqa , èqoume ti ex  parallagè : Reliable reordering channel: To kanˆli autì de qˆnei mhnÔmata, allˆ mpore na parad¸sei mhnÔmata me seirˆ diaforetik  apì aut  th apostol  tou . Lossy FIFO channel: To kanˆli autì paraddei ta mhnÔmata diathr¸nta th sqetik  seirˆ apostol  . Wstìso, kˆpoia mhnÔmata enai dunatìn na qajoÔn. Lossy reordering channel: To kanˆli autì enai sunduasmì twn dÔo parapˆnw. Me tètoia kanˆlia montelopoietai kalˆ h epikoinwna me UDP datagrams. Duplicating channel: To kanˆli autì de qˆnei mhnÔmata allˆ mpore na parad¸sei èna m numa pollè forè . 7.1.5

SÔgkrish twn diafìrwn montèlwn

Edame tèssera basikˆ montèla katanemhmènou ulikoÔ, kaj¸ kai parallagè tou gia th montelopohsh astoqi¸n, kai diapist¸noume ìti èqoun arketè diaforè metaxÔ tou . To gegonì autì antikatoptrzetai kai sto sqediasmì algìrijmwn gia ta montèla autˆ: algìrijmoi gia to dio prìblhma allˆ gia diaforetikˆ montèla, èqoun shmantikè diaforè metaxÔ tou .


7.2. O QRONO STA KATANEMHMENA SUSTHMATA

151

Sthn prˆxh, h katˆstash enai polÔ pio organwmènh apì ìti fanetai. Kat' arq n, ìpw  dh epame, de ja asqolhjoÔme me to sÔgqrono montèlo koin  mn mh , diìti enai katallhlìtero gia parˆllhlou algìrijmou , ìqi ìmw gia katanemhmènou . Apì ta ˆlla tra montèla, to pio genikì montèlo gia katanemhmèna sust mata enai to asÔgqrono diktuakì, afoÔ autì prosomoiˆzei kalÔtera sto hardware twn perissìterwn katanemhmènwn susthmˆtwn. Antjeta, to sÔgqrono diktuakì montèlo den enai kai polÔ realistikì w pro autì. To asÔgqrono koin  mn mh tèlo enai katˆllhlo kurw gia polunhmatikoÔ algìrijmou , sÔmfwna me ìsa èqoume  dh pei. Ja  tan logikì loipìn na prokrnei kane to asÔgqrono diktuakì montèlo ìtan meletˆ katanemhmènou algìrijmou . Wstìso, ìpw ja fane sth sunèqeia, h sqedash algìrijmwn sto montèlo autì enai exairetikˆ dÔskolh kai perplokh upìjesh, akìmh kai gia ta pio aplˆ probl mata. Gi autì, sta perissìtera probl mata qrhsimopoioÔme algìrijmou sto sÔgqrono diktuakì montèlo,   sto asÔgqrono koin  mn mh . Katìpin, mporoÔme na metasqhmatsoume tou algìrijmou autoÔ se asÔgqronou diktuakoÔ , me teqnikè sugqronismoÔ kai prosomowsh pou ja melet soume sth sunèqeia. 7.2

O qrìno sta katanemhmèna sust mata

ätan èna arijmì apì diaforetikoÔ upologistè sunergˆzetai sta plasia kˆpoiou katanemhmènou sust mato , anakÔptei pollè forè h anˆgkh na sumfwn soun sth mètrhsh tou qrìnou. Gia parˆdeigma, se katanemhmèna sust mata arqewn, ja prèpei na katagrˆfetai o qrìno teleutaa prospèlash kˆje arqeou, o opoo metriètai pˆnw ston upologist  pou qrhsimopohse to arqeo, ìqi pˆnw ston file server pou kaletai na ton apojhkeÔsei. An to dio arqeo to qrhsimopoi soun diaforetiko upologistè me asuntìnista rolìgia, kˆpoioi apì autoÔ mpore na doun qrìnou teleutaa prospèlash pou brskontai sto mèllon (!!) w pro ta rolìgia tou . 7.2.1

Sugqronismì

Parìlo pou melet same sÔgqrona kai asÔgqrona montèla sto kefˆlaio autì, den èqoume d¸sei kˆpoion saf  qarakthrismì tou pìte to sÔsthma ulikoÔ mpore na jewretai enai sÔgqrono kai pìte asÔgqrono. Gia na d¸soume ènan tètoio orismì, ja prèpei na prosdiorsoume kˆpoie idiìthte tou sust matì ma . JewroÔme loipìn ìti to sÔsthmˆ ma apoteletai apì n diergase , P1 , . . . , Pn , oi opoe enai sundedemène me mia topologa kateujunìmenou grˆfou, ìpou kˆje akm  tou grˆfou upodhl¸nei kanˆli epikoinwna . Epsh , kˆje diergasa èqei kai èna topikì rolìi (local clock), to opoo mpore na parastaje w mia sunˆrthsh C(t), ìpou t o pragmatikì qrìno . Tèlo , jewroÔme ìti se kˆje diergasa Pi h taqÔthta ektèlesh , p.q. se entolè /sec enai ri . JewroÔme loipìn ìti to sÔsthmˆ ma enai sÔgqrono, ìtan isqÔoun oi parakˆtw propojèsei : 1. Upˆrqei ˆnw ìrio Π sti sqetikè taqÔthte epexergasa , dhl. gia kˆje zeu-


152

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

gˆri diergasi¸n Pi , Pj , èqoume ri ≤Π rj

2. Upˆrqei ˆnw ìrio ∆ sto qrìno metˆdosh enì mhnÔmato pˆnw apì opoiod pote kanˆli. O qrìno metˆdosh enai h diaforˆ trecv − tsend . 3. Upˆrqei ˆnw ìrio ρ sto rujmì olsjhsh twn topik¸n rologi¸n Ci , gia kˆje diergasa Pi . Autì shmanei ìti gia kˆje zeugˆri qronik¸n stigm¸n t < t′ , me ∆t = t′ − t, kai ∆Ci = Ci (t′ ) − Ci (t), enai 1−ρ≤

∆Ci ≤1+ρ ∆t

ätan isqÔoun oi propojesei autè , enai dunatìn na epitÔqoume sugqronismì metaxÔ twn topik¸n rologi¸n twn diergasi¸n Pi . An dÔo rolìgia diergasi¸n olisjanoun pro antjete kateujÔnsei w pro ton pragmatikì qrìno, tìte se qrìno ∆t ja èqoun apomakrunje to polÔ 2ρ∆t metaxÔ tou . An loipìn jèloume na kratˆme ta rolìgia sugqronismèna ètsi ¸ste na diafèroun to polÔ τ , ja prèpei na ta τ . sugqronzoume toulˆqisto anˆ qronikì diˆsthma 2ρ Sto shmerinì hardware, ta rolìgia baszontai se teqnologa krustˆllwn quartz, pou epitugqˆnoun timè tou ρ th tˆxh tou 10−5 . Pagkìsmia ¸ra. àna basikì z thma pou prèpei na sumfwnhje prin epiqeir soume to sugqronismì rologi¸n, enai o orismì tou {pragmatikoÔ} qrìnou t. Se ìle praktikˆ ti peript¸sei , uðojetetai to prìtupo th Pagkìsmia °ra (Universal Coordinated Time) pou suntomografetai w UTC. Prìkeitai gia èna diejnè prìtupo mètrhsh qrìnou, basismèno ston orismì tou deuterolèptou me th qr sh atomik¸n rologi¸n, allˆ me periodik  diìrjwshme thn prosj kh enì deuterolèptou, ¸ste na sumfwne me ton astronomikì qrìno. To prìtupo autì èqei antikatast sei plèon to paliìtero prìtupo tou Mèsou Qrìnou Greenwitch (GMT). O qrìno UTC metaddetai apì diˆfore phgè pagkosmw (radiofwnikè suqnìthte , thlefwnikˆ), allˆ s mera qrhsimopoioÔntai kurw oi dorufìroi tou sust mato GPS (Global Positioning System) pou parèqoun exairetik  akrbeia (th tˆxh tou enì µsec). Exwterikì sugqronismì (external synchronization). AfoÔ èqei sumfwnhje h tim  tou {pragmatikoÔ} qrìnou, mporoÔme na sugqronsoume ta anexˆrthta rolìgia twn diˆforwn diergasi¸n ma . An loipìn sumbolsoume me S(t) ton pagkìsmio qrìno, mporoÔme na jèsoume to parakˆtw krit rio sugqronismoÔ: ∀i, |Ci (t) − S(t)| < D.

ätan isqÔei to parapˆnw krit rio, lème ta rolìgia ma èqoun akrbeia D.


7.2. O QRONO STA KATANEMHMENA SUSTHMATA

153

Eswterikì sugqronismì (Internal synchronization). Se kˆpoie peript¸sei den endiaferìmaste gia thn pragmatik  tim  tou qrìnou UTC allˆ mìnon gia to sqetikì sugqronismì metaxÔ twn rologi¸n Ci . Sthn perptwsh aut  jètoume to parakˆtw krit rio: ∀i, j, |Ci (t) − Cj (t)| < D. Sthn perptwsh aut , lème ìti ta rolìgia ma sumfwnoÔn me akrbeia D. 7.2.2

O algìrijmo tou

Christian

O algìrijmo pou ja perigrˆyoume sth sunèqeia mpore na qrhsimopoihje gia to sugqronismì twn rologi¸n Ci kai protˆjhke to 1989 apì ton Christian [2℄. Upojètoume ìti upˆrqei èna kentrikì time server, dhl. èna uphrèth o opoo gwnrzei thn pragmatik  ¸ra (p.q. UTC). Kˆje diergasa mpore na stelei èna m numa ston time server ston pragmatikì qrìno t1 , o opoo ja apant sei me èna m numa pou perièqei to qrìno tou rologioÔ tou S(t2 ) th stigm  th apˆnthsh t2 . JewroÔme ìti o time server enai akrib  (p.q. w pro UTC), opìte S(t2 ) ≈ t2 . H paralab  tou apanthtikoÔ mhnÔmato gnetai se qrìno t3 me epiplèon kajustèrhsh. Gia na gnei swstˆ h diìrjwsh tou rologioÔ Ci (t3 ), ja prèpei autì na teje sthn tim  Ci (t3 ) = t3 = S(t2 ) + (t3 − t2 ) Parìlo pou oi kajuster sei th epikoinwna den enai gnwstè me apìluth akrbeia, o algìrijmo tou Christian apopeirˆtai na ti aposbèsei. Gia to skopì autì, h diergasa metrˆ to qronikì diˆsthma TRT = Ci (t3 ) − Ci (t1 ) (round-trip time) apì thn apostol  th er¸thsh mèqri th l yh th apˆnthsh . To sfˆlma th tim  TRT w pro thn pragmatik  tim  t3 − t1 enai polÔ mikrì praktikˆ (to polÔ 2ρTRT ). Me bˆsh thn tim  TRT o qrìno t3 − t2 mpore na ektimhje w TRT /2, jewr¸nta ìti h kajustèrhsh epikoinwna enai kai pro ti dÔo kateujÔnsei perpou dia. Ja upologsoume t¸ra thn akrbeia D pou epitugqˆnetai. An me Tmin sumbolsoume ton elˆqisto qrìno metaforˆ tou mhnÔmato apˆnthsh , xèroume ìti h qronik  stigm  t3 th paralab  tou ja enai t2 + Tmin ≤ t3 ≤ t2 + TRT − Tmin .

To eÔro tou diast mato autoÔ enai TRT − 2Tmin , opìte to Ci èqei akrbeia D = ±(

TRT − Tmin ). 2

O algìrijmo tou Christian sthn apl  tou morf  enai katˆllhlo mìno gia qr sh se topikˆ dktua (LANs)   èstw gr gora eswterikˆ dÔktua (intranets). Epsh , pˆsqei apì th qr sh enì ketrikoÔ server, o opoo mpore na astoq sei. €lloi algìrijmoi baszontai se parìmoie idèe kai antimetwpzoun autè ti aduname . Endeiktikˆ anafèroume ton algìrijmo tou Berkeley, pou anaptÔqjhke gia to BSD apì tou Gusella kai Zatti [7℄. Prìkeitai gia ènan algìrijmo eswterikoÔ sugqronismoÔ pou mpore na leitourg sei swstˆ akìmh kai se perptwsh astoqa kˆpoiwn diergasi¸n.


154 7.3

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

Logikì qrìno

Gia th swst  ulopohsh poll¸n katanemhmènwn algìrijmwn, enai aparathto èna sunep  mhqanismì qronosfragdwn (timestamps). An èqoume sth diˆjes  ma rolìgia polÔ uyhl  akrbeia se kˆje diergasa, mporoÔme na ulopoi soume ènan tètoio mhqanismì qrhsimopoi¸nta ta. Wstìso, enai genikˆ dÔskolo na sugqronsoume ta rolìgia diaforetik¸n upologist¸n, eidikˆ ìtan auto brskontai se megˆlh apìstash metaxÔ tou . Eutuq¸ , ìpw ja doÔme sth sunèqeia, kˆti tètoio den enai aparathto gia th swst  ulopohsh qronosfragdwn. A orsoume pr¸ta thn ènnoia th qronosfragda . Se kˆje diergasa, upˆrqoun kˆpoia sumbˆnta (events) ta opoa ma endiafèroun. àna tètoio sumbˆn e sun jw orzetai apì kˆpoio shmeo mèsa ston k¸dika th diergasa , kai lème ìti to sumbˆn e sumbanei th qronik  stigm  pou h ektèlesh fjˆnei sto antstoiqo shmeo. H qronosfragda T (e) enì sumbˆnto e enai mia tim  pou qarakthrzei to sumbˆn. Ta sumbˆnta mèsa se èna katanemhmèno sÔsthma sumbanoun me mia orismènh seirˆ se pragmatikì qrìno.1 àstw R(e) o pragmatikì qrìno ston opoo sunèbh to e. Ja mporoÔsame na diatˆxoume ta sumbˆnta tou sust matì ma me bˆsh to qrìno autì. Wstìso, mia tètoia diˆtaxh ja  tan uperbolikˆ kai ˆqrhsta leptomer  , afoÔ h leitourga tou katanemhmènou ma sust mato de ja mpore na baszetai se akribe qrìnou . Sthn pragmatikìthta endiaferìmaste mìno gia th sqetik  diˆtaxh twn sumbˆntwn pou sundèontai metaxÔ tou me sqèsh aitou-aitiatoÔ. Aut  h parat rhsh diatup¸jhke arqikˆ apì ton Lamport to 1978 [9℄. DÔo sumbˆnta e kai e′ sundèontai ˆmesa metaxÔ tou me sqèsh aitou-aitiatoÔ sti ex  dÔo peript¸sei : 1. Ta e kai e′ enai sumbˆnta sthn dia diergasa kai to e′ akolouje to e. 2. To e enai to sumbˆn apostol  tou mhnÔmato m kai to e′ enai to sumbˆn paralab  tou. H parapˆnw sqèsh metaxÔ sumbˆntwn onomˆzetai ˆmesh aiti¸dh diˆtaxh. H metabatik  kleistìthta th sqèsh aut  onomˆzetai aiti¸dh diˆtaxh (causal ordering), kai enai mia merik  diˆtaxh tou sunìlou twn sumbˆntwn (dhl. enai anaklastik , antisummerik  kai metabatik ). A th sumbolsoume me e → e′ . Suqnˆ h sqèsh aut  onomˆzetai sqèsh {sunèbh prin} (happened-before). ätan e → e′ , lème ìti {to e sunèbh prin to e′ },   ìti to e prohgetai aitiwd¸ (causally precedes) tou e′ . AfoÔ h aiti¸dh diˆtaxh enai merik  diˆtaxh (partial order), ja enai dunatì na upˆrqoun sumbˆnta e, e′ gia ta opoa e 6→ e′ kai e′ 6→ e. Sthn perptwsh aut  grˆfoume eke′ kai lème ìti ta e, e′ enai tautìqrona (concurrent). Gia na einai swst  h ulopohsh enì mhqanismoÔ qronosfragdwn, ja prèpei na sfragzei ta sumbˆnta ètsi ¸ste na sèbetai thn aiti¸dh diˆtaxh: ja prèpei dhlad  na isqÔei Gia e 6= e′ , e → e′ =⇒ T (e) < T (e′ ). 1

Mia pio filosofik  anˆlush ja prèpei na lˆbei upìyh th th Jewra th Sqetikìthta , sÔmfwna me thn opoa den upˆrqei

apìluto qrìno allˆ mìnon sqèsh aitou-aitiatoÔ.


7.3. LOGIKO QRONO

155

H parapˆnw sunj kh onomˆzetai sunj kh rologioÔ (clock condition). Profan¸ , h sunj kh ikanopoietai apì ti qronosfragde tou rologioÔ pragmatikoÔ qrìnou. Allˆ ìpw ja doÔme sth sunèqeia, upˆrqoun aploÔstere mèjodoi gia thn ulopohsh qronosfragdwn pou ikanopoioÔn th sunj kh rologioÔ. 7.3.1

Rolìgia

Lamport

O Lamport [9℄ prìteine thn parakˆtw lÔsh pou baszetai se èna sÔsthma antallag  munhmˆtwn. Kˆje diergasa èqei èna topikì diakritì rolìi Ti to opoo parnei mìnon akèraie aÔxouse timè . Arqikˆ to Ti enai mhdèn. Se kˆje b ma2 topik  ektèlesh h tim  tou Ti auxˆnei katˆ 1. Oi diergase epsh mpore na {diorj¸noun} to rolìi, ìtan lambˆnoun mun mata apì ˆlle diergase . àstw ìti h diergasa Pi stèlnei èna m numa sth diergasa Pj . H diergasa Pi ja prèpei na sumperilˆbei sto m numa thn tim  τ tou rologioÔ Ti th stigm  pou stˆljhke to m numa. ätan h diergasa Pj lˆbei to m numa ja prèpei na diorj¸sei to rolìi th w ex  : Tj := max(τ + 1, Tj + 1) Qrhsimopoi¸nta ta rolìgia autˆ, ìtan h diergasa Pi jel sei na {sfragsei} kˆpoio sumbˆn e me mia qronosfragda, mpore na qrhsimopoi sei to zeÔgo L(e) = (Ti , i). Oi qronosfragde Lamport sugkrnontai lexikografikˆ (dhl. pr¸ta oi pr¸te sunist¸se twn zeugari¸n, kai an autè enai se tìte oi deÔtere ), kai dnoun mia sunep  olik  diˆtaxh metaxÔ ìlwn twn sumbˆntwn tou sust mato . Enai fanerì ìti oi qronosfragde Lamport ikanopoioÔn th sunj kh rologioÔ. 7.3.2

Dianusmatikˆ rolìgia

H sunj kh rologioÔ den enai ikan  gia na mporèsoume na qarakthrsoume ta tautìqrona sumbˆnta. Prˆgmati, mpore gia dÔo sumbˆnta na èqoume T (e) < T (e′ ) allˆ autˆ na enai tautìqrona, eke′ . Kai ta rolìgia Lamport kai to rolìi pragmatikoÔ qrìnou èqoun aut  thn idiìthta. Sthn perptwsh pou jèloume na qarakthrsoume kai ta tautìqrona sumbˆnta, oi qronosfragde ja prèpei na ikanopoioÔn thn isqur  sunj kh rologioÔ (strong clock condition): Gia e 6= e′ , e → e′ ⇔ T (e) < T (e′ ). àna tètoio mhqanismì qronosfragdwn enai ta dianusmatikˆ rolìgia, pou protˆjhkan anexˆrthta apì tou Mattern [11℄ kai Fidge [5℄. To dianusmatikì rolìi Vi th diergasa Pi enai èna akèraio diˆnusma n stoiqewn (ìpou n o arijmì twn diergasi¸n). Arqikˆ, ìla ta stoiqea tou enai 0. Se kˆje b ma th diergasa Pi , to stoiqeo Vi [i] tou rologioÔ auxˆnei katˆ 1. àstw ìti h diergasa Pi stèlnei èna m numa sth diergasa Pj . H diergasa Pi ja prèpei na sumperilˆbei sto m numa thn tim  v tou rologioÔ Vi th stigm  pou stˆljhke to m numa. ätan h diergasa Pj lˆbei to m numa ja prèpei na diorj¸sei to rolìi th w ex  : ∀k, Vj [k] := max(v[k], Vj [k]) 2

To {b ma} mpore na oriste aujareta, p.q. w to diˆsthma metaxÔ diadoqik¸n sumbˆntwn.


156

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

kai katìpin Vj [j] := Vj [j] + 1.

Qrhsimopoi¸nta ta rolìgia autˆ, ìtan h diergasa Pi jel sei na {sfragsei} kˆpoio sumbˆn e me mia qronosfragda, mpore na qrhsimopoi sei thn trèqousa tim  tou dianusmatikoÔ rologioÔ V (e) = Vi . DÔo dianusmatikè qronosfragde u kai v sugkrnontai metaxÔ tou w pro ìla ta stoiqea tou : èqoume u ≤ v an kai mìno an gia kˆje k , enai u[k] ≤ v[k]. €ra, oi dianusmatikè qronosfragde den diatˆssoun olikˆ ta sumbˆnta enì sust mato , ìpw ˆllwste perimèname, afoÔ ikanopoioÔn thn isqur  sunj kh rologioÔ. 7.4 7.4.1

Prosomoi¸sei Prosomowsh mhnumˆtwn me qr sh koin  mn mh

H prosomowsh enì katanemhmènou algìrijmou se èna sÔsthma koin  mn mh gnetai prosomowsh twn kanali¸n epikoinwna metaxÔ twn diˆforwn diergasi¸n. O pio suqnì trìpo prosomowsh kanali¸n enai me th qr sh buffers. àna buffer mpore na parastaje w koin  metablht  tÔpou p.q. lsta   array, ìpou oi eisagìmene timè antiproswpeÔoun ta mhnÔmata pou antallˆssoun oi diergase metaxÔ tou . H qr sh buffer epitrèpei thn asÔgqronh antallag  mhnumˆtwn metaxÔ diergasi¸n. 7.4.2

Prosomowsh koin¸n metablht¸n me epikoinwna mhnumˆtwn

H ulopohsh enì concurrent algìrijmou se èna sÔsthma ìpou h epikoinwna gnetai me mhnÔmata ja prèpei na prosomoi¸sei me kˆpoio trìpo ti koinè metablhtè tou algìrijmou. O pio aplì trìpo baszetai sth qr sh katanemhmènwn antikeimènwn. Kˆje tètoio antikemeno antistoiqe se mia koin  metablht . Ta antikemena autˆ ulopoioÔn èna interface me dÔo basikè mejìdou , ti get kai set. To katanemhmèno antikemeno ja enai apojhkeumèno w topik  metablht  se kˆpoia apì ti ergase Pi . Prosoq  qreiˆzetai sto qeirismì th atomikìthta . Mia entol  pollapl  anˆjesh pou oi metablhtè th zoun se pollaplè ergase ja prèpei na ekteleste me atomikìthta. Sth genik  perptwsh apaitetai h qr sh transactions. 7.5

Eklog  hgèth

7.6

Katanemhmènh l yh stigmiotÔpou

Se pollè efarmogè ma endiafèrei na pˆroume èna swstì stigmiìtupo (snapshot) th katˆstash enì katanemhmènou sust mato , dhl. mia katagraf  twn tim¸n ìlwn twn metablht¸n twn diergasi¸n, kaj¸ kai th katˆstash twn kanali¸n epikoinwna .


7.6. KATANEMHMENH LHYH STIGMIOTUPOU

157

Sthn prˆxh endèqetai na enai dÔskolh   adÔnath h tautìqronh katagraf  th katˆstash apì ìle ti diergase . Edame  dh to prìblhma tou sugqronismoÔ sta katanemhmèna sust mata, ìpou enai adÔnato na upˆrxei koinì qrìno , opìte enai adÔnato oi diˆfore diergase kai kanˆlia na sugqronistoÔn sto bajmì pou enai aparathto gia na gnei h katagraf  tautìqrona apì ìla ta kanˆlia kai diergase . An ìmw h katagraf  de gnei tautìqrona, mpore to stigmiìtupo na mhn antiproswpeÔei kˆpoia nìmimh katˆstash tou sust mato . Gia parˆdeigma, mpore h katagraf  th katˆstash kˆpoiou kanalioÔ na deqnei ìti sto kanˆli brsketai to m numa m, allˆ h katagraf  th diergasa -paral pth tou m (pou ègine argìtera) na deqnei ìti to m numa èqei paralhfje! A parathr soume epsh ìti, akìmh ki an  tan dunatìn na upˆrqei koinì rolìi gia ìle ti diergase , kai pˆli h tautìqronh katagraf  ja  tan problhmatik  sthn ulopohsh, afoÔ endeqomènw na enai dÔskolh h epilog  mia katˆllhlh qronik  stigm  sthn opoa na sumfwn soun ìle oi diergase orismène diergase mpore na mhn mporoÔn na diakìyoun th leitourga tou gia to qronikì diˆsthma pou diarke mia katagraf . Opìte, gia tou parapˆnw lìgou , prosanatolizìmaste se algìrijmou pou ekteloÔn stadiak  katagraf , dhl. katagrˆfetai h katˆstash twn diafìrwn diergasi¸n kai kanali¸n se diaforetikè qronikè stigmè , ìpou ìmw h sunolik  katagegrammènh katˆstash ja enai {nìmimh}, dhl. ja antiproswpeÔei mia sunep  katˆstash tou sust mato . EggÔhsh gia th l yh swstoÔ stigmiotÔpou apotele o kanìna th katagraf  , o opoo ekfrˆzetai komyˆ se progrˆmmata frouroÔmenwn entol¸n. Se èna tètoio prìgramma, h katˆstash th ektèlesh paristˆnetai apì ti timè tou sunìlou twn metablht¸n tou. àstw loipìn ìti katˆ th diˆrkeia th ektèlesh enì progrˆmmato frouroÔmenwn entol¸n s1 8 · · · 8 sm lambˆnetai stadiakˆ èna stigmiìtupo. Autì shmanei aplˆ ìti h ektèlesh twn frouroÔmenwn entol¸n enallˆsetai me thn katagraf  twn tim¸n kˆpoiou uposunìlou twn metablht¸n (pou den èqoun katagrafe protÔtera), mèqri ìtou èqoun katagrafe ìle oi metablhtè , opìte to stigiìtupo enai pl re . O kanìna th katagraf  ma lèei ìti to stigmiìtupo ja lhfje swstˆ, an gia kˆje entol  si pou ektelèsthke katˆ th diˆrkeia l yh tou stigmiotÔpou isqÔei to parakˆtw: Katˆ th stigm  th ektèlesh th entol  , ete (a) kamiˆ metablht  pou anafèretai mèsa sthn entol  den eqe katagrafe, ete (b) ìle oi metablhtè pou anafèrontai mèsa sthn entol  eqan katagrafe. Diaisjhtikˆ katalabanoume(!) ìti o kanìna autì lambˆnei èna swstì stigmiìtupo. O kanìna autì èqei grafte me austhrì majhmatikˆ trìpo gia progrˆmmata frouroÔmenwn entol¸n kai h orjìthtˆ tou èqei apodeiqje. Sugkekrimèna, èqei apodeiqje to ex  : to stigmiìtupo pou lambˆnetai me th qr sh autoÔ tou kanìna antistoiqe se mia {pijan  katˆstash} (plausible state) tou sust mato , dhl. mia


158

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

katˆstash sthn opoa ja mporoÔse na èqei breje to sÔsthma metˆ apì kˆpoia nìmimh ektèlesh (dhl. kˆpoia seirˆ mh-nteterministik¸n epilog¸n dromolìghsh twn entol¸n). O parapˆnw kanìna mpore na metafraste ete se sust mata koin  mn mh ete se sust mata mhnumˆtwn, sÔmfwna me ìsa èqoume pei parapˆnw gia prosomoi¸sei . H diatÔpws  tou enai skìpima asaf  , ¸ste na mhn enai exeidikeumèno se kˆpoio mìno edo sust mato .

7.7

Filìsofoi pou geumatzoun

To prìblhma ma enai gnwstì apì ta leitourgikˆ sust mata. Oi diergase P1 , P2 , . . . , Pn ekteloÔntai parˆllhla kai moirˆzontai tou pìrou R1 , . . . , Rm (pq. koinˆ arqea, koinè metablhtè klp). H kˆje diergasa enallˆsetai metaxÔ enì krsimou tm mato kai enì mh krisimou tm mato . Gia na eisèljei sto krsimo tm ma th mia apì ti diergase prèpei na {apokt sei} èna uposÔnolo (to dio kˆje forˆ) apì tou pìrou Rj . To prìblhma mpore na parastaje apì èna grˆfo G = (V, E) pou oi korufè tou antistoiqoÔn se diergase , V = {P1 , . . . , Pn }. DÔo korufè tou grˆfou enai sundedemène ({Pi , Pj } ∈ E ) an kai mìno an oi antstoiqe diergase moirˆzontai kˆpoio pìro Rj . Skopì ma enai na ulopoi soume èna mhqanismì sugqronismoÔ metaxÔ twn diergasi¸n. Apì thn kataskeu  tou grˆfou ma enai fanerì ìti duo diergase mporoÔn na ektelèsoun tautìqrona to krsimo tm ma tou an kai mìno an den sundèontai me kˆpoia akm  tou grˆfou, dhl. den enai getone . àstw ìti èqoume mia parèa apì filosìfou pou geumatzoun gÔrw apì èna trapèzi. Kˆje filìsofo mpore na brsketai se mia apì ti katastˆsei S (skèftetai), P (peinˆei) kai T (tr¸ei). H katˆstash S antistoiqe sthn ektèlesh tou mh krsimou tm mato , en¸ h katˆstash T sthn ektèlesh tou krsimou tm mato . An èna filìsofo pou skèftetai peinˆsei, phganei sthn katˆstash P, ìpou prospaje na desmeÔsei kˆpoia aparathta phroÔnia (pou antistoiqoÔn stou pìrou Rj ). ätan o filìsofo pˆrei ìla ta phroÔnia, mpanei sthn katˆstash T, ìpou tr¸ei gia peperasmèno qrìno. äso o filìsofo tr¸ei èqei sthn katoq  tou ta phroÔnia. To kleid gia th lÔsh tou probl mato enai èna sÔsthma proteraiot twn pou kajorzei, sthn perptwsh pou dÔo filìsofoi diekdikoÔn to dio phroÔni, poiì apì tou dÔo ja to pˆrei. To sÔsthma autì twn proteraiot twn baszetai pˆnw sto grˆfo G. àna kateujunìmeno grˆfo (directed graph) diafèrei apì ènan koinì grˆfo sto ìti kˆje akm  metaxÔ dÔo koruf¸n u kai v èqei kateÔjunsh, ete apì to u sto v ete antstrofa. Enai dhl. èna xeugˆri, pq. (u, v). àna kateujunìmeno monopˆti (directed path) enai èna monopˆti pou sumfwne me thn kateÔjunsh twn akm¸n. àna kateujunìmeno grˆfo enai ˆkuklo an kai mìno ˆn den upˆrqei keteujunìmeno monopˆti pou na tèmnei ton eautì tou, dhl. na perièqei kÔklo. Se ènan kateujunìmeno grˆfo, mia koruf  apì thn opoa de {feÔgei} kama akm  onomˆzetai tèrma.


7.7. FILOSOFOI POU GEUMATIZOUN

159

Xekin¸nta apì ton grˆfo ma G mporoÔme eÔkola na d¸soume mia kateÔjunsh se kˆje akm  ¸ste na prokÔyei èna ˆkuklo kateujunìmeno grˆfo (blèpete pw mpore na gnei autì eÔkola? An ìqi, diabˆste parakˆtw). Me bˆsh autì ton ˆkuklo kateujunìmeno grˆfo mporoÔme t¸ra na orsoume èna sÔsthma proteraiìthta w ex  : • MetaxÔ dÔo filosìfwn pou moirˆzontai kˆpoiou pìrou , proteraiìthta se kˆje dedomènh qronik  stigm  èqei o filìsofo ston opoo katal gei h akm  pou tou sundèei. • ätan èna filìsofo telei¸sei na tr¸ei, allˆzei thn kateÔjunsh ìlwn twn akm¸n pou katal goun se autìn, dhl. metˆ thn allag  ìle oi akmè pou prìskeintai se autìn èqoun kateÔjunsh apì autìn pro tou getonè tou.

Parat rhsh 1h: Kˆje ˆkuklo grˆfo èqei toulˆqisto mia koruf  pou enai tèrma. Mia tètoia koruf  mpore na breje xekin¸nta apì opoiad pote koruf  kai akolouj¸nta èna tuqao kateujunìmeno monopˆti ìso makriˆ ki an pˆei. AfoÔ o grˆfo enai ˆkuklo , to monopˆti kˆpoia stigm  ja termatiste se kˆpoia koruf  pou enai tèrma. Parat rhsh 2h: An se ènan ˆkuklo grˆfo allˆxoume thn kateÔjunsh twn akm¸n pou prìskeintai se ènan kìmbo ètsi ¸ste ìle oi akmè na feÔgoun apì ton kìmbo, o telikì grˆfo enai epsh ˆkuklo . Gia na peisjete gia thn orjìthta th 2h parat thsh , skefjete ìti kamiˆ apì ti akmè pou allˆqjhkan den mpore na summetèqei se kˆpoio kÔklo, afoÔ ìle prìskeintai se mia koruf  ìpou den katal gei kamiˆ akm . €ra, afoÔ o arqikì grˆfo  tan ˆkuklo , o telikì ja enai epsh ˆkuklo . To sumpèrasma apì ti parapˆnw parathr sei enai ìti upˆrqei pˆntote èna filìsofo pou enai ètoimo na fˆei. Katˆ sunèpeia, to sÔsthma de ja odhghje se deadlock. Wstìso ja prèpei na exasfalsoume epsh ìti kˆje kìmbo kˆpote ja fˆei, dhl. ìti o algìrijmì ma exasfalzei dikaiosÔnh. Gia kˆje kìmbo u a orsoume me du (t) thn elˆqisth apìstash tou u apì kˆpoio kìmbo-tèrma th qronik  stigm  t (an o u enai o dio tèrma sto qrìno t, du (t) = 0). ParathroÔme ìti h sunˆrthsh du (t) enai fjnousa ektì apì ti stigmè pou o u telei¸nei to fa tou kai strèfei pro ta èxw ti proskemene akmè tou (giat?). €Ara, mporoÔme na sumperˆnoume ìti kˆje peinasmèno kìmbo du kˆpote ja fˆei, epeid  h du (t) ja fjnei (kaj¸ ˆlloi kìmboi ja tr¸ne) mèqri to 0, opìte o u ja èqei proteraiìthta apènanti se ìlou tou getonè tou pou peinˆne. To sÔsthma proteraiot twn pou perigrˆyame enai katˆllhlo gia ulopohsh kai mèsw mhnumˆtwn kai mèsw koin¸n metablht¸n.


160 7.8

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI

Buzantin  sumfwna

àna dÔskolo prìblhma sta katanemhmèna sust mata enai h prostasa tou sust mato apì blˆbe , sthn perptwsh pou h Ôparxh th blˆbh den mpore na diagnwsje. Gia parˆdeigma, èstw èna sÔsthma pou apoteletai apì diergase pou epikoinwnoÔn me mhnÔmata. An mia apì ti diergase termatsei apìtoma, oi upìloipe diergase ja katalˆboun to sfˆlma epeid  ta sockets pou ti sundèoun ja klesoun. àna tètoio sfˆlma mpore na antimetwpiste afoÔ aniqneute (pq. me timeouts). Ta buzantinˆ sfˆlmata (byzantine failures) enai sfˆlmata pou den aniqneÔontai ˆmesa, pq. mia diergasa perièqei kˆpoio bug pou alloi¸nei thn tim  mia topik  metablht  . An h diergasa stelei thn alloiwmènh tim  se ˆlle diergase , autè ja èqoun thn entÔpwsh ìti ìla enai entˆxei, allˆ sthn pragmatikìthta ta dedomèna pou antallˆssontai ja enai esfalmèna. Sth genik  perptwsh ta buzantinˆ sfˆlmata enai dÔskolo na antimetwpistoÔn apì èna sÔsthma autìmata. Wstìso, upˆrqoun algìrijmoi me tou opoou èna sÔsthma mpore na aneqje thn parousa enì mikroÔ arijmoÔ buzantin¸n diergasi¸n se aploÔ upologismoÔ . Sto prìblhma th sumfwna , o skopì enai na sumfwn sei èna sÔnolo apì diergase se kˆpoia tim  x, akìmh kai an lge apì ti diergase parousiˆzoun buzantinˆ sfˆlmata. Gia aplìthta, a upojèsoume ìti oi diergase jèloun aplˆ na sumfwn soun sthn tim  enì bit, dhl. 0   1. Pio sugkekrimèna, èstw ìti kˆje diergasa èqei mia topik  metablht  x pou apojhkeÔei èna bit. Kˆpoie apì ti diergase enai kalè en¸ oi ˆlle parousiˆzoun buzantinˆ sfˆlmata. Jèloume na broÔme ènan algìrijmo ¸ste: • Metˆ to tèlo tou algìrijmou, ìle oi kalè diergase na èqoun thn dia tim  sth metablht  tou x. • Epiplèon, an ìle oi diergase eqan xekin sei me thn dia tim  tou x, h tim  aut  na paramenei kai metˆ to tèlo tou algìrijmou.

àstw ìti èqoume s + t diergase , apì ti opoe oi s enai kalè kai oi t parousiˆzoun buzantinˆ sfˆlmata. Kˆje diergasa enai arijmhmènh me ènan arijmì metaxÔ 1 kai s + t. An èqoume s > 3t, tìte o parakˆtw algìrijmo mpore na ikanopoi sei ta krit riˆ ma . O algìrijmo ektele t + 1 b mata, ìpou kˆje b ma èqei dÔo fˆsei : 1. Sthn pr¸th fˆsh tou b mato k , kˆje diergasa stèlnei se ìle ti diergase (kai ston eautì th ) thn tim  th metablht  x. An mia diergasa lˆbei s   perissìtera mhnÔmata me thn dia tim  b, tìte jètei th x sthn tim  b. 2. Sthn deÔterh fˆsh tou b mato k , h diergasa k (kai mìnon aut ) stèlnei se ìle ti diergase (kai ston eautì th ) thn pleioyhfoÔsa tim  twn mhnumˆtwn th pr¸th fˆsh (dhl. thn tim  pou el fjh perissìtere forè upojèste gia eukola ìti to s + t enai perittì arijmì , ¸ste na upˆrqei pˆnta mia pleioyhfoÔsa tim ). T¸ra, kˆje diergasa pou den èjese thn x sthn 1h fˆsh


7.8. BUZANTINH SUMFWNIA

161

(epeid  den èlabe ≥ s die timè ), jètei t¸ra th x sthn tim  pou lambˆnei apì th diergasa k . O perergo autì algìrijmo mpore na gnei katanohtì apì ti parakˆtw parathr sei : Parat rhsh 1h: An oi metablhtè x ìlwn twn kal¸n diergasi¸n èqoun thn dia tim  b prin apì kˆpoio b ma, tìte ja èqoun thn tim  b kai metˆ apì to b ma. Autì ja sumbe epeid  kˆje kal  diergasa ja lˆbei toulˆqiston s dia mhnÔmata (apì ti kalè diergase ) sth fˆsh 1. Parat rhsh 2h An se kˆpoio b ma k , h diergasa k enai kal , tìte metˆ to tèlo autoÔ tou b mato ìle oi kalè diergase ja èqoun petÔqei sumfwna se kˆpoia tim  b. H apìdeixh aut  th parat rhsh enai h ex  : kˆpoie apì ti kalè diergase ja jèsoun th x sth fˆsh 1 tou b mato autoÔ kai kˆpoie sth fˆsh 2. Epeid  h diergasa k enai kal , katˆ th fˆsh 2 ja stelei thn dia tim  b se ìle ˆlle ti diergase kai ˆra autè ja sumfwnoÔn maz th . Allˆ kai ìse apì ti diergase èjesan th x apì thn pr¸th fˆsh ja sumfwnoÔn sthn tim  b, afoÔ den enai dunatìn na eqan lˆbei s   perissìtera mhnÔmata me thn tim  ¬b (giat?). €ra, sto tèlo tou b mato ja èqei epiteuqje sumfwna. T¸ra, t + 1 b mata enai arketˆ, afoÔ mèsa se autˆ ta b mata kˆpoia apì ti diergase 1, 2, . . . , t + 1 ja enai kal .


162

KEFALAIO 7. KATANEMHMENOI ALGORIJMOI


Kefˆlaio 8 Sugqronismì Emaste exoikeiwmènoi me ti duskole sugqronismoÔ pou parousiˆzei o poluprogrammatismì . Qwr th qr sh mhqanism¸n sugqronismoÔ, ìpw auto pou parousiˆsame sto Kef. 2, enai adÔnath h apofug  race conditions kai ˆra esfalmènwn ektelèsewn. Wstìso, katˆ ma ènnoia, o sugqronismì metaxÔ pollapl¸n nhmˆtwn th dia diergasa enai eukolìtero apì to sugqronismì metaxÔ anexˆrthtwn diergasi¸n se èna katanemhmèno sÔsthma.

163


164

KEFALAIO 8. SUGQRONISMO


Kefˆlaio 9 Dosolhye O mhqanismì dosolhyi¸n (transactions) enai perissìtero gnwstì se sust mata bˆsewn dedomènwn, ìpou katèqei kentrik  jèsh. Sta sust mata autˆ, o mhqanismì dosolhyi¸n kalÔptei dÔo sumplhrwmatikè allˆ diakritè anˆgke . Pr¸ton, anoq  tou sust mato se sfˆlmata tou ulikoÔ   tou logismikoÔ, ìpw p.q. to crash tou sust mato lìgw diakop  th trofodosa . DeÔteron, diat rhsh th sunèpeia twn dedomènwn se perptwsh pou tautìqrone diergase enhmer¸noun ti die eggrafè . O koinì paronomast  kai sti dÔo peript¸sei enai h t rhsh th atomikìthta . àstw mia dosolhya pou apoteletai apì pollaplˆ b mata. H apathsh atomikìthta upagoreÔei ìti ja prèpei ete na ektelestoÔn ìla th b mata th dosolhya , ete kanèna (opìte den ekteletai h leitourga). Gia parˆdeigma, èstw h bˆsh dedomènwn mia trˆpeza pou thre tou logariasmoÔ twn pelat¸n. Mia tupik  dosolhya enai h metaforˆ qrhmˆtwn metaxÔ dÔo logariasm¸n. H dosolhya aut  apoteletai apì toulˆqiston dÔo b mata; to metaferìmeno posì prèpei na qrewje ston èna logariasmì kai na pistwje ston ˆllo. Merik  mìnon ektèlesh th dosolhya ja odhg sei se asunep  katˆstash: ete h trˆpeza ete o pelˆth ja qˆsei qr mata. Genikˆ, h ˆmesh t rhsh th atomikìthta enai adÔnath qwr eidikoÔ mhqanismoÔ , afoÔ mia blˆbh tou sust mato mpore na parousiaste se opoiad pote stigm , ìpou èqei ekteleste mèro mìnon twn bhmˆtwn mia dosolhya . Allˆ akìmh ki an agno sei kˆpoio thn pijanìthta blˆbh tou sust mato , h atomikìthta mpore na parabiaste sthn perptwsh pou ekteloÔntai pollaplè dosolhye tautìqrona sta dia dedomèna. Gia parˆdeigma, an ekteletai metaforˆ qrhmˆtwn apì ton dio logariasmì tautìqrona, oi tautìqrone prˆxei qrèwsh tou logariasmoÔ ja prèpei na ektelestoÔn w krsima tm mata, sÔmfwna me ìsa èqoume perigrˆyei sto Kef. 2. To prìblhma twn dosolhyi¸n melet jhke apì polloÔ ereunhtè . H prosèggish pou epikrate s mera protˆjhke apì ton Jim Gray. SÔmfwna me aut n, o mhqanismì dosolhyi¸n ja prèpei na exasfalzei tèsseri jemeli¸dei idiìthte sti dosolhye , pou sunoyzontai sto akronÔmio ACID, apì ta arqikˆ twn lèxewn 165


166

KEFALAIO 9. DOSOLHYIE

Atomicity, Consistency, Isolation kai Durability. Atomicity: (Atomikìthta) O mhqanismì ja prèpei na exasfalzei ìti mia dosolhya ekteletai atomikˆ; metˆ to tèlo th ektèlesh , ete èqoun ekteleste ìla ta b mata ete den èqei ekteleste kanèna. Consistency: (Sunèpeia) H ektèlesh dosolhyi¸n ja prèpei na diathre to sÔsthma se sunep  katˆstash. Autì genikˆ exasfalzetai apì ton programmatist  efarmog¸n kai ìqi apì to mhqanismì dosolhyi¸n. Isolation: (Apomìnwsh) O mhqanismì ja prèpei na exasfalzei ìti h ektèlesh kˆje dosolhya ja enai apomonwmènh apì side-effects (parenèrgeie ) th ektèlesh ˆllwn dosolhyi¸n pou ekteloÔntai tautìqrona me aut n. Ja prèpei to apotèlesma na enai to dio me autì pou ja  tan an h dosolhya eqe ekteleste memonwmèna. Durability: (Anjektikìthta) Metˆ thn olokl rwsh mia dosolhya , ta apotelèsmatˆ th enai anjektikˆ se diakopè leitourga tou sust mato . Se bˆsei dedomènwn kˆti tètoio mpore na exasfaliste an ta aparathta dedomèna èqoun  dh eggrafe sth mìnimh mn mh.

Se katanemhmèna sust mata, h anˆgkh upost rixh dosolhyi¸n prokÔptei exsou epitaktikˆ me ta sust mata bˆsewn dedomènwn. Gia parˆdeigma, jewr ste mia trapezik  efarmog  pou metafèrei posˆ metaxÔ logariasm¸n pou throÔntai se diaforetikè trˆpeze , apì diaforetikˆ sust mata. Oi idiìthte ACID ja prèpei na thrhjoÔn akìmh kai sthn perptwsh blˆbh , p.q. an katˆ thn ektèlesh mia dosolhya upˆrxei diakop  th epikoinwna . Wstìso, sta katanemhmèna sust mata h upost rixh dosolhyi¸n enai arketˆ pio polÔplokh apì ìti se kentrikopoihmèna sust mata bˆsewn dedomènwn. Oi mhqanismo ulopohsh katanemhmènwn dosolhyi¸n baszontai stou mhqanismoÔ kentrik¸n susthmˆtwn. Gia to lìgo autì ja exetˆsoume kai tou kentrikoÔ mhqanismoÔ sto kefˆlaio autì. Genikˆ, h ulopohsh enì kentrikoÔ sust mato dosolhyi¸n apoteletai apì dÔo mèrh, to sÔsthma anˆnhyh (recovery) kai to sÔsthma sugqronismoÔ (concurrency control) ta opoa sunergˆzontai stenˆ. To sÔsthma anˆnhyh ulopoie ti leitourge anoq  se sfˆlmata, sta opoa perilambˆnontai kai astoqe tou sust mato (crash) kai probl mata ektèlesh th efarmog  (p.q., deadlock metaxÔ dosolhyi¸n). To sÔsthma sugqronismoÔ enai upeÔjuno gia thn exasfˆlish apì race conditions metaxÔ tautìqrona ekteloÔmenwn dosolhyi¸n. AkoloÔjw ja exetˆsoume kai ta dÔo autˆ sust mata, arqzonta apì to sÔsthma anˆnhyh . 9.0.1

Recovery

9.0.2

Concurrency control


Kefˆlaio 10 Sugqronismì plhrofora

167


168

KEFALAIO 10. SUGQRONISMO PLHROFORIA


Kefˆlaio 11 Arqitektonikè pelˆth-uphrèth web

11.1

Efarmogè

11.2

Uphrète efarmog¸n

169


170

KEFALAIO 11. ARQITEKTONIKE PELATH-UPHRETH


Kefˆlaio 12 Uphresiostrafe arqitektonikè 12.1

To Plègma (Grid)

171


172

KEFALAIO 12. UPHRESIOSTRAFEI ARQITEKTONIKE


Kefˆlaio 13 Jewra Poluepexergasa Mèqri t¸ra asqolhj kame ekten¸ me thn programmatistik  pleurˆ th ulopohsh katanemhmènwn susthmˆtwn. Oi teqnikè pou anafèrame aforoÔn thn arqitektonik  sqedash enì katanemhmènou sust mato , pou èqei skopì na katanemei th leitourgikìthta tou sust mato se uphrese . Sto kefˆlaio autì ja eisèljoume sto algorijmikì mèro , dhl. sth melèth th ektèlesh upologism¸n apì ta katanemhmèna sust mata. Sto plasio autì, h jewra poluepexergasa , thn opoa ja parousiˆsoume sto kefˆlaio autì, pazei kentrikì rìlo. H jewra poluepexergasa exetˆzei majhmatikˆ ti idiìthte th sugqronismènh ektèlesh programmˆtwn, pq. polunhmatikˆ progrˆmmata, pollaplè epikoinwnoÔse diergase klp. Lìgw th majhmatik  th èmfash , h jewra poluepexergasa den moiˆzei me thn pr¸th matiˆ aparathth gia ton programmatist , allˆ mìno gia ton ereunht . H pera wstìso deqnei ìti autì den enai swstì; h ulopohsh apl¸n katanemhmènwn efarmog¸n mpore na mhn apaite gn¸sh th jewra poluepexergasa . allˆ gia pio perploke efarmogè , h gn¸sh aut  gnetai aparathth. äsoi programmatistè prospˆjhsan na ulopoi soun perploka sust mata qwr prohgoÔmenh gn¸sh jewra poluepexergasa apètuqan,   spaniìtera anakˆluyan mìnoi tou ti arqè th , me megˆlo kìpo kai kìsto . H qr sh th jewra poluepexergasa èqei dittì rìlo sthn anˆptuxh katanemhmènwn efarmog¸n, afenì sthn anˆlush th sumperiforˆ programmˆtwn kai afetèrou sth sqedash katanemhmènwn algorjmwn. äpw se kˆje jewra, h melèth baszetai sth qr sh montèlwn pou proseggzoun ta pragmatikˆ sust mata pou melet¸ntai. H èmfash sta montèla autˆ enai sto sugqronismì tautìqronwn ergasi¸n, en¸ ˆlle leptomèreie sust mato paralepontai. Sto shmeo autì suqnˆ upˆrqei parex ghsh. H jewra poluepexergasa den enai katˆllhlh na melet sei ìle ti ptuqè enì katanemhmènou sust mato , allˆ mìno kˆpoie apì ti ptuqè th tautìqronh ektèlesh twn ergasi¸n. Sugkekrimèna, den enai katˆllhlh na 173


174

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

melet sei thn taqÔthtagenikìtera, thn apìdoshtou sust mato . H prosèggis  ma baszetai sto montèlo UNITY twn Chandy kai Misra, me kˆpoie aplopoi sei . To montèlo UNITY (Unbounded Nondeterministic Iterative Transformations) perilambˆnei thn om¸numh gl¸ssa programmatismoÔ kai mia majhmatik  logik  jewra anˆlush . H morf  th gl¸ssa UNITY enai mia parallag  twn glwss¸n frouroÔmenwn entol¸n (guarded command languages), pou apoteloÔn to pio sÔnhje montèlo mh-nteterministikoÔ programmatismoÔ. Katìpin ja parousiˆsoume th mejodologa me thn opoa meletoÔme idiìthte twn programmˆtwn aut¸n. Endiaferìmaste gia idiìthte programmˆtwn ìpw oi parakˆtw: To prìgramma ja termatsei se peperasmèno qrìno. Oi ergase den mpanoun se adièxodo (deadlock). H metablht  x enai pˆnta jetik . An h metablht  x gnei 0, paramènei sto 0 ìso h metablht  y enai arnhtik . Oi parapˆnw idiìthte perigrˆfontai se fusik  gl¸ssa. Gia na mporèsoume na grˆyoume majhmatikè apodexei tètoiwn idiot twn, ja prèpei na ti ekfrˆsoume se mia majhmatik  gl¸ssa. Gia to skopì autì ja qrhsimopoi soume ton kathgorikì logismì pr¸th tˆxew (first-order predicate calculus). Sth sunèqeia ja kˆnoume mia perilhptik  episkìphs  tou, me kuriìtero skopì na eisˆgoume th sumbolografa pou ja qrhsimopoi soume. Gia mia plhrèsterh parousas  tou, parapèmpoume ton anagn¸sth se kˆpoio apì ta pollˆ bibla pˆnw sto jèma. 13.1

Stoiqea apì ton kathgorikì logismì pr¸th tˆxh

JewroÔme ìti o anagn¸sth gnwrzei ti arqè th ˆlgebra Bool kai tou orismoÔ twn basik¸n th telest¸n. Me aÔxousa seirˆ proteraiìthta , auto enai oi ≡, ⇒, ∧, ∨, =, ¬. Ta ≡ kai = diafèroun mìno sthn proteraiìthta. €ra, (p = q ∧ r) ≡ ((p = q) ∧ r)

kai (p ≡ q ∧ r) ≡ (p ≡ (q ∧ r)).

O telest  anisìthta 6≡ (ìpw kai o 6=) anafèretai suqnˆ kai w XOR (apokleistik  diˆzeuxh). Oi frˆsei tou kathgorikoÔ logismoÔ pr¸th tˆxh onomˆzontai kathgor mata (predicates). Oi logikè stajerè true kai false enai kathgor mata. Epsh , kˆje èkfrash th protasiak  logik  (dhl. th ˆlgebra Boole) metaxÔ kathgorhmˆtwn enai kathgìrhma. Tèlo , kathgor mata mporoÔn na sqhmatistoÔn me th qr sh tou uparxiakoÔ (∃) kai tou kajolikoÔ posodekth (∀).


13.1. STOIQEIA APO TON KATHGORIKO LOGISMO PRWTH TAXH

175

Kˆje posodekth desmeÔei mia metablht , pq. to kathgìrhma

p = ∀x :: q

desmeÔei th metablht  x sto p. Gia na enai kalˆ sqhmatismèno (well-formed) to parapˆnw kathgìrhma, ja prèpei h metablht  x na mhn enai desmeumènh sto q . Mia metablht  pou anafèretai se kˆpoio kathgìrhma p kai den enai desmeumènh, onomˆzetai eleÔjerh. An gia ta kathgor mata p kai q èqoume p ⇒ q,

lème ìti to p enai isqurìtero (stronger) apì to q kai antstoiqa to q enai asjenèapì to p. Profan¸ , to false enai to isqurìtero kathgìrhma kai to true enai to asjenèsjero. Epsh , lème ìti to p ∨ r exasjenzei to p (kai to r) en¸ to p ∧ r isquropoie to p (kai to r). sjero (weaker)

13.1.1

Genikeumènoi posodekte

H qr sh twn posodeikt¸n mpore na epektaje kai pèra apì ton kathgorikì logismì. àstw o antimetajetì kai prosetairistikì telest  ⊗ orismèno sto sÔnolo S , me oudètero stoiqeo 1⊗ .1 àstw kathgìrhma r(x) kai mia èkfrash e(x) pou parnei timè sto S . Me R sumbolzoume to sÔnolo twn tim¸n tou x gia ti opoe to r(x) enai alhjè . Tìte: (N

x∈R e(x) an R 6= ∅, ⊗x : r(x) : e(x) = (13.1) 1⊗ alli¸ . Ston parapˆnw orismì to kathgìrhma r(x) orzei ti timè th desmeumènh metablht  x. MporoÔme na grˆyoume

⊗x : x ∈ D ∧ r : e ìtan to pedo tim¸n th metablht  x den enai fanerì. Wstìso, sun jw to pedo tim¸n th x enai fanerì (  adiˆforo). Kˆpoia paradegmata enai ta parakˆtw: k

X 2 +n : 1 ≤ n ≤ k : n = n2 n=1

max i : i ≥ 0 : f (i) = max f (i) i≥0

^  ∧x : p(x) : q(x) = p(x) ⇒ q(x) x

Sunhjismènoi telestè pou mporoÔn na qrhsimopoihjoÔn enai oi logiko telestè ≡, 6≡, ∧, ∨, oi arijmhtikè prˆxei + kai ×, oi telestè max kai min, oi prˆxei sunìlwn ∪ kai ∩ kai ˆlloi. 1

Sthn ˆlgebra, to zeÔgo

(S, ⊗) onomˆzetai hmiomˆda.


176

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

ätan to kathgìrhma r(x) enai true , mporoÔme na to paraleyoume, kai grˆfoume

⊗x :: e(x) .

Gia sumbatìthta me thn kajierwmènh majhmatik  sumbolografa, de ja qrhsimopoioÔme ta sÔmbola ∧ kai ∨ w genikeumènou posodekte , allˆ ta ∀ kai ∃ antstoiqa, dhl.

∧x : p : q = ∀x : p : q

∨x : p : q = ∃x : p : q Sugkekrimèna gia tou posodekte ∃ kai ∀, isqÔoun oi parakˆtw qr simoi tÔpoi (gia kˆje kathgìrhma p, q ): • KenoÔ pedou tim¸n:

• Nìmo tou De Morgan:

∀x : false : q = true ,

∃x : false : q = false .

¬ ∀x : p : q = ∃x : p : ¬q ,

¬ ∃x : p : q = ∀x : p : ¬q .

• Metaforˆ sunj kh :

∀x : p : q = ∀x :: p ⇒ q ,

∃x : p : q = ∃x :: p ∧ q .

Parat rhsh: Apì ta parapˆnw

fanetai ìti h qr sh genikeumènwn pososdeikt¸n kai tou sumbolismoÔ . . . den enai nèo majhmatikì orismì , allˆ aplˆ èna sumbolismì pou enopoie ˆllou gnwstoÔ sumbolismoÔ . To pleonèkthma tou sumbolismoÔ autoÔ enai ìti enai dunatìn na grafoÔn oi Pekfrˆsei w kajarˆ gia ˆjroish den eseiriakè sumboloseirè , en¸ pq. mia èkfrash me qr sh nai seiriak  sumboloseirˆ, ˆra enai akatˆllhlh sumbolografa gia qr sh se mia gl¸ssa programmatismoÔ. àna ˆllo diadedomèno majhmatikì sumbolismì pou dhmiourge probl mata se gl¸sse programmatismoÔ enai h apˆleiyh tou sumbìlou th prˆxh tou pollaplasiasmoÔ, pq. h èkfrash xy genikˆ shmanei x · y . H uiojèthsh autoÔ tou sumbolismoÔ èqei to meionèkthma ìti apagoreÔei th qr sh onomˆtwn metablht¸n perissotèrwn tou enì qarakt rwn. 13.1.2

H sunˆrthsh

if

H sunˆrthsh if enai polÔ qr simh sth jewra pou ja anaptÔxoume sth sunèqeia. O orismì th dnetai apì ti parakˆtw sqèsei : if( true , a, b) = a if( false , a, b) = b

(13.2) (13.3)


13.1. STOIQEIA APO TON KATHGORIKO LOGISMO PRWTH TAXH

177

Pio austhrˆ, h sunˆrthsh if orzetai ep dÔo sunìlwn U kai V (ìpou suqnˆ U = V ), w if : { false , true } × U × V → U ∪ V Parˆdeigma: H apìluth tim  |x| mpore na grafe w |x| = if(x ≥ 0, x, −x)

Merikè eÔkola apodexime idiìthte th if : if(¬p, a, b) = if(p, b, a) if(p ∨ q, a, b) = if(p, a, if(q, a, b)) if(p ∧ q, a, b) = if(p, if(q, a, b), b) if(p, if(q, a, b), c) = if(p ∧ q, a, if(p, b, c)) if(p, a, if(q, b, c)) = if(p ∨ q, if(p, a, b), c) if(p, f (p), g(p)) = if(p, f ( true ), g( false )) if(x = a, f (x), g(x)) = if(x = a, f (a), g(x))

(13.4) (13.5) (13.6) (13.7) (13.8) (13.9) (13.10)

Suqnˆ jèloume na apaleyoume thn if apì mia èkfrash. An h èkfrash if(p, a, b) anafèretai se mia èkfrash e h opoa den desmeÔei kˆpoia apì ti eleÔjere metablhtè tou p, mporoÔme na qrhsimopoi soume thn parakˆtw idiìthta. e(if(p, a, b)) = if(p, e(a), e(b))

(13.11)

Sthn perptwsh t¸ra pou to p perièqei mia desmeumènh metablht  x, isqÔei to parakˆtw:

⊗x : r : e(if(p, a, b)) = ⊗x : r ∧ p : e(a) ⊗ ⊗x : r ∧ ¬p : e(b)

H if enai mia polÔ isqur  sunˆrthsh. Sthn eidik  perptwsh pou parnei logikè timè (dhl. U = V = { true , false }), h qr sh th if arke gia na oristoÔn ìloi oi logiko telestè th ˆlgebra Boole: if(p, false , true ) ≡ ¬p if(p, true, q) ≡ p ∨ q if(p, q, f alse) ≡ p ∧ q

Sth genik  perptwsh, o parakˆtw tÔpo enai polÔ qr simo : if(p, q, r) = (p ∧ q) ∨ (¬p ∧ r) = (p ⇒ q) ∧ (¬p ⇒ r)

Parˆdeigma: Dnoume thn parakˆtw aplopohsh: x < if(y > 0, a, b) = if(y > 0, x < a, x < b) = (y > 0 ∧ x < a) ∨ (y ≤ 0 ∧ x < b)

(13.12) (13.13)


178

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

Parat rhsh: MporoÔme pˆnta na apaleyoume th sunˆrthsh if apì mia èkfrash pou epistrèfei boolean.

13.2

Progrˆmmata metasqhmatism¸n

Ta progrˆmmata metasqhmatism¸n enai aplˆ progrˆmmata. Tou lepoun sqedìn ìle oi suntaktikè domè pou èqoume sunhjsei apì ti diadedomène gl¸sse programmatismoÔ, ìpw sunart sei , topikè metablhtè , domhmène entolè (if, while klp.), tÔpoi, biblioj ke klp. H aplìthta aut  suqnˆ xenzei me thn pr¸th matiˆ; fanetai dÔskolo na grˆyei kane se autè akìmh kai ton aploÔstero algìrijmo. De ja prèpei na anushqe kane . H qr sh twn glwss¸n aut¸n den gnetai pˆnw se pl rh pragmatikˆ progrˆmmata. QrhsimopoioÔntai gia na sumpukn¸soun se lge entolè to tm ma th sumperiforˆ enì pragmatikoÔ progrˆmmato pou ma endiafèrei. Ta paradegmata pou ja parajèsoume, afoÔ pr¸ta parousiˆsoume th gl¸ssa, ja pesoun per autoÔ. àna prìgramma metasqhmatismoÔ apoteletai apì th d lwsh enì peperasmènou arijmoÔ metablht¸n, mia arqik  sunj kh gia ti metablhtè autè kai èna peperasmèno sÔnolo pollapl¸n anajèsewn. Mia pollapl  anˆjesh èqei th morf  v1 , . . . , vn := e1 , . . . , en

(n ≥ 0)

ìpou ta vi enai (diaforetikè metaxÔ tou ) metablhtè tou progrˆmmato kai ta ei enai ekfrˆsei pou perilambˆnoun stajerè , metablhtè tou progrˆmmato , majhmatikè   ˆlle prˆxei , sunart sei (me th majhmatik  ènnoia), klp. Gia na grˆyoume èna prìgramma qrhsimopoioÔme thn parakˆtw sÔntaxh:

decl d lwsh metablht¸n kai twn tÔpwn tou

init kathgìrhma pou orzei thn arqik  sunj kh

let orismì stajer¸n kai ekfrˆsewn

do s1 8 s2 8 · · · 8 sm end

ìpou ta si enai entolè pollapl  anˆjesh . Sto parakˆtw parˆdeigma fanetai èna aplì prìgramma.


13.2. PROGRAMMATA METASQHMATISMWN

179

Prìgramma 13.1 àna stoiqei¸de prìgramma frouroÔmenwn entol¸n. decl x, y init x, y = 1, 0 let w = x + y do # Sqìlio: mia pollapl  anˆjesh. x, y := if(x < 10, x + 1, x), if(y < x, w, y) end H ektèlesh enì progrˆmmato metasqhmatismoÔ gnetai w ex  : Arqikˆ ekteletai h arqik  sunj kh. Katìpin, epanalambˆnetai ep' ˆpeiro to ex  : epilègetai mh-nteterministikˆ mia pollapl  anˆjesh kai ekteletai. H ektèlesh th entol  pollapl  anˆjesh v1 , . . . , vn := e1 , . . . , en gnetai ¸ ex  : pr¸ta upologzontai oi timè twn ei , kai katìpin gnetai h anˆjesh twn tim¸n twn ei sti antstoiqe metablhtè . Mia parat rhsh: an h tˆxh n th pollapl  anˆjesh enai 0, dhl. an èqoume thn ken  anˆjesh, grˆfoume skip. H ken  pollapl  anˆjesh den kˆnei tpote. O telest  8 onomˆzetai telest  epilog  kai sundèei metaxÔ tou ti entolè pollapl  anˆjesh . Lìgw th mh-nteterministik  epilog  mia entol  se kˆje kÔklo ektèlesh , prokÔptei oti o telest  autì enai antimetajetikì kai prosetairistikì . Katˆ sunèpeia, mporoÔme na grˆyoume thn èkfrash

8i : r : si

ìpou ìmw prèpei na isqÔei ìti to kathgìrhma r prèpei na orzei peperasmèno arijmì tim¸n gia th metablht  i. Autè oi ekfrˆsei enai qr sime ìtan èqoume parametropoihmène entolè . Gia parˆdeigma, to parakˆtw prìgramma prospaje na taxinom sei èna array: decl a[N ] do

8i : 0 ≤ i < N − 1 : a[i], a[i + 1] := min(a[i], a[i + 1]), max(a[i], a[i + 1]) end 13.2.1

Q¸ro katastˆsewn enì progrˆmmato

Gia èna prìgramma metasqhmatism¸n P , mia katˆstash (state) autoÔ tou progrˆmmato enai kˆje apotmhsh twn metabht¸n tou, dhl. mia sunˆrthsh pou se kˆje metablht  antistoiqzei mia tim . To sÔnolo ìlwn twn katastˆsewn onomˆzetai q¸ro katastˆsewn tou P kai sumbolzetai w SP , ìpou o dekth paralepetai ìtan enai safè gia poiì prìgramma milˆme. Sto parˆdeigma tou Prog. 13.1 o q¸ro katastˆsewn enai isìmorfo me to sÔnolo Z2 ìlwn twn zeugari¸n akerawn arijm¸n, ìpou se kˆje zeugˆri akerawn arijm¸n to pr¸to stoiqeo paristˆnei thn tim  th x kai to deÔtero thn tim  th y .


180

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

To uposÔnolo twn katastˆsewn pou ikanopoioÔn to kathgìrhma arqik  sunj kh tou progrˆmmato sumbolzetai me IP (ìpou ki ed¸ o dekth paralepetai ìtan to prìgramma enai safè ). Se kˆje apodektì prìgramma ja prèpei na enai IP 6= ∅. Kˆje uposÔnolo tou q¸rou katastˆsewn onomˆzetai sunj kh (condition). àtsi, to IP onomˆzetai arqik  sunj kh tou P . To kenì sÔnolo onomˆzetai adÔnath sunj kh. To dio to S onomˆzetai h profan  sunj kh. Gia thn parˆstash twn sunjhk¸n suqnˆ qrhsimopoioÔme logikˆ kathgor mata pou oi eleÔjere metablhtè tou perièqontai sti metablhtè tou progrˆmmato . H sunj kh pou antistoiqe sto kathgìrhma p sumbolzetai me {p}P (ki ed¸ o dekth P suqnˆ paralepetai) kai perilambˆnei mia katˆstash σ ∈ SP an kai mìno an, metˆ thn antikatˆstash kˆje anaforˆ kˆje eleÔjerh metablht  x sto p apì thn antstoiqh tim  σ(x), prokÔptei h tim  true . Gia parˆdeigma, ta parakˆtw kathgor mata antistoiqoÔn se sunj ke gia to Prog. 13.1: x>4 0 < x < 10 ∨ y 6= 4 x < 2y − 1

∃n : 1 ≤ n ≤ x : n · y = 30 true

Parˆdeigma: àstw to kathgìrhma ∃n : 1 ≤ n ≤ x : n · y = 30 pou ja to sumbolzoume me p kai h katˆstash σ me apotmhsh x, y = 5, 10. Metˆ thn antikatˆstash twn x, y sto p èqoume

∃n : 1 ≤ n ≤ 5 : 10 · n = 30

to opoo enai true . €ra σ ∈ {p}. 2 Oi idiìthte pou anafèroume sth sunèqeia den enai dÔskolo na apodeiqtoÔn, kai mpore na prosfèroun mia diaisjhtikˆ kalÔterh katanìhsh twn parapˆnw orism¸n. {p ∧ q} =

{p} ∩ {q}

{p ∨ q} = { false } =

{p} ∪ {q} ∅

{ true } = {¬p} =

S S − {p}

(p ⇒ q) ≡

{p} ⊆ {q}

(13.14) (13.15) (13.16) (13.17) (13.18) (13.19)


13.2. PROGRAMMATA METASQHMATISMWN

13.2.2

181

Oi entolè pollapl  anˆjesh w metasqhmatismo katˆstash

àstw ìti ekteloÔme èna prìgramma metasqhmatism¸n P kai se kˆpoia qronik  stigm  h katˆstash th ektèlesh enai σ . A jewr soume akìmh ìti kˆpoia entol  v1 , . . . , vn := e1 , . . . , en

ekteletai sthn katˆstash aut . Enai eÔkolo na grˆyoume th nèa katˆstash σ ′ tou progrˆmmato metˆ thn ektèlesh th frouroÔmenh entol  . ( an v = vi , ei ′ σ (v) = σ(v) alli¸ . Apì ta parapˆnw prokÔptei ìti kˆje entol  pollapl  anˆjesh s mpore na jewrhje san èna metasqhmatismì katˆstash , dhl. mia sunˆrthsh Ts pou apeikonzei katastˆsei se katastˆsei : Ts : SP → SP .

GenikeÔonta ton orismì autì, mporoÔme na jewr soume mia entol  s (kai katˆ proèktash thn Ts ) w èna metasqhmatismì sunj kh , pou apeikonzei sunj ke (dhl. sÔnola katastˆsewn) se sunj ke . An C enai mia sunj kh, tìte  Ts (C) = Ts (σ) | σ ∈ C (13.20) Apì ed¸ kai pèra loipìn ja orsoume thn Ts me ton parapˆnw genikeumèno orismì. A exetˆsoume t¸ra kˆpoie idiìthte th sunˆrthsh Ts . Mia eÔkolh idiìthta enai h parakˆtw: Ts (∅) = ∅ (13.21) Mia ˆllh basik  idiìthta enai h epimeristikìthta th ènwsh : Ts (A ∪ B) = Ts (A) ∪ Ts (B)

(13.22)

Apì aut  thn idiìthta prokÔptei h monotonikìthta: A ⊆ B ⇒ Ts (A) ⊆ Ts (B) 13.2.3

(13.23)

Progrˆmmata ¸ metasqhmatismo katˆstash

Edame ìti h epdrash th ektèlesh mia entol  sthn katˆstash th ektèlesh mpore na parastaje w sunˆrthsh, kai genikeÔsame ton orismì se sunj ke . Wstìso ta progrˆmmata apoteloÔntai genikˆ apì perissìtere apì mia entolè pollapl  anˆjesh . Ja prèpei loipìn na genikeÔsoume ìsa epame pio pˆnw se progrˆmmata poll¸n entol¸n. àqoume  dh qrhsimopoi sei to sumbolismì s 8 s′ gia na sunjèsoume ti entolè enì progrˆmmato . H shmasa tou telest  autoÔ katˆ thn ektèlesh enì progrˆmmato enai autì th mh-nteterministik  epilog  . Me ˆlla lìgia, an h ektèlesh


182

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

enì progrˆmmato enai sthn katˆstash σ , tìte h mh-nteterministik  epilog  metaxÔ dÔo entol¸n s kai s′ mpore na odhg sei se opoiad pote apì ti katastˆsei Ts (σ) kai Ts′ (σ). €ra loipìn, ma boleÔei na epektenoume to genikeumèno orismì th T , w ex  : Ts8s′ (C) = Ts (C) ∪ Ts′ (C) (13.24) H ènwsh twn dÔo sunìlwn upodhl¸nei ìti h mh-nteterministik  epilog  mpore na prokalèsei thn ektèlesh opoiasd pote apì ti dÔo entolè . Profan¸ , gia th skip ja èqoume Tskip (C) = C dhlad  h Tskip enai h tautotik  sunˆrthsh. 13.2.4

Genkeush twn programmˆtwn metasqhmatism¸n

H ekfrastikìthta twn programmˆtwn metasqhmatism¸n den enai faner  se pr¸th epaf . Pragmatikˆ enai dÔskolo na dei kane p¸ mpore na ekfrastoÔn qr sima progrˆmmata me ènan tìso aplì mhqanismì. Gi autì kai enai skìpimo se autì to shmeo na eisˆgoume ènan pio dunatì sumbolismì, pou ja epitrèyei thn eukolìterh sÔnjesh programmˆtwn metasqhmatism¸n. Wstìso ja diapist¸soume ìti o nèo sumbolismì , an kai pio euèlikto , enai telikˆ polÔ kontˆ ston arqikì ma sumbolismì. Gia na emploutsoume to sumbolismì ma pèra apì ton telest  8, ja eisˆgoume dÔo nèou telestè : ton telest  froÔrhsh → kai ton akoloujiakì telest  ; . Orzoume loipìn mia genikeumènh entol  (g-entol ) w ex  : 1. Kˆje entol  pollapl  anˆjesh enai g-entol . Gia ti entolè autè isqÔoun ìsa epame parapˆnw. 2. An g enai mia boolean èkfrash kai s mia g-entol , tìte h èkfrash g → s

enai epsh g-entol . 3. An s kai t enai g-entolè , tìte oi ekfrˆsei s8t

kai s; t

enai epsh g-entolè . Ja exetˆsoume t¸ra th shmasa twn ekfrˆsewn pou enai g-entolè . Gia thn perptwsh twn entol¸n pollapl  anˆjesh , edame  dh th shmasa tou kai ton orismì tou metasqhmatismoÔ katˆstash Ts . O majhmatikì orismì th shmasa twn upìloipwn ekfrˆsewn g-entol¸n dnetai mèsw ekfrˆsewn gia tou antstoiqou metasqhmatismoÔ katˆstash .


13.2. PROGRAMMATA METASQHMATISMWN

183

FrouroÔmene entolè : g → s Se mia frouroÔmenh entol  g → s, h logik  èkfrash g onomˆzetai frourì . H ektèlesh mia frouroÔmenh entol  gnetai w ex  : pr¸ta upologzetai h tim  tou frouroÔ g . An to apotèlesma enai true , tìte ekteletai h g-entol  s, alli¸ ekteletai h skip (dhl. de sumbanei tpote). àna parˆdeigma frouroÔmenh entol  enai x < 10 → x := x + 1.

H ektèlesh th entol  aut  ja aux sei thn tim  th x katˆ 1, an aut  enai mikrìterh tou 10. Oi frouroÔmene entolè mporoÔn na antistoiqhjoÔn me th domhmènh entol  if twn gnwst¸n glwss¸n programmatismoÔ, qwr to tm ma else. O metasqhmatismì katˆstash twn frouroÔmenwn entol¸n enai o parakˆtw: Tg → s (C) = Ts ({g} ∩ C) ∪ ({¬g} ∩ C)

(13.25)

Entolè epilog  : s 8 s′ àqoume  dh dei th shmasa twn ekfrˆsewn s8 s′ ìtan oi s kai s′ enai pollaplè anajèsei . Antstoiqh enai h shmasa ìtan oi s kai s′ enai g-entolè ; mia apì ti s kai s′ epilègetai mh-nteterministikˆ kai ekteletai. O metasqhmatismì katˆstash paramènei o dio : Ts8s′ (C) = Ts (C) ∪ Ts′ (C)

(13.26)

Akoloujiakè entolè : s ; s′ H ektèlesh mia akoloujiak  g-entol  s; s′ gnetai ìpw to lèei h lèxh; pr¸ta ekteletai h g-entol  s kai metˆ h g-entol  s′ . O metasqhmatismì katˆstash th akoloujiak  entol  enai o parakˆtw:  Ts ; s′ (C) = Ts′ Ts (C) (13.27)

Me th qr sh twn telest¸n pou orsame dieukolÔnetai kˆpw h sÔnjesh programmˆtwn. Wstìso, ìpw ja dexoume sth sunèqeia, oi epiplèon telestè de ma prosfèroun kˆpoia epiplèon dunatìthta pèra apì autè twn apl¸n programmˆtwn metasqhmatism¸n. Ja dexoume me ˆlla lìgia ìti kˆje g-entol  enai isodÔnamh me mia g-entol  pou perièqei mìno pollaplè anajèsei sundedemène me ton telest  8. Gia to skopì autì ja prèpei na orsoume thn ènnoia th isodunama dÔo g-entol¸n: s∼ = s′ an kai mìno an Ts = Ts′

(13.28)

O parapˆnw orismì isodunama enai aplì : dÔo g-entolè enai isodÔname an h ektèles  tou epifèrei ta dia apotelèsmata sthn katˆstash tou progrˆmmato . Ja parajèsoume t¸ra mia seirˆ apì idiìthte me bˆsh ton orismì th isodunama ∼ =. äle autè oi idiìthte apodeiknÔontai eÔkola. s 8 (t 8 u) ∼ = (s 8 t) 8 u s; (t; u) ∼ = (s; t); u

(prosetairistikìthta)

(13.29) (13.30)


184

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

s8t∼ =t8s s8s∼ =s s ; skip ∼ = skip ; s ∼ =s

(antimetajetikìthta) (tautodunama)

(13.31) (13.32)

(oudètero stoiqeo)

(13.33)

g → (h → s) ∼ =g∧h → s

(sÔzeuxh)

(13.34)

s; (t 8 u) ∼ = (s; t) 8 (s; u) ∼ g → (s 8 t) = (g → s) 8 (g → t)

(epimeristikìthta)

(13.35) (13.36)

Qrhsimopoi¸nta ti idiìthte th epimeristikìthta , mporoÔme na metatrèyoume kˆje g-entol  s se mia isodÔnamh g-entol  s′ pou èqei thn parakˆtw morf : s′ = s1 8 s2 8 · · · 8 sn

kai ìpou kanèna si den perièqei ton telest  8. Me ˆlla lìgia, èqoume metatrèyei thn arqik  g-entol  s se èna 8-ˆjroisma apì g-entolè si , pou den perièqoun ton telest  8. Ja dexoume t¸ra ìti kˆje g-entol  pou den perièqei ton telest  8 enai isodÔnamh me mia pollapl  anˆjesh. Arke na dexoume dÔo idiìthte : 1. An α enai mia pollapl  anˆjesh th morf  vi := ei i = 1, . . . n

tìte h frouroÔmenh entol  g → α enai isodÔnamh me thn vi := if(g, ei , vi ) i = 1, . . . n

2. An α1 kai α2 enai dÔo entolè pollapl  anˆjesh , tìte h g-entol  α1 ; α2 enai isodÔnamh me mia nèa entol  pollapl  anˆjesh . MporoÔme na thn upologsoume antikajist¸nta sthn α2 ti ekfrˆsei th α1 , gia ti antstoiqe metablhtè , pq. h x, z := x + z, y + 1 ; x = f (x) aplopoietai sthn x, z := f (x + z), y + 1. Me epanalhptik  qr sh twn dÔo aut¸n idiot twn mporoÔme na metatrèyoume kˆje si se mia pollapl  anˆjesh. Enai loipìn fanerì ìti o arqikì , aploðkì orismì enì progrˆmmato metasqhmatism¸n enai to dio genikì me to an eqame qrhsimopoi sei kai tou telestè ; kai → . Gia na dieukolÔnoume th sÔnjesh programmˆtwn metasqhmatism¸n, ja qrhsimopoioÔme tou telestè autoÔ se progrˆmmata, èqonta ìmw pˆnta sto mualì ma ìti prìkeitai mìno gia eukola.


13.2. PROGRAMMATA METASQHMATISMWN

13.2.5

185

àna pragmatikì parˆdeigma

àqoume  dh parousiˆsei arket  jewra pˆnw sth melèth twn programmˆtwn frouroÔmenwn entol¸n. àqoume  dh jèsei ti bˆsei gia thn pl rh anˆptuxh th jewra pou ja akolouj sei sto kefˆlaio autì. àqoume wstìso apomakrunje arketˆ apì ton arqikì ma skopì, th qr sh th jewra sth melèth th poluepexergasa se pragmatikˆ probl mata. Gi autì, prin proqwr soume sthn anˆptuxh th upìloiph jewra , ja kˆnoume mia anˆpaula gia na efarmìsoume ìsa edame w t¸ra se èna pragmatikì prìblhma, ¸ste kai na antilhfjoÔme kalÔtera th shmasa twn orism¸n pou d¸same mèqri t¸ra, allˆ kai na entopsoume ta peretarw majhmatikˆ ergalea pou ja ma qreiastoÔn. Sto shmeo autì loipìn, ja strèyoume thn prosoq  ma se èna pragmatikì prìgramma. Sto Prog. 2.14 th selda 60 parajèsame se Python ton k¸dika th klˆsh SemaphoreByCondition, h opoa ulopoie èna shmatoforèa w dom  monitor. Prèpei na poÔme ìti h klˆsh aut  enai apì ti aploÔstere pou ja mporoÔsame na grˆyoume kai ˆra ja perimèname ìti ìle oi pleurè th sumperiforˆ th enai fanère . A exetˆsoume th mèjodo release. Blèpoume ìti o k¸dika aut  th mejìdou pr¸ta auxˆnei to pedo self.count katˆ 1 kai katìpin kale th mèjodo notify sto condition variable tou shmatoforèa, ¸ste na xupn soun tuqìn n mata pou èqoun emplake sthn kl sh wait. àna er¸thma pou prokÔptei enai: m pw ja èprepe na kalèsoume, ant th notify, th notifyAll? MporoÔme na bebaiwjoÔme ìti h qr sh th notify eparke gia th swst  leitourga tou shmatoforèa? O trìpo me ton opoo ja majhmatikopoi soume to er¸thma enai o ex  : ja prèpei na grˆyoume èna isodÔnamo prìgramma P me frouroÔmene entolè , to opoo na exomoi¸nei th sumperiforˆ tou pragmatikoÔ ma progrˆmmato . Sth sunèqeia, ekfrˆzoume ti idiìthte pou ma endiafèroun w idiìthte tou progrˆmmato P . Parat rhsh: Prèpei na tonsoume ìti to b ma autì prèpei na gnei polÔ prosektikˆ. Ousiastikˆ dhmiourgoÔme èna montèlo tou pragmatikoÔ ma progrˆmmato , pou enai grammèno sth gl¸ssa Python, me ìle ti idietairìthte kai leptomèreie th gl¸ssa aut  . äle oi apodexei pou mporoÔme na d¸soume pˆnw sto montèlo P enai ˆqrhste gia to arqikì ma prìgramma, an kˆpoia apì ti epilogè ma sth sÔntaxh tou P den antapokrnetai sthn sumperiforˆ tou arqikoÔ ma k¸dika Python. Wstìso, aut  h diadikasa enai tupik  se ìle ti epist me (fusik , qhmea, biologa, iatrik  klp), ìpou pˆnta prosèqoume (kai elpzoume) na mhn parabiˆzoun ta montèla ma tou nìmou th pragmatikìthta . H sÔnjesh tou isodÔnamou progrˆmmato P sth gl¸ssa twn frouroÔmenwn entol¸n den enai profan  , afoÔ upˆrqoun terˆstie diaforè anˆmesa sthn Python kai sti frouroÔmene entolè . Gi autì ja parajèsoume kˆpoiou kanìne me tou opoou ja mporèsoume na antapexèljoume sti duskole autè . Parˆstash mia klˆsh : To pr¸to ma prìblhma enai to ex  : p¸ ja parast soume twn k¸dika mia klˆsh , o opoo apì mìno tou den enai prìgramma, allˆ aplˆ mia d lwsh tÔpou? H genik  apˆnthsh enai ìti:


186

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

• Ja prèpei na anaparast soume ta antikemena aut  th klˆsh , ìpou ta peda twn antikeimènwn ja enai metablhtè . €ra ja èqoume mia metablht  gia kˆje pedo kˆje antikeimènou. • Epsh prèpei na exomoi¸soume th qr sh pou kˆnei o k¸dika tou progrˆmmato sto antikemenì ma . Skeftete to antikemeno san èna maÔro kout, me emˆ mèsa na parathroÔme ti eiserqìmene  kl sei twn mejìdwn tou antikeimènou apì diˆfora n mata. Ja prèpei na grˆyoume frouroÔmene entolè pou na prosomoi¸noun thn ˆfixh aut¸n twn kl sewn. MporoÔme an jèloume na upojèsoume ìti upˆrqoun kai periorismo sti kl sei , pq. ìti èna n ma kale th mèjodo release mìno an prohgoumènw eqe kalèsei th mèjodo acquire. Pio sugkekrimèna, mporoÔme na upojèsoume ìti se kˆje stigm  kai gia kˆje n ma, o arijmì twn kl sewn th release enai mikrìtero   so apì ton arijmì kl sewn th acquire. MporoÔme na jèsoume ènan akìmh pio austhrì periorismì: o arijmì kl sewn th acquire apì èna n ma na enai se kˆje stigm  ete so ete megalÔtero katˆ 1 tou arijmoÔ twn kl sewn th release.

Parˆstash th emplok  : Katˆ thn emplok  èna n ma stamatˆ na ekteletai. Me ton trìpo autì, h katˆstash tou n mato gnetai emfan  sth sumperiforˆ tou progrˆmmato . Ja prèpei loipìn na prosomoi¸soume thn katˆstash ektèlesh twn diafìrwn nhmˆtwn, ete se emplok  ete se mh emplok . Gia to skopì autì ja qreiaste na orsoume bohjhtikè metablhtè , mia gia kˆje n ma, pou ja paristoÔn thn katˆstash tou antstoiqou n mato . H katˆstash tou kˆje n mato mpore na sunduaste me tou periorismoÔ pou jètoume sti kl sei pou mpore na kˆnei to kˆje n ma. Me bˆsh ta parapˆnw genikˆ, a xekin soume th sÔnjesh enì progrˆmmato pou na prosomoi¸nei thn klˆsh SemaphoreByCondition. Ja prèpei na arqsoume me ti aplopoihtikè paradoqè pou kˆnoume. 1. Ja perioristoÔme se èna mìno antikemeno. De qreiˆzetai na prosomoi¸soume perissìtera antikemena, afoÔ h sumperiforˆ tou kˆje shmatoforèa enai anexˆrthth apì thn Ôparxh   mh kai ˆllwn shmatoforèwn. 2. Gia ti kl sei twn mejìdwn acquire kai release, ja deqjoÔme (gia qˆrh tou paradegmatì ma ) ton austhrì periorismì ìti o arijmì twn kl sewn th acquire enai ete so ete katˆ èna megalÔtero tou arijmoÔ kl sewn th release. Enai dhlad  san na èqoume mia qr sh tou shmatoforèa ma gia thn prostasa enì krsimou tm mato : while 1: sem.acquire() ... # critical section sem.release() ... # non-critical section


13.2. PROGRAMMATA METASQHMATISMWN

187

àqoume tèlo thn upoqrèwsh na prosomoi¸soume thn akoloujiak  ro  th ektèlesh twn nhmˆtwn mèsa sti mejìdou acquire kai release. Ja mporoÔsame na qrhsimopoi soume mia metablht -metrht  progrˆmmato gia kˆje n ma pou prosomoi¸noume, h opoa na kajorzei to shmeo ektèlesh sto opoa brsketai to antstoiqo n ma. MporoÔme wstìso gia na apofÔgoume th qr sh arijm¸n na qrhsimopoi soume etikètte (labels), oi opoe ja enai pio perigrafikè . Me bˆsh ti parapˆnw paradoqè , mporoÔme na jewr soume ìti h katˆstash enì n mato parnei ti timè N , A, W kai C , ìpou: 1. N shmanei ìti to n ma enai ektì tou krsimou tm mato kai ektele kˆpoion adiˆforo upologismì, 2. A shmanei ìti to n ma èqei kalèsei th sunˆrthsh acquire, 3. W shmanei ìti to n ma enai emplegmèno (sthn kl sh wait, kai 4. C shmanei ìti to n ma enai entì tou krsimou tm mato . Ja mporoÔsame na eisˆgoume perissìtere   kai ligìtere katastˆsei , anˆloga me to eppedo prosomowsh th sumperiforˆ pou jèloume. A onomˆsoume M ton arijmì twn nhmˆtwn. Epsh , a sumbolsoume me n0 thn arqik  tim  tou shmatoforèa ma , dhl. thn parˆmetro pou d¸same ston constructor th klˆsh ma ìtan dhmiourg same ton shmatoforèa. Emaste pia ètoimoi na grˆyoume to prìgramma frouroÔmenwn entol¸n pou antistoiqoÔn ston k¸dika th klˆsh SemaphoreByCondition. Ja èqoume mia metablht  n pou ja antistoiqe sto pedo self.count tou shmatoforèa, kai mia metablht  array state[M ] pou ja thre thn katˆstash tou kˆje n mato . O basikì kÔklo twn nhmˆtwn mpore na ulopoihje apì ti parakˆtw entolè gia kˆje i = 0, . . . , M − 1: state[i] = N → state[i] := A 8state[i] = A → acquire(i) 8state[i] = C → release(i)

ìpou h g-entol  acquire(i) antistoiqe sthn ektèlesh th mejìdou acquire apì to n ma i kai h release(i) antistoiqe sthn ektèlesh th mejìdou release. H èkfrash gia thn acquire(i) enai: acquire(i) = n ≤ 0 → state[i] = W 8 n > 0 → state[i], n := C, n − 1

Gia th release(i), mporoÔme na orsoume to kathgìrhma nonewaits w

nonewaits = ∀j : 0 ≤ j < M : state[j] 6= W kai èqoume

release(i) = 8j : 0 ≤ j < M ∧ j 6= i :

state[j] = W → n, state[i], state[j] := n + 1, N, A

8 nonewaits → n, state[i] := n + 1, N


188

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

H suggraf  twn parapˆnw g-entol¸n, qwr na enai dÔskolh, apaite kˆpoia exoikewsh me th jewra pou anaptÔxame mèqri t¸ra. Wstìso, apì th morf  twn entol¸n blèpoume ìti upˆrqei mia antistoiqa metaxÔ tou k¸dika th klˆsh SemaphoreByExample kai twn parapˆnw g-entol¸n. Wstìso blèpoume ti pio pˆnw g-entolè na enai pio perploke , idw h èkfrash release(i). Autì sumbanei epeid  h èkfrash aut  apokwdikopoie th sumperiforˆ th mejìdou notify tou condition variable. àqoume loipìn katal xei sti g-ekfrˆsei pou ulopoioÔn to prìgrammˆ ma . Wstìso, oi ekfrˆsei autè den enai sthn pio apl  morf  tou , afoÔ qrhsimopoioÔntai oi endiˆmese ekfrˆsei acquire(i) kai release(i). Ja prèpei loipìn na xedipl¸soume ti ekfrˆsei autè ìtan ja grˆfoume to prìgrammˆ ma . O k¸dika tou progrˆmmato ja enai o ex  :

decl n, state[M ]

# H katˆstash tou shmatoforèa # H katˆstash kˆje n mato

init

let

n = n0 ∧ ∀i : 0 ≤ i < M : state[i] = N

do

nonewaits = ∀j : 0 ≤ j < M : state[j] 6= W

8i, j : 0 ≤ i, j < M :

state[i] = N → state[i] := A

# acquire(i) 8 state[i] = A ∧ n > 0 → state[i], n := C, n − 1 8 state[i] = A ∧ n <= 0 → state[i] := W

end

# release(i) 8 state[i] = C ∧ nonewaits → n, state[i] := n + 1, N 8 state[i] = C ∧ state[j] = W → n, state[i], state[j] := n + 1, N, A

àqonta grˆyei èna prìgramma pou antiproswpeÔei to tm ma th sumperiforˆ th klˆsh SemaphoreByCondition pou ma endiafèrei, enai pia kairì na doÔme ti idiìthte pou ma endiafèrei na apodexoume. Oi idiìthte autè ja prèpei na diatupwjoÔn w sqèsei pˆnw sthn katˆstash tou sust mato . H genik  mèjodo me thn opoa mporoÔme na apodeiknÔoume tètoie idiìthte ja ma apasqol sei apì ed¸ kai pèra.


13.3. LOGIKE IDIOTHTES EKTELESIMWN EKFRASEWN

13.3

189

Logikè idiìthte ektelèsimwn ekfrˆsewn

àqoume anafèrei ìti oi sunj ke (dhl. ta sÔnola katastˆsewn) twn programmˆtwn ekfrˆzontai w logikˆ kathgor mata. W to shmeo autì èqoume anaptÔxei to upìbajro pou apaitetai gia na melet soume ti idiìthte programmˆtwn. Mèqri t¸ra, epikentrwj kame sti idiìthte ektelèsimwn ekfrˆsewn, apì th skopiˆ twn sunolojewrhtik¸n idiot twn tou metasqhmatismoÔ katˆstash T . T¸ra ja epikentrwjoÔme ston trìpo me ton opoo qrhsimopoioÔme ton kathgorikì logismì. àstw s mia g-entol . O sumbolismì {p} s {q}

shmanei diaisjhtikˆ to ex  : an h g-entol  ekteleste se mia katˆstash pou ikanopoie to kathgìrhma p, tìte h katˆstash metˆ thn ektèlesh ja ikanopoie to kathgìrhma q . Pio austhrˆ,  {p} s {q} an kai mìno an Ts {p} ⊆ {q}. (13.37) Sthn èkfrash

{p} s {q}

h sunj kh {p} onomˆzetai prosunj kh (precondition) kai h {q} onomˆzetai metasunEnai sÔnhje , gia aplìthta sto sumbolismì, na anaferìmaste sta dia ta kathgor mata p kai q ¸ prosunj kh kai metasunj kh antstoiqa.

j kh (postcondition).

13.3.1

Asjenèsjerh prosunj kh

Gia kˆje g-entol  s kai metasunj kh q , upˆrqei mia prosunj kh ws,q pou enai asjenèsjerh apì ìle ti ˆlle prosunj ke . Me ˆlla lìgia, gia kˆje kathgìrhma p, {p} s {q} an kai mìno an (p ⇒ ws,q ) H asjenèsjerh prosunj kh ws,q sumbolzetai me sun jw w wp(s, q)

(apì ta arqikˆ twn lèxewn weakest precondition). H Ôparxh tou wp(s, q) gia kˆje s kai q mpore na apodeiqje apì thn ex  parat rhsh: gia p kai p′ , {p}s{q} ∧ {p′ }s{q} ⇒ {p ∨ p′ }s{q}

dhl. h diˆzeuxh dÔo prosunjhk¸n enai kai aut  prosunj kh. Me bˆsh aut  thn idiìthta, mporoÔme na orsoume th wp(s, q) w th diˆzeuxh ìlwn twn prosunjhk¸n: _ p wp(s, q) = p:{p}s{q}

H asjenèsjerh prosunj kh mpore na oriste me th bo jeia tou metasqhmatismoÔ katˆstash :  Ps (C) = σ | Ts (σ) ⊆ C (13.38)


190

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

ìpou h èkfrash {wp(s, q)} enai isodÔnamh me thn Ps ({q}). Apì aut  th sqèsh prokÔptoun oi idiìthte th wp. H ènnoia th asjenèsjerh prosunj kh enai jemeli¸dh diìti upˆrqei mia mhqanik  (dhl. algorijmik ) diadikasa gia ton upologismì th gia kˆje s kai q . Asjenèsjerh prosunj kh gia entolè pollapl  anˆjesh Me ìsa èqoume anafèrei mèqri t¸ra, poiˆ enai enai h asjenèsjerh prosunj kh tou parakˆtw paradegmato ? wp( x := x + 1 , x > 3)

Metˆ apì lgh skèyh mporoÔme diaisjhtikˆ na antilhfjoÔme ìti ja enai to kathgìrhma x > 2. To skeptikì enai to akìloujo: an x0 enai h arqik  tim  th x, metˆ thn ektèlesh th entol  ja prèpei na isqÔei ìti x0 + 1 > 3, ˆra x0 > 2, ˆra h asjenèsjerh sunj kh enai h x > 2. MporoÔme na genikeÔsoume thn parapˆnw apl  mèjodo se entolè pollapl  anˆjesh w ex  : èstw v1 , . . . , vn := e1 , . . . , en mia entol  pollapl  anˆjesh . Gia kˆje kathgìrhma q , ja sumbolsoume me  e1 ,...,en q v1 ,...,vn

to kathgìrhma pou prokÔptei an antikatast soume sto q kˆje anaforˆ th metablht  vi me thn èkfrash ei . Parˆdeigma:

2



x2 < y + z

x+y,3z+1,−y x,y,z

≡ (x + y)2 < (3z + 1) + (−y).

Tìte, èqoume thn parakˆtw jemeli¸dh sqèsh:   e1 ,...,en wp (v1 , . . . , vn := e1 , . . . , en ) , q = q v1 ,...,vn

(13.39)

H apìdeixh aut  th sqèsh enai endiafèrousa ˆskhsh ston kathgorikì logismì pr¸th tˆxh , allˆ ja thn paraleyoume. To shmantikìtero stoiqeo sthn parapˆnw sqèsh enai ìti enai kajarˆ mhqanik ; mia apl  diadikasa antikatˆstash . An xanadoÔme t¸ra to parˆdeigma sthn arq  aut  th paragrˆfou, èqoume aploÔstata  x+1 wp( x := x + 1 , x > 3) ≡ x > 3 x ≡ (x + 1) > 3 ≡ x > 2

Enai fanerì ìti h parapˆnw sqèsh gia thn ken  anˆjesh ja enai wp(skip, q) = q


191

13.4. IDIOTHTE PROGRAMMATWN

Asjenèsjerh prosunj kh gia g-entolè Me qr sh th Ex. 13.39 mporoÔme na upologsoume anadromikˆ thn ansjenèsjerh prosunj kh gia kˆje ektelèsimh èkfrash s, w ex  : wp(g → s, q) ≡ ≡ ≡ ′

wp( s ; s , q) ≡ wp( s 8 s′ , q) ≡

(13.40) (13.41)

if(g, wp(s, q), q)   g ⇒ wp(s, q) ∧ ¬g ⇒ q  g ∧ wp(s, q) ∨ (¬g ∧ q)  wp s, wp(s′ , q) wp(s, q) ∧ wp(s′ , q)

(13.42) (13.43) (13.44)

Me lgh skèyh ìle oi parapˆnw sqèsei enai profane . Se kˆje perptwsh apodeiknÔontai eÔkola apì thn Ex. 13.38. Parˆdeigma: Jèloume na apodexoume ìti {x < y} t := x ; x := y ; y := t {y < x}.

Parathr ste ìti h metablht  t sthn parapˆnw entol  den emfanzetai oÔte sth metasunj kh oÔte sthn prosunj kh. An s enai h parapˆnw ektelèsimh èkfrash, arke na apodexoume ìti x < y =⇒ wp(s, y < x)

àqoume wp(s, y < x) = wp(t := x, wp(x := y, wp(y := t, y < x))), = wp(t := x, wp(x := y, t < x)), = wp(t := x, t < y), = x < y.

(apì thn (apì thn (apì thn (apì thn

Ex. 13.43) Ex. 13.39) Ex. 13.39) Ex. 13.39)

2 13.4

Idiìthte programmˆtwn

Mèqri t¸ra parajèsame ti majhmatikè bˆsei gia th melèth th sumperiforˆ programmˆtwn metasqhmatism¸n. T¸ra ja epikentrwjoÔme sth melèth twn idiot twn tètoiwn programmˆtwn. Kˆpoie apì ti idiìthte pou endiafèroun suqnˆ onomˆzontai idiìthte adiablhtìthta . Mia idiìthta adiablhtìthta ma bebai¸nei ìti kˆti kakì de sumbanei potè. Paradegmata tètoiwn idiot twn enai ta parakˆtw: • Se kˆje stigm , to krsimo tm ma ekteletai apì èna n ma to polÔ. • H metablht  x den enai potè arnhtik . • H metablht  x auxˆnei pˆntote.


192

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

• Mia ergasa den termatzetai prin arqikopoihje.

To qarakthristikì twn idiot twn asfˆleia enai to ex  : èna sÔsthma pou den kˆnei tpote ti ikanopoie, pq. kanèna den ektele potè to krsimo tm ma, h metablht  x den metabˆlletai potè, klp. Mia ˆllh genik  kathgora idiot twn perilambˆnei ti legìmene idiìthte proìdou. Oi idiìthte autè apaitoÔn na sumbe kˆti kalì kˆpoia stigm . Oi idiìthte autè den èqoun qronik  apathsh, dhl. na sumbe kˆti gr gora, allˆ aplˆ na sumbe se peperasmèno qrìno, dhl. na mhn anablhje gia pˆnta. Paradegmata tètoiwn idiot twn enai ta ex  : • An èna n ma zht sei to lock, kˆpoia stigm  ja to pˆrei. • An èna m numa stale, kˆpoia stigm  ja diabaste. • H metablht  x kˆpoia stigm  ja auxhje.

Se èna sÔsthma ma endiafèrei sun jw èna sunduasmì apì idiìthte adiablhtìthta kai proìdou. Sth sunèqeia ja orsoume kˆpoiou telestè me tou opoou ja mporoÔme na ekfrˆsoume idiìthte san ti parapˆnw. 13.5

Idiìthte adiablhtìthta

àstw èna prìgramma metasqhmatism¸n P kai èstw s = s1 8 s2 8 · · · 8 sn

(13.45)

h g-entol  tou progrˆmmato . Epame  dh gia thn ektèlesh ìti xekinˆ apì ti arqikè sunj ke kai epanalambˆnei ep ˆpeiron mia mh-nteterministik  epilog  kai ektèlesh mia apì ti si . Epsh epame ìti kˆje prìgramma perièqei thn skip, thn opoa de grˆfoume. Erqìmaste t¸ra na orsoume mia seirˆ apì idiìthte tou progrˆmmato . Oi pio aplè idiìthte enai autè pou exetˆsame  dh: an sthn arq  enì kÔklou ektèlesh isqÔei to p, tìte metˆ thn ektèlesh kapoia si isqÔei to q . Idiìthte autoÔ tou tÔpou mporoÔn na grafoÔn w {p}s 8 skip{q}, ìpou to s enai autì th Ex. 13.45. Gia na tonsoume ìti prìkeitai gia olìklhro to prìgramma, ant gia thn parapˆnw idiìthta ja grˆfoume p co q,

dhl. ja paralepoume to s¸ma tou progrˆmmato . Mia idiìthta p onomˆzetai eustaj  (stable) ìtan, afìtou gnei alhj  , paramènei alhj  . Me ˆlla lìgia stable p an kai mìno an p co p

(13.46)


193

13.5. IDIOTHTE ADIABLHTOTHTA

Mia eustaj  idiìthta p pou ikanopoie thn arqik  sunj kh tou progrˆmmato (dhl. enai kai arqikˆ alhj  ), onomˆzetai ametˆblhth (invariant). invariant p an kai mìno an I ⊆ {p} ∧ stable p

(13.47)

Oi ametˆblhte enai polÔ shmantikè idiìthte kai pazoun kentrikì rìlo sth melèth programmˆtwn. Mia idiìthta enai stajer  (constant) ìtan h tim  th den allˆzei, dhl constant p an kai mìno an 13.5.1

stable p ∧ stable ¬p

(13.48)

Paradegmata

Sto parˆdeigma th ¶13.2.5 diatup¸same dÔo idiìthte adiablhtìthta gia to prìgramma pou parousiˆsthke. Oi dÔo autè idiìthte mporoÔn t¸ra na diatupwjoÔn w ex  : invariant n > 0 ⇒ nonewait kai invariant 0 ≤ n ≤ n0 .

ParathroÔme ìti kai oi dÔo autè idiìthte enai ametˆblhte . Prˆgmati, oi ametˆblhte enai h suqnìterh morf  idiot twn. A diatup¸soume t¸ra merikè akìmh idiìthte adiablhtìthta pˆnw se upojetikˆ progrˆmmata. • H metablht  x enai pˆnta jetik : invariant x > 0 • An h x gnei kˆpote 0, paramènei gia pˆnta 0: stable x = 0 • H metablht  x den metabˆlletai potè:

∀k :: constant x = k

• An h x gnei arnhtik , paramènei stajer :

∀k :: stable x < 0 ⇒ x = k

• H metablht  x de mei¸netai potè:

∀k :: stable x ≥ k

• Oi x kai y de metabˆllontai potè kai oi dÔo:

∀n, m :: x = n ∧ y = m co x = n ∨ y = m


194

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

13.5.2

Apodexei idiot twn adiablhtìthta

Oi parapˆnw orismo mporoÔn na qrhsimopoihjoÔn gia na apodeiqjoÔn diˆfore qr sime idiìthte . Suqnˆ wstìso enai taqÔterh kai eukolìterh h apìdeixh me th qr sh kanìnwn pio genik¸n apì ton orismì. Sto shmeo autì parajètoume kˆpoiou apì tou pio qr simou kanìne qrhsimopoi¸nta to gnwstì sumbolismì upìjesh sumpèrasma • false co p • (sÔzeuxh kai diˆzeuxh)

• Arister  isquropohsh

• Dexiˆ exasjènish

p co true

p co q , p′ co q ′ p ∧ p′ co q ∧ q ′ p ∨ p′ co q ∨ q ′ p ⇒ p′ , p′ co q p co q q ⇒ q ′ , p co q p co q ′

Epsh , qr simo enai to axwma th antikatˆstash : kˆje ametˆblhth J ( invariant J ) enì progrˆmmato mpore na antikatastaje se kˆje ˆllh idiìthta autoÔ tou progrˆmmato apì thn tim  true kai antistrìfw . Tèlo , sthn apìdeixh eustaj¸n (stable) kai ametˆblhtwn (invariant) idiot twn, suqnˆ èqoume na apodexoume mia seirˆ apì sunj ke th morf  {p} g → s {p}.

SÔmfwna me ta ìsa èqoume pei arke na apodexoume th sqèsh p ⇒ if(g, wp(s, p), p).

Mpore na deiqje eÔkola ìti h sqèsh aut  enai isodÔnamh me thn aplopoihmènh morf  p ∧ g ⇒ wp(s, p). Sthn akìmh pio eidik  perptwsh ìpou h g-èfrash s den anajètei tim  se kˆpoia metabl t  pou na emfanzetai (ˆmesa   èmmesa) sto p, h sqèsh {p} g → s {p}.

isqÔei pˆntote, afoÔ sthn perptwsh aut  wp(s, p) ≡ p.


195

13.5. IDIOTHTE ADIABLHTOTHTA

13.5.3

Paradegmata apodexewn

MporoÔme me ìsa èqoume parousiˆsei mèqri twra na epistrèyoume sto prìgramma th §13.2.5 kai na epiqeir soume th diatÔpwsh kai apìdeixh merik¸n apì ti idiìthte tou progrˆmmato pou ulopoie thn klˆsh SemaphoreByCondition. Pollè apì ti idiìthte tou progrˆmmato autoÔ baszontai ston arijmì twn nhmˆtwn se kajemiˆ apì ti katastˆsei N , A, W kai C . Gia eukola loipìn mporoÔme na orsoume ti yeudometablhtè aN , aA , aW kai aC pou se kˆje katˆstash tou progrˆmmato perièqoun ton arijmì twn nhmˆtwn sthn antstoiqh katˆstash. Oi yeudometablhtè autè mporoÔn na eidwjoÔn me dÔo trìpou . Mia pijanìthta enai na ti orsoume san ekfrˆsei , pq. aC =

M−1 X

if(state[i] = C, 1, 0)

i=0

Mia ˆllh pijanìthta enai na ti prosjèsoume sto prìgramma w kanonikè metablhtè kai na metabˆlloume ti g-entolè tou progrˆmmato ¸ste na gnetai h swst  anˆjesh tim¸n se kˆje entol , pq. h entol  state[i] = N → state[i] := A

ja metatrape se state[i] = N → state[i], aN , aA := A, aN − 1, aA + 1.

MporoÔme t¸ra na diatup¸soume kai sth sunèqeia na apodexoume kˆpoie idiìthte tou progrˆmmato . H pr¸th idiìthta èqei na kˆnei me thn orjìthta th leitourga tou shmatoforèa. Jèloume na exasfalsoume ìti o arijmì aC twn nhmˆtwn sto krsimo tm ma metriètai swstˆ apì th metablht  n. H idiìthta aut  grˆfetai w invariant aC + n = n0

ìpou n0 enai h arqik  tim  tou shmatoforèa, dhl. mia stajerˆ. Gia na apodexoume thn idiìthta prèpei na isqÔei arqikˆ (alhjè ) kai na enai eustaj  . Gia na dexoume thn eustˆjeia mporoÔme na qrhsimopoi soume ton orismì. Prèpei dhl. na dexoume ti parakˆtw sqèsei , ìpou p ≡ (aC + n = n0 ): {p}

state[i] = N → state[i] := A

{p}

{p} {p}

state[i] = A ∧ n > 0 → state[i], n := C, n − 1 state[i] = A ∧ n <= 0 → state[i] := W

{p} {p}

{p} {p}

state[i] = C ∧ nonewaits → n, state[i] := n + 1, N state[i] = C ∧ state[j] = W → n, state[i], state[j] := n + 1, N, A

{p} {p}


196

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

Oi sqèsei autè metasqhmatzontai sti parakˆtw isodÔname logikè sqèsei : A  aC + n = n0 ∧ state[i] = N ⇒ aC + n = n0 state[i]  C,n−1 aC + n = n0 ∧ state[i] = A ∧ n > 0 ⇒ aC + n = n0 state[i],n W  aC + n = n0 ∧ state[i] = A ∧ n <= 0 ⇒ aC + n = n0 state[i] n+1,N  aC + n = n0 ∧ state[i] = C ∧ nonewaits ⇒ aC + n = n0 n,state[i]  n+1,N,A aC + n = n0 ∧ state[i] = C ∧ state[j] = W ⇒ aC + n = n0 n,state[i],state[j] Kˆpoio prìblhma entopzetai sti ekfrˆsei tou tÔpou  κ aC state[i]

ìpou to κ enai kˆpoia apì ti etikètte N ,W ,A kai C . H phg  tou probl mato enai to ìti h tim  th aC exartˆtai èmmesa apì ti timè twn stoiqewn state[i]. H aploÔsterh antimet¸pish autoÔ tou edou twn ekfrˆsewn gnetai me qr sh th sunˆrthsh if . Gia parˆdeigma:  A aC state[i] = aC − if(state[i] = C, 1, 0) Parˆdeigma: Ja apodexoume th sqèsh

A  aC + n = n0 ∧ state[i] = N ⇒ aC + n = n0 state[i]

To dex skèlo th sunepagwg  grˆfetai  A  aC + n = n0 state[i] ≡ aC − if(state[i] = C, 1, 0) + n = n0 ≡ ≡

 if(state[i] = C, aC − 1 + n, aC + n) = n0 if(state[i] = C, aC − 1 + n = n0 , aC + n = n0 )

(state[i] = C ∧ aC − 1 + n = n0 ) ∨ (state[i] 6= C ∧ aC + n = n0 )

(me qr sh th idiìthta th Ex. 13.11). àqoume loipìn apaleyei th sunˆrthsh if kai pia h apìdeix  ma enai mia apl  ˆskhsh th ˆlgebra Boole. 2. A exetˆsoume t¸ra mia akìmh idiìthta tou progrˆmmato autoÔ. Anarwthj kame sthn § refsse :mptheory-example gia to an h qr sh th notify sth mèjodo release tou shmatoforèa ma enai arket ,   an qreiˆzetai h notyifyAll. Gia na apodexoume ìti arke h qr sh th notify mporoÔme na dexoume thn parakˆtw idiìthta: invariant aW = 0 ∨ aA ≥ n

H idiìthta aut  lèei ìti an upˆrqoun emplegmèna n mata (aW > 0) ja prèpei ta n mata pou prospajoÔn na pˆroun to shmatoforèa (aA ) na mhn enai ligìtera


197

13.6. IDIOTHTE PROODOU

apì ekena pou mpore o shmatoforèa na af sei na perˆsoun (n). Prˆgmati, to antjeto ja  tan kakì: èstw ìti h katˆstash aW = 1, aA = 2 kai n = 4 mporoÔse na sumbe. Sthn katˆstash aut  o shmatoforèa mpore na deqje 4 n mata na mpoun sto krsimo tm ma. Tra n mata (aW + aA ) jèloun na to kˆnoun, kai ˆra mporoÔn ìla na to petÔqoun, allˆ to èna apì autˆ enai emplegmèno! H idiìthta aut  mpore na apodeiqje apì ton orismì tou invariant epsh , me ton trìpo pou  dh exetˆsame. Mia akìmh idiìthta enai h invariant aC ≤ n0

h opoa ma egguˆtai ìti o arijmì twn nhmˆtwn sto krsimo tm ma enai pˆntote to polÔ n0 . Aut  h idiìthta mpore na apodeiqje apì ton orismì, allˆ mia pio eÔkolh apìdeixh enai h ex  : afoÔ èqoume  dh dexei ìti invariant aC + n = n0 ,

mporoÔme na dexoume thn polÔ aploÔsterh idiìthta invariant n ≥ 0,

kai na katal xoume sto zhtoÔmeno: n≥0 ≡ ≡

n 0 − aC ≥ 0 aC ≤ n 0

Telei¸noume to kefˆlaio autì me mia parat rhsh. Oi apodexei pou grˆyame parapˆnw fanontai arketˆ perploke kai eppone gia thn aploÔstath aut  efarmog  tou shmatoforèa ma . Wstìso h poluplokìthta aut  ofeletai sto ìti epimename sth qr sh twn basik¸n tÔpwn kai orism¸n gia ti apodexei . Me thn apìkthsh kˆpoia empeira sthn ˆlgebra Boole kai ston kathgorikì logismì oi prˆxei autè gnontai polÔ pio eÔkola kai sÔntoma, sqedìn mhqanikˆ. A skefte kane pìso pio gr gorh diadikasa enai o upologismì sthn klassik  ˆlgebra, allˆ a jumhje pìso megˆlh prospˆjeia katèbale sta majhtikˆ tou qrìnia me aplè isìthte , mèqri na apokt sei thn apaitoÔmenh empeira. En tèlei, oi mèjodoi pou perigrˆfoume sto kefˆlaio autì gnontai deÔterh fÔsh kai mporoÔn na efarmostoÔn se megˆla kai perploka probl mata me kìpo ìqi megalÔtero apì èna sunhjismèno arijmhtikì upologismì. Wstìso, autˆ isqÔoun gia ti apodexei . H diatÔpwsh idiot twn programmˆtwn enai diaforetik kai polÔ duskolìterhupìjesh apì thn apìdeix  tou . 13.6

Idiìthte proìdou

Oi idiìthte proìdou enì progrˆmmato bebai¸noun ìti to prìgramma kˆnei kˆti kalì, ìpou kalì enai h metˆbash se kˆpoio epijumhtì sÔnolo katastˆsewn. Oi idiìthte proìdou grˆfontai me th bo jeia tou telest  7−→ pou diabˆzetai odhge se (leads to).Merikˆ paradegmata tètoiwn idiot twn enai ta parakˆtw:


198

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

• true 7−→ x = 0, h metablht  x ja gnei 0 ˆpeire forè (aperw suqnˆ). • x > 0 7−→ y > 0, an to x gnei jetikì, kˆpote to y ja gnei epsh jetikì. • m(a, b) 7−→ m(b, c), kˆje m numa apì th diergasa a sth diergasa b akoloujetai argìtera apì èna m numa apì th b sth diergasa c.

H leitourgik  shmasa mia idiìthta p 7−→ q enai h ex  : Gia kˆje qrìno t, an h katˆstash mia ektèlesh tou progrˆmmato sto qrìno t ikanopoie to p, tìte upˆrqei qrìno t′ ≥ t ìpou h katˆstash th ektèlesh ja ikanopoie to q . H parapˆnw prìtash den egguˆtai tpota perissìtero apì autì pou lèei; pq. den egguˆtai ìti mèqri thn ikanopohsh tou q ja ikanopoietai to p, oÔte dnei kˆpoia qronik  diˆrkeia mèsa sthn opoa ja isqÔsei to q . Aplˆ dhl¸nei ìti to q ja isqÔsei se peperasmèno qrìno. Wstìso, h idiìthta aut  ja isqÔei gia kˆje qronik  stigm , ìqi mìno gia thn arq  tou progrˆmmato . Gi autì kai kˆje idiìthta th morf  true 7−→ p

shmanei ìti to p ja isqÔei aperw suqnˆ. An to p sque se peperasmèno mìnon arijmì kÔklwn ektèlesh , ja eqame ˆtopo; an t enai h teleutaa forˆ pou squse to p, tìte gia to qrìno t + 1 ja èqoume ìti isqÔei to true , ˆra ja èprepe na isqÔsei xanˆ to p se qrìno megalÔtero tou t, pou enai ˆtopo (afoÔ t enai h teleutaa forˆ pou jewr same ìti squse to p). Gia na orsoume ton telest  7−→ qrhsimopoioÔme ti aploÔstere ef mere idiìthte (transient properties). Gia mia idiìthta p grˆfoume tr p

kai diabˆzoume "h p enai ef merh", to opoo shmanei ìti gia kˆje qronik  stigm  sthn opoa isqÔei h p, mèsa se peperasmèno qrìno ja isqÔsei h ¬p. Me ˆlla lìgia, sÔmfwna me ìsa epame parapˆnw, true 7−→ ¬p.

Wstìso ja prèpei na jumìmaste ìti h tr qrhsimopoietai gia ton orismì th 7−→, ètsi h parapˆnw èkfrash den enai qr simh san orismì th tr . 13.6.1

Dkaie ektelèsei

Gia na orsoume ti ef mere idiìthte ja prèpei na eisˆgoume th jemeli¸dh ènnoia th dkaih ektèlesh (fairness). A jewr soume èna prìgramma P me gentol  s1 8 · · · 8 sn . H ektèlesh tou progrˆmmato epilègei gia ektèlesh se kˆje kÔklo ete mia apì ti entolè si ete th skip. Gnetai fanerì ìti kˆpoie epilogè ektèlesh (pq. h suneq  epilog  th skip ja prèpei na exairejoÔn an jèloume na apodexoume idiìthte


13.6. IDIOTHTE PROODOU

199

proìdou. Oi ektelèsei pou deqìmaste w nìmime onomˆzontai dkaie ektelèsei . H fusik  ulopohsh twn dkaiwn ektelèsewn baszetai sti idiìthte qronodromolìghsh twn diergasi¸n ma se èna prìgramma poluepexergasa . Upˆrqoun pollè diaforetikè ènnoie dkaih ektèlesh . àna pr¸to orismì , pou onomˆzetai elˆqisth prìodo (minimal progress), perilambˆnei ti ektelèsei sti opoe h epilog  kˆpoia si 6= skip gnetai aperw suqnˆ. Oi ektelèsei autè den enai idiatera {dkaie } afoÔ mpore na agnooÔntai megˆla kommˆtia tou progrˆmmato se mia ektèlesh. H pio diadedomènh morf  dkaih ektèlesh enai h asjen¸ dkaih ektèlesh (weak fairness), ìpou gnontai dektè ìle oi ektelèsei sti opoe kˆje si ekteletai aperw suqnˆ. O orismì autì enai dhmofil  epeid  perigrˆfei arketˆ pistˆ ti idiìthte twn pio koin¸n teqnik¸n qronodromolìghsh diergasi¸n. Upˆrqoun kai akìmh pio austhro orismo dkaih ektèlesh , ìpw h isqur¸ dkaih ektèlesh (strong fairness). O orismì aut  th ènnoia enai kˆpw pio perploko . àstw ci h sunj kh (dhl. oi katastˆsei ekeine ) katˆ thn opoa h ektèlesh th si allˆzei kˆpoia metablht  tou progrˆmmato . Mia ektèlesh enai isqur¸ dkaih ìtan, gia kˆje i gia to opoo h ci isqÔei aperw suqnˆ, h si epilègetai aperw suqnˆ se qronikè stigmè ìpou isqÔei h ci . Sto parakˆtw prìgramma mporoÔme na doÔme thn epdrash sthn ektèlesh pou èqoun oi paradoqè dkaih ektèlesh pou kˆnoume. decl x, y, z init x, y, z = 0, 1, 0 do x := x + 1 8 y := y + 1 8 x= 6 y → z := z + 1 end

Sthn perptwsh th elˆqisth proìdou, den mporoÔme na apodexoume ìti kˆpoia metablht  apì ti x, y kai z ja auxhje. MporoÔme mìno na dexoume ìti kˆpoia apì autè ja auxhje, afoÔ mia entol  (ektì th skip) ja ekteleste kˆpoia stigm . Sthn perptwsh asjen¸ dkaih ektèlesh oi metablhtè x kai y opwsd pote ja auxhjoÔn. Wstìso den mporoÔme na apodexoume ìti h z ja auxhje, parìlo pou h frouroÔmenh entol  ja ekteleste ˆpeire forè . Enai exairetikˆ apjano allˆ pˆnw dunatìn h ektèlesh th frouroÔmenh entol  na gnei mìno se katastˆsei ìpou x = y . Sthn perptwsh isqur¸ dkaih ektèlesh mporoÔme na apodexoume ìti kai oi trei metablhtè opwsd pote ja auxhjoÔn. Upˆrqoun pˆra pollo ˆlloi orismo dkaih ektèlesh ektì apì tou parapˆnw, allˆ èqoun efarmog  se polÔ eidikè peript¸sei . Sun jw jewroÔme ìti h ektèlesh enai asjen¸ dkaih.


200 13.6.2

KEFALAIO 13. JEWRIA POLUEPEXERGASIA

Ef mere idiìthte

O orismì th tr p diafèrei anˆloga me ton orismì th dkaih ektèlesh pou uiojetoÔme gia to programmˆ ma . Ed¸ ja d¸soume ton orismì pou efarmìzetai sthn perptwsh asjen¸ dkaiwn ektelèsewn. Gia na enai mia sunj kh p ef merh, arke gia kˆpoia entol  si na isqÔei {p} si {¬p}

Me bˆsh ton parapˆnw orismì emaste t¸ra ètoimoi na orsoume ton telest  7−→. O orismì pou ja d¸soume enai anadromikì . H perptwsh bˆsh enai: p ∧ ¬q co p ∨ q , tr p ∧ ¬q p 7−→ q

Epsh , o telest  7−→ enai metabatikì : p 7−→ q , q 7−→ r p 7−→ r

Tèlo , enai kajolikˆ diazeuktikì apì ta aristerˆ (S enai èna opoiod pote sÔnolo sunjhk¸n):

∀p : p ∈ S : p 7−→ q

∃p : p ∈ S : p 7−→ q

H perptwsh bˆsh tou parapˆnw orismoÔ baszetai se kˆpoia ef merh sunj kh tou progrˆmmato . Wstìso, o orismì autì den enai arketì gia na apodexei ìle ti idiìthte p 7−→ q . H apìdeixh mia tètoia idiìthta mpore na qreiaste na diarjrwje ete se stˆdia, opìte efarmìzoume th metabatikìthta tou 7−→, ete na gnei anˆlush peript¸sewn, opìte efarmìzoume th diazeuktikìthta.


Kefˆlaio 14 Upologismì th Apìdosh

201


202

KEFALAIO 14. UPOLOGISMO TH APODOSH


Parˆrthma A H gl¸ssa programmatismoÔ Python H Python enai mia interpreted gl¸ssa programmatismoÔ uyhloÔ epipèdou, pou prwtodhmiourg jhke to 1991 apì ton Guido van Rossum. Apì tìte anaptÔssetai dunamikˆ kai s mera katèqei mia xeqwrist  jèsh sthn teqnologa plhroforiak¸n susthmˆtwn. Enai sw h mình scripting gl¸ssa h opoa mpore na onomaste {genikoÔ skopoÔ}: enai idiatera katˆllhlh gia efarmogè plhroforiak¸n susthmˆtwn, sumperilambanomènwn kai twn katanemhmènwn susthmˆtwn, allˆ èqei epsh shmantik  parousa se efarmogè teqnht  nohmosÔnh , megˆlh klmaka upologism¸n (w scripting) kai diaqerish susthmˆtwn. Tèlo , h Python èqei qrhsimopoihje ektetamèna kai me megˆlh epituqa w ekpaideutik  gl¸ssa gia thn eisagwg  ston programmatismì. H basik  filosofa th gl¸ssa dnei èmfash se mhqanismoÔ oi opooi dieukolÔnoun ton programmatist  na ekfraste me litì kai komyì trìpo, krat¸nta th basik  gl¸ssa apl , akìmh kai ei bˆro th apìdosh . H Python enswmat¸nei me fusikì kai litì trìpo mia seirˆ apì mhqanismoÔ gia polÔ uyhloÔ epipèdou anˆptuxh logismikoÔ: • àna polÔ isqurì sÔnolo apì basikoÔ tÔpou (lists, tuples, sets kai maps, klp) me fusik  sÔntaxh enswmatwmènh sth gl¸ssa. • àna pl rw obkect-oriented montèlo dedomènwn, me upost rixh gia metaobject protocol, operator overloading, pollaplì inheritance. • Mia morf  continuations (onomˆzontai generators) pou epitrèpoun ton eÔkolo orismì nèwn tÔpwn iteration. • Sumbolikè ekfrˆsei dhmiourga list¸n ((list comprehensions) pou mei¸noun dramatikˆ thn parousa apl¸n loops ston k¸dika.

203


204

PARARTHMA A. H GLWSSA PROGRAMMATISMOU

PYTHON

• Sunoptikì suntaktikì, ìpw entolè pollapl  anˆjesh , l-forms klp.

To kuriìtero prosìn th Python enai ìti o k¸dikˆ th prosfèretai gia anˆgnwsh! Lègetai qarakthristikˆ ìti h Python enai to dio sunoptik  kai katanoht  ìso o yeudok¸dika . Autì epètreye thn anˆptuxh polÔ megˆlwn efarmog¸n open-source, dieukolÔnonta thn epikoinwna (mèsw k¸dika) programmatist¸n apì ìlo ton kìsmo. PisteÔoume ìti ta paradegmata tou biblou uposthrzoun autì ton isqurismì. H Python èqei exairetik  tekmhrwsh pou mpore na breje sthn kÔria istoselda tou project: http://www.python.org/


Parˆrthma B To prìtupo CORBA H teqnologa CORBA xeknhse na anaptÔssetai apì to OMG (Object Management Group) to 1993. Apì tìte èqei kataste h pio dhmofil  teqnologa katanemhmènwn antikeimènwn, èqei epektaje se eurÔtate teqnologikè perioqè kai èqei dhmiourg sei mia biomhqana logismikoÔ dekˆdwn disekatommurwn dollarwn ethsw . Mia pl rh perigraf  th teqnologa ja apaitoÔse toulˆqiston èna olìklhro biblo. H CORBA den enai proðìn; enai èna prìtupo pou èqei ulopoihje apì polloÔ diaforetikoÔ organismoÔ . H tekmhrwsh th teqnologa CORBA pou diatjetai apì thn OMG kalÔptei to prìtupo kai apotele ènan pl rh odhgì. Wstìso, oi qr ste th teqnologa ja qreiastoÔn kai epiplèon tekmhrwsh, sqetik  me thn platfìrma anˆptuxh pou qrhsimopoioÔn. Skopì tou parart mato autoÔ enai na d¸sei mia oligosèlidh episkìphsh th CORBA, h opoa anamfbola enai anepark  akìmh kai gia thn aploÔsterh ulopohsh. Enai ìmw arket  gia na d¸sei mia genik  entÔpwsh gia ti basikè grammè kai orologa, ¸ste na mpore o anagn¸sth na proseggsei eukolìtera thn pl rh tekmhrwsh. B.1

To montèlo dedomènwn th

OMG

àna katanemhmèno sÔsthma CORBA enai mia sullog  apì antikemena. Kˆje antikemeno ulopoie èna interface (diepaf ), dhlad  èna sÔnolo apì operations (paromoiˆzoun me mejìdou ) kai attributes (peda). Ta operations mporoÔn na kaloÔntai apì pelˆte w apomakrusmène kl sei , en¸ ta attributes prospelaÔnontai mèsw enì zeugarioÔ getter/setter operations. B.1.1

Operations

Kˆje operation èqei upograf  (signature), pou èqei thn parakˆtw genik  morf : [oneway℄ <tÔpo epistrof  > <ìnoma> ( ìrisma1, ..., ìrismaN ) 205


206

PARARTHMA B. TO PROTUPO

CORBA

[raises( exception1, ..., exceptionM )℄ [context( contextName1, ..., contextNameK)℄ Ta orsmata enì operation qarakthrzontai apì to edo , èna apì ta in, out   inout gia orsmata call-by-copy (parìmoia me thn Ada, bl. §3.3.2). Kˆje ìrisma èqei tÔpo kai ìnoma. Ta (proeraitikˆ) exceptions pou uposthrzei èna operation sun jw epistrèfontai gia na katadexoun kˆpoio prìblhma sthn ektèlesh mia kl sh . Ta contextNames enai string etikètte pou dhl¸noun ìti oi kl sei autoÔ tou operation ja prèpei na sunodeÔontai apì epiplèon plhrofora pou aforˆ thn kl sh (p.q. ìnoma qr sth kai sunjhmatikì). Paradegmata: 1 2

/ / Network p r i n t e r o p e r a t i o n s typedef octet ipaddr [ 4 ] ;

3 4 5

i p a d d r p r i n t e r a d d r e s s ( i n s t r i n g pname ) raises ( NoPrinter ) ;

6 7 8

v o i d a d d p r i n t e r ( i n s t r i n g pname , i n i p a d d r h a d d r ) r a i s e ( NoPermission ) con text ( ” User ” ) ;

B.1.2

Interfaces

Mia sullog  apì operations orzoun èna interface. 1 2 3 4 5 6 7

interface PrinterQueue { t y p e d e f sequence <long> i d S e q ; idSeq queued jobs ( ) ; s t r i n g job name ( in long j o b i d ) r a i s e s ( I n v a l i d J o b I d ) ; void c a n c e l j o b ( in long j o b i d ) r a i s e s ( I n v a l i d J o b I d , P ermi ssi onDeni ed ) , con text ( ” User ” ) ; }

Ta interfaces enai organwmèna se mia klhronomik  ierarqa; èna interface A mpore na epektenei èna   perissìtera ˆlla interfaces ta opoa onomˆzontai ˆmesa super-interfaces tou A. Ta interfaces pou epektenoun to A onomˆzontai ˆmesa subinterfaces tou A. 1 2 3 4 5 6

i n t e r f a c e ManagedPrinterQueue : P ri nt erQueue { void s u s p e n d j o b ( in long j o b i d ) r a i s e s ( I n v a l i d J o b I d , P ermi ssi onDeni ed ) , con text ( ” User ” ) ; void r es ume j ob ( in long j o b i d ) r a i s e s ( I n v a l i d J o b I d , P ermi ssi onDeni ed ) , con text ( ” User ” ) ; }

B.1.3

Attributes

Ta interfaces mporoÔn na perièqoun kai attributes, ta opoa enai suntomografe gia getter/setter operations. H genik  morf  mia d lwsh attribute enai h ex  :


B.1. TO MONTELO DEDOMENWN TH

OMG

207

[readonly℄ attribute <tÔpo > <ìnoma> [getraises( exception1, ..., exceptionM )℄ [setraises( exception1, ..., exceptionK )℄

Parˆdeigma: 1

a t t r i b u t e long t i m e o u t ;

2 3

readonly a t t r i b u t e p o s i t i o n t p o s i t i o n ;

4 5 6

a t t r i b u t e s t r i n g hostname g e t r a i s e s ( NoName ) s e t r a i s e s ( P e r m i s s i o n D e n i e d ) ;

O parapˆnw k¸dika enai isodÔnamo me ti parakˆtw dhl¸sei : 1 2

long void

get timeout (); s e t t i m e o u t ( on l o n g t ) ;

3 4

position t

get posistion ();

5 6 7

string g e t h o s t n a m e ( ) r a i s e s ( NoName ) ; set host name ( in st ri n g n ) rai ses ( PermissionDenied ) ; void

B.1.4

TÔpoi

H CORBA IDL uposthrzei polloÔ tÔpou , pèra apì tou aploÔ tÔpou pou edame sta mèqri t¸ra paradegmata. To sÔsthma twn tÔpwn pou uposthrzontai èqei epektaje apì thn arqik  èkdosh tou protÔpou, prosjètonta teleutaa th dunatìthta orismoÔ anadromik¸n tÔpwn.

Aplo tÔpoi Oi aplo tÔpoi pou uposthrzontai apì thn CORBA fanontai parakˆtw:


208

PARARTHMA B. TO PROTUPO

TÔpo

float double long double [unsigned] short [unsigned] long [unsigned] long long fixed< n, d >

bytes)

Mègejo (

CORBA

Parathr sei

4 8

IEEE-754

16 2 4 8

≤ 16

Stajer  upodiastol  dekadikì (mègisto 31 dekadikˆ yhfa)

char wchar boolean octet any

bit Unicode kai ˆlle kwdikopoi sei

1

8-

2

Gia

1

byte

1

Sun¸numo tou

-

Anaparistˆ ìle ti timè opoioud pote ˆllou tÔpou

string wstring string< n > wstring< n > references

IDL.

Aprosdiìristou m kou

Kajorismènou mègistou m kou

Anaforè se antikemena

Suntijèmenoi tÔpoi Uposthrzontai structs, unions kai arrays orismènou m kou , me suntaktikì parìmoio me th C++ektì twn unions. Epsh , uposthrzontai dhl¸sei enum kai typedef. Ta unions uposthrzontai me thn upoqrewtik  qr sh enì epiplèon pedou diaforopohsh (discriminator). To suntaktikì enai mia mxh twn suntaktik¸n C++ gia unions kai thn entol  switch. Gia parˆdeigma: 1 2 3 4 5 6

union H o s t s w i t c h ( l o n g ) { c a s e 0 : s t r i n g dns name ; case 1: s t r i n g d o t t e d a d d r ; case 2: o c t e t [ 4 ] o c t e t a d d r ; d e f a u l t : long l o n g a d d r ; };

Oi tÔpoi tou discriminator mpore na enai boolean, akèraioi, qarakt re , enum,   typedef twn parapˆnw. Parìlo pou h CORBA IDL den uposthrzei arrays metablhtoÔ m kou , uposthrzei ènan logikˆ parìmoio tÔpo sequence (akolouja ), me suntaktikì parìmoio me C++ templates: sequence< T > (  me orismì mègistou m kou , w sequence< T, n >. Anadromiko tÔpoi Prìsfata, h CORBA IDL epektˆjhke gia na uposthrxei anadromikoÔ tÔpou , prosjètonta ènan mhqanismì orismoÔ tÔpwn mh-katanemhmènwn antikeimènwn, pou ta onomˆzei valuetypes. àna valuetype mpore na perièqei katˆstash (me qr sh


B.1. TO MONTELO DEDOMENWN TH

OMG

209

anadrom  ) kai mejìdou , orzei ˆdeie prìsbash sta peda tou (private/public) kai klhronome ˆlla valuetypes   ulopoie interfaces. Gia perissìtere leptomèreie parapèmpeste sto prìtupo th CORBA. B.1.5

exceptions

Mia d lwsh exception paromoiˆzei me mia d lwsh struct, allˆ den orzei tÔpo struct. Ta orizìmena exceptions mporoÔn na qrhsimopoihjoÔn mìno mèsa se mia d lwsh raises. Parˆdeigma: 1 2

exception NoPermission {}; e x c e p t i o n F i l e N o t F o u n d { s t r i n g fname ; }

B.1.6

Modules

kai

scoping

Se antistoiqa me ta packages th Java, ta modules th Python kai ta namespaces th C++, h CORBA IDL prosfèrei mia dom  scoping gia thn omadopohsh twn dhlwjèntwn interfaces, tÔpwn klp. ¸ste na apofeÔgetai h sÔgkroush onomˆtwn. H dom  aut  onomˆzetai module kai suntaktikˆ prosomoiˆzei me ta C++ namespaces. àna module orzei èna nèo scope kai perièqei dhl¸sei tÔpwn, stajer¸n (aploÔ tÔpou), interfaces kai exceptions. Epsh , kˆje d lwsh interface orzei èna nèo scope kai mpore na perièqei ki autì dhl¸sei tÔpwn, stajer¸n kai exceptions, ìqi ìmw (nested) interfaces. Onìmata pou dhl¸nontai se diaforetikì scope mporoÔn na qrhsimopoihjoÔn (a) qwr kˆpoia s mansh, an to scope perikleei to trèqon shmeo,   (b) me th bo jeia tou sumbìlou “::” (ìpw kai sth C++). B.1.7

àna oloklhrwmèno parˆdeigma

O parakˆtw k¸dika ja mporoÔse na apojhkeute se èna arqeo me to ìnoma printservice.idl kai na qrhsimopoihje san esodo se ènan IDL compiler gia thn paragwg  stubs. 1

module P r i n t S e r v i c e {

2 3 4

/ ∗ Two p r i o r i t y l e v e l s ∗ / enum P r i o r i t y { P r i o r i t y L o w , P r i o r i t y H i g h } ;

5 6 7

t yp ed ef unsigned long J obI d ; c o n s t J o b I d NULL JOB = 0 ;

/ / Null id

8 9 10 11 12 13 14 15

s t r u c t Job { / / Describes a job JobId id ; s t r i n g name ; string user ; Priority priority ; }; t y p e d e f sequence <Job> J o b S e q ;


210

PARARTHMA B. TO PROTUPO

CORBA

16

/ / Exceptions exception PermissionDenied {}; excep t i on QuotaExceeded {}; exception NonexistentJob { JobId job ; };

17 18 19 20 21

t y p e d e f sequence <s t r i n g > p c l S e q ;

22 23

stru ct ModelDescription { s t r i n g vendor , t ype ; pclSeq s u p p o r t e d p c l s ; };

24 25 26 27 28

interface PrinterDescription { readonly a t t r i b u t e s t r i n g p r i n t e r n a m e ; r e a d o n l y a t t r i b u t e M o d e l D e s c r i p t i o n model ; };

29 30 31 32 33

interface PrintQueue { J obI d s ubmi t J ob ( in Job j ob ) r a i s e s ( PermissionDenied , QuotaExceeded ) ; JobSeq l i s t J o b s ( ) ; void c a n c e l J o b ( in J obI d j ob ) r a i s e s ( PermissionDenied , NonexistentJob ) ; };

34 35 36 37 38 39 40 41

/∗ I n h e r i t s other i n t e r f a c e s ∗/ interface P r i n t e r : PrintQueue { void s t a r t ( ) r a i s e s ( P er mi s s i onD eni ed ) ; void s t o p ( ) r a i s e s ( P er mi s s i onD eni ed ) ; boolean i s R unni ng ( ) ; };

42 43 44 45 46 47 48

};

Mia seirˆ apì leptomèreie sth suggraf  CORBA IDL axzei na proseqjoÔn: • Oi tÔpoi twn paramètrwn kl sh twn operations, ìpw kai o tÔpo epistrof  , den mporoÔn na enai ekfrˆsei (p.q. sequence<string>, allˆ mìno onìmata apl¸n tÔpwn. An jèloume na epistrèyoume kˆpoio suntijèmeno tÔpo, prèpei na qrhsimopoi soume dhl¸sei typedef gia na d¸soume aplˆ onìmata. • MporoÔme na qrhsimopoi soume forward declarations, gia na dhl¸soume tÔpou kai interfaces prn d¸soume ton orismì tou . Parˆdeigma: 1 2 3 4 5 6 7

i n t e r f a c e A; / / forward d e c l a r a t i o n t y p e d e f sequence <A> ASeq ; interface B { A get one A ( ) ; / / A returned here ASeq g e t a l l A s ( ) ; };


B.2. METAFRASH

CORBA IDL SE PYTHON

211

interface A { / / d e f i n e d here };

8 9 10

• H qr sh diaqwristik¸n semicolon “;” metˆ apì kˆje d lwsh enai upoqrewtik . • Ta modules mporoÔn na enai nested. MporoÔme na qrhsimopoi soume mia d lwsh import gia na qrhsimopoioÔme ta onìmata enì scope mèsa se èna ˆllo scope qwr na qreiˆzetai na katafeÔgoume sth qr sh tou ::. • O orismì arijmhtik¸n stajer¸n tim¸n (me th d lwsh const) mpore na gnetai me aplè ekfrˆsei , parìmoia me th C++. P.q. con s t double Pi = 3. 141592654; con s t double P i 2 = Pi / 2 . 0 ;

1 2

Epsh , uposthrzontai alfarijmhtikè stajerè (kanonikè kai wide): 1 2 3 4

const const const const

s t r i n g app name = ” S u p e r S y s t e m ” ; w s t r i n g TUC name = L”TUC” ; char D o l l a r = ’ $ ’ ; wchar Euro = L ’ E ’ ;

• Ta arqea IDL pernoÔn apì preprocessing me ton dio akrib¸ trìpo pou pernoÔn kai ta arqea th C++. Mpore kane na qrhsimopoi sei ta gnwstˆ directives #include, #define, #if/#else/#end klp.

B.2

Metˆfrash

CORBA IDL se Python

H metˆfrash twn dhl¸sewn th CORBA IDL sthn Python kajorsthke apì thn OMG w kai thn èkdosh CORBA 2.3. B.2.1

Apeikìnish onomˆtwn kai

scopes

An èn IDL module den perièqei sub-modules, tìte apeikonzetai se èna aplì Python module (dhl. aplì arqeo .py), alli¸ apeikonzetai se èna Python package (èna directory pou perièqei èna module me to ìnoma __init__). äla ta ˆlla scopes apeikonzontai w dhl¸sei class. B.2.2

Apeikìnish tÔpwn

H apeikìnish twn apl¸n tÔpwn fanetai ston parakˆtw pnaka:


212

PARARTHMA B. TO PROTUPO

IDL octet short long unsigned short unsigned long long long unsigned long long float double long double boolean char wchar string wstring

CORBA

Python int int int int long long long float float CORBA.long double int string (m kou 1) unicode (m kou 1) string unicode

Oi tÔpoi array kai sequence apeikonzontai se akolouje (tÔpo list   tuple anˆloga me thn uloohsh). Exaresh enai h perptwsh array   sequence apì octet, pou apeikonzetai se string. TÔpoi struct kai union apeikonzontai se klˆsei . Eidikˆ gia ta unions, h klˆsh èqei dÔo attributes, me onìmata _d (discriminator) kai _v (value) antstoiqa. B.2.3

Apeikìnish gia

exceptions

Ta exceptions pou orzontai apì to qr sth apeikonzontai se upoklˆsei th klˆsh CORBA.exception. àqoun ta peda pou tou antistoiqoÔn. B.2.4

Apeikìnish gia

interfaces

àna antikemeno CORBA antistoiqe se èna antikemeno Python. äpou zhtetai anaforˆ se antikemeno CORBA, mpore na doje anaforˆ sto antstoiqo antikemeno Python. To nil object reference apeikonzetai sto None. Ta operations pou uposthrzei èna antikemeno enai diajèsima san mèjodoi tou Python antikeimènou. Kaj¸ h Python den uposthrzei call-by-reference, h apeikìnish twn paramètrwn gnetai w ex  : H mèjodo dèqetai w esodo mìno ti in kai inout paramètrou tou operation, paraleponta dhlad  ìle ti out paramètrou , qwr na allˆxei h seirˆ twn upolopwn. Katˆ thn epistrof , h pr¸th tim  epistrof  (an upˆrqei) enai h tim  epistrof  tou operation, kai akoloujoÔn ìle oi inout kai out parˆmetroi, qwr na allˆxei h sqetik  seirˆ tou . H kl sh ja epistrèyei: • None, an den upˆrqoun timè epistrof  (sthn perptwsh pou to operation epistrèfei void kai den èqei orsmata pou na mhn enai in). • An h tim  epistrof  enai ma, epistrèfetai autoÔsia.


B.3. METAFRASH

CORBA IDL SE JAVA

213

• An h timè epistrof  enai pollè , epistrèfontai w tuple.

Antikemena th Python pou epistrèfontai w references apì kˆpoia kl sh, endèqetai na èqoun pragmatikì tÔpo kˆpoio sub-interface autoÔ pou kajorzei h upograf  th kl sh . Gia na metatrape èna tètoio reference x se reference me pio sugkekrimèno tÔpo I, qrhsimopoietai h kl sh x. narrow(I).

CORBA IDL se Java

B.3

Metˆfrash

B.4

H arqitektonik 

CORBA

Ta antikemena pou summetèqoun se èna katanemhmèno sÔsthma CORBA dèqontai apì tou pelˆte ait sei katanemhmène kl sei twn operations tou . Oi pelˆte , ìpw kai ta antikemena, prèpei na ulopoioÔn ta aparathta prwtìkolla kwdikopohsh dedomènwn kai epikoinwna , sÔmfwna me ìsa èqoume pei. Sthn CORBA, kˆje tètoia diergasa apotele èna Object Request Broker   aplˆ ORB. äpw lèei kai to ìnoma, to ORB enai basikˆ èna mesth gia ait sei se antikemena, enai dhlad  upeÔjuno gia ta ex  : • Na entopsei to antikemeno pro to opoo apeujÔnetai mia athsh, kurw entopzonta to antstoiqo ORB. • Na proetoimˆsei th metaforˆ th athsh , pq. dhmiourg¸nta mia sÔndesh me thn katˆllhlh diergasa. • Na metafèrei ta dedomèna athsh kai apìkrish .

H basik  dom  enì sust mato CORBA fanetai sto Sq. B.1. Ta tm mata pou parousiˆzontai antistoiqoÔn sta b mata pou prèpei na ulopoihjoÔn gia thn epituq  ulopohsh mia apomakrusmènh kl sh . • H kl sh operation enì katanemhmènou antikeimènou mpore na klhje apì ton pelˆth w kl sh se èna proxy, to opoo mpore na enai mèjodo enì proxy antikeimènou ,   (gia mh antikeimenostrafe gl¸sse ) mia sunˆrthsh. H ulopohsh twn proxies brsketai mèsa se k¸dika interface stub pou par qjh apì ton IDL compiler. • Enallaktikˆ, h CORBA protupopoie to Dynamic Invocation Interface (DII), èna API pou parèqei th dunatìthta dunamik  sÔnjesh ait sewn, qwr th bo jeia stubs. àtsi, enai dunat  h kl sh se antikemena qwr na apaitetai prohgoÔmenh gn¸sh th efarmog  gia ta antstoiqa interfaces. • Ete mèsw Interface proxy, ete mèsw DII, h kl sh ftˆnei sto ORB tou pelˆth kai metaddetai mèsw autoÔ sto ORB tou katanemhmènou antikeimènou. • Prin h kl sh ekteleste apì ton wrapper tou katanemhmènou antikeimènou, ja prèpei na kajoriste h politik  energopohsh kai ektèlesh , ìpw p.q. h epilog  n mato ektèlesh . Ta jèmata autˆ kajorzontai apì ton Object Adaptor tou antikeimènou.


214

PARARTHMA B. TO PROTUPO

Process

CORBA

Process Client

Object

Dynamic Skeleton Dynamic Invocation

Object Proxy

Interface Skeleton

Object Adaptor

ORB

ORB

Network

Sq ma B.1: H basik  dom  CORBA. • H ulopohsh enì katanemhmènou antikeimènou mpore na pˆrei diaforetikè morfè . Se antistoiqa me to RPC, o IDL compiler mpore na dhmiourg sei wrappers pou bohjoÔn ton programmatismì. Wstìso, to prìblhma enai arketˆ pio polÔploko apì ìti sthn perptwsh tou aploÔ RPC. • Enallaktikˆ, h athsh mpore na doje se k¸dika pou den èqei paraqje apì ton IDL compiler, qwr th qr sh stubs, katˆ analoga me to DII. To antstoiqo API onomˆzetai Dynamic Skeleton Interface (DSI). B.4.1

References

se katanemhmèna antikemena

CORBA

Sthn apl  perptwsh, mia efarmog  mpore na lˆbei èna object reference w tim  epistrof  apì kˆpoia kl sh. Wstìso, qr simh enai kai kˆpoia morf  anaforˆ se èna katanemhmèno antikemeno pou enai anexˆrthth apì kl sei . APì thn èkdosh CORBA 2.0 kai metˆ, parèqetai èna tètoio mhqanismì pou onomˆzetai Interoperable Object Reference (IOR). Ta IORs protupopoi jhkan prosektikˆ ¸ste na mporoÔn na qrhsimopoihjoÔn gia dÔo skopoÔ . Afenì , epistrèpoun th sunergasa diaforetik¸n ulopoi sewn, kaj¸ mporoÔn na kwdikopoi soun pollaploÔ trìpou prospèlash se èna katanemhmèno antikemeno. Epsh , mporoÔn na qrhsimopoihjoÔn kai gia thn ulopohsh mhqanism¸n persistence. ätan zhthje to antikemeno pou antistoiqe se kˆpoio IOR,


B.4. H ARQITEKTONIKH

CORBA

215

autì mpore na mhn enai akìmh energì. Enai dunatìn na upˆrqei epark  apojhkeumènh plhrofora sto IOR, ¸ste èna katˆllhlo Object Adapter na mpore na to energopoi sei (pq. diabˆzonta plhrofora apì kˆpoio database). Sa mhqanismì , ta IORs enai parìmoia me ta URLs, me thn ènnoia ìti kai ta dÔo antistoiqoÔn se logikˆ onìmata gia antikemena. Ta IORs enai pio isqurˆ diìti mporoÔn na prosdiorsoun pollaplˆ logikˆ onìmata se èna reference. To pleonèkthma twn URLs enai ìti enai pio eukolìqrhsta apì anjr¸pou . Gia to lìgo autì, to CORBA uposthrzei mia oikogèneia URLs katˆllhlwn gia ton entopismì antikeimènwn. Gia perissìtere leptomèreie parapèmpeste sthn tekmhrwsh th CORBA. B.4.2

Prwtìkolla epikoinwna

Gia na enai efikt  h anˆptuxh proðìntwn teqnologa CORBA apì diaforetikè phgè , èqoun protupopoihje prosektikˆ ta prwtìkolla epikoinwna metaxÔ twn ORBs. TO basikì pr¸tìkollo enai to General Interoperable Object Protocol (GIOP), to opoo perigrˆfei th morf  twn mhnumˆtwn pou antallˆssontai metaxÔ diaforetik¸n ORBs. H dom  twn mhnumˆtwn mpore na kwdikopoi sei dedomèna kai ait sei ekfrasmèna sto montèlo dedomènwn th CORBA. H epikoinwna metaxÔ ORBs mpore na gnei me polloÔ diaforetikoÔ trìpou . Gia kˆje edo epikoinwna ja prèpei na oriste èna antstoiqo prwtìkollo, pou na perigrˆfei epakrib¸ ton trìpo metˆdosh mhnumˆtwn GIOP. H megˆlh pleioyhfa twn peript¸sewn aforˆ epikoinwna TCP/IP pˆnw apì to Internet. To antstoiqo prwtìkollo onomˆzetai Internet Interoperable Object Protocol (IIOP).


216

PARARTHMA B. TO PROTUPO

CORBA


Bibliografa [1℄ A. D. Birrell kai R. J. Nelson. Implementing remote procedure calls. ACM Transactions on Computer Systems, 2(1):39 59, 1984. [2℄ F. Christian. Probabilistic clock synchronization. Distributed Computing, 3:146 158, 1989. [3℄ G. Coulouris, J. Dollimore, Kindberg T. kai A. W. Longman. Distributed Systems: Concepts and Design. Addison Wesley, 3X;h èkdosh, 2001. [4℄ P. Th. Eugster, P. A. Felber, R. Guerraoui kai A. Kermarrec. The many faces of Publish/Subscribe. ACM Computing Surveys, 35(2):114 131, IoÔnio 2003. [5℄ C. Fidge. Logical time in distributed computing systems. IEEE Computer, 24(8):28 33, q.q. [6℄ D. Gelernter. Generative communication in Linda. ACM Transactions on Programming Languages and Systems, 7(1):80 112, 1985. [7℄ R. Gusella kai S. Zatti. The accuracy of clock synchronization achieved by TEMPO in Berkeley UNIX 4.3BSD. IEEE Trans. on Software Engineering, 15:847 853, 1989. [8℄ C.A.R. Hoare. Communicating sequential processes. Communications of the ACM, 21(8):666 677, 1978. [9℄ L. Lamport. Time, clocks and the ordering of events in a distributed system. Communications of the ACM, 21(7):558 565, 1978. [10℄ Nancy A. Lynch. Distributed Algorithms. Morgan Kaufmann Intl., 1996. [11℄ F. Mattern. Virtual time and gloval states in distributed systems. Sto Proc. Workshop on Parallel and Distributed Algorithms, selde 215 226, 1989. [12℄ A. S. Tanenbaum kai M.van Steen. Distributed Systems: Principles and Paradigms. Prentice Hall, 2002.

217


Euret rio athsh, 8 10, 12, 86 accessibility, 7 activation, 125 127 activator, 126 Ada, 13, 63, 99, 100 address family, 22 address space, 44 adiablhtìthta, 6 afaresh, 118 agent autonomous, 122 collaborative, 122 distributed, 122 intelligent, 122 mobile, 122 aliases, 137 amoibao apokleismì , 12, 76 anadromikì tÔpo , 97, 109 anagn¸sth /grafèa , 59 antikemeno, 86, 97, 98, 106, 107, 114, 125 ef mero, 107 epmono, 107 persistent, 107 transient, 107 antikeimenostraf  , 16, 97, 105, 108, 113, 122, 127 apeikonismèno arqeo, 11 API, 21 apodhma diergasi¸n, 121 apokrisimìthta, 71 apomakrusmènh kl sh, 14, 85 89, 96, 100 103, 108 apomakrusmènh sunˆrthsh, 87, 89 92, 95, 102

Appletalk, 22 applets, 125 aprosdiìristh dieÔjunsh, 26 architecture two/three layer, 10 arqitektonik , 8 11, 110 dÔo kai tri¸n epipèdwn, 10 asfˆleia, 7, 114, 122 ATD, 46, 49 ATGD, 46 auditing, 5, 45 authentication, 7 authorization, 7 autonoma, 5 autonomy, 5 availability, 5, 7 AX.25, 22 axiopohsh, 5 back end, 10 base type, 97 Berkeley socket, 21 bind, 26, 31, 32, 73 Birrell, 14 block, 13 bootstrapping, 85 broadcast, 6, 31, 35, 36 broadcast address, 35 BSD, 21, 52 buffer, 22, 33, 59 bounded, 59, 68 byte stream, 21 C, 16, 38, 55, 86, 98 C++, 55, 86, 105, 107

218


EURETHRIO

call-by-copy, 99, 100, 109 call-by-name, 99 call-by-reference, 98 101 call-by-value, 98 100 ìrisma in, 100 in-out, 100 out, 100 fˆsh copy-in, 99, 100 copy-out, 100, 101 callback, 12, 129 character device, 11 class abstract class, 107 object class, 107 Classless Inter-Domain Routing, 27 client, 8, 101, 113, 126 COM, 16 composite type, 97 condition variable, 56, 58, 59 mèjodo notify, 58 notifyAll, 58 wait, 58 connection, 23 context switching, 54 Non-preemptive, 55 Preemptive, 55 controlling terminal, 52 cookie, 9, 79, 103, 116, 120 CORBA, 16, 96, 105, 108 113, 121, 126 BOA, 110, 126 Dynamic Invocation Interface, 110 Dynamic Skeleton Interface, 110 GIOP, 110 IIOP, 110 OA, 110 object adapter, 110, 126 Object Request Broker, blèpe ORB ORB, blèpe ORB POA, 110, 126 service Event and Notification, 111 Naming, 111 Persistent object, 111

219 Security, 111 Trading, 111 Transaction and concurrency control, 111 critical section, 45, 75, 76 CSP, 13 database object-oriented, 127 object-relational, 127 datagram, 22, 25, 36, 38, 39, 81, 83 diafˆneia, 4, 106, 126 diafˆneia jèsh , 106 diajesimìthta, 5, 7 dialeitourgikìthta, 108 diapsteush, 7, 17, 79, 114 diarro , 115 diaswl nwsh, 11, 21 dieÔjunsh ekpomp  , 35 upodiktÔou, 35, 36 diepaf , 28, 31, 38, 118, 120 antikeimènou, 107 uphresa , 89, 107 Diepaf  Programmatist  Efarmog¸n, 21 diergasa, 8, 12, 13, 44, 45, 51, 53, 73, 75, 76, 79, 85, 129 arijmì tautìthta , 46 damona , 52 gonèa , 46, 48, 74 76 init, 46 paid, 46, 48, 74, 76 plasio, 55 Dijkstra, 45, 57 directory services, 134, 140 discovery services, 141 Distributed Shared Memory, 129 DNS, 11, 30, blèpe Domain Name Service Domain Name Service arqitektonik , 139 q¸ro onomˆtwn, 138 Domain Name Service, 134, 138 zones, 139 DPE, 21, 24, 26, 55 DSM, 129


220

EURETHRIO

garbage collection, 44 gegonì , 128 esodo /èxodo , 42, 71, 72, 123 Gelernter, 129 eidopohsh, 128 generic code, 92 ekdìth , 128 generic code, 93, 94 ekjetik  opisjoq¸rhsh, 82 genikì k¸dika , 92 ekpomp , 6, 35 gl¸ssa orismoÔ diepaf¸n, 92 emplok , 13, 21 24, 33, 34, 42, 48, 56, grammik  anametˆdosh, 82 58, 59, 63, 68, 71, 75, 77, 128 enoikash, 115 heap, 46 epanametˆdosh, 81 Hoare, 13, 45, 58 epektasimìthta, 16, 120 host ID, 26, 29 epikoinwna, 6, 11, 76 81, 129 HTTP, 9, 30, 43, 79, 103, 125 asÔgqronh, 12, 14, 47, 59, 110, 128 IANA, 135, 139 asÔndeth, 6, 19, 79 ICMP, 81 mhqanismì IDL, 92, 107, 109 111 eidopohsh , 11 compiler, 92, 96, 109 koin  mn mh , 11 ierarqikì , 9 ro  , 11, 21 interface, 107, 109, 113, 117, 118 omadik , 6, 31, 35 object interface, 107, 108 prìtupo service interface, 89, 107, 108 athsh -apìkrish , 76, 77, 81, 86 Interface Definition Language, 92, 107 client-server, 86, 89 interfaces, 28 publish/subscribe, 128 129 internalize, 87 request/response, 76, 128 Internet RFCs, 78 sÔgqronh, 12, 13, 77 interoperability, 108 shmeou me shmeo, 6 IP, 21, 22, 26 sundet , 6, 19, 72, 79, 128 dieÔjunsh, 28, 36 38 ergasa, 44, 45, 53 IPng, 22 plasio, 54, 55 IPv4, 22, 23, 26, 32, 35, 81 esw/exwterkeush, 89, 92, 96 IPv6, 22, 23, 35, 81 eswterkeush, 87, 89, 91 IPX, 22 Ethernet, 28, 31, 35, 36 istorikì, 82 Eugster, 128 Iterator, 119, 120 event, 128 event object, 56 jÔra, 30 exception, 16, 33, 109 eurèw gnwst , 30 exousiodìthsh, 7 Jacobson , 82 exponential backoff, 82 Java , 45, 55, 58, 86, 96 98, 101, 106, 123 externalize, 87 applets , 125 exwterkeush, 87, 89 91 JMS, blèpe JMS FIFO, 59 Java RMI, 96, 107, 126 forhtìthta, 45 Javascript, 123 125 front end, 10 asfˆleia, 123 FTP, 9, 30, 44, 79 periorismì dia proèleush , 124

dunamikìthta, 5


EURETHRIO

same-origin policy, blèpe periorismì dia proèleush JavaSpaces, 129 Jini, 129 Jini, 142 JMS, 130 JNDI, 141

221

destruction, 106 migration, 106 Linda, 129 linear retransmit, 82 Linux, 13, 21 location transparency, 106 lock, 12, 56 59 file lock, 76 kìsto qr sh , 7 mèjodo kÔklo zw  , 98, 106 acquire, 56 kanˆli, 80 acquire excl, 59 pollapl  prìsbash , 28 acquire sh, 59 shmeou-pro -shmeo, 28, 35 release, 56 katanemhmèna antikemeno, 108 primitive, 56, 57 katanemhmèno antikemeno, 16, 86, 105, reader/writer, 59 106 108, 110, 111, 113, 115 reentrant, 56 58 117, 119, 121, 125 rlocks, 56 kataqwrht  , 54, 55 locks, 63 katoptrismì , 92 logging, 45 Kerberos, 17, 30 loopback, 28 klˆsh, 86, 97, 107, 108, 113 mˆska, 27 klˆsh dieÔjunsh , 26, 27, 37 mèjodo , 86 kl sh sust mato m numa, 14 select, 34, 36, 42 marshall, 87, 126 kledwma, 52 MBeans, 96 apokleistikì, 52 memory-mapped file, 11 koinì, 52 mesth antikeimènwn, blèpe object broklhronomikìthta, 113, 117, 118 ker klimˆkwsh, 5 message queues, 129 131 koin  mn mh, 11, 21, 129 metafersimìthta, 85 tm ma, 11 metakinoÔmeno antikemeno, 122 krsimo tm ma, 45 metakinoÔmeno k¸dika , 121 123 kruptografa, 7, 110 Microsoft, 141 l-value, 98 100 middle tier, 10 Lamport, 4 middleware, 89 LAN, 29 mobile code, 121 LDAP, 30 mobile object, 122 LDAP, 141 monitor, 45, 58, 59 leak, 115 monodianom , 36 lease, 115 MQSeries, 130 leitourgikìthta, 11 MSS, 33 life cycle, 98, 106 multicast, 6, 27, 35 39 activation/deactivation, 106 dieÔjunsh, 37 construction, 106 all-hosts group, 38 copy, 106 all-routers group, 38


222 link-local, 38 group, 37 39 omˆda, 37 router, 38 multihomed, 28, 39 mutual exclusion, 12

EURETHRIO

ourˆ, 11, 14 ourè mhnumˆtwn, blèpe message queues overhead, 102 104

paragwgì -katanalwt  , 59 parakoloÔjhsh, 5 peer-to-peer, 10, 38, 89 n ma, 12, 44, 45, 53, 55, 56, 58, 59, 68, pelˆth , 8, 9, 15, 16, 23, 24, 71, 73, 75 77, 86, 90, 96, 114, 115, 118, 71, 73, 76, 103 119, 126 E/E, 72, 103, 104 persistence, 107, 125, 127 ergasa , 72 persistent object stores, 127 mèjodo pickle, 87, 92 join, 56, 76 pid, 46, 48 qr sth, 68 ping, 81 sust mato , 68 pipe, 11, 21, 50 Nagle, 31, 32 plhrexoÔsio , 91 name services, 134 point-to-point, 6 namespace, 134 pointer, 87, 99 101 Nelson, 14 pollapl  dianom , 6, 35, 36 Network File System, 102 polling, 77 network ID, 26, 27, 29 polueppedo , 9, 10 NFS, 102 poluepexergasa, 12, 13, 43, 44, 73, 103 notification, 128 polunhmatikì , 45, 53 55, 71 NRMI, 101 poluplexa, 33, 34, 44, 73 object broker, 106 108, 110, 125 port, 30, 36, 73 Object Management Group, blèpe OMG well-known, 30 object references, 126 portability, 45, 85 Object Serialization, 96 POSIX, 55, 75 ObjectID, 126 prˆktora Occam, 13 autìnomo , 122 off-line, 6 eufu  , 122 OID, 98, 126 katanemhmèno , 122 dangling, 127 metakinoÔmeno , 122 logical, 126 sunergˆsimo , 122 physical, 126 prìodo , 6 oikogèneia dieujÔnsewn, 22 prìsjeta, 15 omìbajmo , 10, 89 prìtupo dedomènwn OMG, 105 ASCII, 20 IDL, blèpe IDL IEEE-754, 20 on-line, 6, 19, 128 ISO 8859, 20 ontokentrikì , 13, 16 Network byte order, 20 orzonta , 39 Unicode, 20 diaqeiristikì , 39 UTF-16, 20 ORB, 110 UTF-8, 20 ìrisma, 98 XDR, 20


EURETHRIO

XML, 20 preforking, 75, 76, 103 prethreading, 76 privileges, 7 process, 44, 53, 73, 74 context, 55 daemon, 52 id, 46 parent, 46 process migration, 121 producer-consumer, 59, 68 producer/buffer/consumer, 68 progress, 6 projesma, 80, 81, 83 pronìmia, 7, 45, 79 prospelasimìthta, 7 protocol, 6 pragmatics, 78 semantics, 78 stateless, 79 syntax, 78 proxy, 91, 92 proxy, 93 proxy function, 108 proxy object, 108 prwtìkollo, 6, 9, 16, 77 79, 81, 103 diktÔou, 21 eppedo pragmatistikì, 78 shmasiologikì, 78 suntaktikì, 78 metˆdosh dedomènwn, 21, 22 metagwg  pakètwn, 22 PThreads, 55 publisher, 128, 129 Python, 24, 43, 46, 49, 50, 52, 55, 56, 68 70, 87, 92, 98 Python, 93, 94

q¸ro onomˆtwn, 134 q¸ro pleiˆdwn, 129 qronodromologht  , 46 qronosfragda, 82 queue, 11, 14 r-value, 98

223 ranteboÔ, 63 recursive type, 97 reflection, 92, 108, 123 registers, 54 remote procedure, 87 Remote Procedure Call, 14, 86 rendezvous, 13 Request-Response-Acknowledge, 83 response time, 7 responsivenes, 71 retransmission, 81 Retransmission Time Out, 82 RFC 1519, 27 RMI, 106 108, 110, 126 data model, 106 distribution model, 106 object model, 106 Round Trip Time, 82, 102 RPC, 14, 15, 86, 91, 92, 96, 102, 105 108, 128 Sun RPC, 91, 102 s ma, 12 sÔgqrona mhnÔmata, 45 sÔndesh, 23 sÔnodo , 9, 12, 78, 79, 101, 102, 114 116, 118 katˆstash, 78, 102 safety, 6 sandboxing, 122, 125 scalability, 5 scheduling, 45 scope, 39, 99, 100 administrative, 39 continent-local, 39 global , 39 link-local, 39 node-local, 39 region-local, 39 site-local, 39 security, 7 semaphore, 12, 45, 56, 76 separation of concerns, 10 serialize, 87 serializer, 90 server, 8, 74, 101, 113, 118, 125


224 concurrent, 73, 74, 76 iterative, 73, 103 multiplexed, 73 service, 8 service request, 8 service-oriented architecture, 141 session, 9, 78, 117, 118 state, 78, 102 Session Factory, 114, 119 sfˆlma, 79, 81, 86, 109, 118, 120 anqneush, 79 81 mhqanismì anqneush l yh sfugmoÔ, 81 shared memory, 11 segment, 11 shmatoforèa , 12, 45, 56, 57 mèjodo acquire, 57 release, 57 signal, 12, 43, 47, 50, 55, 75 kl sh sigaction, 75 SIGABRT, 50 SIGALRM, 43, 50 SIGCHLD, 50, 51, 75 SIGCONT, 50 SIGKILL, 50 SIGPIPE, 50 SIGSTOP, 50 SIGTERM, 47, 50 signal handler, 12 signature, 89 skeleton object, 108 Smalltalk, 105 Smaragdakis, 101 SMP, 68 SMTP, 30 SNMP, 30 sockets, 33 socket, 11, 21 26, 31, 32, 34, 39, 42, 43, 46, 50, 59, 72, 76, 79, 80 akroat  , 22 24, 31, 32, 73, 75 eppedo, 31 IPPROTO IP, 31 IPPROTO TCP, 31 SOL SOCKET, 31

EURETHRIO

kl sh accept, 21, 24, 32, 33, 73 76, 80 bind, 21 close, 21, 24, 43, 74 connect, 21, 24, 80 gettimeout, 43 listen, 21, 73 recv, 21, 24, 25, 33, 42 recvfrom, 25, 36, 42 send, 21, 24, 33, 42 sendall, 42 sendto, 25, 42 settimeout, 43 shutdown, 43 socket, 21, 22 listening, 23 parˆmetro IP ADD MEMBERSHIP, 38 IP DROP MEMBERSHIP, 38 IP MULTICAST IF, 38, 39 IP MULTICAST LOOP, 38, 39 IP MULTICAST TTL, 38, 39 IP TOS, 31, 32 IPTOS LOWCOST, 32 IPTOS LOWDELAY, 32 IPTOS RELIABILITY, 32 IPTOS THROUGHPUT, 32 MSG DONTWAIT, 42 MSG PEEK, 42 MSG WAITALL, 42 SO BROADCAST, 31 SO RCVBUF, 31, 32 SO RCVLOWAT, 31, 35 SO RCVTIMEO, 43 SO REUSEADDR, 31, 32 SO SNDBUF, 31, 32 SO SNDLOWAT, 31, 35 SO SNDTIMEO, 43 TCP NODELAY, 31 33 pelˆth , 23 server socket, 23 sfˆlma ECONNABORTED, 80 ECONNREFUSED, 80 EHOSTUNREACH, 80 EMSGSIZE, 81


225

EURETHRIO

ETIMEOUT, 80, 81 stajerˆ prwtokìllou AF INET, 23 AF INET6, 23 AF UNIX, 23 SOCK DGRAM, 23 SOCK STREAM, 23 sunˆrthsh paramètrwn getsockopt, 31, 38 setsockopt, 31, 38 TCP, 23, 30, 35, 80 UDP, 25, 31, 35, 36 unix socket, 22, 23 uphrèth , 23 SSH, 30 SSL, 103 stack, 54 stateless, 102, 103, 115, 116 stoba, 54, 55 stream, 11 stubs, 15, 16, 90 92, 101, 107, 109, 118 subnet, 29 subnet, 37 subnet address, 35 subnet ID, 29 subscriber, 128, 129 sugqronismì , 12, 45, 51 53, 58 Sun, 141, 142 sunˆnthsh, 13 sundromht  , 128 suntijèmeno tÔpo , 97, 109 suskeu  qarakt rwn, 11

tÔpo bˆsh , 97 taqÔthta apìkrish , 7 task, 44, 53 context, 54 TCP, 21 24, 30, 102 TCP/IP, 20, 21, 35, 73, 102, 103, 110 commands GET, 9 receive, 13 send, 13 telnet, 30, 32, 44, 79 termatikì elègqou, 52 thread, 12, 44, 73, 76

I/O, 72 POSIX, 55 worker, 72 Tilevich, 101 timeout, 34, 42, 80, 81, 115 timesharing, 44 token ring, 28, 31 TPC/IP, 80, 81 traceroute, 81 transient, 127 transparency, 4, 106, 126 Transputer, 13 tuple, 129 tuple space, 129 tuple spaces, 129 UDP, 21 23, 30, 36, 73, 81, 102 unicast, 36 U NIX, 9, 21 23, 28, 30, 34, 35, 45, 46, 48 52, 55, 74 76 sunˆrthsh abort, 50 alarm, 50 execve, 46, 49 exit, 46, 47 fork, 46, 52, 74 getpid, 46 getppid, 46 kill, 47, 50 wait, 46, 48 waitpid, 46, 48 50, 56 unmarshall, 87 unserialize, 87 uphrèth , 8 10, 15, 16, 23, 24, 71 77, 86, 90, 96 sunˆrthsh handleClient, 73, 76 uphresa, 8 10, 16, 86, 111 èntash eisìdou/exìdou, 44 èntash upologismoÔ, 44 anakˆluyh , 141 CPU bound, 44 diapsteush kai exousiodìthsh , 16 eurethrou, 16 I/O bound, 44 katalìgou, 11, 140


226 onomˆtwn, 134 uphrese anakˆluyh , 141 uphrese katalìgou, 134, 140 uphrese onomˆtwn, 134 uphresiostraf  arqitektonik , 141 upodktuo, 29 upodoq , 11 upograf , 89 utilization, 5 W3 C, 20 WAN, 32 Web Services, 105 white pages, 141 whois, 15 WiFi, 28 wildcard, 26 Windows NT, 13, 21, 55 wrapper, 91, 108 wrapper, 94 WWW, 30 X Windows, 14 X.500, 141 X11, 30 X25, 22 yellow pages, 141 yeud¸numa, 137 yeudokanˆli brìqou, 26, 28 zombie, 48

EURETHRIO


kat_sys_2010