32
Model sudionika i programski jezik Erlang 1 Klemo Vladimir 17. veljaˇ ce 2011. 1 Djelo Model sudionika i programski jezik Erlang, ˇ ciji je autor Klemo Vladimir, ustupljeno je pod licencom Creative Commons Imenovanje-Nekomercijalno-Dijeli pod istim uvjetima 3.0 Hrvatska.

Model sudionika i programski jezik Erlang

  • Upload
    klemo

  • View
    334

  • Download
    0

Embed Size (px)

DESCRIPTION

Model sudionika (eng. Actor model) jest matematički model konkurentnog računanja koji se temelji na ``sudionicima'' kao univerzalnim primitivima konkurentnog računanja. Model sudionika jest jedan od formalnih modela za prikaz konkurentnosti zasnovan na razmjeni poruka. Na temelju primljene poruke, sudionik donosi lokalne odluke, stvara nove sudionike, šalje poruke i odlučuje kako će odgovoriti na sljedeću poruku. Model sudionika koristi se kako za teoretsko razumijevanje konkurentnosti, tako i kao osnova za razna praktična ostvarenja konkurentnih sustava poput programskog jezika i prividnog stroja Erlang.Erlang jest funkcijski programski jezik opće namjene razvijen u tvrtci Ericsson za potrebe izgradnje i izvođenja pouzdanih raspodijeljenih programa koji se besprekidno izvode u stvarnom vremenu. Konkurentnost izvođenja koja je ugrađena u jezik Erlang zasniva se na modelu sudionika. U jezik jest ugrađen skup jezičnih konstrukata za stvaranje procesa i komunikaciju među procesima. Komunikacija između Erlang procesa odvija se asinkronom razmjenom poruka. Procesi u jeziku Erlang razlikuju se od procesa ili dretvi operacijskih sustava po mnogo manjim zahtjevima na sredstva računala, što jezik Erlang čini pogodnim za igradnju aplikacija koje zahtijevaju vrlo veliki broj konkurentnih procesa.

Citation preview

Page 1: Model sudionika i programski jezik Erlang

Model sudionika i programski jezik Erlang1

Klemo Vladimir

17. veljace 2011.

1Djelo Model sudionika i programski jezik Erlang, ciji je autor Klemo Vladimir,ustupljeno je pod licencom Creative Commons Imenovanje-Nekomercijalno-Dijelipod istim uvjetima 3.0 Hrvatska.

Page 2: Model sudionika i programski jezik Erlang

Sadrzaj

1 Uvod 2

2 Konkurentno racunanje 32.1 Konkurentni procesi . . . . . . . . . . . . . . . . . . . . . . . 32.2 Modeli konkurentnog racunanja . . . . . . . . . . . . . . . . . 4

2.2.1 Petrijeve mreze . . . . . . . . . . . . . . . . . . . . . . 42.2.2 Procesni racun . . . . . . . . . . . . . . . . . . . . . . 5

3 Teorijska osnova modela sudionika 73.1 Definicija i temeljne znacajke . . . . . . . . . . . . . . . . . . 7

3.1.1 Modularnost . . . . . . . . . . . . . . . . . . . . . . . . 83.1.2 Lokalnost . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2 Model sudionika kao radni okvir . . . . . . . . . . . . . . . . . 93.3 Povijesni pregled . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.3.1 Turingov stroj . . . . . . . . . . . . . . . . . . . . . . . 103.3.2 λ-racun . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3.3 Petrijeve mreze . . . . . . . . . . . . . . . . . . . . . . 113.3.4 Programski jezik Simula . . . . . . . . . . . . . . . . . 113.3.5 Programski jezik Smalltalk-72 . . . . . . . . . . . . . . 12

3.4 Programska i sklopovska ostvarenja . . . . . . . . . . . . . . . 123.4.1 Programski jezici . . . . . . . . . . . . . . . . . . . . . 123.4.2 Paralelna racunala . . . . . . . . . . . . . . . . . . . . 12

4 Programski jezik Erlang 144.1 Procesni model . . . . . . . . . . . . . . . . . . . . . . . . . . 144.2 Slijedno programiranje . . . . . . . . . . . . . . . . . . . . . . 15

4.2.1 Strukture podataka . . . . . . . . . . . . . . . . . . . . 154.2.2 Varijable i podudaranje uzoraka . . . . . . . . . . . . . 164.2.3 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2.4 Tijek izvodenja . . . . . . . . . . . . . . . . . . . . . . 184.2.5 Iznimke . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1

Page 3: Model sudionika i programski jezik Erlang

SADRZAJ

4.2.6 Moduli i pokretanje programa . . . . . . . . . . . . . . 194.3 Paralelno i raspodijeljeno programiranje . . . . . . . . . . . . 20

4.3.1 Upravljanje procesima . . . . . . . . . . . . . . . . . . 204.3.2 Arhitekturalni stil klijent/posluzitelj . . . . . . . . . . 214.3.3 Grozdovi racunala . . . . . . . . . . . . . . . . . . . . 224.3.4 Web uticnice . . . . . . . . . . . . . . . . . . . . . . . 234.3.5 Ucinkovito izvodenje . . . . . . . . . . . . . . . . . . . 23

4.4 Pouzdani rad . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.4.1 Pogreske u konkurentnim procesima . . . . . . . . . . . 244.4.2 Arhitekturalni stil Nadglednik . . . . . . . . . . . . . . 25

5 Zakljucak 27

Literatura 27

2

Page 4: Model sudionika i programski jezik Erlang

Sazetak

Model sudionika (eng. Actor model) jest matematicki model konkurentnogracunanja koji se temelji na “sudionicima” kao univerzalnim primitivimakonkurentnog racunanja. Model sudionika jest jedan od formalnih modelaza prikaz konkurentnosti zasnovan na razmjeni poruka. Na temelju primljeneporuke, sudionik donosi lokalne odluke, stvara nove sudionike, salje poruke iodlucuje kako ce odgovoriti na sljedecu poruku. Model sudionika koristi sekako za teoretsko razumijevanje konkurentnosti, tako i kao osnova za raznaprakticna ostvarenja konkurentnih sustava poput programskog jezika i priv-idnog stroja Erlang.

Erlang jest funkcijski programski jezik opce namjene razvijen u tvrtci Er-icsson za potrebe izgradnje i izvodenja pouzdanih raspodijeljenih programakoji se besprekidno izvode u stvarnom vremenu. Konkurentnost izvodenjakoja je ugradena u jezik Erlang zasniva se na modelu sudionika. U jezikjest ugraden skup jezicnih konstrukata za stvaranje procesa i komunikacijumedu procesima. Komunikacija izmedu Erlang procesa odvija se asinkronomrazmjenom poruka. Procesi u jeziku Erlang razlikuju se od procesa ili dretvioperacijskih sustava po mnogo manjim zahtjevima na sredstva racunala, stojezik Erlang cini pogodnim za igradnju aplikacija koje zahtijevaju vrlo velikibroj konkurentnih procesa.

Cilj seminara jest opisati model sudionika u kontekstu formalnih matematickihmodela za prikaz konkurentnosti i pokazati na primjeru programskog jezikaErlang prakticno ostvarenje principa konkurentnosti definiranih modelom su-dionika.

Page 5: Model sudionika i programski jezik Erlang

Poglavlje 1

Uvod

Proucavanje i ostvarivanje sustava koji se sastoje od vise procesa koji semogu izvrsavati u isto vrijeme jedan je od najstarijih podrucja racunarskeznanosti. Razvijeno je mnogo metodologija za oblikovanje i ostvarivanjekonkurentnih sustava koje formaliziraju nacin na koji se konkurentni pro-cesi oblikuju, ostvaruju, ispituju i koriste. U ovom radu opisan je modelsudionika kao formalni matematicki model za oblikovanje konkurentnih sus-tava. Model sudionika pretpostavlja postojanje vise konkurentnih sudionikaracunanja koji komuniciraju iskljucivo slanjem poruka. Model sudionika jepovijesno bitan kao prvi formalizam koji se temelji na asinkronoj razmjeniinformacija i tijekom godina istrazivanja postao je de facto radni okvir zaproucavanje konkurentnih sustava temeljenih na razmjeni poruka medu su-dionicima racunanja. Osim teoretskih modela, postoje i razna prakticnaostvarenja koja se temelje na modelu sudionika. Jedan od najpoznatijihprogramskih jezika i okolina za izvodenje temeljenih na razmjenama porukamedu strogo odvojenim procesima jest sustav Erlang. Erlang jest funkci-jski programski jezik opce namjene i pripadajuci prividni stroj razvijen utvrtci Ericsson. Osnovna namjena mu je izgradnja i izvodenje pouzdanihraspodijeljenih programa. Erlang je optimiran za stvaranje procesa i razm-jenu poruka medu procesima zbog cega predstavlja idealan radni okvir zaostvarenje sustava prema nacelima modela sudionika.

Drugo poglavlje uvodi pojam konkurentnih procesa, opisuje razliku izmedusekvencijalnih i paralelnih aktivnosti i daje kratak pregled pripadajucih mod-ela izracunavanja. Trece poglavlje detaljno opisuje teorijsku osnovu modelasudionika, daje povijesni pregled razvoja formalizma te usporeduje modelsudionika s drugim modelima konkurentnog racunanja. Cetvrto poglavljeopisuje programski jezik Erlang i pripadajuci prividni stroj u kontekstu ost-varivanja konkurentnih sustava. Peto poglavlje zakljucuje seminarski rad.

2

Page 6: Model sudionika i programski jezik Erlang

Poglavlje 2

Konkurentno racunanje

U ovom poglavlju opisana je razlika izmedu sekvencijalnih i konkurent-nih procesa i pripadajucih modela izracunavanja. Takoder, dan je osnovnipregled formalnih modela konkurentnog racunanja.

2.1 Konkurentni procesi

Proces racunanja najcesce dozivljavamo kao sekvencijalni proces, tj. sli-jed aktivnosti koje transformiraju pocetne vrijednosti nizom instrukcija dorezultata. Turingov stroj, najopcenitiji poznati model racunanja, zasnovanje na slijednom (“mehanickom”) postupku racunanja prelaskom iz jednogpoznatog stanja u drugo poznato stanje. Medutim, Turingovim strojevima, isvim ostalim modelima racunanja koji se mogu svesti na Turingov stroj, nijemoguce modelirati konkurentne sustave.

Konkurentnost oznacava mogucnost istodobnog odvijanja aktivnosti. Defini-cija konkurentosti oznacava samo da se konkurentni procesi potencijalnoizvode u isto vrijeme. Za istodobno racunanje cesto se koristi naziv par-alelno racunanje.

Konkurentni procesi mogu komunicirati za vrijeme izvodenja. Osnovninacini komunikacije medu procesima su:

• Zajednicki podaci (engl. shared data) - Konkurentni procesi komu-niciraju preko podataka dostupnih za citanje i pisanje svim sudion-icima racunanja. U sustavima koji koriste zajednicke podatke obicnose koristi neki oblik medusobnog iskljucivanja pristupa zajednickim po-dacima.

3

Page 7: Model sudionika i programski jezik Erlang

2.2. MODELI KONKURENTNOG RACUNANJA

• Razmjena poruka (engl. message passing) - Razmjenom poruka obavljase komunikacija konkurentnih procesa. Razmjena poruka moze bitisinkrona (proces posiljatelj privremeno zaustavlja izvodenje dok neprimi odgovor) ili asinkrona (proces posiljatelj nastavlja sa izvodenjemnakon slanja poruke)

Opce prihvaceni nacin ostvarenja konkurentnih sustava primjenom zajednickihpodataka jest primjena dretvenog modela (engl. threading model). Dretvajest niz instrukcija povezanih izvodenjem [9]. Moderni operacijski sustaviimaju ugradene mehanizme potpore visedretvenom (engl. engl. multithreaded)radu. Medutim, pokazalo se iznimno tesko oblikovati, razvijati i ispitivativisedretvene sustave [12]. Visedretveni programi moraju osigurati ekskluzi-van pristup dijeljenim podacima nekim oblikom zakljucavanja podataka. Do-datno, dretve koje imaju pristup zajednickim podacima ne smiju zauvijekostati u kriticnom odsjecku (npr. zbog greske u programu). Osim problemasa pristupom zajednickim podacima, opasnost je i pojava potpunog zastojakoristenjem nepravilnog protokola zakljucavanja. Problem sa visedretvenimpristupom postoji i sa stajalista ucinkovitosti izvodenja jer svaka dretva za-uzima dio stoga i postoji znacajan dodatni posao stvaranja i postavljanjadretvi. Prednosti koristenja dretvi su dugogodisnje koristenje i veliki brojpostojecih ostvarenja.

Model komunikacije zasnovan na razmjenama poruka ne koristi nikakvezajednicke podatke. Jedini nacin dijeljenja podataka jest slanjem nepromjen-jivih (engl. immutable) poruka. Komuniciranjem iskljucivo slanjem porukanije potrebno zakljucavati podatke jer ne postoje dijeljeni podaci. Na tajnacin izbjegavamo probleme koji proizlaze iz dijeljena podataka i omogucavamolakse paraleliziranje programa.

2.2 Modeli konkurentnog racunanja

Formalni modeli konkurentnog racunanja proucavaju se od samih zacetakateoretske racunarske znanosti i tijekom godina razvijen je velik broj for-malizama za modeliranje konkurentosti. U ovom odjeljku predstavljeni suukratko najvazniji modeli konkurentnog racunanja.

2.2.1 Petrijeve mreze

Petrijeva mreza jest apstraktni model toka informacija u nekom sustavukojeg je formalizirao Carl Adam Petri 1962. godine [13]. Petrijeve mreze

4

Page 8: Model sudionika i programski jezik Erlang

2.2. MODELI KONKURENTNOG RACUNANJA

definiraju se usmjerenim bipartitnim grafovima u kojima cvorovi predstavl-jaju mjesta i prijelaze. Primjer jednostavna Petrijeva mreze prikazan je naslici 2.1.

Slika 2.1: Primjer jdnostavne Petrijeve mreze

Graf Petrijeve mreze prikazuje staticna svojstva sustava kojeg modelira.Krugovi predstavljaju mjesta, dok linije predstavljaju prijelaze. Osim statickihsvojstava, Petrijeva mreza ukljucuje i dinamicke karakteristike odredene bro-jem i polozajem znacki (engl. token). Znacke se prikazuju crnim tockamaunutar krugova. Prijelaz unutar mreze jest omogucen kada svi ulazi imajuznacke u odgovarajucim mjestima. Aktivaciju prijaza u Petrijevoj mrezinazivamo paljenjem. Petrijeva mreza na slici modelira semafor gdje mjestaodgovaraju bojama semafora (zelena, zuta i crvena). Zelena boja je aktivnajer znacka zauzima zeleno mjesto. Prijelaz u zutu boju se moguc aktiviran-jem prijelaza T2 nakon kojega se znacka premjesta u mjesto koje odgovarazutoj boji. Petrijeve mreze se koriste za modeliranje sinronizacije, konkurent-nosti i nedeterminizma, kao i za formalnu verifikaciju sustava cije ponasanjeobuhvaca navedene obrasce.

2.2.2 Procesni racun

Procesni racun (engl. process calculus) proucava ponasanje istodobnih sus-tava na algebarski nacin [4]. Procesni racun promatra procese kao osnovneelemente procesne algebre. Koristeci aksiome procesne algebre, moguce jeprovoditi izracune nad procesima. Konkurentnost u procesnom racunu je

5

Page 9: Model sudionika i programski jezik Erlang

2.2. MODELI KONKURENTNOG RACUNANJA

duboko ukorijenjena u operatoru paralelne kompozicije procesa ‖. Osim par-alelne kompozicije postoji i operator slijedne kompozicije ; i operator izbora+. Osnovni zakoni procesne algebre su:

• (x; y); z = x; (y; z) – asocijativnost slijedne kompozicije

• x ‖ y = y ‖ x – komutativnost paralelne kompozicije

• (x ‖ y) ‖ z = x ‖ (y ‖ z) – asocijativnost paralelne kompozicije

• x+ x = x – idempotentnost operatora izbora

• x+ y = y + x – komutativnost operatora izbora

• x+ (y + z) = (x+ y) + z – asocijativnost operatora izbora

• (x+ y); z = x; z + y; z – distributivnost izbora na slijednu kompoziciju

Osim algebarskih zakona koji omogucavaju modeliranje, analiziranje iformalnu provjeru istovjetnosti procesa, procesni racun obuhvaca i opis in-terakcija, vrste komunikacije i sinkronizacije medu procesima. Povijesno iprakticno najvazniji primjeri procesnog racuna su CCS, CSP, ACP, π-racuni ambijentalni racun[17].

CSP

Primjer jednostavnog brojaca ostvarenog u procesnom racunu CSP mozese modelirati jednim procesom za svaki prirodni broj n ∈ N[14]:

COUNT0 = plus→ COUNT1 (2.1)

COUNTn = (plus→ COUNTn+1 (2.2)

| minus→ COUNTn−1)(n > 0) (2.3)

COUNTn definira procese koji reagiraju na dogadaje plus i minus svedok broj minusa nije za n + 1 veci od pluseva. Vazna razlika modela ost-varenog procesnim racunom u odnosu na konacne strojeve jest postojenjebeskonacnog broja stanja u kojima se procesi COUNTn mogu nalaziti.

6

Page 10: Model sudionika i programski jezik Erlang

Poglavlje 3

Teorijska osnova modelasudionika

U ovom poglavlju je opisana teorijska osnova modela sudionika, povijesnipregled te usporedba s drugim modelima konkurentnog racunanja.

3.1 Definicija i temeljne znacajke

Model sudionika jest formalna matematicka teorija racunanja koja se temeljina “sudionicima” kao univerzalnim primitivima konkurentnog racunanja [5].Model sudionika koristi se za teoretsko razumijevanje konkurentnosti te kaoosnova za razna prakticna ostvarenja konkurentnih sustava. Za razliku oddrugih modela racunanja koji su zasnovani na matematici, logici, teorijiskupova i sl., posebnost modela sudionika jest cinjenica da je inspiriran zakon-ima fizike (posebno neodredenosti u kvantnim sustavima). Dodatno, pojavamodela sudionika 1973. godine jest bila potaknuta i programskim jezicimaLisp, Simula 67 i Smalltalk-72 te paketnim mrezama.

U modelu sudionika, sudionik jest entitet sa svojstvom racunanja koji uovisnosti o poruci koju primi moze konkurentno:

• poslati konacan broj poruka drugim sudionicima

• stvoriti konacan broj drugih sudionika

• definirati ponasanje za sljedecu poruku koju primi

Model sudionika inheretno je konkurentan. Sudionici postoje konkurentnou sustavu i medusobno komuniciraju. Ne postoji zadani redoslijed nave-

7

Page 11: Model sudionika i programski jezik Erlang

3.1. DEFINICIJA I TEMELJNE ZNACAJKE

denih radnji niti je unaprijed odreden redoslijed dolaska dvije poruke koje suposlane konkurentno.

Vazno je naglasiti da ogranicavanje broja poruka i broja sudionika koji sestvaraju kao odgovor na jednu poruku ne ogranicava sustav u mogucnostiizracunavanja. Nadalje, sama mogucnost definiranja ponasanja sudionika zasljedecu poruku koju ce primiti intuitivno objasnjava ekvivalentnost modelaTuringovom stroju jer sudionik moze poslati poruku i sam sebi1.

Sudionici se oznacavaju adresama. Nije definiran nacin na koji se ostvarujuadrese sudionika. Prirodni nacin koristenja adresa je ukljucivanje adresa uporuku koju salju sudionici. Klijent/posluzitelj (engl. client/server), jedanod uobicajenih arhitekturalnih stilova, cesto se spominje u kontekstu mod-ela sudionika. Klijent salje zahtjev posluzitelju; posluzitelj nakon obradezahtjeva salje odgovor klijentu. Opisani arhitekturalni stil se definira su-dionicima na nacin da prvi sudionik (klijent) salje poruku drugom sudioniku(posluzitelju). Poslana poruka sadrzi adresu posiljatelja. Navedeni obrazaccesto se naziva obrazac potrosac (engl. customer).

Razdvajanje posiljatelja od poruke koja je poslana jest temeljni doprinosmodela sudionika jer je na taj nacin omogucena asinkrona komunikacija i up-ravljanje tijeka izvodenja programa u obliku slanja poruka [8]. Karakteristikasudionika jest lokalno izracunavanje. U modelu sudionika ne postoji globalnostanje. Jedini nacin komunikacije medu sudionicima jest slanje poruka.

S obzirom na navedena ogranicenja, metodologija programiranja sustavazasnovanih na modelu sudionika ukljucuje (1) definiranje sudionika koji cebiti dio sustava, (2) definiranje poruka koje ce primati sudionici i (3) defini-ranje ponasanja za svakog sudionika kao odgovor na poruku koju primi. Um-jesto da strukture podataka i upravljanje tijekom izvodenja budu ograniceniizborom programskog jezika koji se koristi, oni moraju prirodno nastati izdefinicija sudionika i poruka koje oni razmjenjuju.

3.1.1 Modularnost

Modularnost modela sudionika je rezultat asinkrone komunikacije jer jeporuka poslana od posiljatelja odgovornost primatelja. Nedostatak sinkro-nizacije je bio najkontroverzniji doprinos modela sudionika jer je prije pojave

1Poslije ce biti pokazano da model sudionika moze “‘izracunati”’ i vise od Turingovogstroja

8

Page 12: Model sudionika i programski jezik Erlang

3.2. MODEL SUDIONIKA KAO RADNI OKVIR

sudionika poslana poruka bila usko vezana sa posiljateljem. Npr. sinkronoslanje poruka zaustavlja posiljatelja dok primatelj ne primi poruku. Porukekoje razmjenjuju sudionici su generalizacija poruka u paketnim mrezama tj.poruke ne moraju biti dostavljene redoslijedom kojim su poslane.

3.1.2 Lokalnost

Nedostatak globalnog stanja u modelu sudionika ima za posljedicu da, zavrijeme obrade poruke, sudionik moze poslati poruku samo onim sudionicimaciju je adresu poznavao na jedan od sljedecih nacina:

• primio je adresu putem poruke

• imao je adresu prije nego je primio poruku

• stvorio je adresu za vrijeme obrade

Stvaranje adrese za vrijeme obrade moze biti prijetnja sigurnosti sustavatemeljenih na modelu sudionika. Medutim, cesto je slucaj da su adrese su-dionika dovoljno velike da je prakticno nemoguce pogoditi stvarnu adresu.

3.2 Model sudionika kao radni okvir

Model sudionika se cesto koristi za modeliranje, oblikovanje i razumijevanjeraznih sustava iz stvarnog zivota. Na taj nacin model sudionika postajeradni okvir za promisljanje o sustavima koji pokazuju svojstva inherentnekonkurentnosti:

Sustav elektronicke poste se moze promatrati kao sustav zasnovan nasudionicima gdje su korisnicki racuni na posluziteljima modelirani sudion-icima, a e-mail adrese predstavljaju adrese sudionika. Slanje poruka meduposluziteljima odgovara slanju poruka medu sudionicima.

Mreza ravnopravnih sudionika (engl. Peer-to-Peer Network) semodelira kao raspodijeljeni sustav sudionika u kojem sudionici pronalazedruge sudionike, razmjenjuju informacije o mrezi, dijele podatke i pokusavajurasteretiti pojedinacne sudionike sa ciljem pruzanja svojstva razmjernog rastana razini cijelog sustava.

Web usluge se mogu predstaviti sudionicima cije su adrese predstavljeneURL adresom.

9

Page 13: Model sudionika i programski jezik Erlang

3.3. POVIJESNI PREGLED

3.3 Povijesni pregled

U svim prijasnjim modelima izracunavanja postoji globalno stanje i izracunse odvija kao niz koraka od jednog globalnog stanja ka drugom globalnomstanju. Prije pojave modela sudionika, konkurentnost se definirala strojnimterminima na vrlo niskoj razini kao sto su meduspremnici, repovi, kanaliitd.. Buduci da je model sudionika zasnovan na razmjeni poruka, bilo kakvuprogramsku strukturu mogu ostvariti sami sudionici. Npr. nepotrebno je umodel sudionika ukljuciti rep (engl. queue) jer se rep kao takav moze ostvaritikao sudionik koji prima dvije poruke: stavi-u-rep i uzmi-iz-repa.

3.3.1 Turingov stroj

Racunanje Turingovim strojem moze se promatrati kao proces koji seodvija na jednom mjestu prelazeci iz jednog poznatog stanja u drugo poz-nato stanje. Turingov stroj na temelju procitanog znaka trake odredujesljedece stanje, zapisuje novi znak na traku i pomice oznaku na traci lijevoili desno. Za razliku od Turingovog stroja, u modelu sudionika racunanje semoze prikazati kao raspodijeljeno u prostoru. Sudionici asinkrono razmjen-juju poruke i cijeli sustav nije u poznatom stanju.

Sustavi zasnovani na sudionicima mogu izracunati zadatke koje je nemogucerijesiti Turingovim strojevima bilo kakve slozenosti. Primjer takvog zadatkejest ispisivanje neogranicenog (engl. unbounded) prirodnog broja. Nede-terministicki Turingov stroj koji uvijek staje moze ispisati samo ograniceniprirodni broj na traci. Neodlucivi nederministicki Turingov stroj moze izracunatitakav broj, ali u tom slucaju ne znamo da li taj stroj ikada prestaje s radom.S druge strane, moguce je oblikovati sustave zasnovane na modelu sudionikakoju uvijek staju i ispisu prirodni broj neogranicene velicine:

• postoji samo jedan sudionik u sustavu sa pocetnim brojacem jednakim0

• sudionik salje konkurentno poruke kraj i dalje

• kada sudionik primi poruku dalje povecava brojac za jedan te salje sebidalje poruku

• primitak poruke kraj zaustavlja rad

Nakon zaustavljanje opisani sudionik u svom lokalnom brojacu sadrzavaneograniceni prirodni broj. Time je pokazano da je modelom sudionika

10

Page 14: Model sudionika i programski jezik Erlang

3.3. POVIJESNI PREGLED

moguce prihvatiti siri skup jezika od onih koje je moguce prihvatiti Turingovimstrojevima ili drugim modelima racunanja koji se svode na Turingov stroj.

3.3.2 λ-racun

λ-racun se moze promatrati kao prvi programski jezik zasnovan na razmjeniporuka. Npr. λ-izraz koji ostvaruje podatkovnu strukturu stabla moze bitiizrazen na sljedeci nacin:

1 lambda(lijevoPodStablo, desnoPodStablo)

2 lambda(poruka)

3 ako(poruka = "lijevo") lijevoPodStablo

4 inace ako (poruka = "desno") desnoPodStablo

λ-izraz vraca lijevo podstablo ili desno podstablo ovisno o parametruporuka. Semantika λ-racuna je definirana supstitucijom varijabli; vrijednostiparametara se supstituiraju u tijelu pozvanog λ-izraza. Medutim, model sup-stitucije nije pogodan za modele konkurentnosti jer ne omogucava dijeljenjepromjenjivih sredstava. Interpreter za programski jezik Lisp je na temeljimaλ-racuna nadgradio model supstitucije sa potporom dijeljenja zajednickihsredstava, ali i dalje nije omogucio konkurentnost2.

3.3.3 Petrijeve mreze

Prije nastanka modela sudionika, Petrijeve mreze su cesto koristene zamodeliranje nederministickih izracunavanja. Najveci nedostatak Petrijevihmreza jest nemogucnost modeliranja toka podataka sto otezava mogucnostkomponiranja vise mreza. Dodatni problem jest upitna fizicka osnova nakojoj se temelji nedjeljivi prijenos znacki u Petrijevim mrezama.

3.3.4 Programski jezik Simula

Glavna znacajka programskog jezika Simula-1 je simuliranje nedermin-isticih diskretnih dogadaja koristeci globalni sat [10]. Sustavi u programskomjeziku Simula modeliraju se konacnim brojem postaja (engl. station). Svakojpostaji pridruzen je rep korisnika (engl. customer). Simulacija se odvijalau postajama citanjem iz repa korisnika, obradom korisnika i premjestanjemkorisnika u rep neke druge postaje. Postaje su mogle odbacivati korisnikei stvarati nove korisnike. Simula-67 je dodatno prosirila modularnost sus-tava organiziranjem objekata u klase koje su mogle imati svoje podklase

2Daljnja promisljanja semantike λ-racuna dovela su do nastanka posebnog stila sekven-cijalnog programiranja formaliziranog konceptom monada

11

Page 15: Model sudionika i programski jezik Erlang

3.4. PROGRAMSKA I SKLOPOVSKA OSTVARENJA

[11]. Iako je Simula podrzavala nederminizam, nije podrzavala konkurent-nost. Znacajka programskog jezika Simula jest upravljanje tijekom izvodenjaprograma koristeci korutine (engl. coroutine).

Korutine su podrutine koje omogucavaju zaustavljanje i ponovno nastavl-janje izvodenja korutine [6]. Podrutine mogu vratiti vrijednost samo jednomdok korutine mogu vratiti (engl. yield) vrijednost vise puta. Korutine sukorisne za ostvarivanje programskih obrazaca kao sto su generatori, iteratorii kooperativna visezadacnost.

3.3.5 Programski jezik Smalltalk-72

Smalltalk je vrlo utjecajan dinamicko tipizirani objektno-orijentirani pro-gramski jezik. Razmjena poruka u jeziku Smalltalk postoji, ali je vrlo slozenai vezana za ostvarenje cime postaje neprikladna za matematicki model konkurentnogizracunavanja.

3.4 Programska i sklopovska ostvarenja

Razvijeno je mnogo programskih jezika i okolina za razvoj koje podrzavajumodel sudionika. Neki od vaznijih programskih i sklopovskih rjesenja nave-deni su u ovom odjeljku.

3.4.1 Programski jezici

Henry Lieberman, Dan Theriault, i dr. razvili su programske jezike Act1,Act2 i Act3 zasnovane na modelu sudionika. Namijenjeni dokazu koncepta,navedeni jezici su bili neucinkoviti i neprikladni za izgradnju programskihsustava. Ken Kahn je razvio programski jezik Ani, dok je Bill Kornfeld razvioEther programski jezik. Programski jezik Cantor (William Athas i NannetteBoden, 1988) je bio razvijen za znanstvene proracune. Pokusni programskijezik AmbientTalk namijenjen je razvoju mobilnih ad hoc mreza te je temeljenna programskom jeziku E, takoder zasnovanom na modelu sudionika. Mozdanajkoristeniji jezici zasnovani na modelu sudionika su Scala i Erlang.

3.4.2 Paralelna racunala

Paralelno racunalo Cosmic Cube razvijeno na sveucilistu Caltech omogucavaloje, sa stalajista arhitekture racunala, izvodenje sustava zasnovanih na mod-elu sudionika jer je za komunikaciju konkurentnih procesa koristena razmjena

12

Page 16: Model sudionika i programski jezik Erlang

3.4. PROGRAMSKA I SKLOPOVSKA OSTVARENJA

poruka [15]. J-Machine je paralelno racunalo razvijeno na sveucilistu MITpogodno za konkurentne sudionike jer je, kao i Cosmic Cube podrzavalo as-nikronu komunikaciju razmjenom poruka [7].

13

Page 17: Model sudionika i programski jezik Erlang

Poglavlje 4

Programski jezik Erlang

Erlang jest dinamicki tipiziran, striktni funkcijski programski jezik opcenamjene zasnovan na razmjenama poruka [16]. Osim samog programskogjezika, naziv Erlang ukljucuje i okolinu za izvodenje programa koja ukljucujeErlang prividni stroj. Erlang je oblikovan za razvoj brzih raspodijeljenihpouzdanih sustava. Erlang procesni model ostvaren je po uzoru na modelsudionika.

Prvu inacicu programskog jezika Erlang ostvario je Joe Armstrong 1986.godine u programskom jeziku Prolog. U ranom razdoblju razvoja Erlang jebio vlasnicki programski jezik tvrtke Ericsson namijenjen razvoju telefonskihprimjenskih sustava, ali je 1998. godine objavljen njegov programski kodi Erlang se pridruzio obitelji slobodnih i otvorenih programskih jezika opcenamjene. Sam naziv “Erlang” jest referenca na Danskog matematicara AgnerKrarup Erlanga ili skracenica od “Ericsson language”.

4.1 Procesni model

Kao jezik zasnovan na razmjenama poruka, Erlang podrzava konkurentnoizvodenje u obliku paralelnih procesa koji komuniciraju razmjenom poruka.U Erlangu ne postoji koncept dijeljenih sredstava; sva interakcija medu pro-cesima odvija se slanjem i primanjem poruka. Osnovne znacajke programskojjezika Erlang su [2]:

• sve je proces1

• procesi su strogo izolirani

1procesi predstavljaju osnovne gradivne elemente pri oblikovanju programa; naravno,tvrdnja ne vrijedi za Erlang strukture podataka

14

Page 18: Model sudionika i programski jezik Erlang

4.2. SLIJEDNO PROGRAMIRANJE

• stvaranje i brisanje procesa je vrlo ucinkovito

• procesi komuniciraju samo razmjenom poruka

• poruku je moguce poslati samo procesu cije ime je poznato

• procesi ne dijele sredstva

• obrada pogresaka nije lokalna

• procesi rade zadane zadatke ili zavrsavaju sa pogreskom

Pouzdan rad sustava je izravna motivacija za ostvarenje modela sudionikau obliku strogo izoliranih procesa. Apstrakcija izvodenja procesima pred-stavlja apstraktnu granicu koja ne dozvoljava propagaciju pogresaka u sus-tavu. Izolacijsko ogranicenje prirodno dovodi do komunikacije razmjenomporuka jer izolirani procesi po definiciji ne dijele sredstva.

Najjednostavniji pouzdani sustavi (sustavi otporni na pogreske) zahtije-vaju barem dva fizicki odvojena racunala [2]; ako jedno racunalo prestanesa radom, drugo racunalo ce preuzeti zadatke prvog racunala tako da sus-tav nastavi sa normalnim radom. U ovakvom sustavu obrada pogresakane smije biti lokalna − pogreska u prvom racunalu mora biti obradena udrugom racunalu. U Erlangu se pouzdani sustavi oblikuju posebnim arhitek-turalnim stilovima koristeci posebne (udaljene) procese cija je jedina zadacanadgledanje procesa koji obavljaju aplikacijske zadatke.

4.2 Slijedno programiranje

4.2.1 Strukture podataka

Erlang podrzava osam jednostavnih tipova podataka:

• Cijeli brojevi − npr. 45, -341

• Brojevi s pomicnim zarezom − npr. 1.2e56

• Atomi−Atom predstavlja nenumericku konstantu slicnu tipu podatakaenum u programskom jeziku C. Atomi u Erlangu se pisu nizom znakovas pocetnim malim slovom. Npr. zastavica, tip.

• Reference−Globalno jedinstvene vrijednosti stvorene evaluacijom funkcijemake ref().

15

Page 19: Model sudionika i programski jezik Erlang

4.2. SLIJEDNO PROGRAMIRANJE

• Binarni podaci − Nizovi bajtova za ucinkovito spremanje podataka.

• Procesni identifikatori (PID) − Reference procesa stvorene evaluacijomfunkcije za stvaranje procesa spawn.

• Pristupne tocke − Pristupne tocke (engl. Port) za komunikaciju savanjskim sustavima. Nastaju pozivanjem funkcije open port().

• Funs − Zatvorenja funkcija stvorena evaluacijom izraza oblika fun(...)-¿ ... end.

Dodatno, postoje dva slozena tipa podataka:

• N-torke (engl. Tuple) − N-torke opisuju slozene rekurzivne strukturefiksne duljine. N-torke se stvaraju izrazom oblika {P1, ..., Pn}, gdje suP1, ..., Pn tipovi podataka proizvoljne slozenosti. Pristup N-torkamase odvija u konstantnom vremenu.

• Liste − Liste opisuju slozene rekurzivne strukture promjenjive duljine.Liste se definiraju ekvivalentnim izrazima

[H|T] = [P1, P2, ..., Pn] = [P1|[P2|... | [Pn|[]]]],

gdje varijabla H oznacava glavu liste, varijabla T ostatak (rep) liste, a[] predstavlja praznu listu.

Nizovi znakova (engl. strings) su predstavljeni listama, dok su zapisi (engl.records) predstavljeni N-torkama. Npr. niz znakova “aaa” odgovara listi [99,99, 99].

4.2.2 Varijable i podudaranje uzoraka

Varijable su predstavljene nizovima znakova koji pocinju velikim slovom.Varijable u Erlangu mogu biti vezane (engl. bound ili nevezane (engl. un-bound. Vezanoj varijabli jest pridruzena vrijednost i tu vrijednost nije mogucepromijeniti. Sljedeci isjecak programskog koda nije valjan:

1 X = 5,

2 X = X + 1

Ako zelimo semanticki istu funkcionalnost izreci u Erlangu moramo uvestidodatnu varijablu:

16

Page 20: Model sudionika i programski jezik Erlang

4.2. SLIJEDNO PROGRAMIRANJE

1 X = 5,

2 X1 = X + 1

Varijable sa najvise jednim pridruzivanjem vrijednosti su ekvivalentnevarijablama u matematickom smislu. Prednost ovoga pristupa jest laganootkrivanje pogreske; pogresna vrijednost varijable je pridruzena na samo jed-nom mjestu u programskom kodu.

Najveca prepreka pocetnicima u programskom jeziku Erlang jest seman-tika operatora =. Ako je varijabla sa lijeve strane operatora = nevezana,operator oznacava pridruzivanje. Medutim, ako je varijabla sa lijeve straneoperatora = vezana, operator predstavlja podudaranje uzoraka (engl. patternmatching). Npr. isjecak programskog koda:

1 X = {lista, [1,2,3]},

2 {Oznaka, L} = X

pridruzuje varijabli X slozenu podatkovnu strukturu koja sadrzava atomi listu. Nakon pridruzivanja, operator = ostvaruje podudaranje uzoraka takoda se slozena struktura X na desnoj strani izraza preslikava atom lista uvarijablu Oznaka i listu [1,2,3] u varijablu L.

4.2.3 Funkcije

Funkcije se sastoje od jedne ili vise klauzula koje su odvojene znakom ;.Klauzula se sastoji od glave i tijela odvojenih oznakom − >. Glava klauzulese sastoji od naziva i skupa uzoraka. Tijelo klauzule cine izrazi odijeljenizarezima. Npr. isjecak koda

1 zbroj(L) -> zbroj(L, 0).

2

3 zbroj([], N) -> N;

4 zbroj([H|T], N) -> zbroj(T, H+N).

definira funkciju koja izracunava zbroj elemenata liste cijelih brojeva.Prva klauzula druge funkcije odnosi se na trivijalan slucaj prazne liste, dokdruga klauzula druge funkcije zbraja glavu liste sa trenutnim zbrojem irekurzivno poziva samu sebe nad ostatkom liste. Prva funkcija s jednimargumentom sluzi za pojednostavljeni poziv druge funkcije postavljanjempocetne vrijednosti brojaca na 0.

17

Page 21: Model sudionika i programski jezik Erlang

4.2. SLIJEDNO PROGRAMIRANJE

Programski jezik Erlang podrzava funkcije viseg reda, tj. moguce je stvaratianonimne funkcije, vracati ih kao povratnu vrijednost i slati ih u oblikuparametara drugim funkcijama.

1 JeLi5 = fun(X) -> X =:= 5 end,

2 lists:filter(JeLi5, [4,5,6]).

Prikazani isjecak u prvoj liniji stvara funkciju koja provjerava da li jeargument proslijeden toj funkciji jednak vrijednosti 5. U drugoj liniji funkcijukoju smo spremili u varijablu JeLi5 koristimo kao argument za funkciju ukojoj provjeravamo svaki element liste funkcijom lists:filter da li je jednakvrijednosti 5.

4.2.4 Tijek izvodenja

Posebnim izrazom case moguce je definirati uvjetno izvodenje. Sintaksaizraza je sljedeca:

1 case Izraz of

2 Uzorak1 -> Izraz1;

3 Uzorak2 -> Izraz2;

4 ...

5 end

Nakon evaluacije Izraza dobivena vrijednost se preslikava na definiraneuzorke dok se ne pronade podudarnost. Kada se pronade podudarna vri-jednost izraza i uzorka, dogada se evaluacija odgovarajuceg izraza sa desnestrane uzorka i cijeli case izraz poprima vracenu vrijednost.

If se takoder koristi za uvjetno izvodenje. Sintaksa izraza je sljedeca:

1 if

2 Ograda1 -> Izraz1;

3 Ograda2 -> Izraz2;

4 ...

5 end

Obavlja se evaluacija ograda dok se ne dogodi istinita evaluacija (true).Nakon toga se evaulira odgovarajuci izraz i cijeli if izraz poprima vracenuvrijednost. Ako niti jedna ograda ne vrati vrijednost true, Erlang vracaiznimku.

18

Page 22: Model sudionika i programski jezik Erlang

4.2. SLIJEDNO PROGRAMIRANJE

4.2.5 Iznimke

Iznimke se dogadaju u sustavu zbog internih pogresaka ili jer su eksplicitnopozvane od strane programera. Hvatanje iznimki omogucava programskikonstrukt try...catch:

1 try Izraz of

2 Uzorak1 [when Ograda1] -> Izrazi1;

3 Uzorak2 [when Ograda2] -> Izrazi2;

4 ...

5 catch

6 TipIznimke: IznUzorak [when IznUzorakOgrada] -> IznIzrazi;

7 ...

8 after

9 AfterIzrazi

10 end

Ako tijekom evaluacije izraza Izraz nije doslo do iznimke, vrijednost Izrazase preslikava na jedan od uzoraka (sa opcionalnom ogradom). Medutim, akoje doslo do iznimke, provjeravaju se uzorci iznimki nakon kljucne rijeci catchi, pronalaskom odgovarajuceg tipa iznimke i uzorka, evaluaraju se IznIzrazi.AfterIzrazzi se evaluiraju uvijek, bez obzira na pojavu iznimke. Tip iznimkemoze biti throw, exit ili error.

4.2.6 Moduli i pokretanje programa

Programski kod u jeziku Erlang organizira se u module. Moduli se spre-maju u datoteke s nastavkom .erl i prije pokretanja potrebno ih je prevesti ujezik pogodan za izvodenje na Erlang prividnom stroju. Prevedena datotekaima nastavak .beam. Primjer jednostavnog modula je dan u nastavku:

1 -module(matematika).

2 -export([fakt/1]).

3

4 fakt(0) -> 1;

5 fakt(N) -> N * fakt(N-1).

Prikazani modul naziva matematika definira funkciju fakt za racunanjefaktorijela koju je moguce pozvati izrazom matematika:fakt(N). Prije pozi-vanja funkcije potrebno je prevesti programski kod modula pokretanjem Er-lang ljuske naredbom erl i pozivanjem odgovarajuce funkcije za prevodenjekoda:

1 \$ erl

19

Page 23: Model sudionika i programski jezik Erlang

4.3. PARALELNO I RASPODIJELJENO PROGRAMIRANJE

2 Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-

threads:0] [kernel-poll:false]

3

4 Eshell V5.7.2 (abort with ^G)

5 1> c(matematika).

6 2> matematika:fakt(3).

7 3> 6.

Ugradena funkcija c prevodi zadani modul u jezik Erlang prividnog strojai zatim je moguce pozvati funkciju za izracun faktorijela koja ispisuje rezultatnatrag u ljusku.

4.3 Paralelno i raspodijeljeno programiranje

Erlang programi sacinjeni su od velikog broja malih procesa koji se neza-visno izvode. Komunikacija medu procesima odvija se iskljucivo razmjenomporuka. Svaki proces ima privatnu memoriju; ne postoji dijeljena memorijamedu procesima niti koncept zakljucavanja sredstava.

4.3.1 Upravljanje procesima

Stvaranje paralelnih procesa u Erlangu dogada se izvrsavanjem funkcijespawn:

1 PID = spawn(F)

gdje je F funkcija koju ce izvoditi upravo stvoreni proces, a PID jestidentifikator stvorenog procesa. Funkcija F je proizvoljna funkcija viseg redakoja moze obavljati bilo kakvo izracunavanje i razmjenjivati poruke sa drugimprocesima u sustavu. Da bi stvoreni proces mogao primati poruke od drugihprocesa onda moramo koristiti receive izraz:

1 receive

2 Poruka1 [when Ograda1] ->

3 Izrazi1;

4 ...

5 Poruka2 [when OgradaN] ->

6 IzraziN;

7 ...

8 [; after Vrijeme ->

9 IzraziV]

10 end

20

Page 24: Model sudionika i programski jezik Erlang

4.3. PARALELNO I RASPODIJELJENO PROGRAMIRANJE

Po primitku poruke, Erlang proces obavlja podudaranje poruke i uzorakaPoruka1, ... ,PorukaN. Ako je podudaranje uspjesno, izvode se odgovarajuciizrazi. Ako podudaranje nije uspjesno, proces se privremeno zaustavlja i cekana novu poruku. Ako je zadan neobavezni parametar iza kljucne rijeci after,onda proces ceka Vrijeme milisekundi na poruku ili izvrsava izraze IzraziV.Za slanje poruke procesu koristimo izraz:

1 PID ! Poruka

4.3.2 Arhitekturalni stil klijent/posluzitelj

Poznavajuci osnovne nacine upravljanja procesima, ostvarenje najjednos-tavnijeg posluzitelja prikazano je modulom posluzitelj :

1 -module(posluzitelj).

2 -export([petlja/0]).

3

4 petlja() ->

5 receive

6 {Od, Poruka} ->

7 Od ! {ok, Poruka},

8 petlja();

9 {stop} ->

10 {ok}

11 end.

Modul posluzitelj izvozi funkciju petlja koja ocekuje poruku oblika {Od,Poruka}. Od parametar odreduje identifikator procesa koji salje poruku,a parametar Poruka odreduje samu poruku. Nakon preslikavanja uzorkaporuka, funkcija petlja salje odgovor procesu Od oblika {ok, Poruka} i repnimpozivom nastavlja izvodenje cekajuci sljedecu poruku. Proces prestaje saradom po primitku poruke oblika {stop}. Opisani posluzitelj pokrece sepozivom funkcije za stvaranje procesa, nakon cega je moguce slati porukeposluzitelju:

1 > PID = spawn(fun posluzitelj:petlja/0).

2 <0.18.0>

3 > PID ! {self(), neka_poruka}.

4 {ok, neka_poruka}

5 > PID ! {stop}.

21

Page 25: Model sudionika i programski jezik Erlang

4.3. PARALELNO I RASPODIJELJENO PROGRAMIRANJE

4.3.3 Grozdovi racunala

Raspodijeljeni programi izvode se u mrezama racunala i komunicirajuiskljucivo razmjenom poruka. Raspodijeljene programe razvijamo da bi postigli:

• ucinkovitost - dijelovi programa izvode se paralelno na vise racunala

• pouzdanost - sustavi otporni na pogreske zahtijevaju dva ili viseracunala; ako jedno od racunala prestane s radom, druga racunala cepreuzeti njihov rad

• razmjeran rast (engl. scalability) - pravilno oblikovani raspodi-jeljeni programi jednostavno prilagodavaju rast sustava dodavanjemprogramskih ili sklopovskih komponenti

Metodologija razvoja raspodijeljenih programa u programskom jeziku Er-lang definira Erlang cvorove (engl. node) kao osnovne elemente raspodijel-jenog izvodenja. Cvor oznacava Erlang sustav sa prividnim strojem, adres-nim prostorom i skupom procesa. Procese je moguce stvarati na bilo kojemcvoru u sustavu i komunikacija medu procesima je potpuno istovjetna Er-lang sustavu na jednom racunalu. Buduci da cvorovi slobodno razmjenjujuporuke, raspodijeljeni Erlang pretpostavlja visoku razinu povjerljivosti meducvorovima. Uobicajeni pristup jest pokretanje raspodijeljenih Erlang pro-grama na grozdovima racunala (engl. grid) povezanih lokalnom mrezom.

Pokretanjem Erlang ljusci na razlicitim racunalima efektivno postizemoraspodijeljeni sustav Erlang cvorova2:

1 \$ erl -sname cvor1

2 (cvor1@localhost)1> c(matematika).

3

4 ---

5

6 \$ erl -sname cvor2

7 (cvor1@localhost)1> rpc:call(cvor1@localhost,

8 matematika, fakt,[10])

Parametar sname pri pokretanju ljuske odreduje logicko ime cvora. Prethodniprimjer prikazuje pokretanje dva Erlang cvora (cvor1 i cvor2 ). U prvomcvoru cvor1 pripremamo modul matematika prevodenjem funkcijom c. Modul

2primjer ne prikazuje detalje postavljanja cvorova npr. postavljanje kolacica (engl.cookies

22

Page 26: Model sudionika i programski jezik Erlang

4.3. PARALELNO I RASPODIJELJENO PROGRAMIRANJE

matematika na cvoru cvor1 mozemo pozvati iz cvora cvor2 koristeci ugradenufunkciju call modula rpc.

4.3.4 Web uticnice

Raspodijeljivanje programa koristeci Erlang cvorove u povjerljivom grozduracunala ne zadovoljava potrebe raspodijeljivanja programa u otvorenim okoli-nama kao sto je mreza Internet. Pokretanje raspodijeljenih programa na In-ternetu zahtijeva koristenje web uticnica (engl. web sockets) koje omotavajuTCP/IP komunikacijski protokol.

4.3.5 Ucinkovito izvodenje

Danasnji standard sklopovske opreme osobnih racunala ukljucuje proce-sore sa dvije ili cetiri jezgre, sto znaci da osobna racunala mogu paralelnoizvoditi vise Erlang procesa. Pravilnim oblikovanjem programa moze sepostici ubrzanje programa od n puta na n-jezgrenom procesoru.

Erlang procesni model zasnovan na modelu sudionika pretpostavlja koristenjevelikog broja procesa koji obavljaju razlicite zadatke. Procesi bi trebaliobavljati priblizno jednaku kolicinu posla jer ako je jednom procesu potrebnojako puno vremena za obavljanje zadatka, taj proces zagusuje ostale pro-cese koji obavljaju manju kolicinu posla. Optimalni broj procesa u sustavuje tesko odrediti, ali postujuci pravilo da stvaranje procesa i komunikacijamedu procesima ne smiju nadvladati konkretne zadatke koje obavljaju pro-cesi, moze se postici zadovoljavajuci odnos broja procesa u sustavu u odnosuna raspoloziva sklopovska sredstva.

Primjer paralelnog algoritma prikazan je sljedecim isjeckom [3]:

1 pmap(F, L) ->

2 S = self(),

3 Ref = erlang:make_ref(),

4 Pids = map(fun(I) ->

5 spawn(fun() -> do_f(S, Ref, F, I) end)

6 end, L),

7 gather(Pids, Ref).

8

9 do_f(Parent, Ref, F, I) ->

10 Parent ! {self(), Ref, (catch F(I))}.

11

23

Page 27: Model sudionika i programski jezik Erlang

4.4. POUZDANI RAD

12 gather([Pid|T], Ref) ->

13 receive

14 {Pid, Ref, Ret} -> [Ret|gather(T, Ref)]

15 end;

16

17 gather([], _) ->

18 [].

Prikazani isjecak ostvaruje paralelnu inacicu standardne funkcije za up-ravljanje listama map koja evaluira proizvoljnu funkciju na elemente zadaneliste:

1 map(_, []) -> [];

2 map(F, [H|T]) -> [F(H)|map(F, T)].

Ideja paralelne funkcije pmap jest paralelna evaluacija elemenata liste Lfunkcijom F. Funkcija pmap stvara zaseban proces za svaki element liste kojiizvodi funkciju do f. Funkcija do f evaluira zadanu funkciju F uz parametarI koji se odnosi na jedan element liste L. Rezultate evaluacije paralelni pro-cesi salju natrag procesu roditelj koji ceka rezultate koristenjem primitivareceive unutar funkcije gather. Rezultat funkcije pmap jest potpuno istovje-tan slijednoj verziji map uz potencijalno ubrzanje koje je rezultat paralelnogizvodenja.

4.4 Pouzdani rad

Oporavak od pogresaka u programskim sustavima je kljucni koncept zapostizanje svojstva pouzdanosti. U ovom odjeljku opisani su mehanizmipracenja pogresaka u konkurentnim procesima i formalizirani arhitekturalnistil Nadglednik.

4.4.1 Pogreske u konkurentnim procesima

Ako jedan proces na neki nacin ovisi o nekom drugom procesu, onda jenavedene procese moguce povezati koristeci ugradenu funkciju link. Npr.proces P1 povezujemo sa procesom P2:

1 % proces P1

2 link(PID_P2)

Nakon povezivanja procesi ce se medusobno nadgledati. Ako proces P1prestane s radom, proces P2 ce primiti signal exit. Slicno, ako proces P2

24

Page 28: Model sudionika i programski jezik Erlang

4.4. POUZDANI RAD

prekine izvrsavanje, proces P1 prima signal. Pretpostavljena reakcija naprimanje exit signala jest prekidanje sa radom. Medutim, osim prekidanjarada moguce je i hvatati signale. Procesi koji hvataju i obraduju signalezovu se sustavski procesi (engl. system process). Funkcija on exit sustavskogprocesa koja hvata signale prikazana je sljedecim isjeckom:

1 on_exit(Pid, Fun) ->

2 spawn(fun() ->

3 process_flag(trap_exit, true),

4 link(Pid),

5 receive

6 {’EXIT’, Pid, Why} ->

7 Fun(Why)

8 end

9 end).

Prikazana funkcija stvara proces koji ce pratiti proces Pid koristeci opisanufunkciju link. Dodatno, koristenjem funkcije process flag postavljamo zas-tavicu za hvatanje exit signala. Ako proces koji pratimo iz nekog razlogaprestane sa radom, stvoreni proces u funkciji on exit ce primiti signal Why izatim pokrenuti funkciju Fun.

Opisani primjer ilustrira vrlo vazan koncept u programskom jeziku Erlang- udaljena obrada pogresaka. Erlang programi sastoje se od mnogo procesai obrada pogresaka se ne dogada lokalno unutar samih procesa. Posebniprocesi, koji cak ne moraju biti na istom racunalu, nadgledaju i obradujupogreske.

4.4.2 Arhitekturalni stil Nadglednik

Standardni oblikovni obrazac nadgledanja procesa moguce je formaliziratiuporabom stabla nadgledanja (engl. supervision tree). Stablo nadgledanjajest stablo procesa gdje korijeni stabla – nadglednici prate listove stabla –radnike. Ako radnici prestanu sa radom, nadglednici ce ih ponovo pokrenuti.

Postoje dvije strategija nadgledanja:

• jedan-za-jedan - ako radnik prestane sa radom, nadglednik ga ponovopokrece

• svi-za-jedan - ako bilo koji radnik prestane sa radom, nadglednik zaus-tavlja sve ostale radnike i zatim ih ponovo pokrece

25

Page 29: Model sudionika i programski jezik Erlang

4.4. POUZDANI RAD

Arhitekturalni stil Nadglednik ostvaruje stablo nadgledanja u program-skom jeziku Erlang koristeci ugradeno ponasanje iz OTP knjiznice [1]. Stablonadgledanja definira se funkcijom oblika:

1 init(...) ->

2 {ok, {Strategija, MaxPokretanja, Vrijeme},

3 [Radnik1, Radnik2, ...]}.

Strategija odreduje jednu od dvije strategije nadgledanja. Ako nadgled-nik obavi vise od MaxPokretanja ponovnih pokretanja radnika u Vrijememilisekundi, onda ce sam nadglednik prestati sa radom da bi se izbjeglobeskonacno prekidanje sa radom zbog iste pogreske. Radnici su predstavl-jeni n-torkama oblika:

1 {Oznaka, {Mod, Fun, Arg},

2 Pokretanje,

3 Zaustavljanje,

4 Tip,

5 ...}

Oznaka je atom koji predstavlja radnika koji izvrsava funkciju Fun mod-ule Mod sa argumentima Arg. Pokretanje i Zaustavljanje definiraju parame-tre radnika, npr. moguce je stvoriti radnika kojeg je potrebno ponovo pokre-tati samo ako se zaustavi na signalom koji nije exit. Tip definira uloguprocesa koji moze biti nadglednik ili radnik.

Uspjesnost prikazanih strategija oporavka od pogresaka koristeci povezaneprocese i stablo nadgledanja za ostvarivanje pouzdanih sustava najbolje ilus-trira podatak da je programski jezik Erlang koristen za postizanje 99.9999999%pouzdanosti rada sustava [3].

26

Page 30: Model sudionika i programski jezik Erlang

Poglavlje 5

Zakljucak

Model sudionika proucava konkurentne sustave formaliziranjem sudionikakoji ucestvuju u racunanju. Jedini nacin interakcije medu sudionicima jestrazmjena poruka kao jedan od najvecih doprinosa modela sudionika jer prijepojave modela sudionika nije postojalo nacelo racunanja bez globalnog stanja.Model sudionika postavlja radni okvir za proucavanje konkurentnih sustavate svojim matematickim modelom nadjacava izrazajnost najopcenitijih mod-ela racunanja svedenih na slijedne mehanicke postupke.

Programski jezik Erlang iskoristava izrazajnost modela sudionika za obliko-vanje konkurentnih sustava ugradnjom programskih primitiva za stvaranjeizoliranih procesa i komunikaciju medu procesima izravno u programski jezik.Erlang nastoji pruziti okolinu za razvoj i ucinkovito izvodenje pouzdanihraspodijeljenih sustava.

Za probleme koji su intrizicno raspodijeljeni, kao npr. dopisivanje u stvarnomvremenu (engl. chat), metodologija programiranja zasnovana na modelu su-dionika pruza izvrstan temelj za oblikovanje sustava definiranjem sudionika,njihovog ponasanja i poruka koje razmjenjuju. Nadalje, prakticno ostvarenjesustava oblikovanog na opisani nacin moguce je vrlo elegantno izreci pro-gramskim jezikom Erlang jer definirani sustav gotovo prirodno prelazi u pro-gramski kod koji se izvodi na Erlang prividnom stroju.

27

Page 31: Model sudionika i programski jezik Erlang

Literatura

[1] Ericsson AB. Erlang/otp documentation, 2011.

[2] Joe Armstrong. Making reliable distributed systems in the presence ofsodware errors. The Royal Institute of Technology, Stockholm, Sweden,2003.

[3] Joe Armstrong. Programming Erlang. Pragmatic, 2007.

[4] J.C.M. Beaten. A brief history of process algebra. Rapport CSR 04-02,Vakgroep Informatica, Technische Universiteit Eindhoven, 2004.

[5] P. Bishop C. Hewitt and R. Steiger. A universal modular actor formalismfor artificial intelligence. IJCT, 1973.

[6] M. E. Conway. Design of a separable transition-diagram compiler. Com-munications of the ACM, 1963.

[7] William Dally et al. The j-machine: A retrospective. Communicationsof the ACM, 1998.

[8] C. Hewitt. Viewing control structures as patterns of passing messages.AIM, 1976.

[9] L.Budin M.Golub D.Jakobovic L.Jelenkovic. Operacijski sustavi. Ele-ment, 2010.

[10] K. Nygaard. Simula: An extension of algol to the description of discrete-event networks. IFIP, 1962.

[11] K. Nygaard and O. Dahl. Class and subclass declarations. IFIP, 1967.

[12] John Ousterhout. Why threads are a bad idea. USENIX TechnicalConference, 1996.

[13] James L. Peterson. Petri nets. ACM Computing Surveys, 1977.

28

Page 32: Model sudionika i programski jezik Erlang

LITERATURA

[14] A.W. Roscoe. The Theory and Practice of Concurrency. Pearson andBill Roscoe, 2005.

[15] C.L. Seitz. The cosmic cube. Communications of the ACM, 1985.

[16] Wikipedia. Erlang programming language, 2010.

[17] Wikipedia. Process calculus, 2010.

29