You are on page 1of 4

Konkurentni i distribuirani sistemi

Odgovori     septembarski ispitni rok (akademske studije) 2010/2011 

1. Na sledećem listingu prikazana je jedna implementacija Lamportovog pekarskog algoritma.


Pokazati da je ovaj algoritam bez uzjamnog blokiranja. Da li je ovaj algoritam i bez izgladnjivanja?
Objasniti odgovor.
  class Bakery implements Lock { 
    boolean[] flag; 
    Label[] label; 
    public Bakery (int n) { 
      flag = new boolean[n]; 
      label = new Label[n]; 
      for (int i = 0; i < n; i++) { 
        flag[i] = false; label[i] = 0; 
      } 
   } 
 
   public void lock() { 
     int i = ThreadID.get(); 
     flag[i] = true; 
     label[i] = max(label[0], ... ,label[n‐1]) + 1; 
     while ((∃k != i)(flag[k] && (label[k],k) << (label[i],i))) {}; 
   } 
 
   public void unlock() { 
     flag[ThreadID.get()] = false; 
   } 
 } 

Odgovor:
U pekarskom algoritmu, flag[A] je boolean flag koji određuje da li nit A želi da uđe u kritičnu
sekciju, a celi broj label[A] određuje relativni redosled ulaska u odnosu na druge, za svaku nit A.
Svaki put kada nit preuzme ključ, ona generiše novu label[] u dva koraka. Prvo, ona čita labele
ostalih niti, jednu po jednu (proizvoljnim redosledom) i generiše labelu čija je vrednost za jedan veća
od najveće labele koju je pročitala. Deo koda, koji počinje od postavljanja indikatora flag pa do
upisivanja u novu label[], određuje redosled tekuće niti u odnosu na ostale koju pokušavaju da
preuzmu ključ. Ukoliko dve niti konkurentno izvršavaju ovaj deo koda, moguće je da pročitaju istu
maksimalnu labelu, kao i da odaberu istu novu labelu. Zbog toga, algoritam koristi leksikografsko
uređenje << parova label[] i ID niti:
(label[i],i)<<(label[j],j)) akko je label[i]<label[j] ili label[i]==label[j] i i<j. 

U čekajućoj sekciji pekarskog algoritma, nit uzastopno proizvoljnim redosledom čita labele jednu iza
druge, sve dok ne ustanovi da nema niti koja ima postavljen indikator flag koja ima leksikografski
manji par label/ID. Čekajuća nit A ima jedinstveni par (label[A],A) i kao takva nikada ne čeka na
drugu nit, pa odatle direktno sledi da nema uzajamnog blokiranja. Pekarski algoritam je FCFS, pa
pošto smo pokazali da je bez uzajamnog blokiranja, odatle sledi da sigurno nema ni izgladnjivanja.  

2. Odgovoriti sa DA ili NE da li sledeće osobine konkurentnih objekata imaju kompoziciona svojstva:


Mirna konzistentnost: DA
Sekvencijalna konzistentnost: NE
Mogućnost linearizacije: DA

RAF.08.8015.I4A.2010
Konkurentni i distribuirani sistemi
3. Pretpostavimo da se kod nekog multiprocesorskog sistema za raspodelu opterećenja koristi
algoritam sa krađom poslova. Kada nit istroši sve poslove u lokalnom redu čekanja, ona pokušava
da “ukrade” posao iz reda neke druge niti. Međutim, kada sve niti istroše sve poslove svojih
lokalnih redova, one će se izvršavti zauvek stalno pokušavajući da ukradu tuđe poslove, kojih
nema. Kako se može rešiti ovaj problem?

Odgovor:
Da se to ne bi dešavalo, uvešćemo barijeru sa detekcijom završetka, tako da se sve niti završe onog
trenutka kada su odradile svoje poslove. Svaka nit je ili aktivna (ima posao koji treba da izvrši) ili
je nekativna (nema poslova). Svaka neaktivna nit može da postane aktivna sve dok je neka druga nit
aktivna, jer neaktivna nit može da ukrade posao od aktivne niti. Kada sve niti postanu neaktivne,
tada nijedna nit više ne može da postane aktivna. Detekcija da je izračunavanje kao celina završeno
svodi se na određivanje da u nekom vremenskom trenutku više nema aktivnih niti.

4. Da li je globalno stanje prikazano presekom na slici dosledno ili nedosledno? Obrazložiti odgovor.

Sx

M4
M1 M2 M5
Sy

M3
Sz

M6

Sw

Odgovor:
Globalno stanje je nije dosledno jer poruka M4 nema svoj početak u prošlosti (levo od preseka –
trenutka snimanja).

5. Kratko navesti sličnosti i razlike između agenata slabe i jake pokretljivosti kada su u pitanju
mobilnost kôda, mobilnost stanja i mobilnost izračunavanja.
Odgovor:
Agenti slabe i jake pokretljivosti imaju mobilni kôd i mogućnosti mobilnog izračunavanja.
Samo agenti jake pokretljivosti, pored gore navedenog, imaju i mobilna stanja.

Strana 2 od 4 RAF.08.8015.I4A.2010
Konkurentni i distribuirani sistemi
6. Posmatrajmo sledeću implementaciju ključa, koja obezbeđuje uzjamno isključivanje za n niti:
boolean zauzet = false; 
int turn; 
public void lock(int ThreadId) { 
   do { 
        do { 
           turn = ThreadId; 
        } while(zauzet); 
      zauzet = true; 
     } while(turn != ThreadId); 

 
public void unlock(int ThreadId) { 
      zauzet = false; 

   
Da li ova implementacija garantuje da neće biti uzajamnog blokiranja (deadlock-a)? Obrazložiti
odgovor.

Odgovor:
Implementacija ne grantuje da neće biti uzajamnog blokiranja, kao što se može videti iz sledećeg
izvršavanja:
a) Nit i pokušava ulazak u kritiču sekciju. Ona ulazi u unutrašnju petlju i postavlja turn na i.
b) Nit j pokušava ulazak u kritičnu sekciju. Ona ulazi u unutrašnju petlju i postavlja turn na j.
c) Nit j napušta unutrašnju petlju i postavlja zauzet na true.
d) Nit i nastavlja izvršavanje unutrašnje petlje i postavlja turn na i.
e) Nit j nastavlja da izvršava spoljašnju petlju. Nit j ne može da napusti spoljašnju petlju jer je turn
postavljena na i. Prema tome, nit j ulazi u unutrašnju petlju ponovo dok zauzet ostaje true.
f) Obe niti kontinuirano izvršavaju unutrašnju petlju, jer zauzet večno ostaje true.

7. Koji problem može da se javi u sledećem delu kôda, gde metoda enq() koristi monitor za
signalizaciju kod upotrebe bafera u problemu proizvođač-potrošač?

  public void enq(T x) { 
    lock.lock(); 
    try { 
      while (count == items.length) 
        notFull.await(); 
      items[tail] = x; 
      if (++tail == items.length) 
        tail = 0; 
      ++count; 
      if (count == 1) {      // problem 
        notEmpty.signal(); 
      } 
    } finally { 
        lock.unlock(); 
    } 
  } 

Odgovor:
Metoda enq() signalizira notEmpty samo ako je prva koja stavlja stavku u prazan bafer. Ukoliko
više potrošača čeka, ali se samo prvi probudi, nastaje problem propuštenog buđenja.

Strana 3 od 4 RAF.08.8015.I4A.2010
Konkurentni i distribuirani sistemi
8. Distribuirani objekti poseduju (zaokružiti samo ono što je tačno):
a. Distribuirani proxy
b. Distribuirani skeleton
c. Distribuirani interfejs
d. Distribuirane metode
e. Distribuirana stanja (podatke)

9. Navesti prednosti softverske transakcione memorije (STM) nad hardverskim rešenjem (HTM).

Odgovor:
HTM zahteva upotrebu dodatnog hardvera, koji omogućava da keš-koherentni protokol izvršava
transakcije. STM nema nikakvih hardverskih zahteva, tj. može se implementirati na svakom
računaru.

Kod HTM, veličina transakcije ograničena je veličinom keša.Većina operativnih sistema čisti keš
kada se nit istiskuje sa procesora, tako da trajanje transakcije može da bude ograničeno dužinom
vremenskog kvantuma na određenoj platformi. Odatle sledi da je upotreba HTM najbolja kod
kratkih i malih transakcija. Softverska transakciona memorija nema ovih ograničenja.

Menadžer konflikta postoji kod STM, dok ga HTM ne poseduje, što znači da transakcije HTM
mogu da izgladnjuju jedna drugu.

10. Uporediti TASLock, TASLock i BackOff rešenja spin-locka, po pitanju korišćenja memorijske
magistrale.
Odgovor:

TASLock: Svaki poziv TAS ide preko magistrale. Na magistralu moraju da čekaju i niti koje ne
čekaju ključ, a potreban im je pristup memoriji. TAS invalidira sve keširane kopije ključa. Zbog
toga niti koje spinuju imaju keš promašaje i izlaze na magistralu. Niti koje žele da oslobode ključ
kasne iza niti koje spinuju.

TTASLock: Čeka dok ključ ne “izgleda” slobodan spinujući na lokalnom kešu. Magistrala se ne
koristi dok je ključ zauzet, pa su zato performanse bolje nego kod TASLock. Problem nastaje kada
se ključ oslobodi (invalidaciona oluja).

BackOff: Ako ključ izgleda slobodno, ali je preuzimanje bilo bez uspeha, potrebno je sačekati neko
slučajno vreme. Nakon svakog neuspeha preuzimanja, vreme se udvostručuje. Tokom čekanja, nit
ne zahteva ključ, a samim tim i ne izaziva kolizije namagistrali.

Strana 4 od 4 RAF.08.8015.I4A.2010

You might also like