You are on page 1of 7

Distribuirani procesi

Održavanje repliciranih
podataka

Tomislav Smetko

Mihael Maltar
ZADATAK:

Replicirana tečajna lista stranih valuta pohranjuje se u istom obliku na N


poslužiteljskih računala. Za svaku valutu zadužen je posebni proces koji radi na
jednom od tih računala. Da bi promijenio podatke za svoju valutu, zaduženi
proces ulazi u kritičnu sekciju i vrši iste promjene na svim kopijama liste.
Napišite i testirajte distribuiranu aplikaciju za održavanje replicirane tečajne
liste. Ispravan rad aplikacije prilikom ažuriranja podataka treba osigurati nekim
od mehanizama za međusobno isključivanje.
Uvod
Naš je cilj bio izraditi distribuiranu aplikaciju za održavanje replicirane
tečajne liste. Replicirana tečajna lista pohranjuje se u istom obliku na N
poslužiteljskih računala te je za svaku valutu zaslužan posebni proces koji radi
na jednom od tih računala. Tablica valuta i njihovih vrijednosti je primjer
dijeljenog resursa tj. resursa koji trebaju biti dostupni raznim procesima, ali ih
samo jedan proces smije koristiti u jednom trenutku. U ovom konkretnom
slučaju, to znači da proces ne smije čitati vrijednost valute za koju je zadužen
neki drugi proces u trenutku u kojem taj proces mijenja njezinu vrijednost.

Takva vrsta problema svodi se na problem međusobnog isključivanja.


Kod problema međusobnog isključivanja rad procesa s resursom predstavlja
kritičnu sekciju, pri čemu je osnovno svojstvo kritične sekcije da se dva procesa
ne smiju istovremeno nalaziti u njoj.

Postoje razni algoritimi kojima se mogu rješavati takvi problemi, a dvije


osnovne skupine su algoritmi zasnovani na vremenskim žigovima i algoritmi
zasnovani na žetonima. Mi smo odabrali jedan od algoritama zasnovanih na
vremenskim žigovima - Lamportov algoritam.
Opis algoritma
Lamportov algoritam spada među algoritme za međusobno isključivanje
koji su zasnovani na vremenskim žigovima. Svaki proces održava logički sat (za
vremenski žig) i red (za spremanje zahtjeva za resurom – tablicom valuta).
Algoritam osigurava da procesi ulaze u kritičnu sekciju, odnosno pristupaju
vrijednosti pojedine valute u redoslijedu vremenskih žigova njihovih zahtjeva.
Da bi postavio zahtjev za kritičnom sekcijom, proces šalje žigosanu poruku
request svim drugim procesima, te dodaje taj zahtjev i žig u svoj red. Kad primi
poruku request, proces sprema taj zahtjev i žig u svoj red, te šalje pošiljaocu
žigosanu poruku ack. Da bi oslobodio kritičnu sekciju, proces šalje žigosanu
poruku release svim drugim procesima. Kad primi poruku release, proces briše
odgovarajući zahtjev iz svog reda. Proces ulazi u kritičnu sekciju ako:

 Njegov zahtjev se nalazi u redu i ima žig t


 Njegov žig i je manji od svih ostalih žigova u redu
 Primljena je barem po jedna poruka od svakog od preostalih procesa sa
žigom većim od t

U algoritmu se pretpostavlja FIFO uređaj poruka po komunikacijskim


kanalima.
Implementacija

Koristili smo klase NameTable.java i NameServer.java za održavanje tablice s


procesima te pomoćne klase Symbols.java i PortAddr.java. Također smo
koristili Topology.java i Util.java, dok smo klasu Connector.java prilagodili
svojim potrebama, dodavši da procesi razmjenjuju imena valuta prilikom
početnog slanja poruka.

Connector.java

Naravno, uz to smo morali promjeniti i klasu Linker.java dodavši joj metode


vezane uz valute te polje s imenima valutima koje se šalje Connectoru.
Linker.java

Sukladno ranijim promjenama, u klasu koja definira sučelje Lock.java smo


dodali metode za dohvaćanje vrijednosti valuta i provjeru je li vrijednost
primljena.
.
Lock.java

You might also like