Sunteți pe pagina 1din 146

UNIVERSITATEA DIN BACU

FACULTATEA DE TIINE

CERASELA CRIAN

ELENA NECHITA
MIHAI TALMACIU

ALGORITMI PARALELI
I DISTRIBUII

Curs pentru studenii facultilor

INGINERIE, specializarea TEHNOLOGIA INFORMAIEI


i

TIINE, specializarea INFORMATIC

2008

It would appear that we have reached the limits


of what it is possible to achieve with computer technology,
although one should be careful with such statements,
as they tend to sound pretty silly in 5 years.

(John von Neumann, 1949)

CUPRINS
Introducere. NECESITATEA ALGORITMILOR PARALELI
I A CALCULULUI DISTRIBUIT

Capitolul 1. SISTEME DE CALCUL PARALEL


Ce sunt calculatoarele paralele?
Ce este programarea paralel?
Analogie cu viaa cotidian
Niveluri de paralelism
Clasificarea sistemelor paralele
Sisteme SISD
Sisteme SIMD
Sisteme MISD
Sisteme MIMD
Instruciuni condiionale in sistemele SIMD i MIMD
Sisteme partiionabile
Tipuri de MIMD i transputere
Tehnica pipeline i procesoare pipeline
Procesoare vectoriale
Procesoare matriceale
Sisteme cu memorie comun
Sisteme cu memorie distribuit
Clasificarea reelelor de interconectare
Sisteme gazd

11
12

Capitolul 2. PROGRAMARE PARALEL


Procese concurente
Multiprogramare i multiprocesare
Comunicare i sincronizare
Eficiena
Organizarea datelor
Tehnici de distribuire a datelor
Tehnica de transfer a datelor
Cnd o problem este paralelizabil?
Generarea algoritmilor paraleli

36
36
36
36
43
46
46
47
48
49

Capitolul 3. ALGORITMI PARALELI FUNDAMENTALI


Divide et impera
Multiplicarea a doua matrici
Evaluarea expresiilor aritmetice
Tehnica dublrii recursive
Paralelism la nivelul expresiilor aritmetice
Paralelism la nivelul instruciunilor
Algoritmi pentru sisteme organizate pe bii

51
51
52
54
54
55
56
57

13
16
16
18
18
20
20
21
22
22
24
27
28
29
31
32
35

Sortare
Sortarea prin numrare
Procedeul bulelor
Sortarea par-impar
Sortare cu arbori
Sortarea rapid
Sortarea bitonic
Cutare
Interclasare
Problema colorrii unui graf

59
59
60
61
61
62
63
65
65
66

Capitolul 4. ALGORITMI NUMERICI PARALELI


Modaliti de construire a algoritmilor numerici paraleli
Evaluarea relaiilor recursive
Polinoame
Metode numerice paralele de rezolvare a sistemelor de ecuatii
liniare
Sisteme liniare tridiagonale
Sisteme liniare cu matrici dense
Metode numerice paralele de rezolvare a ecuatiilor
neliniare
Cuadraturi numerice paralele
Cteva noiuni privind paralelismul n procesarea imaginilor

68
68
68
69
69

Capitolul 5. SISTEME DISTRIBUITE


Definirea sistemelor distribuite
Avantajele i dezavantajele sistemelor distribuite
Obiective generale privind proiectarea sistemelor distribuite
Sisteme deschise
Tratarea disfuncionalitilor
Arhitectura sistemelor distribuite
Arhitectura software
Platformele hardware i software n sistemele distribuite
Nivelul middleware
Modele arhitecturale pentru sistemele distribuite
Modelul client/server
Definirea modelului client/server
Arhitecturi client/server multistrat
Clasificarea modelelor arhitecturale client/server
Alte modele client/server

87
87
89
91
92
95
97
98
99
101
104
106
106
107
110
114

Capitolul 6. SISTEME CU BAZE DE DATE DISTRIBUITE


Definirea bazelor de date distribuite i avantajele acestora
Obiectivele specifice bazelor de date distribuite
Cteva elemente privind proiectarea bazelor de date distribuite
Fragmentarea datelor
Strategia alocrii datelor

117
117
118
121
122
123

69
73
79
83
84

Gestiunea tranzaciilor n bazele de date distribuite


Definiia i proprietile conceptului de tranzacie
Tranzacii distribuite
Mecanismul de comitere n dou faze
Accesarea bazelor de date n aplicaiile client/server
Optimizarea interogrilor distribuite
Capitolul 8. LIMBAJUL JAVA
Java limbaj total orientat spre obiecte
Tip de dat, clas, metod, variabil
Aplicaie, applet, servlet
Fundamentele limbajului Java
Elemente grafice n Java
Evenimente
Generarea numerelor aleatoare n Java

125
125
126
127
128
130
134
134
135
136
137
142
143
143

Bibliografie
Resurse Web

145
146

INTRODUCERE
NECESITATEA ALGORITMILOR PARALELI
I A CALCULULUI DISTRIBUIT
In istoria calculatoarelor s-a impus de la nceput secvenializarea. Rezolvarea
unei probleme concrete presupune construirea unui algoritm de calcul care, de regul,
formuleaz ordinea n care se vor executa diferitele operaii.
Structura calculatorului, aa cum a fost ea elaborat de John von Neumann,
stabilete c operaiile, fie logice, fie aritmetice, se execut n unitatea central, n
blocul aritmetico-logic. Astfel, programul realizat pentru soluionarea problemei, ca
succesiune de instruciuni de calculator care urmeaz algoritmul adecvat, este la rndul
su memorat n calculator, iar instruciunile sale sunt aduse una cte una n unitatea de
comand, realizndu-se pas cu pas transformarea datelor de intrare n rezultatele finale...
O vreme prea c paralelismul este atuul de neatins al gndirii umane. Dar nc din anii
'60-'70 creterea vitezei de calcul s-a realizat mai ales prin trucuri, prin diviziunea
sarcinilor n cadrul sistemului de calcul, prin introducerea cererilor de ntrerupere din
partea dispozitivelor de intrare/ieire, prin accesul direct la memorie.
Apoi au nceput s apar "supercalculatoarele", dar mai ales sisteme specializate
pentru prelucrarea imaginilor numerice, sisteme n care s-a cutat s se compenseze
viteza insuficient de pe atunci printr-o procesare paralel, alocnd pentru fiecare pixel
dintr-o linie a imaginii cte o unitate de calcul - un procesor dedicat operaiilor locale
din imagine. Astfel au aprut primele configuraii de calcul paralel, dar i primii
algoritmi de calcul paralel. In cazul imaginilor numerice, asupra fiecrui element de
imagine (pixel) se pot aplica simultan aceleai transformri, astfel nct se puteau folosi
procesoare identice care nici mcar nu trebuiau s comunice ntre ele. Era modelul de
calcul care s-a numit SIMD (Single Instruction Multiple Data).
In alte aplicaii, cu calcule mai complicate, s-a cutat un spor de vitez prin
nlnuirea unor procesoare care trebuiau s execute operaiuni distincte, rezultatele
unuia intrnd ca date de intrare n cel de al doilea.
Se ntrevede deja dificultatea major a acestui mod de lucru, interdependena
dintre structura hard disponibil i algoritmul i programul de calcul. Pare o revenire la
sistemele analogice de calcul, acolo unde pentru fiecare tip de problem trebuia realizat
un anumit montaj, un calculator analogic particular.
Cu toate acestea, paralelismul a constituit unul din mecanismele majore de
cretere a performanelor sistemelor moderne de calcul. Intre altele, nzestrarea
controlerelor de intrare/ieire cu procesoare specializate, degrevarea microprocesorului
(unitii centrale) de sarcinile de vizualizare pe tubul catodic (la PC-uri), prin creterea
complexitii interfeei video. Dar i completarea microprocesorului cu o memorie
tampon, odat cu creterea performanelor accesului direct la memorie, transferului din
memoria extern n cea intern.
In anii '90, creterea vitezei interne a microprocesoarelor a redus sensibil
interesul pentru structurile de calcul paralel din deceniile precedente. Era mult mai
important portabilitatea programelor, a aplicaiilor, astfel nct s-a lucrat intens pentru
elaborarea unor sisteme de operare performante, cutnd ca sistemul de operare s
foloseasc ct mai eficient configuraia hard.
In schimb, dezvoltarea reelelor de calculatoare aduce n scen noi versiuni de
supercalculatore: serverul multiprocesor, pe de o parte, i "clusterul" de PC-uri

comunicnd ntre ele i rezolvnd feliuele problemei, pe de alta. Vorbim tot mai mult
de calcul distribuit i, ntr-un fel, ajungem s folosim Internetul ca un imens supercalculator.
Exemple ntlnite n pres sau n buletine de tiri, despre Proiectul Genomului
Uman, despre proiectul SETI at Home, sau, mai nou despre Eistein at Home, despre
studiile seismologice din Japonia, despre implicarea firmei IBM n cercetarea
universului sunt tot attea tiri despre sisteme de calcul paralel sau distribuit.
Se vorbete, n general despre calculul de nalt performan (HPC - High
Performance Computing, dar concret despre sisteme distribuite - GRID, de fapt despre
calcule n reea, despre arhitectura deschis a serviciilor Grid (Open Grid Services
Architecture), despre clusteri i super-clusteri.
Unul dintre cele mai ambiioase proiecte, sistemul TerraGrid, proiectat pentru a
sprijini National Science Foundation n proiectele de cercetare de mare anvergur
(precum modelarea molecular, detecia bolilor, descoperirea medicamentelor, sau
descoperirea de noi surse de energie) ar urma s foloseasc peste 3000 de procesoare
Intel rulnd sub Linux. Printe al GRID este considerat Ian Foster, autorul manualului
electronic DBPP "Proiectarea i Construcia Prelucrrilor Paralele".

10

Capitolul 1
SISTEME DE CALCUL PARALEL
Conceptul clasic a lui von Neumann despre computerul serial a fost ncorporat n
primele maini moderne de calcul. Viteza de calcul a crescut considerabil odat cu
nlocuirea tuburilor cu tranzistori i circuite integrate.
La un moment dat, ns, capabilitile computerelor sunt inevitabil cu un pas n
urma necesitilor aplicaiilor tiinifice i tehnologice. In zilele noastre, un computer
serial efectueaz peste 109 operaii pe secund. Din pcate, nu ne putem atepta ca, n
viitor, s fie construite maini care s lucreze mult mai rapid dect cele existente astzi.
La baza acestei afirmaii se afl raiuni fizice. Un semnal electric se propag ntr-un
metru aproximativ ntr-o nanosecund (10-9 sec) i cum anumite componente ale
calculatorului nu pot avea dimensiuni sub ordinul milimetrilor, limita fizic a numrului
de operaii se afl undeva n jurul a 1010 operaii ntr-o secund.
Urmtorul pas n cutarea de metode de mbuntire a vitezei de calcul este
paralelismul. Un algoritm paralel este un algoritm care permite efectuarea
simultan a mai multor operaii.
In anii '70 a luat un avnt deosebit proiectarea unor calculatoare a cror circuite
erau divizate n subuniti, fiecare executnd diferite operaii. Paralelismul se realizeaz
la nivelul asamblorului. Un exemplu este iniierea unei operaii naintea terminrii
operaiei precedente. Au fost construite maini (Cray i Ciber) care cupleaz aceast
tehnic, numit "pipelining" (tehnica conductei), cu uniti hardware independente
pentru execuia unor anumite operaii, cum ar fi adunarea i multiplicarea. Termenul de
procesor vectorial descrie n mod uzual un asemenea sistem. Procesarea fluxului de date
ntr-o main de calcul vectorial se aseamn cu o band de producie dintr-o fabric.
Apariia circuitelor integrate a permis dezvoltarea supercalculatoarelor. Ideea de
baz este eliminarea bufferelor de mare vitez i conectarea direct a procesoarelor la
bnci de memorie. Memoria este distribuit ntre procesoare i o parte este accesibil
tuturor unitilor. Unitatea central unic este nlocuit cu mai multe procesoare care,
dei individual pot lucra ncet, accelereaz viteza de procesare opernd n paralel.
Schemele de interconectare fizic a procesoarelor, utilizate n prezent, sunt de tip
hipercub, inel sau latice.
Calculul paralel a dat o dimensiune nou construciei de algoritmi i programe.
Programarea paralel nu este o simpl extensie a programrii seriale. Experiena
a artat c modul de judecare a eficienei algoritmilor bazai pe tehnici seriale nu
corespunde n cazul paralel. Nu toi algoritmii secveniali pot fi paralelizai, aa cum n
natur exist o serie de exemple (exemplul lui N. Wilding: trei femei nu pot produce un
copil numai n trei luni, lucrnd mpreun la aceast problem). Pe de alt parte, o serie
de algoritmi numerici standard seriali dovedesc un grad nalt de paralelism: conin
numeroase calcule care sunt independente unele de altele i pot fi executate simultan. In
proiectarea unor algoritmi de calcul paralel este necesar regndirea sistemelor,
limbajelor, problemelor nenumerice i a metodelor numerice.
Viitorul calculatoarelor paralele depinde n mare msur de efortul care se face
n momentul de fa pentru stabilirea algoritmilor paraleli cei mai eficieni i de
proiectarea limbajelor paralele n care aceti algoritmi pot fi exprimai.
In cadrul unui calculator paralel, nu este necesar ncorporarea unor procesoare
cu performane deosebite. Astfel, costul unui calculator paralel cu un numr mare de

11

procesoare poate fi relativ ieftin fa de un calculator serial sau un supercomputer


vectorial cu performane de procesare comparabile. Totui, la momentul actual,
calculatoarele vectoriale prezint procentul cel mai ridicat de achiziionri pe piaa de
supercalculatoare. Motivul este tehnologia software relativ primitiv existent pentru
calculatoarele paralele. Prin transferarea pe calculatorul paralel a codurilor seriale
elaborate de-a lungul anilor nu se poate obine implicit eficiena maxim. Din pcate,
tehnologia comunicaiilor este mult n urma tehnologiilor de calcul i, pe calculatoarele
existente pe pia, multe aplicaii sufer de o anumit limit a comunicaiilor: raportul
dintre timpul de comunicare i timpul de calcul efectiv, n majoritatea aplicaiilor, este
extrem de ridicat.
CE SUNT CALCULATOARELE PARALELE?
CE ESTE PROGRAMAREA PARALEL?
Un calculator paralel este o colecie de procesoare, de obicei de acelai tip,
interconectate ntr-o anumit reea care permite coordonarea activitilor lor i schimbul
de date. Se presupune c procesoarele se afl la distane mici unele de altele i pot
colabora la rezolvarea unei probleme.
Spre deosebire de un calculator paralel, un sistem distribuit este o mulime de
procesoare, de obicei de tip diferit, distribuite pe o arie geografic mare, construit n
scopul utilizrii resurselor disponibile i colectarea i transmiterea informaiilor printr-o
reea de conectare a procesoarelor. Programele paralele utilizeaz concurena pentru a
rula mai rapid. Un sistem distribuit utilizeaz procese concurente datorit distribuirii
fizice a mainilor din care este compus (un exemplu este pota electronic: presupune
procese diferite pe diferite staii de lucru, scopul nefiind acela de a comunica mai rapid
dect prin utilizarea unei singure staii).
Scopul procesrii paralele este executarea unor calcule mai rapid dect ar fi
posibil cu un singur procesor, prin utilizarea concurent a mai multe procesoare. Este
destinat aplicaiilor ce necesit soluii rapide sau rezolvarea unor probleme de
dimensiuni mari (de exemplu, dinamica fluidelor, vremea probabil, modelarea i
simularea sistemelor mari, procesarea i extragerea informaiei, procesarea imaginilor,
inteligen artificial, manufacturare automat).
Exist trei motivaii pentru utilizarea procesorului paralel:
1. pentru a atinge performana cerut relativ la timpul de execuie;
2. pentru c este o arhitectur disponibil;
3. pentru c problema care se pune se preteaz la calculul paralel.
Cei trei factori principali care au favorizat introducerea pe scar larg a
procesrii paralele sunt:
costul relativ sczut al unui sistem cu mai multe procesoare;
tehnologia circuitelor integrate a avansat n asemenea msur ntruct pe un
singur cip pot fi nglobate milioane de tranzitoare;
ciclul de timp al procesorului serial se apropie de limitele fizice sub care nu
este posibil nici o mbuntire.
n dezvoltarea conceptului de paralelism s-au conturat dou direcii de cercetare:
1. n problema hardului, respectiv care este arhitectura calculatorului care avantajeaz anumii algoritmi de rezolvare a unor probleme diverse;
2. calcul paralel orientat pe problem, respectiv ct de mult mbuntesc algoritmii paraleli viteza de calcul pentru o problem dat.

12

Programarea paralel este arta de a programa o colecie de calculatoare pentru


a executa eficient o singur aplicaie. Dac aplicaia este numeric sau de calcul
simbolic, eficiena nseamn atingerea unei viteze mari de execuie (invers
proporional cu numrul de procesoare). n cazul unei aplicaii n timp real sau a unui
sistem de operare, eficiena const n satisfacerea n timp real a cerinelor impuse de
uniti sau utilizatori.
Programarea paralel caut cile de divizare a aplicaiilor n uniti (procese)
care pot fi executate concurent pe mai multe procesoare. Presupune:
1. specificarea problemei;
2. identificarea unitilor fundamentale i interaciunile dintre acestea;
3. transpunerea acestor uniti fundamentele n procese cu interaciunile
specificate prin primitive de comunicare.
Programarea paralel este parte component a programrii concurente.
Termenul de programare concurent este asociat att cu sistemele multiprocesor i
reelele, ct i cu sistemele de operare i sistemele n timp real.
Un algoritm secvenial specific o execuie secvenial a unui set de instruciuni.
Execuia sa este numit proces. Un algoritm paralel specific doi sau mai muli
algoritmi secveniali care pot fi executai simultan ca procese paralele (concurente).
Astfel, un proces este o colecie de instruciuni de control secveniale care acceseaz
date locale sau globale i care poate fi executat n paralel cu alte uniti de program.
Procesoarele pe care se execut un program paralel pot fi grupate ntr-o unitate
(multiprocesor sau calculator paralel) sau pot fi separate ca maini autonome conectate
printr-o reea.
Programarea paralel necesit un limbaj de calcul i un limbaj de coordonare.
Limbajul de coordonare este cheia ce permite utilizatorului unificarea ntr-un
program a mai multor activiti separate, fiecare specificate utiliznd limbajul de calcul.
Limbajul de calcul permite calcularea unor valori i manipularea obiectelor-date locale.
Limbajul de coordonare permite crearea activitilor (procese) simultane i comunicarea
ntre acestea. De obicei, funciile standard ale limbajului de calcul i ale limbajului de
coordonare sunt unite ntr-un super-limbaj.
Un limbaj concurent este un limbaj de programare de nivel nalt pentru
programarea concurent, adic care ofer urmtoarele faciliti:
descrierea proceselor paralele;
mijloace de comunicare ntre procese;
posibiliti de sincronizare a proceselor.
Limbajele concurente sunt de obicei orientate funcie de o anumit arhitectur: sistem
monoprocesor, multiprocesor sau sistem distribuit.
ANALOGIE CU VIAA COTIDIAN
Modelul de dezvoltare a calculatoarelor se aseamn cu modelul dezvoltrii
umane. Supravieuirea speciei umane depinde de avansul a dou fronturi. Primul este
performana individului, fizic i intelectual, iar al doilea concurena social:
rezultatele sunt mult mai eficiente dac se lucreaz n grup. Cu ct grupul de indivizi
este mai mare) cu att progresul este mai mare.
Un numr de oameni de tiin i cercettori ai inteligenei artificiale au argumentat c inteligena uman se bazeaz pe interaciunea unui numr mare de uniti
simple de procesare. Aceast idee prezint interes n modelarea fiinei umane i a

13

inteligenei ei prin procesare distribuit paralel (prescurtat PDP). Un studiu al


mecanismului minii relev faptul c creierul uman este organizat dintr-un numr mare
de elemente interconectate care i transmit reciproc semnale sub form de excitatori i
inhibitori. Un sistem PDP "nva" din exemple. Spre deosebire de inteligena artificial,
n PDP nu exist reguli de baz. Elementele unui PDP sunt:
1. o mulime de uniti de procesare;
2. starea activitii sistemului la fiecare moment;
3. o anumit conectare ntre uniti;
4. o regul de propagare a unei directive de activitate;
5. o regul de activare;
6. o regul de nvare prin care structura de conectare este modificat prin
experien.
Pentru o ct mai bun nelegere a modului de construcie a algoritmilor paraleli,
se consider urmtoarea problem din viaa cotidian (Williams, 1990).
Problema Familial. O familie, compus din Tata, Mama i copii Ioan, Toma i
Simona, a terminat prnzul. Rmne de curat masa, splat vasele, ters i pus la loc n
dulap.
Soluii. Exist un numr de soluii care depinde de numrul de persoane (sau
procesoare!) care sunt disponibile. Se remarc urmtoarele.
Modul secvenial cu utilizarea unei persoane (procesor serial). Mama cur
masa, spal vasele i le pune n dulap, n timp ce Tata duce copii n parc.
Modul secvenial uti1iznd patru persoane (procesoare pipe-line):
1. Tata cur masa cnd s-a terminat prnzul;
2. Ioan spal vasele, cnd tata a terminat de curat;
3. Toma terge vasele, cnd Ioan a terminat;
4. Simona le pune n dulap, cnd Toma a terminat;
5. Mama pleac la cumprturi!
Modul banda rulanta (pipe-line) utiliznd patru persoane (procesor vectorial):
1. Tata ia un obiect de pe mas, i-l d lui Ioan i pleac s aduc altul;
2. Ioan spal obiectul primit, i-l d lui Toma i ateapt s primeasc alt obiect de la
Tata;
3. Toma terge obiectul primit, i-l d lui Simona i ateapt s primeasc un alt obiect
de la Ioan;
4. Simona terge obiectul primit i ateapt s primeasc altul de la Toma.
5. Mama i privete cu admiraie!
Din pcate, pot s apar probleme dac Ioan spal ncet vasele. Datorit
sincronizrii, ceilali trebuie s atepte dup el!
Modul de utilizare a mai multor persoane (procesor matriceal). Se presupune
c familia este suficient de numeroas ca fiecare s fie responsabil de un singur obiect
de pe mas. eful familiei direcioneaz orice micare determinnd fiecare persoan s
fac simultan acelai lucru. Dac eful spune "curai", fiecare va lua un obiect de pe
mas. Cnd eful spune "splai", fiecare va spla obiectul su .a.m.d. eful poate
decide ca anumii membrii ai familiei s nu lucreze. De exemplu, poate cere s fie
splate numai 5 pahare, astfel nct o serie de membrii rmn momentan fr activitate.
Modul selectiv de transmitere a mesajelor (procesare paralela cu transmitere de
mesaje). Obiectele care se cur sunt "mesaje". Spre deosebire de modelul anterior, n
care mesajele sunt transmise unidirecional, mesajele pot fi transmise n mai multe
direcii:

14

1. Dac un obiect este curat, Tata l transmite direct lui Simona;


2. Dac Toma primete un obiect murdar, l returneaz lui Ioan.
Transmiterea obiectelor se poate face printr-un spaiu rezervat comunicrii
(mas, zon tampon, buffer) care admite o anumit ncrcare .
Modul masa comuna (procesare paralela cu memorie comun). Obiectele
murdare, ude sau curate stau pe aceeai mas. Fiecare persoan dispune de un spaiu
mic de depozitare. Astfel, anumite obiecte, ca cele din apa de splare, nu sunt accesibile
tuturor persoanelor, numai cele de pe mas. Este necesar o atenie sporit pentru a nu
re-spla sau re-terge lucrurile curate, respectiv uscate.
Soluia grupului de procesoare. Modele similare se pot construi nlocuind
oamenii cu procesoare. Modelele depind de numrul i tipul elementelor de procesare.
Exist cinci modele hardware:
1. secvenial sau serial (model convenional),
2. procesor pipe-line i procesor vectorial (procesoare care transmit datele ntr-o direcie
bine definit),
3. procesor matriceal (procesoare "proaste" care ascult de un controlor),
4. transmitere de mesaje (mai multe procesoare care lucreaz mpreun i transmit date
conform unui protocol stabilit);
5. memorie comun (mai multe procesoare care lucreaz asupra aceluiai lot de date i
asupra unor date locale).
Calculatorul serial este constituit din dou pri:
1. unitatea central de procesare (CPU) de dimensiune mic;
2. memoria care are o dimensiune mare.
CPU lucreaz tot timpul, pe cnd memoria ateapt: din cnd n cnd CPU pune
sau extrage informaii n sau din memorie. De aceea, la un moment dat, doar o parte
mic din hardware particip la calcul.
Un exemplu similar, din viaa cotidian, a fost propus de T. Jebeleanu: o
companie n care eful lucreaz zi i noapte, pe cnd cei 1000 de angajai nu lucreaz
numai cnd eful vine n biroul lor. Modalitile de cretere a eficienei activitii din
companie sunt:
1. angajarea mai multor persoane (mai mult memorie) - activitatea este
mbuntit, dar eficiena descrete;
2. angajarea unui nou ef mai competent (un CPU mai rapid) - efectul este
similar cu cel din cazul anterior;
3. eful este suplinit de mai muli directori (procesoare) cu sarcini precise: unii
aduc informaiile de la angajai, alii le prelucreaz, alii decid unde s fie trimise
rezultatele, alii transmit rezultatele - aceti directori lucreaz n paralel!
4. se angajeaz efi de echip (memorii cache care introduc un anumit
paralelism n utilizarea hardware-ului, de partea memoriei);
5. se unesc mai multe companii (paralelism n sisteme cu granulaie mare) intervin probleme de comunicare ntre efi, iar organizarea ntregului ansamblu este mai
dificil dect problema iniial a organizrii companiei mici.

15

NIVELURI DE PARALELISM
Paralelismul este utilizat n scopul reducerii timpului de calcul. Nivelurile de
aplicabilitate ale ideii de paralelism corespund anumitor perioade de timp:
1. paralelism la nivel de job:
(a) ntre joburi;
(b) ntre faze ale joburilor;
2. paralelism la nivel de program:
(a) ntre pri ale programului;
(b) n anumite cicluri;
3. paralelism la nivel de instruciune: ntre diferite faze de execuie ale unei instruciuni;
4. paralelism la nivel aritmetic i la nivel de bit:
(a) ntre elemente ale unei operaii vectoriale;
(b) ntre circuitele logicii aritmetice.
La nivelul cel mai nalt, se urmrete maximizarea vitezei de execuie a
joburilor. Execuia unui job poate fi mprit n mai multe faze secveniale, fiecare
avnd nevoie de anumite programe i anumite resurse hard ale sistemului (faze tipice:
compilare, editarea legturilor, execuia, tiprirea rezultatelor). Deoarece operaiile de
intrare/ieire sunt mai lente dect unitatea central, se introduc mai multe canale de
intrare/ieire sau procesoare de periferice, care pot opera n paralel cu execuia
programului.
n interiorul unui program pot exista pri de cod care sunt independente una fa
de alta i pot fi executate n paralel de mai multe procesoare. Un alt exemplu sunt
instruciunile repetitive a crui execuie secvenial la anumit ciclu nu depinde de datele
din ciclul precedent, astfel nct se pot executa n paralel attea cicluri cte procesoare
sunt disponibile.
Execuia anumitor instruciuni poate fi mprit n mai multe sub-operaii i
poate fi aplicat principiul trecerii datelor printr-o "conduct" constituit din mai multe
procesoare (procesoare pipeline).
La nivelul cel mai de jos se poate interveni n logica aritmetic realiznd operaii
pe toi biii unui numr n paralel.
La construirea unui sistem paralel apar o serie de probleme:
1. Cte procesoare s fie utilizate?
2. Ct de mare s fie viteza fiecrui procesor?
3. Cum trebuie procesoarele interconectate?
4. Ct de mare s fie memoria?
5. S se utilizeze o memorie comun sau memorie local fiecrui procesor?
Eficiena unui program paralel depinde de calculatorul pe care se implementeaz
i astfel de rspunsurile la aceste ntrebri.

CLASIFICAREA SISTEMELOR PARALELE


In ultimii douzeci de ani, au fost studiate i construite sute de arhitecturi
diferite, de la maini cu procesoare foarte rapide total interconecate, pn la maini cu
mii de procesoare lente.
Diferenele dintre arhitecturile paralele existente la momentul actual pot fi
cuantificate prin parametrii urmtori:

16

1. numrul de procesoare i puterea procesorului individual;


2. complexitatea reelei de conectare i flexibilitatea sistemului (sistemul poate fi
utilizat la rezolvarea unei clase mari de probleme?);
3. distribuia controlului sistemului, adic dac masivul de procesoare este condus de un procesor sau dac fiecare procesor are propriul su controler;
4. mecanismul de control a sistemului;
5. organizarea memoriei.
O prim clasificare a sistemelor paralele se face n funcie de numrul de
procesoare. Termenul consacrat este cel de granulaie. Sistemele cu un numr mare de
elemente de procesare, fiecare tratnd un volum mic de date, au o "granulaie fin" (de
obicei de ordinul a 1000 de procesoare). Sistemele cu numr mic de procesoare care
fiecare trateaz un volum mare de date, sunt granulate grosier (de obicei, aproximativ
16 procesoare). Granulaia medie se consider ca fiind cea de 64 de procesoare.
Dintre sistemele cu granulaie grosier se remarc sistemele pipeline, sistemele
cu structuri de interconectare a procesoarelor tip arbore sau de tip inel, sistemele cu
interconectarea vecinilor apropiai, sistemele cu interconectare prin magistral (bus).
Dintre sistemele cu granulaie fin se remarc sistemele tip hipercub, sistemele
organizate pe bii, circuitele reconfigurabile prin comutatoare sau sistemele sistolice.
Funcie de tipul procesoarelor din sistemul paralel, sistemele paralele sunt:
1. omogene, dac conin procesoare de acelai tip,
2. heterogene, dac conin procesoare de tipuri diferite.
Din punct de vedere al mecanismului de control se disting mai multe categorii:
1. grup de procesoare per instruciune unic: la un timp dat numai un set mic de
instruciuni este ntr-o anumit faz de execuie. Dou categorii se deosebesc:
procesoare matriceale care efectueaz calcul paralel sincronizat: instruciuni
individuale opereaz asupra unui numr mare de date (asemenea procesoare necesit o
memorie modular),
calculatoare care efectueaz mai multe instruciuni concomitent,
2. grup de procesoare per instruciuni multiple.
Din punct de vedere al organizrii memoriei se disting dou categorii de sisteme:
1. multiprocesoare cu memorie comun;
2. multiprocesoare cu memorie distribuit.
Dup modul de comunicare a datelor ntre procesoare din cadrul unei reele se
disting:
1. sistem multiprocesor strns cuplat, n care procesoarele coopereaz intens pentru
soluionarea unei probleme;
2. sistem multiprocesor slab cuplat, n care un numr de procesoare independente i nu
necesar identice comunic ntre ele printr-o reea de comunicare.
Clasificarea cea mai des utilizat este urmtoarea (clasificarea Flynn). Conform
acestei clasificri calculatoarele paralele aparin unuia din urmtoarele patru sisteme:
SISD: sistem cu un singur set de instruciuni i un singur set de date;
SIMD: sistem cu un singur set de instruciuni i mai multe seturi de date;
MISD: sistem cu mai multe seturi de instruciuni i un singur set de date;
MIMD: cu mai multe seturi de instruciuni i mai multe seturi de date.
Sistemele paralele actuale fac parte din categoria SIMD sau MIMD. In primul caz
procesarea paralel are loc n pai sincronizai (sistemul este condus printr-un unic
controlor - respect acelai tact dat de un ceas comun), iar n cazul al doilea, n pai
independeni (fiecare procesor are propriul controlorul - ceas propriu).

17

Procesarea concurent mbrac dou forme:


1. pipelining
2. paralelism.
Un procesor pipeline conine un numr de procesoare aranjate astfel nct datele
de ieire ale unuia s constituie datele de intrare ale altuia. Procesoarele unui calculator
paralel sunt aranjate ntr-o structur oarecare care permite operarea simultan a mai
multor secvene a unui set de date. Diferena fundamental const n faptul c operaiile
pe un procesor pipeline se realizeaz prin executarea n secven a mai multor sarcini
distincte, asigurndu-se astfel doar un grad limitat de paralelism (exploateaz operaiile
complexe).
SISTEME SISD
Un sistem SISD reprezint maina serial clasic, care execut o singur
instruciune la un moment dat.
CPU

(IS)

Procesor

o instruciune

(DS)

Date

o dat

Figura de mai sus prezint schema iar figura urmtoare prezint funcionarea
unui SISD:

SISTEME SIMD
Un sistem SIMD este compus dintr-o unitate de control (MCU - master control
unit) i un numr de procesoare identice.
Unitatea de control transmite aceeai instruciune la fiecare procesor n parte.
Instruciunile sunt executate n acelai timp, adic sunt sincrone. Fiecare
procesor are o memorie privat i anumite sisteme permit accesul la o memorie global.
Fiecare procesor opereaz asupra unui cuvnt (32 sau 64 bii) sau asupra unui operand
format dintr-un singur bit, n fiecare ciclu de memorie.
Sistemele SIMD sunt indicate pentru rezolvarea problemelor care pot fi
descompuse n subprobleme ce presupun un efort de calcul similar (descompunere
regulat). Asemenea probleme sunt:
procesarea de imagini: grupuri contigue de pixeli sunt asignate unui procesor,
grupuri nvecinate fiind asociate cu procesoare nvecinate;

18

dinamica fluidelor: traiectoriile moleculelor unui gaz sunt urmrite relativ la o


gril, fiecare procesor fiind responsabil pentru o seciune din gril;
automate celulare, care sunt sisteme elementare a cror comportare colectiv
simuleaz fenomene complexe din natur. Un automat celular formeaz n spaiu o gril
sau o latice. Fiecrei celule i se asociaz o variabil de stare care se poate schimba dup
anumite intervale, conform unor reguli.
Figurile urmtoare prezint schema, respectiv funcionarea unui SIMD:
MCU

(IS)

Reea

(DM)

Date

P1
P2

Pn
Unitate
de control

o instruciune

mai multe date

Se disting dou tipuri de sisteme SIMD:


1. organizate pe cuvnt,
2. organizate pe bit.
Operaiile aritmetice ntr-un sistem organizat pe cuvnt sunt similare cu cele
efectuate de mainile seriale.
Algoritmii pentru mainile organizate pe bit depind de lungimea n bii a datelor
i nu de cardinalul mulimii de date. Mai multe instruciuni sunt necesare pentru a
efectua o operaie aritmetic simpl. Timpul aritmetic este mai lung dect cel dintr-un
sistem organizat pe cuvnt. Creterea vitezei nu se obine prin creterea vitezei fiecrui
procesor n parte, ci prin utilizarea a ct mai multe procesoare simultan. In
implementarea funciilor numerice, ca de exemplu, rdcina ptrat, se poate profita de
avantajele operaiei pe bii i produce algoritmi aproximativi egali n efort cu o operaie
de multiplicare.

19

Exemplele clasice de sisteme SIMD sunt


1. procesoarele vectoriale,
2. procesoarele matriceale i anumite matrici sistolice.
SISTEME MISD
Exemplele clasice de sisteme MISD sunt procesoarele pipeline care efectueaz
operaii asupra unui set mic de date. Intr-un procesor pipeline o singur dat este
operat de diferite faze ale unei uniti funcionale, paralelismul fiind realizat prin
simultana execuie a diferitelor etape asupra unui ir de date secveniale. Figura
urmtoare prezint schema unui sistem MISD.
MCU

(IM)

Reea

(DS)

Date

P1
P2

Pn
Unitate
de control

o dat

mai multe
instruciuni

SISTEME MIMD
Intr-un sistem MIMD, fiecare procesor poate executa diferite operaii pe date
distincte de cele ale altor procesoare. Fiecare procesor funcioneaz independent de
celelalte utiliznd propriul contor de program i setul propriu de instruciuni. Orice
comunicare ntre dou procesoare trebuie specificat explicit. Figura urmtoare prezint
schema unui sistem MIMD.
MCU

(IM)

Reea

(DM)

Date

P1
P2

Pn
Unitate
de control

mai multe
instruciuni

mai multe
date

memorie
comun

Seturile de instruciunile corespunztoare unor procesoare distincte sunt


independente unele de altele, execuia unei instruciuni nu influeneaz execuia alteia i
n consecin toate procesoarele pot opera la orice moment. Spre deosebire de sistemul

20

SIMD, n MIMD, modul de operare este asincron. Fiecare procesor are memoria sa
local, unitate aritmetic, contor de instruciuni i poate comunica cu celelalte
procesoare printr-o reea.
Figura urmtoare prezint funcionarea unui sistem MIMD.

In cazul unui SIMD sau unui MISD timpul de execuie a unei operaii
elementare necesit o unitate de timp, astfel nct este facilitat sincronizarea ntre
elementele de procesare (procesoarele respect acelai tact dat de un ceas comun).
Sistemele MIMD permit executarea asincron a proceselor unei aplicaii (fiecare
procesor are un ceas propriu).
Alegerea configuraiei reelei are o influen important asupra vitezei de
execuie. Sistemele actuale MIMD au un numr de procesoare mai mic dect cel al
sistemelor SIMD.
INSTRUCIUNI CONDIIONALE IN SISTEMELE SIMD I MIMD
Execuia unui program pe un procesor ntr-un SIMD depinde de setul de date
asupra cruia se opereaz. La prima vedere, n cazul unor instruciuni condiionale
asupra acestor date, execuia pe dou procesoare poate s fie diferit. Pentru a rezolva
aceast problem fiecare procesor dintr-un sistem SIMD deine un registru-permisiune
(enable register) pentru calificarea operaiilor de scriere. Numai acele procesoare care
au registrul-permisiune setat pe "true" pot scrie rezultatele calculelor n memorie.
Opus acestei situaii este comportarea unui sistem MIMD care nu ntmpin
dificulti la ntlnirea expresiilor condiionale: fiecare procesor decide codul
instruciunii proprii ce se va executa. Dificulti apar la ncercarea de sincronizare a
proceselor datorit timpilor diferii de execuie.
Se consider, pentru exemplificare, un acelai algoritm rulat pe un sistem SIMD
i un sistem MIMD. In primul caz se efectueaz un numr de operaii independent de
valoarea variabilei condiie, pe cnd n al doilea caz, numrul de instruciuni executate
variaz funcie de condiie.

21

* Secven program SIMD *


instruciune 1
if not conditie then
enable =False
instruciune 2
enable=not enable
instruciune 3
instruciune 4
enable=True
instruciune 5
instruciune 6

* Secven program MIMD *


instruciune 1
if conditie then
instruciune 2
else
{instruciune 3
instruciune 4}
instruciune 5
instruciune 6

SISTEME PARTIIONABILE
Un exemplu de sistem partiionabile este SIMD multiplu. Acesta este un sistem
de procesare paralel care poate fi reconfigurat dinamic pentru a opera ca una sau mai
multe maini SIMD independente, de dimensiuni diferite. O main multipl SIMD
const dintr-un numr n de elemente de procesare, o reea de interconectri i q uniti
de control, cu q < n.
Un sistem partiionabil este capabil de o partiionare i repartizare dinamic n
maini multiple. Partiionarea este realizat pe baza reelei de interconectare. Un
asemenea sistem permite:
abilitatea de partiionare a reelei n subreele, fiecare meninndu-i funcionalitatea
ca o reea complet;
independena submainilor, adic nici o main s nu interfere n execuia unei
aplicaii cu alt main, fr o instruciune adecvat.
ntr-o main partiionabil cu mod mixt toate submainile pot efectua o
comutare independent i dinamic ntre modurile SIMD i MIMD de paralelism.
Avantajele utilizrii unui asemenea sistem sunt multiple:
1. dac un procesor cedeaz, numai submainile care includ acel procesor sunt afectate;
2. mai multe submaini pot executa acelai program pe acelai set de date i compar
rezultatele;
3. accesul simultan n sistem a mai multor utilizatori, fiecare executnd diferite
programe paralele.
Sistemele partiionabile sunt apropiate de noiunea de reele neuronale.
TIPURI DE MIMD I TRANSPUTERE
Funcie de numrul procesoarelor, sistemele MIMD se clasific n:
1. sisteme ce utilizeaz switch-uri (ferme),
2. reele (cuburi, caroiaj, ierarhie, reconfigurabil).
Un MIMD cu comutatoare presupune un numr mic (de ordinul zecilor) de
procesoare. Procesoarele sunt conectate printr-o magistral (bus) sau printr-o reea de
comutatoare (switch-uri). Comutatoarele dintre procesoare asigur comunicarea ntre
procesoare (sistem cu memorie distribuit), iar comutatoarele procesor-memorie asigur
transferul de date dintre diverse blocuri de memorie i procesoare (sisteme cu memorie
comun). Fiecare procesor este autonom i poate opera ca i un calculator independent.

22

Sistemul este indicat n cazul unui paralelism de program, cnd problema este divizat
ntr-un numr mic de subprobleme. Au fost construite compilatoare care recunosc
comenzile specifice paralelismului ntr-un program secvenial. Problema hardware
asociat cu acest sistem este construirea unei reele de comutatoare rapide la un cost
sczut.
Un MIMD tip reea este o main cu un numr mare de procesoare identice,
conectate printr-o reea. Sistemele actuale conin de la 128 la 65536 de procesoare. In
mod obinuit, reeaua formeaz un hipercub, ns pentru anumite scopuri practice, se
construiesc i alte conexiuni topologice. Problema hardware asociat cu acest sistem
este alegerea unei reele adecvate din punct de vedere al performanei unui anumit
algoritm.
Unitatea indivizibil, de baz a unui MIMD tip reea, este elementul de
procesare care este construit dintr-un cip microprocesor cu memorie adiional, unitate
aritmetic i faciliti de comunicare. Denumirea standard pentru un asemenea
"calculator pe un cip", este aceea de trasputer. Procesoarele nu sunt autonome i trebuie
dirijate de un computer, gazd, separat ("host"). Datorit numrului mare de procesoare,
utilizarea transputerului necesit o analiz atent a problemei care se rezolv. Adesea
este necesar dezvoltarea de noi algoritmi care fac eficient utilizarea simultan a
procesoarelor i minimizeaz efortul de comunicare dintre acestea.
n general, un transputer presupune 4 legturi fizice. n figura de mai jos este
prezentat schematic diagrama unui transputer.

Un exemplu este transputerul T800 ce conine:


1. un procesor pe 32 de bii (de 10 Mips: milioane de instruciuni per secund),
2. 4 kbyte memorie local (nglobat, on-chip)
3. coprocesor pentru operaiile n virgul flotant pe 64 de bii (capabil s efectueze
1Mflop: operaii n virgul mobil per secund),
4. interfa de memorie pentru accesarea a pn la 4Gbytes memorie extern (off-chip),
5. patru legturi de comunicare bidirecional.
Fiecare legtur este un canal bidirecional de comunicare. Legturile dintre
transputere pot fi cuplate electronic n orice configurare dorit. Comunicaia printr-o
legtur poate avea loc simultan cu alte comunicaii sau cu efectuarea unor calcule. O
main care are 4n transputere se numete transputer n-dimensional.

23

TEHNICA PIPELINE I PROCESOARE PIPELINE


Termenul "pipeline" (conduct) provine din industria petrolier, unde o serie de
produi hidrocarbonai sunt pompai printr-o linie de selecie.
Tehnica pipeline (tehnica conductei) este similar cu cea a unei linii de
asamblare dintr-o unitate productiv. La fiecare staie de lucru se execut un pas al
procesului i toate staiile lucreaz simultan pentru diferite stadii ale produsului. Dac la
fiecare staie de lucru se consum un timp t, ritmul de producie este de un produs per t
uniti de timp, chiar dac acesta se obine n t * numrul de staii de lucru (egal cu
ritmul de producie pentru cazul n care un singur om sau robot deservete toate staiile
de lucru).
Se consider cazul unei singure uniti centrale, CPU. Pri ale acesteia care sunt
responsabile pentru anumite funcii, cum ar fi operaiile aritmetice, pot fi instruite
pentru a opera simultan. Pentru realizarea unei singure operaii, subunitile sunt
executate una dup alta. O asemenea operaie divizat presupune ca rezultatele furnizate
de o subunitate s fie obinute pe baza rezultatelor primite de la precedentul i, apoi,
transmise urmtoarei subuniti. Fiecare subunitate este asociat unui procesor.
Fiecare subunitate este specializat pe anumit tip de operaie. Intr-un procesor
"pipeline" data de intrare este privit ca un vector. Operaia ce urmeaz a fi efectuat
este un vector de instruciuni.
Termenul asociat cu staia de lucru este "pipe". Unitatea care efectueaz operaia
este numit linie de "pipe"-uri sau "pipeline".
Parametrul de baz a unui algoritm ce utilizeaz un pipeline, parametru care
influeneaz performana algoritmului, este lungimea vectorului (setului) de date, adic
numrul de elemente asupra cruia calculele sunt efectuate. Parametrii arhitecturali care
determin performanele n procesarea pe un pipeline este timpul unui ciclu, numrul de
etape al liniei de procesare (costul de start al acesteia).
De obicei o linie de pipe-uri este dedicat unei singure operaii pentru un tip
specific de date. Un procesor pipeline este unifuncional dac este dedicat unei singure
funcii. Un procesor multifuncional este capabil s execute operaii diferite (se schimb
sarcina fiecrui procesor sau se interconecteaz diferite faze ale liniei de pipe-uri). Dac
configuraia unui pipeline rmne neschimbat, este static, altfel este dinamic.
Exemplul 1. Se dorete adunarea a doi vectori de dimensiune n, notai a i b. Se
presupune c unitatea central poate fi separat n trei subuniti. Atunci, adunarea
vectorilor i afiarea rezultatului se poate desfura, n timp, astfel:
1. n prima unitate de timp, se acceseaz al;
2. n a doua unitate de timp, se acceseaz a2 i simultan b1 este adunat la al;
3. n a treia unitate de timp, se acceseaz a3, simultan b2 este adunat la a2 i se afieaz
al + b1;
4. procesul continu pn cnd rezultatul este complet afiat.
Timpul este redus la, aproximativ, o treime din timpul necesar pentru unitatea
central nedivizat.
Exemplul 2. Presupunem c o aplicaie este descompus ntr-un numr p de procese secveniale cu proprietatea c fiecare asemenea proces const n recepionarea
rezultatelor calculate de procesul anterior i rezultatele procesului curent sunt utilizate
de urmtorul proces. Aceste procese pot fi executate unul dup altul pe un singur
procesor sau pot fi alocate la un numr de p de procesoare distincte. Dac aplicaia este
executat de mai multe ori, atunci mai multe procesoare pot fi utilizate n paralel. n

24

distribuia aplicaie din figura de mai jos procesorul secund lucreaz asupra celei de a ia aplicaii, n timp ce primul lucreaz la aplicaia i + 1, iar al treilea la aplicaia i -1. In
primul ciclu, al doilea i al treilea procesor sunt blocate deoarece ateapt ca valorile lor
de intrare s fie produse. Astfel primele dou cicluri (timpul sau costul de start) sunt
utilizate pentru iniializarea liniei de pipe-uri.
Procesor 3

Parte 3 aplicaia
i-2

Parte 3 aplicaia
i-1

Parte 3 aplicaia
i

Procesor 2

Parte 2 aplicaia
i-1

Parte 2 aplicaia
i

Parte 2 aplicaia
i+1

Procesor 1

Parte 1 aplicaia
i

Parte 1 aplicaia
i+1

Parte 1 aplicaia
i+2

Timp t

Timp t+1

Timp t+2

Timpul de execuie a unei singure aplicaii va fi similar cu timpul execuiei pe


un singur procesor. Dac se execut un numr mare de aplicaii pe un procesor pipeline
cu p procesoare, atunci timpul va fi aproximativ 1/p din timpul secvenial (presupunnd
c fiecare procesor execut procesul repartizat n acelai timp ca i celelalte procesoare).
Exemplul 3. Operaia de adunare a celor doi vectori poate fi divizat innd
seama de etapele adunrii a doi scalari:
1. compar exponenii celor doi scalari;
2. aliniaz mantisa scalarului cu exponentul cel mai mic;
3. adun mantisele celor doi scalari;
4. normalizeaz rezultatul;
5. ajusteaz exponentul sumei.
Modul n care datele trec prin pipeline-ul asociat este evideniat n figura de mai jos.

Exemplul 4. Un exemplu similar de aplicare a tehnicii pipeline este


multiplicarea n virgul flotant ntr-un procesor vectorial. Sunt necesare mai multe
suboperaii (staii de lucru) care sunt prezentate n figura urmtoare.

25

Exemplul 5. n executarea unei instruciuni pot fi izolate patru procese (la


nivelul limbajului de asamblare): ncrcarea instruciunii, decodificare, execuie i
memorare rezultate. Acestor etape li se poate asocia cte un procesor. In primul ciclu,
prima, instruciune este ncrcat de un procesor i celelalte procesoare sunt neocupate.
In ciclul al doilea, instruciunea a doua este ncrcat, n timp ce prima este decodificat
.a.m.d. Probleme apar la instruciunile condiionale, deoarece este necesar alegerea
instruciunii care urmeaz. Una din soluii este utilizarea a dou pipeline-uri: cnd la
decodificare se recunoate o ramificaie, se iniializeaz cel de al doilea pipe cu
instruciunile unei ramuri a instruciunii condiionale, n timp ce primul pipeline
primete instruciunile celeilalte ramuri.
Nivelurile logice la care se aplic tehnica pipelining sunt:
la nivel de cuvnt: pipeline aritmetic;
la nivel de instruciune: pipeline asupra instruciunilor;
la nivel de program: macro-pipeline.
Exemplele 1 i 5 prezint pipeline-uri la nivel de instruciune, iar exemplele 3 i
4 prezint un pipeline-uri aritmetice. n cazul n care procesele din exemplul 2 nu sunt
reduse la simple instruciuni, este vorba despre un macro-pipeline.
Tehnica pipeline la nivel de cuvnt este utilizat la segmentarea unei operaii
aritmetice, astfel nct procesoare separate sunt responsabile pentru diferite pri ale
operaiei. Pipeline-urile aritmetice sunt utilizate pentru executarea unor operaii asupra
scalarilor sau vectorilor. Pipeline-ul scalar este utilizat n execuia unor operaii
aritmetice asupra scalarilor din cadrul unui ciclu. Ciclul asigur faptul c operaia este
repetat un numr de ori. Liniile de pipe-uri vectoriale sunt destinate unor operaii
vectoriale. Mainile care ncorporeaz pipeline-uri vectoriale sunt procesoarele
vectoriale.
Aplicarea metodei la nivelul instruciunii este des ntlnit. Exemplul clasic este
cel prezentat n figura ce ilustreaz exemplul 4, coloana din dreapta.
Macro-pipeline poate fi realizat n dou moduri:
1. un numr de procesoare similare sunt interconectate astfel nct informaia s
se poat scurge ntr-o singur direcie. Procesoarele depun un efort de calcul similar;
2. un numr de procesoare ne-similare sunt interconectate astfel nct informaia
s se poat scurge ntr-o singur direcie. Procesoarele rezolv anumite segmente ale
problemei. Este posibil ca fiecare procesor s fie construit fizic cu anumit destinaie. O
asemenea arhitectur este dedicat rezolvrii unei probleme specifice date.

26

Tehnica pipeline a fost utilizat la nceput pentru creterea vitezei de execuie a


instruciunilor aritmetice fundamentale (procesoarele pipeline au fost n faza iniial
sisteme MISD). Din acest punct de vedere, tehnica pipeline nu este privit ca o tehnic
specific paralelismului. Urmtorul pas a fost fcut de calculatoarele care au instruciuni
hardware care accept vectori ca operanzi. O instruciune hardware vectorial iniiaz
scurgerea operanzilor prin pipeline i, dac instruciunea invoc doi vectori surs,
fiecare segment al liniei accept dou elemente ale vectorilor, realizeaz funcia sa
particular, transmite rezultatul la urmtorul segment i primete dou noi elemente din
irul de operanzi (procesoarele pipeline pot fi privite n aceast faz ca sisteme SIMD).
Astfel mai multe perechi de operanzi sunt procesate concurent de pipeline, fiecare
pereche fiind ntr-o etap diferit de calcul.
PROCESOARE VECTORIALE
O generalizare a tehnicii pipeline, implementat astzi n supercalculatoarele de
tip procesor vectorial, este tehnica de nlnuire. Unitatea aritmetic a CPU este separat
n subuniti care opereaz simultan i care pot transmite direct (nlnuit) rezultatele
altor subuniti, ca n figura de mai jos.
Unitatea funcional
pentru adunare

Registru vectorial

Registru vectorial
Unitatea funcional
pentru nmulire

Registru vectorial

Registru vectorial
n implementrile actuale numrul subunitilor nu este ridicat (de obicei 12
uniti independente).
Operaiile vectoriale pe un calculator vectorial sunt mai rapide dect pe un
calculator serial dac lungimea vectorilor permite depirea costului (timpul) de start
(numrul de componente este mai mare dect numrul de pipe-uri).
Pentru un procesor vectorial dat se stabilete o mulime de instruciuni care
includ operaii vectoriale. Unitatea de control a procesorului vectorial care ntlnete o
asemenea instruciune trimite primul element al vectorului spre linia de pipe-uri
specific. Dac t uniti de timp sunt necesare pentru procesarea unui pipe, atunci, dup
un timp t, unitatea de control trimite un al doilea element de vector spre aceeai linie de
pipe-uri.
Dac asupra rezultatului unei operaii vectoriale se face o alt operaie vectorial
se utilizeaz avantajele tehnicii de nlnuire. Odat obinut prima component a
vectorului rezultat al primei operaii, ea este trimis direct la linia de pipe-uri
corespunztoare noii operaii. Intr-un sistem fr nlnuire, vectorul rezultat trebuie n
prealabil stocat, se ateapt terminarea, n totalitate, a primei operaii, apoi se trimite

27

prima component spre linia a doua de pipe-uri. Diferena ntre cele dou situaii const
n pierderea timpului prin startul ntrziat celei de a doua linii (n varianta nenlnuit).
Intr-un procesor vectorial "memorie-la-memorie", n fiecare ciclu al unei
operaii vectoriale, doi operanzi, componente a doi vectori, sunt citii din memorie.
Fiecare din subunitile liniei de pipe-uri opereaz pe anumite elemente ale vectorilor i
un element din vectorul rezultat este scris n memorie. ntr-un proces vectorial "bazat pe
registru" exist o singur cale de acces la memorie. Se permite stocarea de ctre
procesoare a operanzilor i rezultatelor n anumii regitrii (vectoriali). Fiecare registru
conine cte un vector suficient de lung pentru a asigura funcionarea liniei de pipe-uri
la ntreaga capacitate.
O performan deosebit fa de mainile seriale se obine cnd procesorul
vectorial este utilizat n calcule repetitive i mai puin n operaii condiionale.
Dei procesoarele vectoriale aduc o mbuntire substanial fa de calculatoarele secveniale, ele nu au viitor. Apare aceeai problem, ca i n cazul serial, de
limitare a vitezei de procesare datorat posibilitilor fizice.
PROCESOARE MATRICEALE
Un procesor matriceal este un agregat constituit din mai multe procesoare
identice care execut aceeai instruciune simultan asupra unor date locale. Este un
SIMD care ncorporeaz un numr mare de procesoare conectate ntr-o topologie
particular care se comport sincron sub aciunea unei singure uniti de control a crei
funcionalitate este direcionarea activitii procesoarelor. Activitatea procesoarelor este
sincronizat pentru execuia aceleiai instruciuni ce utilizeaz ns date diferite.
Modul de funcionare este asemntor activitii dintr-o clas de elevi atunci
cnd profesorul de sport comand o sritur i toi elevii clasei prsesc podeaua.
Referitor la modul de organizare a memoriei se disting dou tipuri:
sistem multiprocesor cu cuplare puternic, cnd memoria este comun pentru
toate procesoarele. Memoria este divizat n module independente i module de
interaciune;
sistem multiprocesor cu cuplare slab, cnd fiecare procesor are propria sa
memorie i comunicarea dintre procesoare se efectueaz printr-o reea de interconectare.
Figura de mai jos prezint schia scurgerii informaiei printr-un procesor matriceal slab
cuplat.

28

Un procesor matriceal este construit din procesoare simple i ieftine. Cea mai
comun organizare a unui asemenea sistem paralel este matricea bidimensional cu
elemente de procesare conectate cu cei mai apropiai vecini (tip gril).
Procesorul de control este el nsui un calculator: posed memorie local, unitate
aritmetic, regitrii i unitate de control. Unitatea de control stabilete dac instruciunea
este o operaie multi-date. Dac operaia nu este multi-date, procesorul de control
execut operaia. Dac este o operaie cu date multiple, instruciunea este transmis
procesoarelor aritmetice, fiecare procesor deinnd o parte din data multipl care va fi
operat, n unitatea sa local de memorie. In cazul cel mai simplu, un procesor aritmetic
deine o singur dat din mulimea de date, dar, dac dimensiunea datei-multiple
depete numrul procesoarelor, poate conine o submulime de date. Toate
procesoarele aritmetice primesc simultan instruciuni de la procesorul de control, iar
operaia asupra datei-multiple se face n paralel. Procesoarele aritmetice sunt, astfel,
"sclavii" procesorului de control. Diferena crucial ntre procesorul controlor i
procesoarele aritmetice este aceea c primul este singurul capabil s interpreteze
instruciunile condiionale.
Observaie. Termenul de procesor pipeline descrie o main bazat pe
principiul scurgerii informaiei printr-o band, pe cnd termenul de procesor matriceal
desemneaz un sistem n care procesoarele execut simultan aceeai instruciune.
Exemplu. Se adun doi vectori de 64 de componente. Utiliznd un procesor
matricial cu 64 de elemente de procesare, adunarea se poate realiza n trei pai. Fiecare
procesor primete dou componente, una dintr-un vector i componenta,
corespunztoare n indice, a celui de-al doilea. Unitatea de control comand fiecrui
procesor adunarea elementelor sale i scrierea rezultatului n componenta
corespunztoare a vectorului final.
Dac un procesor necesit un anumit timp t pentru a executa o instruciune
complex, atunci p procesoare execut instruciunea n acelai timp, dar timpul per
instruciune este (aproximativ) redus cu factorul 1/ p.
La evaluarea unei expresii condiionale procesorul de control are posibilitatea de
a selecta procesoarele care s execute urmtorul set de instruciuni, printr-o "masc". Un
procesor accept instruciuni de la procesorul de control numai dac bitul corespunztor
din masc este setat. Procesorul de control dispune setarea i resetarea mtii.
SISTEME CU MEMORIE COMUN
n funcie de modul de organizare a memoriei, sistemele MIMD se clasific n
sisteme cu memorie comun,
sisteme cu memorie distribuit.
ntr-un sistem cu memorie comun, fiecare procesor are acces, printr-un anumit
mecanism, la o memorie global. Procesoarele comunic prin obiectele plasate n
memoria comun. Probleme apar referitor la controlul accesului la memorie. O reea
conecteaz fiecare procesor la fiecare banc de memorie, ns nici un procesor sau
banc de memorie nu sunt conectate direct unul cu altul. Memoria comun este global
adresabil de toate procesoarele.
Exist mai multe variante de interconectare n reea:
1. printr-o singur magistral comun, un bus comun: fiecare procesor acceseaz
memoria comun concurnd cu celelalte procesoare pentru bus i ocupnd magistrala n
timpul tranzaciei de memorie. Astfel, la un moment dat, doar un procesor poate accesa

29

memoria comun. Maini de acest tip sunt echipate, n mod uzual, cu o memorie
special, numit cache. Un cache poate fi privit ca o colecie de regitrii rapizi n care
un registru memoreaz adresa i valoarea unei locaii de memorie. De obicei un cache
separat este asociat cu fiecare procesor din reea. Locaiile frecvent referite de ctre un
procesor sunt copiate n cache. Prin acest procedeu cerinele de citire ale unor asemenea
locaii sunt satisfcute de ctre cache i nu necesit referine n memoria comun. Se
reduce timpul de accesare pentru o locaie individual de memorie i se mbuntesc
performanele sistemului reducnd comunicrile prin bus;
2. printr-o reea cu magistral multipl: se permite accesul simultan a unui
numr de procesoare egal cu numrul de magistrale existente la diferitele bnci de
memorie;
3. prin linii de comutatoare (crossbar switch): se permit interconectri arbitrare
ntre procesoare i bncile de memorii;
4. prin comutatoare multietape: interconectri de acest tip caut balansarea costperforman. Cea mai comun conectare de acest tip este cea descris prin metoda
amestecrii perfecte.
Primele trei modele sunt schiate n figura de mai jos.

Modelul ideal al "paracomputerului" const ntr-un SIMD care conine un numr


nemrginit de procesoare care toate pot accesa o memorie comun fr nici un conflict
i fr cost n timp. Cauzele obinuite ale ineficienei unui algoritm n implementare
(ntrzieri datorate transmiterii de date sau conflictelor de acces la memorie) sunt
anulate, astfel nct paralelizarea complet a algoritmului conduce la performana
optimal. Opuse acestui model sunt calculatoarele paralele de astzi cu numr fixat de
procesoare i de obicei mic relativ la dimensiunea problemelor.
Modelul RAM (Random Acces Memory) al calculatoarelor secveniale a fost
generalizat la PRAM (Parallel Random Acces Memory), model n care mai multe
procesoare pot accesa simultan o memorie comun. Acest model are mai multe variante,
n funcie de modul n care se realizeaz scrierea unei variabile comune:
1. EREW PRAM (Exclusive Read Exclusive Write): operaia de citire i cea de
scriere este nedivizibil ntre procesoarele sistemului;
2. CREW PRAM (Concurent Read Exclusive Write): fa de modelul anterior se
permite citirea simultan a unei variabile;

30

3. CRCW PRAM (Concurent Read Concurent Write): se permite att citirea i


ct scrierea simultan. Scrierea se efectueaz dup anumite reguli:
(a) Common CRCW PRAM: modelul cere ca toate procesele care scriu simultan
o valoare ntr-o locaie de memorie s scrie aceeai valoare;
(b) Priority CRCW PRAM: se asociaz un index fiecrui procesor i cnd se
ncearc scrierea simultan a mai multor valori provenite de la procese distincte,
valoarea scris va fi cea asociat procesorului cu cel mai mic index;
(c) Arbitrary CRCW PRAM: valoarea memorat provine de la un procesor ales
n mod aleator dintre cele care ncearc scrierea simultan.
PRAM este cel mai puternic model utilizat n construcia algoritmilor paraleli.
Modelul PRAM neglijeaz orice constrngere hard. Astfel n modeleul PRAM sunt
posibile toate legturile ntre procesoare i oricare locaie de memorie. Fiecare procesor
este o main RAM cu operaiile i instruciunile uzuale. Modelul PRAM face parte din
categoria SIMD. Procesoarele execut simultan acelai program pe date diferite.
Execuia pe un procesor a programului depinde de identificatorul de procesor. Toate
procesoarele opereaz sincron sub controlul unui ceas comun.
SISTEME CU MEMORIE DISTRIBUIT
Intr-un sistem cu memorie distribuit, fiecrui procesor i este destinat o parte
din memorie. Astfel, fiecare procesor are o memorie local (privat). Procesorul
mpreun cu memoria local constituie un element de procesare.
Sistemele cu memorie distribuit sunt de obicei maini bazate pe transputere.
Comunicarea se face pe baza conectrilor fizice dintre procesoare i presupune
transmiterea unor mesaje. Interconectarea tuturor procesoarelor, dac numrul acestora
este mare, este practic imposibil. Soluia practic adoptat este conectarea fiecrui
procesor la un numr mic de alte procesoare. Se formeaz astfel structuri deosebite
pentru reeaua de interconectare. Structurile standard sunt laticea, arborele binar,
hipercubul, structura liniar sau circular.
Procesoarele sunt legate prin canale de comunicare. Aceste canale permit ca
mesajele s fie transmise de la un proces i s fie recepionat de altul. Transmiterea i
recepionarea se efectueaz cu ajutorul unor primitive de tipul:
send expresie to destinatie
receive variabila from sursa
Adiional, se transmit informaii asupra subiectului mesajului astfel nct cele dou pri
comunicante s cad de acord asupra ceea ce se comunic. Un caz simplu este
transmiterea unui ntreg: procesul receptor trebuie s fie pregtit s recepioneze un
ntreg.
Exist mai multe variante de utilizare a canalelor de comunicare:
1. prin numirea direct a procesului emitent/receptor;
2. printr-o cutie potal general;
3. prin numirea canalului de comunicare.
n primul caz, comunicarea este viabil dac cele dou procese invocate sunt
pregtite s comunice, adic n procesul emitent exist o primitiv send expresie to
proces2, iar n procesul receptor exist un receive variabila from proces1 (necondiionat
de exemplu printr-un if). Este necesar o eviden clar a numrului de primitive send i
receive.

31

O cutie potal poate fi destinaia oricrui send i sursa oricrui receive care
numesc acea cutie potal. Primitivele au forma: send <expresie> to mailbox1, respectiv
receive <variabila> from mailbox1. Procesul emitent nu controleaz care proces
recepioneaz mesajul. Aceast form de comunicare este utilizat n majoritatea
limbajelor logice concurente: expeditorul adaug mesaje la sfritului unui ir de
mesaje, iar receptorul inspecteaz irul, extrgnd eventual un mesaj dorit.
Un canal de comunicare este definit ca o legtur unidirecional ntre dou
procese (unul este emitor, iar altul receptor). Canalele de comunicare dintre procese
pot fi statice cnd legturile sunt setate n timpul compilrii, sau pot fi dinamice cnd
sunt create i distruse n timpul execuiei unei aplicaii. Primitivele asociate transmiterii
prin canale sunt send <expresie> via canal2, respectiv receive <expresie> via canal1.
Transmiterea de mesaje implic cooperarea ambelor pri. Comunicarea se poate
face:
1. unu la unu: prin specificarea identificatorului de proces, definirea unui canal
distinct ntre procese sau definirea celor dou procese ca singurele pri care pot utiliza
cutia potal (tata d lui Ioan un vas, dac Ioan este pregtit s-l primeasc) ;
2. mai muli la unul: un singur proces este pregtit s accepte mesaje de la o
mulime de procese (mai multe persoane care strng vasele, unul singur care le spal);
3. unul la mai muli: mai muli receptori poteniali i un singur emitor. Exist
dou variante:
(a) unul dintre receptori va accepta comunicarea de la emitor (mai
muli spltori de vase, unul singur care aduce vasele);
(b) toi receptorii vor accepta comunicarea (tata spune copiilor s tac);
4. mai muli la mai muli: mai muli receptori poteniali i mai muli emitori, n
variantele:
(a) un receptor accept comunicarea de la un emitor;
(b) toi receptorii accept comunicarea de la oricare dintre emitori;
(c) anumite combinaii ntre receptori i emitori vor fi stabilite ntr-o
comunicare.
CLASIFICAREA REELELOR DE INTERCONECTARE
ntr-un sistem paralel cu memorie distribuit procesoarele sunt conectate printr-o
reea prin intermediul creia comunic.
Intr-un sistem ideal fiecare element este conectat cu oricare altul. In practic,
acest tip de interconectare este posibil numai pentru un numr redus de procesoare.
In construirea calculatoarelor paralele se ine seama de clasa de probleme care
urmeaz a fi rezolvate cu maina respectiv i de limitarea numrului de conexiuni ale
fiecrui element de procesare. Reconfigurarea (logic) este permis, astfel nct este
posibil construirea unei varieti mari de configuraii i schimbarea lor pe parcursul
calculului. Din pcate, reconfigurare are un efect negativ asupra timpului de calcul: dac
cerinele de interconectare pentru un algoritm dat nu corespund configuraiei reelei,
atunci comunicarea datelor afecteaz viteza de calcul.
Reele de interconectare pot fi clasificate n trei categorii:
1. fiecare element este conectat cu un anumit numr de alte elemente. Structura
reelei depinde de problema care se rezolv;
2. fiecare element este conectat cu oricare altul prin intermediul unei puni de
legtur, numit "switchboard" (punte de comutatoare). Prin aceast modalitate de

32

conectare se garanteaz c ntr-un numr mic de pai pot fi conectate oricare dou
procesoare. Se utilizeaz i conexiunile directe cu procesoarele nvecinate, legtura fiind
avantajoas pentru un numr mare de algoritmi paraleli;
3. fiecare element este conectat direct cu oricare altul: aceast construcie este, n
prezent, practic inexistent, exceptnd mainile cu numr mic de procesoare. Exist mai
multe ncercri de conectare complet a elementelor de procesare:
(a) prin magistral (bus): costul unei asemenea interconectri este redus, dar nu
este practic pentru un numr mare de procesoare, deoarece apar ntrzieri la
transmiterea de date de la un proces la altul simultan. Dac toate cele n procesoare
doresc s comunice simultan, toate cele n comunicri vor fi seriale i unul dintre
procesoare va fi ntrziat cu un timp egal cu comunicrile celorlalte n - 1 procesoare;
(b) prin conexiuni directe: fiecare procesor este conectat la oricare alt procesor
utiliznd n(n-l) legturi unidirecionale. Avantajul este posibilitatea de comunicare
simultan a procesoarelor, adic nu exist ntrzieri datorate reelei. Cnd n este mare,
costul unei asemenea conectri este foarte mare. Dac, de exemplu n=1024, sunt
necesare 1.147.552 legturi. Cum un procesor este implantat pe un singur cip, numrul
de pini cerui pentru realizarea tuturor conectrilor depete posibilitile tehnologiilor
actuale.
Reeaua de interconectare poate fi specificat printr-un graf G = (N, E), n care
fiecare nod i din N reprezint un procesor, iar fiecare latur (i,j) din E reprezint o
legtur uni- sau bi- direcional ntre procesoarele i i j.
Interconectarea este caracterizat prin doi parametri:
1. diametrul reelei care este distana maxim parcurs de un mesaj ntre dou
noduri (elemente de procesare) arbitrare ale reelei;
2. gradul unui nod care este numrul de procesoare cu care nodul este conectat
(msoar costul interfeei hardware a fiecrui nod).
Exemplul 1. Structura liniara de interconectare. In structura liniar oricare
procesor Pi este conectat direct cu vecinii si Pi-1 i Pi+1. Utilizarea unei asemenea
structuri este indicat pentru anumii algoritmi, ca de exemplu sortarea par-impar.
Diametrul reelei cu p procesoare este p-1, iar gradul unui nod este doi.
Exemplul 2. Structura ciclica de interconectare. Conectarea ciclic a n
procesoare este caracterizat prin diametrul n/2 i gradul unui nod este 2.
Exemplul 3. Structura de interconectare tip arbore binar. Intr-un sistem
construit pe baza unui arbore binar, fiecare procesor de la un nivel k este interconectat
direct cu exact dou sau zero procesoare de la nivelul k + 1. Fiecare procesor de la
nivelul k + 1 este conectat direct cu un singur procesor de la nivelul k, exceptnd
procesorul de la nivelul zero, considerat nod rdcin.

O asemenea structur de tip arbore de ordin n, notat An, (cu 2n - 1 noduri), este,
de exemplu, utilizat cu succes pentru adunarea a 2n - 1 numere. n fiecare element de la
nivelul n - 1 se memoreaz o valoare numerotat de la 1 la 2n-1 - 1. Fiecare procesor

33

aflat n nodurile interne ale arborelui are de efectuat o operaie de adunare, iar nodul
rdcin furnizeaz rezultatul final.
Arborii binari sunt asociai unor algoritmi fundamentali, cum sunt, de exemplu,
cei de sortare, cutare, evaluare a expresiilor algebrice .a.m.d. n algoritmii de evaluare
a expresiilor aritmetice, fiecare procesor aflat ntr-un nod intern al arborelui efectueaz
o anumit operaie, iar nodul rdcin furnizeaz rezultatul final.
Numrul minim de niveluri ale arborelui indic numrul de etape n care poate fi
evaluat o expresie aritmetic, n paralel. Numrul de etape este, evident, cel mult egal
cu cel necesar ntr-o evaluare serial. A
Exemplul 4. Structurile de tip gril i tor. Intr-o gril de n * m noduriprocesoare fiecare element este conectat cu patru vecini, ca n figura de mai jos.

In cazul particular al aceluiai numr de procesoare n ambele direcii, n,


structura este numit latice i este notat Ln. Dac dimensiunea n este par, laticea poate
fi divizat n patru sub-reele avnd aceleai proprieti ca i laticea iniial. Structura
este des ntlnit n sistemele MIMD, deoarece permite, cu uurin, reconfigurare a
logic la structura de interconectare cerut de problema ce se rezolv. O asemenea reea
cu p noduri are diametrul p i gradul maxim al unui nod egal cu patru. Drumul
mesajului de la un nod sursa la un nod destinaie este numrul de micri pe linii i
coloane pe care le efectueaz mesajul.
Apropiat structurii de latice este torul. Elementul de procesare corespunztor
punctului (i,j) din tor, Pij, este conectat cu
Pij-1 Pij+1 Pi-1j Pi+1j
unde i 1 i j 1 sunt considerai modulo n, ca n conectarea ciclic.
S-au construit de asemenea reele cu conectarea celor mai apropiai opt vecini.
Prin conectarea vecinilor prin comutatoare se obine o reea n X (X-net).
Exemplul 5. Structura de tip hipercub. Cele 2n vrfuri i 2n-1n laturi ale unui cub
n-dimensional constituie nodurile-elemente, respectiv interconectrile unui hipercub,
notat Hn.
O structur tip hipercub n-dimensional consist n 2n procesoare interconectate
ntr-un cub n-dimensional dup cum urmeaz. Fie bn-1 bn-2 ... ba reprezentarea binar a
lui i, unde 0 i<2n. Atunci procesorul Pi este conectat cu procesorul Pj dac j n
reprezentare binar difer ntr-un singur bit fa de i, adic j(10) = bn-1 ... bk ... b0,
bk = 1 - bk, 0 k n-1 dac i(10) = bn-1 ... bk ... b0. Pentru cazurile particulare n= 1,2,3,4,
reprezentrile hipercubului sunt cele din figura de mai jos.
Hipercubul este o structur recursiv. Se observ c Hn+l poate fi obinut din Hn
prin legarea nodurilor corespunztoare a dou copii ale lui Hn. Bitul semnificativ a
identificatorilor primului cub Hn este 0, respectiv 1 la copia acestuia. De exemplu,
pentru n = 4,5 interconectrile sunt prezentate n figura de mai jos.

34

Diametrul unui hipercub n dimensional este n (deoarece distana dintre dou


procesoare este egal cu numrul de poziii binare n care cei doi identificatori difer),
iar gradul fiecrui nod este tot n.
Calculatoarele paralele cu topologie de tip hipercub sunt comecializate la
momentul actual ca sisteme MIMD. Dimensiunea curent este n = 10.
Apropiat de structura tip hipercub este cea a unui sistem cu transputere ndimensional ce conine 4n transputere, are gradul unui nod egal cu 4, iar diametrul dn
satisface relaia recursiv dn = dn-1 + 1.
SISTEME GAZD
Pentru a menine funcionalitatea unui sistem n regim secvenial masivele de
procesoare sunt privite ca un calculator independent care este "ataat" unei aplicaii
lansate pe un calculator serial aflat ntr-o aceeai reea de interconectare.
O cale direct pentru a permite unui utilizator s se cupleze la maina paralel
este apelarea unor programe utilitare care permit utilizatorului s foloseasc calculatorul
paralel pentru scopul su. Aceste programe ruleaz sub controlul sistemului de operare
al calculatorului gazd. Ele sunt lansate printr-un fel de interpretor de comenzi.
Complexul calculator - utilitare este numit sistem gazd (host).
La nivelul sistemului de operare a mainii gazd se definesc:
1. nucleul: care permite intercomunicarea dintre procese;
2. kernel: este o extensie a nucleului pentru funcii precum crearea i distrugerea
obiectelor definite de procese, asocierea obiectelor la spaiul adresabil, propagarea
evenimentelor speciale (ntreruperi);
3. Pose (Parrallel Operating System Extension): se ocup de organizarea memoriei i a proceselor, manipularea fiierelor, a dispozitivelor de intrare/ieire;
4. aplicaia-utilizator: determin complexitatea i distribuirea proceselor pe
nodurile masivului de procesoare.
Sistemul gazd creeaz un model de aciune a unor procese virtuale pe baza unui
soft ce acioneaz ca un plan ntre aplicaie i maina paralel.

35

Capitolul 2
PROGRAMARE PARALEL
PROCESE CONCURENTE
Un program este o descriere formal a unor aciuni i date conform unui
formalism convenional oarecare. Un proces este o succesiune de aciuni care sunt
executate n mod secvenial. Un proces este astfel activitatea rezultat ca urmare a
execuiei unui program de ctre un procesor. Un program poate reprezenta descrierea
unui numr oarecare de procese i mai multe procese pot fi executate pe acelai
procesor (dispozitiv care execut instruciunile n mod secvenial, ntr-o succesiune
dat).
Un program secvenial este descrierea unui singur proces. Un program concurent
descrie mai multe procese care vor fi executate n mod concurent pe un sistem de calcul.
Mai multe procese se execut n mod concurent (sunt concurente sau paralele) dac
executarea lor se suprapune n timp. Dou procese sunt concurente dac prima
instruciune a unui proces este lansat nainte de ncheierea ultimei instruciuni a
celuilalt proces.
MULTIPROGRAMARE I MULTIPROCESARE
Sistemele cu multiprogramare permit prezena simultan n memoria central a
mai multor programe secveniale (procese) ce se execut n paralel permind folosirea
n comun a resurselor sistemului cu scopul mbuntirii gradului lor de utilizare. n
aceste sisteme concurena are loc ntre programe diferite i nu ntre procese provenind
din acelai program.
Paralelismul poate fi:
logic, cnd exist un singur procesor care este atribuit alternativ proceselor. La
un moment dat se execut fizic o aciune corespunztoare unui singur proces. Avnd n
vedere faptul c, alternativ, se execut aciuni corespunztoare diferitelor procese,
acestea se desfoar concurent (se lanseaz instruciunile unui proces nainte de a se fi
executat toate instruciunile corespunztoare celorlalte). Aceste procese sunt
multiprogramate pe un sistem monoprocesor;
fizic, cnd fiecrui proces i este atribuit n exclusivitate cte un procesor. n
acest caz, la un moment dat, se desfoar efectiv instruciuni corespunztoare mai
multor procese. Funcie de sistemul paralel utilizat denumirile sunt urmtoarele:
1. dac procesoarele sunt legate la o memorie comun prin intermediul creia se
poate realiza schimbul de informaie ntre ele, sistemul este numit multiprocesor, iar
procesele sunt multiprocesate;
2. dac se utilizeaz un sistem distibuit, format din noduri (unul sau mai multe
procesoare legate la o memorie comun) legate ntre ele prin canale de comunicaie,
sistemul este numit reea.
COMUNICARE I SINCRONIZARE
Problemele executate sub controlul unui sistem cu multiprogramare sunt
exemple de procese paralele independente. In majoritatea cazurilor ns, natura

36

problemei de rezolvat impune interaciunea ntre procesele unui program concurent din
urmtoarele motive:
utilizarea comun de ctre procese a unor resurse cum ar fi memoria comun,
echipamente periferice, zone tampon etc;
cooperarea proceselor n sensul c un proces folosete anumite date rezultate
din activitatea altuia.
Exist dou forme de interaciune ntre procese paralele exprimate n
urmtoarele primitive:
1. comunicarea ntre procese distincte (transmiterea de informaii ntre
procese);
2. sincronizarea astfel nct procesele s atepte informaiile de care au nevoie
i nu sunt produse nc de alte procese (restricii asupra evoluiei n timp a unui proces).
Primitivele de sincronizare sunt operaii pe care nucleul sistemului de
programare concurent le pune la dispoziia programatorului n vederea rezolvrii
problemelor de sincronizare. Nucleul reprezint o interfa ntre program i suportul
fizic.
Cele trei forme acceptate de sincronizare sunt urmtoarele:
1. excluderea mutual: se evit utilizarea simultan de ctre mai multe procese a
unui resurse critice. O resurs este critic dac poate fi utilizat doar de singur proces la
un moment dat;
2. sincronizarea pe condiie: se amn execuia unui proces pn cnd o anumit
condiie devine adevrat;
3. arbitrarea: se evit accesul simultan din partea mai multor procesoare la
aceeai locaie de memorie. n acest caz se realizeaz a secvenializare a accesului,
impunnd ateptarea pn cnd procesul care a obinut acces i-a ncheiat activitatea
asupra locaiei de memorie.
Punctele dintr-un program unde elementele de procesare comunic ntre ele sunt
numite puncte de interaciune. Un punct de interaciune mparte procesul n dou etape.
Comunicarea permite ca execuia operaiilor pe un procesor s fie influenat de
execuia pe alt procesor. La sfritul primei etape procesoarele comunic ntre ele, dup
care trec ntr-o a doua etap ce utilizeaz datele comunicate.
n execuia unui program paralel timpul asociat unei etape pentru un procesor
oarecare este o variabil aleatoare. Motivele sunt multiple:
multi procesorul poate fi constituit din procesoare cu viteze diferite;
operaiile efectuate de un procesor pot fi ntrerupte prin sistemul de operare;
timpul de procesare pentru un element poate s depind de datele de intrare.
Sincronizarea n sistemele paralele cu memorie comun
ntr-un sistem paralel cu memorie comun procesele au acces la variabilele
comune pe care le pot citi i scrie. n acest caz sincronizarea este cerut pentru a preveni
rescrierea unei date de ctre un proces nainte ca alt proces s efectueze citirea
informaiei anterioare.
Intr-un program paralel asincron, procesele nu ateapt introducerea datelor, ci
continu corespunztor informaiei care este coninut curent n variabilele globale. ntrun MIMD fiecare procesor va opera sub controlul unui ceas separat. Dac este necesar
accesarea unei date de ctre un procesor responsabilitatea faptului c valoarea datei este
cea corect revine utilizatorului.

37

Sincronizarea poate fi implementat cu ajutorul unor semafoare sau unor


monitoare prin intermediul crora accesarea unei variabile devine o operaie
indivizibil: dac mai multe proces ncearc s acceseze n acelai tip o variabil
comun, atunci numai unul singur va avea succes. O operaie indivizibil este una care
odat pornit nu poate fi ntrerupt (de exemplu tipririle sau asignrile). Seciunile de
cod care sunt protejate la intervenia mai multor procese simultan sunt numite seciuni
critice. O seciune critic este tratat ca o operaie indivizibil (sincronizare implicit).
Cu ajutorul seciunilor critice se poate defini excluderea mutual: numai un proces este
admis a se afla n interiorul unei seciuni critice la un moment dat, iar dac dou sau mai
multe procese solicit simultan s intre ntr-o seciune critic, alegerea uneia dintre ele
se face ntr-un interval finit de timp (nu se "invit" reciproc).
Semafoarele sunt des utilizate n mecanismele de sincronizare. Un semafor este
o variabil ntreag care poate lua numai valori pozitive. Pentru acest tip de dat se
definesc dou operaii: incrementarea i decrementarea valorii (operaii indivizibile).
Considernd un semafor s (variabil ntreag), operaiile primitive admise asupra
acestuia sunt
1. P(s): procesul ateapt pn cnd s > 0, apoi decrementeaz s cu 1;
2. V(s): incrementeaz s cu 1.
Aceste operaii sunt indivizibile. Operaia P poate provoca, n anumite condiii, blocarea
unui proces, iar V, relansarea unui proces anterior blocat. Semaforului i este asociat un
ir de ateptare. Procesul blocat se introduce n irul de ateptare unde st pn la
relansarea lui printr-o operaie V. Dac mai multe procese intenioneaz s execute
simultan operaii P sau V asupra aceluiai semafor, ele vor fi satisfcute cte una ntr-o
ordine arbitrar.
n scopul excluderii mutuale, seciunile critice vor fi incluse ntre operaii P i V
asupra aceluiai semafor s, iniializat cu valoarea 1. Primul proces care execut P(s) va
intra n seciunea critic, semaforul obinnd valoarea zero. Astfel, orice tentativ din
partea altui proces de a executa o seciune critic se va solda cu punerea n ateptare
prin primitiva P. Dup execuia de ctre primul proces a operaiei V se admite accesul
unui nou proces la resursa critic. Se exclud ntre ele seciunile critice corespunztoare
aceleiai resurse, dar nu exist nici un motiv pentru interzicerea accesului concomitent
din mai multe procese la resurse critice diferite, caz n care se realizeaz o excludere
mutual selectiv.
Sincronizarea pe condiie se efectueaz astfel: un proces este pus n ateptare
executnd o operaie P asupra unui semafor i un alt proces l relanseaz executnd V
asupra aceluiai semafor dup ce a constatat ndeplinirea unei condiii.
Seciunile critice sunt destinate excluderii mutuale. O declaraie de forma
var v: shared i
introduce o variabil v de tip i, indicnd faptul c ea reprezint o resurs comun
partajat de mai multe procese. Accesul la aceast variabil este permis doar n
interiorul unei regiuni critice de forma region v do instr1; ... ; instrn end. Excluderea
mutual este asigurat prin faptul c la un moment dat un singur proces poate executa
instruciuni corespunztoare unei regiuni critice referitoare la o variabil v.
Execuia unei seciuni critice se desfoar dup cum urmeaz. Dac nici un alt
proces nu se afl ntr-o regiune critic referitoare la aceeai variabil v, procesul
continu (execut instruciunile); dac exist un proces n interiorul unei astfel de
regiuni critice, noul proces va fi introdus ntr-un ir de ateptare asociat resursei critice

38

respective. In momentul n care un proces prsete o regiune critic, se activeaz unul


din procesele care ateapt n irul asociat variabilei.
Pentru sincronizarea pe condiie s-au introdus regiunile critice condiionale care
presupun punerea n ateptare a unui proces pn la ndeplinirea unei condiii exprimate
printr-o expresie logic.
Monitorul este asemenea unei doici a crui permisiune sau ajutor trebuie
cerut naintea oricrei comunicri dintre dou procese. Dac semafoarele sunt primitive
de sincronizare ce pot fi calificate ca fiind de nivel sczut (i dificil de utilizat),
monitoarele ofer o sincronizare de nivel nalt. Un monitor este un tip abstract de dat
care consist dintr-un set permanent de variabile ce reprezint resursa critic, un set de
proceduri ce reprezint operaii asupra variabilelor i un corp (secven de instruciuni).
Corpul este apelat la lansarea programului i produce valori iniiale pentru variabilelemonitor. Apoi monitorul este accesat numai prin procedurile sale. Accesul la aceste
proceduri este permis numai procesoarelor selectate. Funcia monitorului este
ndeplinit n condiiile n care codul de iniializare este executat naintea oricrui
conflict asupra datelor i numai una dintre procedurile monitorului poate fi executat la
un moment dat. Monitorul creeaz o coad de ateptare a proceselor care fac referire la
anumite variabile comune (astfel nct primul sosit la coad este primul servit atunci
cnd "ua" este deschis).
Excluderea mutual este realizat prin faptul c la un moment dat poate fi
executat doar o singur procedur a monitorului. Sincronizarea pe condiie se
realizeaz prin mijloace mnuite explicit de ctre programator prin variabile de tip
condiie i dou operaii signal i wait. Dac un proces care a apelat o procedur de
monitor gsete condiia fals, execut operaia wait (punere n ateptare a procesului
ntr-un ir asociat condiiei i eliberarea monitorului). n cazul n care alt proces care
execut o procedur a aceluiai monitor gsete condiia adevrat, execut o operaie
signal (procesul continu dac irul de ateptare este vid, altfel este pus n ateptare
special pentru procesele care au pierdut controlul monitorului prin signal i se va
executa un alt proces extras din irul de ateptare al condiiei).
Monitoarele au fost utilizate ntr-o prim etap ca baz a limbajelor concurente.
O aplicaie ntr-un limbaj concurent spre deosebire de una ntr-un limbaj de programare
paralel presupune ca procese multiple s mpart acelai spaiu adresabil. Intr-o serie
de limbaje a fost incorporat conceptul de monitor pentru protejarea utilizrii variabilelor
globale (Pascal concurent, Pascal plus). Un program n Pascal Concurent are dou tipuri
de componente eseniale: procese i monitoare. Un proces const dintr-un numr de
variabile locale i operaiile asupra lor (instruciuni de program), iar monitoarele permit
comunicrile dintre procese. Sincronizarea este realizat via o variabil global de tip
coad, asupra creia sunt definite trei operaii:
ntrziere (delay), continuare (continue) i golire (empty).
Etapa urmtoare n elaborarea limbajelor paralele a constat n alctuirea unor primitive
pentru calculul paralel pentru orice main cu memorie comun. Pentru acest proiect sau considerat dou limbaje adecvate: C i Fortran. Paralelismul este reprezentat la nivel
de limbaj prin monitoare. Implementarea monitoarelor este realizat printr-un set de
macrouri care permit portabilitate, pentru crearea de procese noi, declararea variabilelor
monitor, iniializarea monitoarelor, intrarea i ieirea din monitoare, ntrzierea i
execuia proceselor din coad.

39

Expresiile de drum sunt formate din numele unor operaii reprezentate printr-un
set de proceduri i o serie de operatori care definesc secvenele permise de executare a
procedurilor. Se consider urmtoarele exemple:
1. path x; y; z end; - operatorul de secven ';' indic faptul c fiecare execuie a
operaiei y trebuie s fie precedat de o execuie ncheiat a lui x (analog pentru z).
Dac, de exemplu, prima cerere de prelucrare a resursei vizeaz operaia y, procesul
apelant va fi pus n ateptare pn cnd un alt proces apeleaz i termin operaia x. O
nou operaie x poate fi executat dup ncheierea lui z;
2. path x, y, z end; - operatorul de concuren ',' indic execuia concurent a
operaiilor x, y, z fr nici o restricie n ceea ce privete ordinea de executare i
numrul de activri;
3. path x; (y+z); u end; - operatorul de selecie '+' indic faptul c execuia unei
operaii x poate fi succedat de o execuie a lui y sau o execuie a lui z, urmat de
operaia u.
Sincronizarea este asigurat prin evaluarea n mod automat a strii expresiilor de
drum, nainte de acceptarea oricrei cereri din partea unui proces, ocazie cu care se ia
decizia cu privire la activitatea operaiei cerute sau punerea n ateptare a procesului.
Sincronizarea n sistemele paralele cu transmitere de mesaje
Intr-un sistem paralel cu transmitere de mesaje, comunicarea i sincronizarea
sunt combinate ntr-un singur mecanism. Expedierea unui mesaj este asincron:
procesul emitent trimite mesajul i continu execuia fr s atepte recepionarea
mesajului. Responsabilitatea delivrrii mesajului revine sistemului de operare.
Comportarea asincron este simulat prin introducerea unor procese-tampon (routing
process) care accept mesajul de la surs i l trimite la destinaie. In majoritatea
sistemelor de acest tip recepionarea mesajelor este sincron, adic procesul receptor
este blocat pn cnd mesajul dorit este disponibil. Mesajele asincrone pot s nu fie
recepionate n ordinea transmiterii. Exist posibilitatea de priorizare a mesajelor
importante i receptorul ia cunotin explicit de expedierea unui anume mesaj.
Sincronizarea se realizeaz prin programarea corect a instruciunilor de
transmitere i recepionare a mesajelor.
n anumite sisteme expedierea este i ea sincron, procesul emitent fiind blocat
pn cnd procesul receptor este pregtit s primeasc mesajul. Astfel, ntr-un algoritm
sincronizat procesul ce ajunge la un punct de interaciune este blocat pn cnd procesul
cu care urmeaz s comunice ajunge i el la punctul de interaciune. Odat ce mesajul a
fost schimbat ambele proces continu execuia. Mesajele sincrone necesit ca ambele
pri s fie de acord s comunice, pe cnd mesajele asincrone permit unui mesaj s fie
transmis i apoi s "atrne" n sistem pn cnd este recepionat.
In transmiterea unui mesaj se impun trei condiii:
1. specificarea mesajului emis, respectiv recepionat (o expresie a crei valoare
reprezint informaia de transmis, la emitere, respectiv o list a identificatorilor
variabilelor care obin valori din coninutul mesajului, la recepionare);
2. specificarea destinaiei, respectiv sursei:
(a) prin numirea direct a partenerului de comunicaie (n special n modelul
pipeline, al conductei - figura de mai jos, (a), cnd fiecare proces
cunoate n permanen identitatea procesului de la care obine, respectiv
cruia i transmite mesaje;

40

(b) prin numire global, prin intermediul unui port de comunicare care joac
rolul unei interfee (de exemplu n cazul modelului de interaciune productor-consumator) figura de mai jos, (b). Numele portului joac rolul
unei cutii potale n care se depun i din care se extrag mesaje. Porturile
nu sunt asociate unui anumit proces, ci odat declarate sunt vizibile n
mod egal din toate procesele. Numirea global permite comunicarea fr
explicitarea identitii proceselor comunicante;
(c) prin numire selectiv, prin intermediul unui port de comunicare ataat
numai anumitor procese (cazul modelului de interaciune n relaia clientservant) figura de mai jos, (c). Procesul posesor al portului nu specific
procesele cu care intr n comunicare, acestea din urm fiind ns
obligate s cunoasc identitatea procesului care deine portul;
3. specificarea gradului de sincronizare ntre procesul emitor i cel receptor.
Proces
productor 1
send

Proces1
send

Proces
productor m
send

receive

Proces
client 1
send
receive

Proces
client p
send
receive

Proces2
send
receive receive
Proces tampon
send
send

receive

Proces n-1
send
receive
Proces n

(a)

receive
Proces
consumator 1

receive
Proces
consumator m

send
receive

send
receive

(b)
(c)
Modele de interaciune a proceselor: (a) modelul conductei
(b) modelul productor-consumator (c) modelul client-servant

Fie dou procese Pl i P2 ntre care se transmit mesaje n sensul Pl P2. n


principiu, procesul Pl poate ncheia operaia send, continndu-i apoi execuia numai
dac au fost asigurate condiiile pentru recepionarea la destinaie a mesajului transmis
sau pentru memorarea acestuia n vederea recepionrii ulterioare. Procesul P2 ncheie
execuia unei receive i continu rularea numai dac exist un mesaj disponibil i acesta
a fost recepionat. Pentru analiza gradului de sincronizare se pornete de la condiiile
generale de desfurare corect a comunicrii ntre procese, ilustrate n figura de mai
jos:
1. transmitere sincron (a)
2. transmitere asincron (b)
3. form intermediar ntre primele dou (c).

41

(a)

(b)

(c)

n cazul n care implementarea operaiilor este de aa natur nct nu se prevede


posibilitatea de memorare a mesajelor (memorie tampon) pe calea dintre cele dou
procese, Pl va fi blocat n momentul executrii operaiei send pn cnd P2 execut o
operaie receive. Aceast form presupune sincronizarea proceselor n vederea
executrii simultane a operaiilor send i receive, adic are loc o transmitere sincron.
Pentru a evita blocarea proceselor care execut send, implementarea operaiei
trebuie s prevad memorarea mesajului tampon n cazul n care P2 nu este gata de
recepie (nu a executat receive). Aceasta impune existena unei memorii-tampon n care
mesajul se depune la send i din care este extras prin receive. n cazul n care zona
tampon este nelimitat, este garantat n orice moment posibilitatea depunerii unui
mesaj. Prin urmare, operaia send poate fi executat neimpunnd nici o ateptare asupra
lui Pl (transmiterea fiind numit asincron).
In cazul n care memoria tampon este limitat, procesul emitor va atepta la
execuia unui send numai atunci cnd tamponul este plin i mesajul transmis nu poate fi
depus. Procesul blocat continu dup ce s-a creat un loc n tampon ca urmare a unui
receive.
Blocarea la transmiterea sincron poate fi evitat prin comunicarea selectiv prin
instruciuni cu gard de forma
if g1 i1 , g2 i2 , , g n in end;
loop g1 i1 , g2 i2 , , g n in end;
O gard const dintr-o expresie boolean urmat opional de o operaie send sau
receive. La un moment dat garda este deschis dac expresia este adevrat i
executarea operaiei nu impune blocarea procesului. Garda este nchis dac expresia
este fals. O expresie adevrat i blocarea printr-un send sau receive pune garda ntr-o
stare nedefinit.
Instruciunea alternativ se execut astfel: dac exist grzi deschise, se alege la
ntmplare una dintre ele i se execut operaia send sau receive prevzut, dup care se
trece la secvena de instruciuni corespunztoare. Dac toate grzile sunt nchise,
instruciunea se ncheie, cazul fiind semnalat ca eroare. Dac grzile sunt n starea
nedefinit, procesul ateapt pn cnd una din grzi se deschide (se execut o operaie
send sau receive dintr-o gard n care expresia logic este adevrat).
Instruciunea repetitiv are o execuie asemntoare cu cea alternativ, relunduse pn cnd toate grzile sunt nchise (instruciunea ncheindu-se normal, fr
semnalarea unei erori).
Blocarea unui proces care execut o instruciune cu gard are loc dac nici una
din operaiile send sau receive nu este executabil i se deblocheaz n momentul n care
oricare dintre ele se poate efectua.
Forma intermediar de transmitere cu tampon limitat se poate realiza i prin program prin introducerea unui proces tampon. Productorii se blocheaz numai dac

42

tamponul este plin (se depete numrul maxim de mesaje recepionate i care nu au
fost re-emise), iar consumatorii se blocheaz dac tamponul este gol.
EFICIENA
O problem important n introducerea calculatoarelor paralele este eficiena
calculului paralel relativ la calculul secvenial.
Scopul procesrii paralele depinde de problema cere se rezolv. Astfel,
scopul poate fi maximizarea numrului de sarcini independente realizate n paralel
ntr-o seciune de calcul cu scop general sau interactiv;
scopul poate fi maximizarea numrului de procese paralele care coopereaz i
minimizarea timpului de rspuns.
Teoretic, un program care lucreaz cu p procesoare este executat de p ori mai
rapid dect programul similar care lucreaz cu un singur procesor. Din pcate, n
practic, viteza este mult mai mic. O prim surs este dificultatea de a diviza un
program n uniti executabile n aceeai perioad de timp.
Resursele de msurare a performanei unui algoritm secvenial sunt timpul i
spaiul de memorie. Pentru evaluarea performanei unui algoritm paralel, timpul este
resursa major. Timpul n calculul paralel nu depinde numai de complexitatea
operaiilor, ci i de complexitatea operaiilor de tip comunicare, sincronizare, limitele
schimbului de date. Viteza calculatoarelor paralele nu este derivat din puterea
procesoarelor, ci din numrul lor.
Pentru un algoritm paralel se definesc dou tipuri de optimalitate:
un algoritm paralel pentru rezolvarea unei probleme date este optim din punct
de vedere al timpului (optimal n sens tare) dac se poate demonstra c timpul de
execuie nu poate fi mbuntit de alt algoritm paralel cu aceeai complexitate de
calcul, adic nu poate fi mbuntit fr schimbarea numrului de operaii;
un algoritm paralel pentru rezolvarea unei probleme date este optim din punct
de vedere computaional (optimal n sens slab) dac numrul total al operaiilor
utilizate este asimptotic egal cu numrul de operaii a celui mai rapid algoritm
secvenial pentru problema dat.
Timpul de calculul paralel este perioada care s-a scurs de la iniierea primului
proces paralel i momentul cnd toate procesele paralele au fost terminate.
ntr-un sistem cu memorie comun, timpul de calcul paralel a unui algoritm
sincron se poate exprima ca sum a mai multor valori:
1. timpul de procesare de baz, care este suma perioadelor de timp necesare
pentru fiecare etap (ntre dou puncte de interaciune);
2. timpul de blocare, care este perioada de timp n care procesul ateapt date de
intrare ntr-un program sincron, sau intrarea ntr-o seciune critic, ntr-un program
asincron.
3. timpul de sincronizare a comunicrilor necesar pentru anumite operaii asupra
unor variabile comune cu alte procesoare sau necesar execuiei seciunilor critice.
ntr-un sistem cu transmitere de mesaje, dac timpul de execuie a unei operaii
aritmetice este mult mai mare dect timpul de transfer a datelor ntre dou elemente de
procesare, atunci ntrzierea datorat reelei este nesemnificativ, dar dac este
comparabil cu timpul de transfer, atunci timpul de transfer joac un rol important n
determinarea performanei programului. n sistemele actuale bazate pe transputere,

43

raportul dintre timpul necesar unei operaii de comunicare i timpul necesar unei
operaii aritmetice este de ordinul 500 - 1000.
Algoritmii pentru calculul paralel sunt diferii de cei pentru calculul serial i
pentru msurarea performanei reale este necesar recodificarea algoritmilor seriali
existeni.
Problemele care se discut, relativ la eficien, sunt:
1. viteza algoritmului paralel,
2. pierderea de eficien per procesor unitate la execuia algoritmului pe un
sistem paralel.
Corespunztor, exist dou msuri ale performanei algoritmilor paraleli: viteza
i eficiena.
Fie P o problem dat i n dimensiunea datelor de intrare. Notm cu T0(n)
complexitatea secvenial a lui P, ceea ce presupune c exist un algoritm care rezolv P
n acest timp i, n plus, se poate demonstra c oricare algoritm secvenial nu rezolv P
mai repede. Fie A un algoritm paralel care rezolv problema P n timpul Tp(n) pe un
calculator paralel cu p procesoare. Atunci viteza atins de A este definit prin
S p (n)

T0 (n)
T p (n)

Deoarece S p (n) p , dorim s realizm algoritmi care ating S p (n) p . n realitate, exist
o serie de factori care reduc viteza. Acetia sunt, de exemplu, concurena insuficient n
calcul, ntrzierile introduse de comunicare, suplimentele de timp datorate sincronizrii
activitilor unor procesoare variate i n controlul sistemului. n practic, curbele numr
procesoare-vitez sunt apropiate de p/log2p, maxim 0.3p. Dac viteza urmeaz curba
p/log2p, care are limita la p
egal cu zero, se observ c anumii algoritmi nu sunt
eficieni pentru sisteme cu numr mare de procesoare.
De notat este faptul c T1(n), timpul de execuie a algoritmului paralel A cnd
numrul de procesoare este egal cu unu, nu este necesar a fi identic cu T0(n). Viteza este
msurat relativ la cel mai bun algoritm secvenial. Este o practic comun aceea de a
nlocui T0(n) cu timpul celui mai bun algoritm secvenial cunoscut, dac complexitatea
problemei nu este cunoscut.
Timpul de execuie a unui algoritm secvenial este estimat prin numrul de
operaii de baz cerute de algoritm ca funcie de dimensiunea datelor de intrare. n mod
curent se atribuie o unitate de timp pentru operaiile de citire i scriere n memorie i
pentru operaiile aritmetice i logice (ca adunarea, scderea, compararea, multiplicarea,
sau logic etc). Costul unei asemenea operaii nu depinde de lungimea cuvntului; se
utilizeaz ceea ce se numete criteriul costului uniform.
O alt msur a performanei unui algoritm paralel este eficiena, definit prin
E p (n)

T1 ( p)
pTp (n)

Aceast msur ofer o indicaie a utilizrii efective a celor p procesoare n


implementarea algoritmului dat. O valoare a lui Ep(n) aproximativ egal cu 1, pentru
anumit p, indic faptul c algoritmul A ruleaz aproximativ de p ori mai repede
utiliznd p procesoare dect utiliznd un procesor.
Exist o limit superioar asupra timpului de rulare, notat cu T (n) , sub care
algoritmul nu poate rula mai repede, indiferent de numrul de procesoare, adic

44

Tp (n) T (n) , pentru orice valoare a lui p, astfel nct eficiena Ep(n) satisface
E p (n) T1 (n) / pT (n) . De obicei eficiena unui algoritm descrete rapid cu creterea lui p.

Pe lng definiiile de mai sus se ntlnesc i o serie de alte variante de definire a


vitezei i eficienei:
1. viteza implementrii pe un sistem cu p procesoare a unui algoritm paralel
S' p (n) T1 (n) / Tp (n)

2. viteza algoritmului paralel asociat unui algoritm serial:


S ' ' p [(1

/ p]

unde este procentul dintr-un algoritm serial care poate fi procesat n paralel, dac
timpul de execuie cu ajutorul unui singur procesor este normalizat la unitate. Dac se
ine seama de factorii perturbatorii n comunicarea datelor
S' ' p [(1 )
/ p ( p)] 1 , unde ( p) reflect influena transferului de date asupra
timpului de execuie;
3. eficiena numeric a unui algoritm paralel: Enum(n) = T0(n)/T1(n);
4. eficiena unei implementri a algoritmului paralel fa de algoritmul serial
optim: E' p (n) T0 (n) /[ pTp (n)] .
Majoritatea algoritmilor sunt proiectai n condiiile unei maini paralele
abstracte, care are un numr de procesoare suficient pentru a asigura realizarea ntr-un
singur pas paralel a unei operaii cu n date. n practic, numrul n de procesoare cerut
nu este ntotdeauna disponibil. De exemplu, n procesarea vectorial este acceptat doar
o anumit lungime maxim a vectorului de date.
Exemple. Timpul necesar pentru efectuarea unei aceleiai operaii pe n date,
raportat la timpul necesar pentru o singur operaie (notat cu t) depinde de caracteristicile mainii. Pentru un procesor serial T0 (n) nts , iar pentru un procesarea n paralel pe
un sistem cu transmitere de mesaje Tp (n) [n / p]t p
, unde p este numrul de elemente
de procesare disponibile, tp este timpul necesar pentru o operaie (aritmetic) n paralel,
[x] este numrul ntreg cel mai mic care satisface [x] x, iar
reprezint perturbaia
temporal datorat comunicrilor i sincronizrilor dintre procesoare. Pentru procesarea
vectorial, Tp(n) = [n/p]tv + ptv, unde ptv este timpul de start pentru o operaie
vectorial, iar p este lungimea maxim a unui vector care poate fi procesat. Vectoriidate sunt partiionai n subvectori de maxim p componente.
Performana calculului paralel este funcie de mrimea problemei. Dac
problema nu este aleas conform configuraiei de interconectare a sistemului, nu se
msoar performana real.
Performana unei arhitecturi paralele este msurat prin indicele de performan,
care este o funcie real definit pe spaiul parametrilor arhitecturii. De obicei, indicele
de performan este exprimat prin rata de utilizare a unui procesor n timp, U. De
exemplu, dac se consider cazul evalurii unei funcii iterative prin metoda
descompunerii n subprograme de complexitate egal, astfel nct procesoarele
individuale execut setul de instruciuni asociat n aceeai perioad de timp, atunci
U t0 / t1

unde t1 este timpul total necesar unei iteraii, iar t0 este timpul mediu n care un procesor
este angajat n executarea setului de instruciuni. Astfel, U reprezint fracia de timp n
care procesorul este ocupat, iar 1 - U, fracia de timp n care procesorul nu este utilizat.
Indicele de performan exprim efectul arhitecturii calculatorului paralel asupra
algoritmului iterativ.

45

Problemele cunoscute astzi ca avnd soluii paralele eficiente constituie clasa


de probleme notat NC (Nick's class). Clasa NC conine problemele rezolvabile ntr-un
timp polilogaritmic cu un numr polinomial de procesoare.
Se utilizeaz n capitolele urmtoare notaia T(n) = O(f(n)) pentru cazul n care
exist constantele pozitive c i n0 astfel nct T (n) cf (n), n n0 .
ORGANIZAREA DATELOR
Se consider cazul unei probleme care necesit un numr de procesoare care nu
este disponibil n sistem.
Exist dou tehnici de acomodare a unei probleme mari la un numr mic de
procesoare:
1. tehnica tierii ("slicing")
2. tehnica ncreirii ("crinkling").
O alt problem important n cazul unor probleme de dimensiuni mari este
alegerea optim a distribuiei datelor pe procesoare cu realocare dinamic. Metoda
consacrat rezolvrii acestei probleme este numit transferul datelor n paralel (PDT).
TEHNICI DE DISTRIBUIRE A DATELOR
Utiliznd tehnica tierii, setul de date este partiionat n uniti mai mici, astfel
nct fiecare unitate n parte poate fi procesat individual de sistem. n tehnica ncreirii,
se menine conectarea dintre elementele vecine ale setului de date.
Exemplu. Se caut rezolvarea unei probleme pe o gril de dimensiune 8 x 8 cu
un sistem matricial de procesoare de dimensiune 4 x 4 cu conectare ntre vecinii direci.
Tehnica de tiere presupune mprirea problemei n patru uniti, care fiecare poate fi
prelucrat n paralel, ca n figura urmtoare.

n tehnica de ncreire se mparte grila n mulimi de blocuri de dimensiune 2 x


2, fiecare fiind asignat la un procesor , ca n figura de mai jos.

46

Alegerea unei tehnici sau a alteia se face n funcie de problema care se rezolv.
De exemplu, se cere calculul matricii de elemente
bij

1
(aij
4

ai

1j

aij

ai

1 j ), i,

j 2,...,7

Calculul este realizabil n patru pai, dac se utilizeaz tehnica ncreirii, respectiv 12
pai, dac se utilizeaz tehnica de tiere.
n anumite probleme pot fi utilizate succesiv ambele tehnici.

TEHNICA DE TRANSFER A DATELOR


Metoda de transfer a datelor n paralel, PDT, este o metod de organizare a
datelor, util n reconfigurare a logic. Se pune problema determinrii configuraiei
logice optime pentru o anumit problem i o reea fizic dat.
Exemplul 1. Se consider un sistem cu n procesoare n conectare liniar, fiecare
avnd o memorie care poate fi ocupat de o singur dat. In mod curent, se stabilete o
funcie ntre date i procesoare. Alocarea a n date se poate face n n! moduri. Fie cazul
n= 8. Se presupune c, iniial, data de index i este alocat procesorului de index i, unde
i= 0,...,7. O realocare a datelor este exprimabil printr-o permutare. De exemplu, prin
amestecarea perfect a datelor, se obine
01 2 3 4 5 6 7
0 415 2 6 3 7

Prima linie reprezint procesoarele, a doua indexul datelor. Simplificat,


permutarea se poate scrie [0 4 1 5 2 6 3 7]. n sistem binar indexul unui procesor sau a
unei date se reprezint pe trei bii: b2b1b0. Asociem permutrii identice vectorul (2 1 0)
corespunztor ordinii normale a biilor ce reprezint indexul. Vectorul (1 0 2) este
asociat aranjrii biilor b1b0b2. Dac aceast schimbare de vector este aplicat fiecrui
index de procesor corespunztor permutrii identice se obine permutarea
corespunztoare amestecrii perfecte [0 4 1 5 2 6 3 7]. De exemplu, data de index 4,
aflat iniial n procesorul 4 - index care se scrie n binar 100 - prin aplicarea vectorului
de permutare a biilor indexului de procesor, se va afla n memoria procesorului 001,
adic de index 1. Astfel, rearanjarea datelor const ntr-o schimbare a unui vector, mai
eficient dect transferul fizic. Alte exemple: pentru (0 1 2), se obine [0 4 2 6 1 5 3 7],
pentru (0 2 1), [0 2 4 6 1 3 5 7].

47

Exemplul 2. Metoda PDT se extinde la cazul datelor multiple pe un singur


procesor, date multidimensionale i matrice de procesoare conectate prin diferite tipuri
de reele.
Considerm cazul a 16 date care sunt accesate de patru procesoare conectate
liniar. Prin tehnica de tiere datele sunt mprite n patru grupuri i sunt accesate ca
elemente ale unui vector:
Adresa/Procesor 0
1
2 3
0
1
2 3
0
4
5
6 7
1
8
9 10 11
2
12 13 14 15
3
Analog exemplului anterior, funciile de asociere fizic sunt [0 1 2 3], [4 5 6 7],
[8 9 10 11], [12 13 14 15]. Datele de index 0, 4, 8 i 12 sunt coninute n memoria
procesorului 0. Prin tehnica ncreirii, repartizarea se face astfel:
Adresa/Procesor 0
1
2 3
0
4
8 12
0
1
5
9 13
1
2
6 10 14
2
3
7 11 15
3
Datele de index 0, 1, 2, 3 sunt memorate la procesorul 0.
Poziia unei date poate fi caracterizat prin numrul de procesor i adresa n
memoria acestuia. Se asociaz astfel fiecrei date indexul b3b2bIb0, unde
n tehnica de tiere, b3b2 reprezint adresa, iar blb0 reprezint procesorul. De
exemplu, data 13 (1101 n binar) este memorat la adresa 3 (11) a procesorului 1 (01);
n tehnica ncreirii, b3b2 reprezint procesorul, iar blb0 adresa. De exemplu, 13
este memorat la adresa 1 a procesorului 3.
CND O PROBLEM ESTE PARALELIZABIL?
Multe probleme par a fi mai puin adaptabile la procesarea paralel, n pofida
prezenei unui numr mare de procesoare.
Problemele pot fi clasificate relativ la noiunea de paralelizabilitate. Aceasta
trateaz problema prin intermediul a doi parametrii: timpul i numrul de procesoare.
Astfel,
o problem poate fi definit ca fiind paralelizabil dac poate fi rezolvat cu
att mai rapid cu ct numrul de procesoare este crescut;
o problem este paralelizabil dac poate fi rezolvat ntr-un timp
polilogaritmic (adic O(logkn), unde n este dimensiunea problemei, iar k un numr
natural) cu un numr polinomial de procesoare (problema aparine clasei NC).
Gradul de paralelism al unui algoritm se definete astfel:
1. teoretic este numrul de operaii aritmetice ce sunt independente i pot fi
executate concurent;
2. n implementarea pe un procesor pipeline pentru care operanzii sunt definii
ca vectori, este lungimea liniei de procesare;
3. n implementarea pe un masiv de procesoare, este egal cu numrul de
operanzi prelucrai n paralel.

48

GENERAREA ALGORITMILOR PARALELI


Cnd se implementeaz o problem pe un calculator paralel, prima sarcin este
aceea de a descompune procesul, n aa manier, nct procesoarele s lucreze concurent
la o problem. Comunicarea dintre elementele de procesoare poate produce probleme
deosebite. In principiu, se urmrete sincronizarea proceselor i minimizarea numrului
de comunicaii al cror timp este limitat fizic.
n principiu, exist trei modaliti de generare a algoritmilor paraleli:
1. prin uniti independente: fiecare procesor execut acelai program izolat de
celelalte procesoare;
2. prin paralelism geometric: fiecare procesor execut acelai program asupra
unor date corespunztoare unei sub regiuni a sistemului; datele de pe frontiera
subregiunii sunt date de comunicare cu procesoarele nvecinate care opereaz asupra
sub regiunilor limitrofe;
3. prin paralelism n algoritm, n care fiecare procesor este responsabil pentru
o parte din algoritm i toate datele trec prin fiecare procesor.
In problemele de simulare apare adesea necesar execuia unui singur program
pentru o mulime de date. Cel mai simplu mod de exploatare a paralelismului este
executarea mai multor copii ale unui program serial pe un numr de procesoare
independente, fiecare copie opernd asupra unui set diferit de date de intrare. Dac
natura problemei este de aa manier nct fiecare simulare presupune aceeai perioad
de timp, atunci implementarea este "balansat ncrcat", iar viteza depinde liniar de
numrul de procesoare. Eficiena calculului paralel este mic dac implementarea nu
este balansat ncrcat.
O problem este geometric paralelizabil dac algoritmul corespunztor implic
numai operaii asupra unor date care pot fi grupate local. Fie exemplul simulrii
comprimrii unui lichid. Regiunea din spaiu ocupat de lichid poate fi divizat n
subregiuni egale n numr egal cu numrul procesoarelor disponibile. Fiecare procesor
este responsabil de evoluia lichidului n sub regiunea sa. Datele referitoare la frontiera
subregiunii trebuie transmise ntre unitile de memorie ale elementelor de procesare.
Comunicaiile ntr-o main bazat pe transputere produc probleme, n cazul
unei descompuneri geometrice. Procesoarele care comunic trebuie s fie apropiate
pentru o balansare ct mai eficient ntre timpul de calcul i timpul de comunicare.
Astfel, reeaua de interconectare trebuie s fie ct mai apropiat de structura cerut de
problem. Dac se execut o descompunere geometric n trei dimensiuni, de exemplu,
pe cuburi, fiecare procesor trebuie s comunice cu ase alte procesoare. O transpunere
direct a structurii cerute pe sistemele actuale cu transputere cu patru legturi, nu este
posibil. Se utilizeaz tehnici speciale de proiecie pe structura real.
Un exemplu de problem geometric paralelizabil este "jocul vieii". Se caut
simularea evoluiei unei colonii de celule din spaiul bidimensional. Fiecare celul se
afl ntr-unul din stadiile: vie sau moart. La fiecare pas (generaie), stadiul unei celule
depinde de cei mai apropiai opt vecini. O celul vie supravieuiete n generaia
urmtoare, dac are 2 sau 3 vecini vii, altfel moare de singurtate sau supra-aglomerare.
O celul moart nconjurat de exact trei vecini renvie n generaia urmtoare, altfel
rmne moart.
Modelul trecerii tuturor datelor prin toat reeaua de procesoare este utilizat
pentru probleme care presupun interaciuni de lung distan, cum ar fi problemele
electrostatice sau gravitaionale. Fie, de exemplu, cazul simulrii dinamicii moleculare

49

ale unui sistem de n particule care interacioneaz pe baza unor fore electrostatice. n
cazul general, este necesar calcularea a n(n-1)/2 interaciuni la fiecare pas. Se
consider o structur de p procesoare conectate ntr-o structur circular. Se distribuie
aleator n/p particule la fiecare procesor, care are sarcina de a urmri micarea
particulelor repartizate. Primul pas efectuat de fiecare procesor const n alegerea unei
particule din memoria local i transmiterea masei i coordonatelor acesteia urmtorului
procesor din inel. In pasul al doilea, fiecare procesor calculeaz fora de interaciune a
particulelor sale cu particula "cltoare" i transmite informaia (mas i coordonate)
despre aceast particul urmtorului procesor din inel. Procedura se repet pn cnd
fiecare particul a vizitat fiecare procesor (un pas al procedurii de simulare a dinamicii
moleculare). Forele care acioneaz asupra unei particule, datorate celorlalte particule,
se acumuleaz, determinnd evoluia particulei.

50

Capitolul 3
ALGORITMI PARALELI FUNDAMENTALI
DIVIDE ET IMPERA
Majoritatea algoritmilor paraleli numerici urmeaz principiul"divide et impera".
Acesta presupune mprirea problemei n subprobleme mici care pot fi tratate
independent. Gradul de independen este o msur a efectivitii algoritmului pentru a
determina cantitatea i frecvena comunicrilor i sincronizrii.
Strategia" divide et impera" consist n trei pai principali:
1. partiionarea problemei n subprobleme de dimensiuni aproximativ egale;
2. rezolvarea recursiv a subproblemelor i concurent a ntregului set de subprobleme;
3. combinarea soluiilor subproblemelor ntr-o soluie pentru problema general.
Exemplul 1. Aplicm conceptul "divide et impera" la calculul sumei

ai bi .
i 1

Produsul aibi este calculat de procesorul Pi. Procesoarele cu numr de identificare i par
transmit rezultatul la procesoarele i - 1. Operaia de nsumare este astfel "divizat" ntre
n /2 procesoare: procesorul Pi cu i impar efectueaz suma aibi+ai+1bi+1.Procedeul este
repetat de [log2n] ori pn cnd suma este obinut n procesorul Pl.
Exemplul 2. Se pune problema nchiderii convexe a unei mulimi de puncte din
plan, reprezentate n coordonate carteziene, S {p1 , p2 ,..., pn }. . nchiderea convex a lui
S este cel mai mic poligon convex care conine toate cele n puncte ale lui S:
UH(S1)
UH(S2)

Problema const de fapt n determinarea unei subliste ordonate de puncte din S


care s defineasc poligonul convex de nchidere a lui S, notat CH(S).
Fie p i q punctele lui S cu cea mai mic, respectiv cea mai mare abscis. n mod
natural, p, q CH(S) . Se noteaz cu UH(S) lista ordonat a punctelor din CH(S) dintre p
i q parcurse n sensul acelor de ceasornic, iar LH(S), de la q la p n acelai sens.
Evident UH(S) LH(S) = CH(S), UH(S) LH(S) = {p,q}. Se determin separat UH(S)
i LH(S).
Se sorteaz punctele pi dup abscise. Fie x( p1 ) x( p2 ) ... x( p) unde x( pi ) este
abscisa lui pi . Fie S1 ( p1 ,..., p n / 2 ), S 2 ( p n / 2 1 ,..., pn ). Presupunnd c UH(S1) i
UH(S2) au fost determinate, UH(S) poate fi uor constituit pe baza determinrii
tangentei comune care unete dou puncte din UH(S1) respectiv UH(S2).
Procesarea paralel presupune determinarea concurent a lui UH(S1) i UH(S2.)
Numrul de procese concurente se dubleaz la fiecare apel recursiv.

51

MULTIPLICAREA A DOUA MATRICI


Pentru calculul serial al produsului C a dou matrici A i B sunt necesare trei
cicluri. Exist ase moduri de aranjare a acestor cicluri, iar fiecare difer n modul n
care sunt accesate matricile, pe linie sau coloan, ca scalari, vectori sau matrici. Modul
specific de acces afecteaz performanele algoritmului pe un calculator paralel cu o
structur dat.
Dac matricile sunt ptratice, de dimensiune n, i se consider un sistem cu
elemente de procesare dispuse n spaiul tridimensional, pe fiecare direcie cel puin n,
atunci fiecare produs scalar poate fi evaluat de un singur procesor. Timpul de procesare
este de ordinul O(log2n) i necesit n3 procesoare. Un algoritm care necesit doar n2
procesoare i un timp de procesare de ordin O(n) este cel pentru care fiecare procesor
evalueaz o component a matricii produs.
Exemplu. Se consider dou matrici ptratice, A i B, de dimensiune n = 2d. Se
dispune de un sistem cu memorie distribuit de tip cub 3d-dimensional, adic cu n3
procesoare. Se indexeaz procesoarele prin tripletele (l,i,j) astfel nct Plij reprezint
procesorul Pr, unde r = ln2 + in + j (scriindu-l pe r n binar se obin d cei mai
semnificativi bii corespunznd lui l, urmtorii d bii corespunznd lui i, apoi ultimii d
cei mai puin semnificativi corespunznd lui j). Matricea A este stocat ntr-un subcub
determinat de procesoarele Pli0, 0 l, i n 1 , astfel nct ail se afl n Pli0. In mod
similar, B este stocat n subcubul format de procesoarele Pl0j, unde Pl0j reine pe blj.
Elementele cij ale matricii produs sunt determinate n trei etape:
1. datele de intrare sunt distribuite astfel nct Plij va deine valorile ail i blj,
pentru 0 l, i, j n 1 ;
2. procesorul Pijl calculeaz produsul clij = ail blj, 0 l, i, j n 1 ;
3. pentru fiecare 0 i, j n 1 , procesoarele Plij, 0 l n 1calculeaz suma
n 1

c'lij .

cij
l 0

Pentru multiplicarea a dou matrici de dimensiuni diferite exist o serie de


strategii. Fie A i B dou matrici de mrime m x n, respectiv n x p. Pentru calculul
matricei produs C sunt necesare mnp nmuliri. Fie * operaia de nmulire a dou
matrici pe componente.
Cazul 1. Numarul de procesoare satisface N mnp. Atunci toate multiplicrile se
pot efectua printr-o singur operaie *. De exemplu, fie m = n = p = 2,
a11 a12 b11 b12
a21 a22 b21 b22

a11 a11
a21 a21

b11 b12
b11 b12

Valorile aikbkj sunt elementele matricii rezultat


a11 a11 a12 a12 b11 b12 b21 b22
a21 a21 a22 a22 b11 b12 b21 b22

Care poate fi rearanjat astfel


a11 a12 a11 a12 b11 b21 b12 b22
a21 a22 a21 a22 b11 b21 b12 b22

Pentru cazul general se consider

52

a12 a12
a22 a22

b21 b22
b21 b22

B1T* BTp*

T
B1* BTp*

A A A

unde B1* este linia i a matricei B. Pentru obinerea matricii C se adun cte n numere din
matricea de mai sus.
Cazul 2. Numrul de procesoare satisface mnp N max(mn, np, mp). Atunci este
posibil a se efectua mp, mn sau np multiplicri simultan (printr-o singur operaie de
nmulire *) n fiecare ciclu care e repet de n, p sau m ori. Apar 3 situaii.
1. min(m,n,p)=n. Se utilizeaz algoritmul produsului extern. Se observ c
n

Ck , unde (Ck )ij

aik bkj . Matricea Ck poate fi obinut printr-o singur

k 1

operaie *:
Ck

a1k a1k

am k am k

bk1 bkp

bk1 bkp

unde matricele au dimensiunea mxp.


2. min(m,n,p) = m. Se utilizeaz algoritmul produsului intern pe linii. Linia Ci*
a lui C (i=1,...,m) poate fi obinut prin nsumarea elementelor
corespunztoare de pe fiecare linie a matricii
ai1 ai1

ain ain

b11 b1 p

bn1 bnp

unde matricele au dimensiunea nxp.


3. min(m,n,p) = p. Se utilizeaz algoritmul produsului intern pe coloane. Linia
C*j a lui C (j=1,...,p) poate fi obinut prin nsumarea elementelor
corespunztoare coloanelor matricii
a11 a1n

am1 am n

b1 j bnj

b1 j bnj

unde matricele au dimensiunea mxn.


Figura urmtoare schieaz nmulirea a dou matrici pe un sistem de N<mnp
procesoare:

53

Cazul 3. Numrul de procesoare satisface N < max(mn, np, mp). Matricile


trebuie partiionate astfel nct fiecare unitate s fie prelucrat n paralel.
Alegerea algoritmilor de multiplicare descrii mai sus ine cont de minimizarea
numrului de multiplicri. Adeseori i numrul de adunri care se efectueaz poate
influena considerabil timpul de calcul. Teoretic nu se ine cont de timpul de acces la
operanzi. Acest timp suplimentar n mod frecvent reduce performanele algoritmilor. n
practic, operanzii sunt accesai dintr-o memorie comun sau fiecare procesor deine
propria sa memorie i trebuie inut seama de timpul de transfer a datelor ntre
procesoare.
Principiul partiionrii poate fi utilizat i n calculul produsului dintre o matrice
i un vector. Fie A o matrice ptratic de dimensiune n i un vector x cu n componente,
ambele stocate ntr-o memorie comun. Se distribuie calculul ntre p procese, unde p are
proprietatea c r = n / p este un numr ntreg.
Algoritm asincron. Se partiioneaz A = (Al,A2, ... , Ap)T unde fiecare bloc Ai are
dimensiunea r x n. Pentru fiecare 1 i p , procesul asociat, Pi, opereaz asupra lui Ai i
x din memoria comun, avnd sarcina de a calcula Zi = Aix i de a stoca cele r
componente ale vectorului rezultat Zi n componentele corespunztoare ale variabilei
comune y care reprezint vectorul rezultat, y = Ax. n acest algoritm, fiecare proces
execut acelai program, setul de date depinznd de identificatorul de procesor. Se
realizeaz o citire comun a aceleiai variabile x, dar oricare dou procese nu scriu n
aceeai locaie de memorie, ele nefiind n mod necesar sincronizate.
Algoritm sincron. Se partiioneaz A = (Al,A2, ... , Ap), x = (xl,x2, ... , xp), astfel
nct Ai are dimensiunea n x r, iar xi, r componente. Atunci vectorul rezultat se exprim
sub forma y = Alx1+A2x2+ ... + Apxp. Produsele zi=Aixi pot fi calculate simultan dup
citirea datelor Ai i Xi din memoria comun, pentru fiecare 1 i p . Suma final este
calculat numai dup ce toate procesele au terminat calculul matriceal. Astfel, o
primitiv explicit de sincronizare trebuie plasat n fiecare proces dup calculul lui zi
pentru a fora toate procesele s se sincronizeze. ntr-un sistem cu transmitere de
mesaje, pentru calculul sumei se poate utiliza conectarea liniar ntre procese.
EVALUAREA EXPRESIILOR ARITMETICE
Expresiile aritmetice ocup un rol central n calcul i de aceea prezint un interes
deosebit pentru calculul paralel.
Paralelismul se dovedete extrem de eficient la evaluarea expresiilor aritmetice.
Tehnicile utilizate sunt aplicabile la
nivelul unei expresii aritmetice;
nivelul instruciunilor de atribuire a unor expresii aritmetice.
TEHNICA DUBLRII RECURSIVE
Se consider o, un operator asociativ, ce se aplic perechilor de obiecte
matematice (numere, vectori, matrici i altele). Fie cazul n care compunerea a n numere
este unic definit, independent de ordinea de efectuare a operaiilor (de introducere a
parantezelor). Modul optim de evaluare a unei asemenea compuneri depinde de
caracteristicile sistemului. Un exemplu concludent este prezentat n figura urmtoare
pentru compunerea a n = 8 obiecte notate ai, i = 1,...,n.

54

Calculele la fiecare nivel sunt realizate n paralel. Dac se compun n obiecte,


rezultatul este produs n [log2n] pai. Tehnica se numete dublare recursiv. Volumul
de calcul este divizat succesiv n dou uniti de complexitate egal care sunt executate
n paralel. Pentru obinerea eficienei maxime se recomand transpunerea pe o reea de
tip arbore binar.
Tehnica dublrii recursive este adesea utilizat n practic. Exemple concludente sunt
adunarea sau produsul a n numere, determinarea maximului i minimului unei mulimi
de numere. Operaiile pot fi executate i asupra vectorilor i matricilor (de exemplu, n
cazul evalurii relaiilor recursive).
PARALELISM LA NIVELUL EXPRESIILOR ARITMETICE
Se consider c o expresie aritmetic este constituit din variabile i operatori de
tip adunare, scdere, nmulire i mprire.
n procesarea paralel, evaluarea unei expresii aritmetice este bazat pe
selectarea unei expresii echivalente care poate fi efectuat ntr-un numr minim de pai.
Dou expresii aritmetice E i E sunt echivalente dac este posibil trecerea de
la E la E prin aplicarea unui numr finit de reguli de comutativitate, asociativitate i
distributivitate.
Exemplul 1. Se consider expresia El = a+b+c+defg+hi. Dac ntr-o unitate de
timp se pot efectua mai multe operaii simultan, timpul de calcul este mult redus:

Exemplul 2. Fie expresia E2 (x1x2 x3 )x4 x5 .


Intr-un calculator secvenial, expresia este evaluat prin Es

55

((((x1 x2 ) x3 ) x4 ) x5 ).

Pentru calculul paralel se recomand o expresie echivalent E2 x1x2 x4 x3 x4 x5 , care


se evalueaz prin E p ((((x1 x2 ) x4 ) ((x3 x4 ) x5 )).
Se noteaz cu t, numrul de pai necesari pentru evaluare (numr de uniti temporale, presupunnd c adunarea i nmulirea consum o unitatea de timp), p, numrul
de procesoare i s, numrul total de operaii. Etapele evalurii seriale, respectiv prin
procesarea cu p = 2 elemente, sunt prezentate n urmtoare, ce prezint evaluarea: (a)
secvenial a expresiei E2 (b) n paralel a expresiei Ep pe un MIMD (c) pe un SIMD.

(a)
(b)
(c)
Pentru cazul paralel, se efectueaz simultan toate operaiile unui nivel. Numrul
de pai a sczut cu o unitate, dar numrul total de operaii a crescut: pentru cazul serial
p=1, t=4, s=4, iar pentru cazul paralel, p=2, t=3, s=5.
Exemplul corespunde cazului utilizrii unui calculator de tip MIMD n care sunt
posibile simultan diferite operaii. Dac se utilizeaz un sistem SIMD, evaluarea
expresiei echivalente se face n patru pai t=4.
Exemplul 3. Expresiile echivalente optime depind de sistemul utilizat. De
exemplu, expresia evaluat secvenial
E3

((((x1 x2 ) x3 ) x4 ) x5 )x6

x7

este echivalent cu EMIMD ((((x1x2 )(x4 x6 )) (x3 (x4 x6 ))) ((x5 x6 ) x7 )) ,


care este evaluat n patru pai pe un sistem MIMD i n cinci pai pe un sistem SIMD.
Pe de alt parte ESIMD ((((x1x2 ) x3 )(x4 x6 )) ((x5 x6 ) x7 ))
este evaluat n patru pai pe un sistem SIMD.
Trecerea de la o expresie la alta echivalent estimabil prin mai puini pai
paraleli se realizeaz pe baza analizei arborelui binar de evaluare. Se determin un
arbore binar echivalent care are o nlime mai redus.
PARALELISM LA NIVELUL INSTRUCIUNILOR
Analog grafului de dependen date-operaii dintr-o expresie dat, se poate
introduce graful de dependen instruciune-date. Modul convenional de a privi
programul ca o list de instruciuni, care manipuleaz date, aflate n locaii fixe, ntr-o
ordine secvenial, nu mai este actual. Pentru exploatarea paralelismului la nivel de
instruciune este necesar descompunerea programului.
Exemplu 1. Se consider secvena de atribuiri
a = b + e,
d = e + f,

56

g = a * d.
Primele dou atribuiri pot fi realizate n paralel, dup cum se vede n figura de mai jos,
(a):

(a)
(b)
Exemplul 2. Se consider secvena de atribuiri
a = bc,
d = c + e + a.
Evalurile paralele se realizeaz mult mai rapid dect evalurile seriale, dup cum se
vede n figura de mai sus, (b).
ALGORITMI PENTRU SISTEME ORGANIZATE PE BII
Intr-un sistem organizat pe bii, fiecare procesor opereaz asupra biilor unei
date n pai consecutivi.
Dac se consider o reprezentare pe vertical a datelor, memoria poate fi privit
ca fiind compus din mai multe plane de bii, ca n figura urmtoare:

57

Operaiile asupra unui ntreg plan de bii se realizeaz n paralel. Dac se


consider n numere cu p bii (n reprezentare vertical), la un moment dat sunt accesai
biii din planul r al fiecrui numr (r =1,...,p).
Presupunnd c se dispune de un numr suficient de procesoare, algoritmii pe
bii nu depind n cazul reprezentrii verticale ale datelor, de numrul acestora, ci de
lungimea n bii a datelor.
Exemplul 1. Se determin maximul unei mulimi de numere naturale. Iniial,
toate numerele sunt considerate candidai. Se examineaz succesiv fiecare plan de bii.
La o etap se elimin din competiie numerele care prezint zero n planul examinat. De
exemplu, se determin maximul dintre 6, 8, 12, 13, 7 i 13. Se noteaz cu * numerele
rmase n competiie la fiecare etap:
6
Etapa 0 *
0
Etapa 1
1
Etapa 2
1
Etapa 3
0
Etapa 4

8 12 13 7

13

*
1
*
0

*
1
*
1
*
0
*
1
*

*
1
*
1
*
0 0
*
0 0

*
1
*
1
*
0
*
1
*

*
0
1
1
1

Exemplul 2. Cnd se utilizeaz tehnica dublrii recursive pentru nsumarea a n


numere, numrul de procesoare utilizate se diminueaz (50% la primul pas, 25% la al
doilea .a.m.d). ntr-un sistem organizat pe bii, aritmetica operaiilor este mprit ntre
procesoare n scopul utilizrii maxime. La pasul k al procesului de dublare recursiv
fiecare operaie de adunare este distribuit ntre procesoarele disponibile. Un grup de
procesoare poate lucra asupra biilor cei mai semnificativi, iar alt grup asupra biilor mai
puin semnificativi. Astfel toate procesoarele sunt utilizate la maxim.
Exemplul 3. Algoritmii pe bii asociai funciilor elementare presupun nmuliri
i mpriri n binar care se efectueaz simultan, astfel nct timpul de estimare este
comparabil cu cel al unei nmuliri sau mpriri. Fie de exemplu, problema evalurii
funciei exponeniale. Se cere evaluarea lui ex, 0 < x < 1, n condiiile n care valorile ei,
eia , ai 2 i , i 1,..., p sunt cunoscute. Se presupune c x se reprezint n binar prin
bpa p

. Se calculeaz mulimea valorilor


E0 1, Ek
1, Ek Ek 1 , bk 0, k 1,..., p . Atunci E p e x .
Evaluarea se efectueaz printr-o singur parcurgere a planelor de bii a lui x.
Exemple similare se pot construi pentru problemele determinrii rdcinii
ptrate, determinrii logaritmului, a valorilor funciilor trigonometrice sau ridicarea la
ptrat.
Algoritmii la nivel de bit sunt de asemenea utilizai la sortare i prelucrarea
imaginilor.
eb1a1 ...e
Ek 1eek , bk

b1b2...bp. Atunci e x

58

SORTARE
Considernd numerele z1,,zn poziionate iniial n locaiile 1,...,n, se cere
reaezarea acestora, astfel nct pe prima poziie s se afle cel mai mic numr din
secven, pe poziia a doua, al doilea n secven cresctoare .a.m.d. Exist o serie de
strategii clasice de sortare, cum sunt:
sortarea prin inserie, cnd fiecare numr este inserat pe poziia corect
relativ la o secven anterior sortat,
sortarea prin selecie, cnd se selecteaz cel mai mic numr i se scoate din
secven, apoi se selecteaz cel mai mic din secvena rmas .a.m.d,
sortarea prin numrare, cnd fiecare numr este comparat cu celelalte i
numrul celor mai mici dect acesta indic poziia n secvena final,
sortarea prin interschimbare, cnd numerele din dou locaii curente i
schimb poziia ntre ele dac ordonarea n secven cresctoare o cere.
O atenie deosebit n cazul procesrii paralele a fost acordat algoritmilor de
interschimbare. Intr-un calculator secvenial fiecare interschimbare se execut separat.
Algoritmii paraleli permit, ntr-un singur pas, mai multe comparri i interschimbri
simultan. Un algoritm serial de sortare a n numere necesit cel puin O(nlog2n)
comparri. Dac ntr-un algoritm paralel pot fi efectuate simultan n comparaii la un
pas, atunci timpul de procesare este de ordinul O(log2n). Din pcate, algoritmii seriali
care se realizeaz cu un numr minim de comparaii nu pot fi restructurai pentru cazul
paralel, astfel nct s se obin acest optim teoretic. Totui este posibil paralelizarea
unor algoritmi seriali de sortare care necesit un numr de comparaii de ordinul O(n2),
astfel nct timpul de calcul paralel s fie proporional cu O(n). Astfel, sortarea parimpar i sortarea cu arbori a n numere care utilizeaz O(n) procesoare O(n) n paralel se
realizeaz n O(n) pai.
Calculatoarele paralele actuale recepioneaz datele secvenial, fapt care produce
o mare ntrziere. Dac, de exemplu, calculatorul poate recepiona o dat per unitatea de
timp, atunci n uniti de timp sunt necesare pentru ncrcarea datelor. Se sper c n
viitorul apropiat va fi posibil introducerea i afiarea datelor n paralel.
Se presupune, n cele ce urmeaz, c datele se afl iniial n memoria
procesoarelor.
SORTAREA PRIN NUMRARE
Modele teoretice pentru procesoare paralele cu memorie comun au fost propuse
pentru sortarea a n numere prin O(log2n) comparaii, cu O(n2) procesoare.
Sortarea este realizat prin determinarea indexului n secvena final pe baza
comparrii unui numr cu toi ceilali. Acest lucru este posibil ntr-un calculator paralel
cu memorie comun, unde oricare procesor are acces la oricare locaie din memorie.
Fiecare numr este comparat simultan cu toate celelalte ntr-un singur pas utiliznd
n(n-1) procesoare. Fiecrui numr i se asociaz o mulime de bii: pentru o pereche de
numere (x, y), bitul lui x este 1 dac x > y, altfel este 0. Se contorizeaz numrul de bii
nenuli. Dac numrul de bii nenuli corespunztori lui x este p, atunci poziia lui x n
secvena sortat este p + 1 (sortare prin numrare).
Exemplu. Fie n=4 i z=(4,2,1,3). Prima etap este achiziia contoarelor. Se
consider 16 procese care fiecare evalueaz rezultatul comparrii a cte dou valori ale
irului:

59

4:4
2:4
1: 4
3: 4

4:2
2:2
1: 2
3: 2

4 :1
2 :1
1:1
3 :1

4:3
2:3
1: 3
3:3

1
0
0
0

1
1
0
1

1
1
1
1

1
0
.
0
1

n etapa a doua se calculeaz rangul fiecrui element:


linia 1 (cheia 4): 1+1+1+1=4
linia 2 (cheia 2): 0+1+1+0=2
linia 3 (cheia 1): 0+0+1+0=1
linia 4 (cheia 3): 0+1+1+1=3
In faza a treia se reaeaz datele conform rangului nou calculat.
Dac se dispune doar de n procesoare, determinarea rangului n irul ordonat se
poate desfura n modul urmtor. Fie c vectorul ce se construiete pentru rangurile
elementelor, iar a un vector intermediar. Ideea este de a compara simultan n - 1 perechi
succesive din z privit ca un inel de date cu ajutorul lui a. Dac ai < zi, atunci ci este
incrementat cu unu. Se efectueaz o mutare ciclic la stnga a elementelor lui a care
iniial este identic cu z. Dac operaia se repet de n ori, fiecare cheie va fi comparat cu
fiecare alt cheie. Ultima operaie este rearanjarea lui z conform lui c.
Exemplu. Fie n = 6 i z = (6,3,4,5,2,1). La sfritul fiecrui pas n paralel se
obine:
i = l, c = (0,0,0,0,0,0)
a = (3,4,5,2,1,6)
i = 2, c = (1,0,0,1,1,0)
a = (4,5,2,1,6,3)
i = 3, c = (2,0,1,2,1,0)
a = (5,2,1,6,3,4)
i = 4, c = (3,1,2,2,1,0)
a = (2,1,6,3,4,5)
i = 5, c = (4,2,2,3,1,0)
a = (1,6,3,4,5,2)
i = 5, c = (4,2,2,3,1,0)
a = (1,6,3,4,5,2)
i = 6, c = (5,2,3,4,1,0)
a = (1,2,3,4,5,6) este z sortat
PROCEDEUL BULELOR
Algoritmul serial al bulelor se bazeaz pe compararea succesiv a dou elemente
alturate din secven (cu interschimbare), astfel nct, dup o parcurgere a secvenei,
maximul va fi plasat pe ultima poziie. La pasul urmtor se efectueaz comparrile n
secvena rmas prin excluderea maximului. Numrul de pai este

1
n(n 1) .
2

n figura de mai jos (a) se prezint modul n care evolueaz comparrile pentru
cazul sortrii a n = 7 numere. Liniile orizontale reprezint locaiile, sgeile comparrile,
vrful sgeii, locul pe care l va ocupa maximul, iar numerele de sus, etapele.
ntr-o generalizare natural pentru calculul paralel, fiecare etap pornete cnd
dispune de toate elementele necesare. Pentru exemplul anterior etapele sunt prezentate
n figura de mai jos (b).

(a)

(b)

60

Numrul de pai efectuai n paralel este 2n - 3. In cazul utilizrii unui sistem


paralel cu transmitere de mesaje, algoritmul este optim pentru o conectare liniar a
procesoarelor.
SORTAREA PAR-IMPAR
Metoda de sortare par-impar presupune repetarea ciclic a operaiilor:
(a) z2i 1 min{z2i 1, z2i }, z2i max{z2i 1, z2i }
(b) z2i min{z2i , z2i 1}, z2i 1 max{z2i , z2i 1}
Sortarea par-impar necesit mai puini pai dect metoda bulelor. In n pai
sortarea este terminat i oricare alt algoritm care utilizeaz interconectarea liniar nu
sorteaz numerele ntr-un numr mai mic de pai.

SORTARE CU ARBORI
O list de n=2k numere este sortat prin determinarea minimului, nlturarea
acestuia, determinarea urmtorului minim, nlturarea acestuia .a.m.d.
Pentru exemplificare, n figura de mai jos, se consider primii 6 pai ai algoritmului
pentru n=8 i lista (2, 3, 9, 7, 1, 8, 3, 4).
Iniial:
2

4
*

*
*

Pas 1:
*

4
3

*
*

Pas 2:
2

4
3

1
*

Pas 3:
*

*
7

*
8

4
3

*
1

61

Pas 4:
*

4
*

3
*

Pas 5:
*

*
4

3
2

Pas 6:
*

*
7

*
8

*
4

3
*

Fiecare procesor de la un nivel i rspunde de o anumit locaie i este conectat


direct la dou elemente de procesare "fiice" (locaii) de la nivelul i+1, care dup fiecare
pas al algoritmului pot fi ocupate sau libere. Iniial toate locaiile procesoarelor interne
arborelui sunt libere. La fiecare pas se aplic urmtoarele reguli:
1. fiecare procesor liber primete informaii despre locaiile fiice i dac
amndou sunt ocupate, compar valorile i reine pe cea mai mic n locaia sa,
trimind pe cea mai mare la locaia de unde provine. Locaia din care provine valoarea
selectat este eliberat;
2. dac procesorul rdcin este ocupat cu un numr, atunci acesta este scos;
3. toate procesoarele din ntreaga reea opereaz simultan;
4. minimul este eliminat prin nodul rdcin.
Cnd se utilizeaz un sistem paralel cu transmitere de mesaje, algoritmul se recomand
pentru cazul unei reele de interconectare de tip arbore binar.
SORTAREA RAPID
In sortarea rapid serial, rezultatul fiecrei comparaii determin care elemente
vor fi n continuare comparate. Astfel, ordinea n care au loc comparaiile este
cunoscut numai la faza de execuie. Introducerea paralelismului este destul de dificil.
Fiind date n numere, z1,..., zn, metoda rapid clasic rearanjeaz numerele astfel
nct un anumit zi se afl pe poziia final: elementele din stnga sunt mai mici dect
acesta, iar cele din dreapta mai mari. Procesul se repet recursiv asupra sublistelor din
ambele pri ale lui zi i subsublistelor acestora. Fiecare sublist poate fi asociat cu un
procesor dintr-un sistem paralel. Paralelismul potenial se dubleaz la fiecare trecere la
subliste. Se recomand n cazul unui sistem cu transmitere de mesaje i o reea de
interconectare tip arbore binar.
Pentru a obine un arbore de descompunere ct mai balansat, se utilizeaz
metoda medianei. Un pas presupune:
compararea elementului din mijlocul listei curente cu toate celelalte pentru
determinarea numerelor mai mici i a celor mai mari;
divizarea listei curente n trei: elementul din mijloc, sublista numerelor mai
mici dect acesta i sublista numerelor mai mari dect acesta.
Prima etap poate fi procesat eficient n paralel deoarece toate comparrile pot
fi efectuate simultan. Etapa a doua presupune procesarea paralel a sublistelor.

62

Dac se consider un sistem organizat pe bii, prima etap nu mai este necesar.
Numerele cu bitul cel mai semnificativ egal cu 1 aparin sublistei cu elemente mari, iar
cele cu bitul semnificativ egal cu 0 aparin primei subliste. n pasul al doilea este studiat
bitul urmtor din fiecare sublist. Pentru exemplificare, n figura de mai jos se consider
z = (13, 7, 13, 6, 4, 12). n mod analog, sortarea se poate face pornind de la bitului cel
mai puin semnificativ.
Iniial
13
7
13
6
4
12

=
=
=
=
=
=

Binar
1101
0111
1101
0110
0100
1100

Etapa 1
0111
0110
0100
1101
1101
1100

Etapa 2
0111
0110
0100
1101
1101
1101

Etapa 3
0100
0111
0110
1101
1101
1100

Etapa 4
0100
0110
0111
1100
1101
1101

Final
= 4
= 6
= 7
= 12
= 13
= 13

SORTAREA BITONIC
Se definete un comparator ca fiind un modul a crui intrri sunt dou valori x i
y iar ieirile sunt min{x,y} i max{x,y}:

O reea de comparare este realizat din comparatori. Un exemplu de asemenea


reea este prezentat n figua de mai jos, unde xl, x2, x3, x4 sunt intrrile, iar y1, y2, y3,
y4, ieirile (ce reprezint datele de intrare ordonate cresctor).

Dimensiunea unei reele de comparare este numrul de comparat ori utilizai n


reea. Adncimea este lungimea celui mai lung drum dintre o intrare i o ieire. In figura
anterioar, dimensiunea reelei este 5, iar adncimea este 3.
O reea de sortare este o reea de comparare a crui ieiri reprezint valorile de
intrare n ordine cresctoare.

63

In procesarea secvenial se caut o reea de sortare cu cea mai mic dimensiune.


In procesarea paralel se caut construirea unei reele de sortare cu cea mai mic
adncime i din toate reelele cu cea mai mic adncime, cea cu cea mai mic
dimensiune. O asemenea reea optim este cea introdus de algoritmul sortrii bitonice.
O secven de numere (z1,..., zn) se numete bitonic dac, dup o anumit
deplasare ciclic, const dintr-o secven ascendent urmat de una descendent, adic
exist un j<n (numrul de deplasri ciclice) i un l<n (lungimea secvenei cresctoare)
pentru care x j modn x( j 1) modn ... xl modn i x(l 1) modn ... x( j n 1) modn . De exemplu,
secvena (3, 5, 6, 6, 4, 2, 1, 3) este bitonic, deoarece prin j=2 rotaii se poate obine
(1, 3, 3, 5, 6, 6, 4, 2). Secvena (-5, -9, -10, -5, 2, 7, 35, 37) este de asemenea bitonic,
avnd caracteristicile j = 2, l = 6.
Algoritmul de sortare bitonic se bazeaz pe observaia c, dac z=(z1,..., z2n)
este o secven bitonic i se fac comparaiile i interschimbrile necesare astfel nct s
se obin secvena (L(z), R(z)) unde
L(z) (min{z1, zn 1},...,min{zn , z2n}, R(z) (max{z1, zn 1},...,max{zn , z2n}

atunci cele dou jumti ale secvenei sunt bitonice i conin cele n cele mai mici
numere, respectiv cele n cele mai mari numere ale secvenei iniiale. Dat o secven
bitonic de lungime n = 2k, aplicnd procedeul divide et impera la ntreaga secven, (la
fiecare jumtate a ei, la jumtile acestora .a.m.d.), atunci n k pai paraleli (un pas
fiind constituit din operaiunea de determinare a unei perechi (L,R)) secvena este
sortat.
Reeaua de sortare se construiete astfel:
reeaua de sortare B(2) cu dou intrri const dintr-un singur comparator ce
realizeaz ordonarea cresctoare a intrrilor;
reeaua de sortare B(m) este constituit dintr-o coloan de m/2 comparatori
urmat de dou reele de sortare B(m/2). Scopul coloanei de m/2 comparatori este
generarea lui L(z) n primele m/2 linii orizontale i R(z) n urmtoarele m/2:

Pentru un numr de intrri n, putere a lui doi, adncimea reelei este D(n)=
log2n, iar numrul de comparatori este C(n) = n log2n/2. Aceste valori se obin din
recursiile urmtoare:
D(n)=l+D(n/2), D(2)=1,
C(n)=n/2+2C(n/2), C(2)=1.
De exemplu, fie k = 3 i z =(3, 4, 7, 9, 6, 4, 2, 0). Procedeul de sortare bitonic
este reprezentat n figura urmtoare:

64

CUTARE
Problema. Fie X=(x1,...,xn) elemente distincte dintr-o mulime ordonat S astfel
nct xl < x2 < ... < xn. Dat un element y din S, se cere determinarea indexului i pentru
care xi y xi 1 unde, x0
, iar
i sunt dou elemente care adugate la
, xn 1
S satisfac
x
, x S.
Algoritmul secvenial. Metoda secvenial a cutrii binare rezolv aceast problem ntr-un timp O(log2n). Ea const n compararea lui y cu mijlocul listei X. Cutarea
este terminat sau problema este restricionat la jumtatea stng sau dreapt a lui X.
Procesul este repetat pn cnd un element xi a fost descoperit astfel nct y=xi sau
dimensiunea sublistei este egal cu unu.
Algoritmul paralel. O extensie natural a metodei de cutare binar la
procesarea paralel este cutarea paralel n care y este comparat concurent cu mai
multe elemente, fie p elemente, ale lui X i se separ X n p + 1 segmente de lungime
aproximativ egale. Pasul de comparare conduce la identificarea unui element xi egal cu
y sau la restricionarea cutrii la unul dintre cele p + 1 segmente. Se repet acest proces
pn cnd un element xi este gsit astfel nct y=xi sau numrul de elemente din sublista
sub considerare este mai mic dect p.
INTERCLASARE
Problema. Fie A=(a1,...,am) i B=(b1,...,bn) dou secvene sortate. Se cere
determinarea secvenei ordonate C=(c1,...,cn+m) care conine toate elementele celor dou
secvene ordonate.
Algoritmul secvenial. A i B sunt partiionate n perechi de sub secvene astfel
nct s se obin o secven ordonat prin interclasarea perechilor.
Algoritmul paralel. Se realizeaz mai multe interclasri simultan.
Se noteaz cu rang(ai : A) numrul de componente ale lui A mai mici sau egale
cu ai. Rangul poate determinat prin cutare binar sau paralel.
Fie, de exemplu, cazul n care n nu este prim ci are un divizor k. Atunci se caut
k perechi (Ai, Bi) de secvene ale lui A i B astfel nct
numrul elementelor lui Bi este n / k;
fiecare element a lui Ai Bi este mai mare dect oricare elemente din Ai-1 Bi-1, pentru
i=1,...,k-1.
O soluie este partiionarea Bi (bin / k 1,....,b(i 1)n / k ), A (a j(i) ,..., a j(i 1) ) , unde
j(i) = rang(bin/k : A) i interclasarea concurent a perechilor (Ai, Bi), i=1,...,k.

65

De exemplu, A = (4,6,7,10,12,15,18,20), B = (3,9,16,21). Atunci n=4, k=2. Cum


rang(9:A)=3, se partiioneaz Al=(4,6,7), B1=(3,9) i A2=(10,12,15,18,20), B2=(16,21)
care sunt interclasate concurent (eventual utiliznd recursivitatea).
PROBLEMA COLORRII UNUI GRAF
O k-colorare a unui graf G=(V, E) este o funcie definit pe mulimea culorilor
desemnate prin numere c : V {0,1,...,k 1} cu proprietatea c(i) c( j) dac (i, j) E .
Se consider cazul particular al grafului unui inel. Pentru un asemenea graf este
posibil o 3-colorare.
Algoritmul secvenial. Se traverseaz inelul pornind de la un vrf oarecare i se
asigneaz culori arbitrare din mulimea {0, 1} la vrfuri adiacente. A treia culoare poate
fi necesar pentru terminarea ciclului. Acest algoritm secvenial este optimal, dar nu
conduce la un algoritm paralel rapid.
Problema pentru cazul general al unui graf oarecare const n partiionarea
mulimii vrfurilor n clase astfel nct fiecare clas s fie asignat unei aceleiai culori.
Presupunem c arcele lui G sunt specificate printr-o funcie S astfel nct S(i)=j
dac (i, j) E . Presupunem c iniial colorarea lui G este c(i) = i, pentru orice i. Se poate
reduce numrul culorilor prin urmtoarea procedur simpl care ine seama de
reprezentarea binar a numerelor asociate culorilor. Dac (i)10 (it 1...ik ...i0 )2 , atunci al klea bit cel mai puin semnificativ al lui i este ik. Se asociaz fiecrui vrf un proces.
Procesul asociat vrfului i, determin cel mai puin semnificativ bit n care c(i) i c(S(i))
difer i se modific funcia de culoare c' (i) 2k c(i)k , unde c(i)k este al k-lea cel mai
puin semnificativ bit al lui c(i). Calculele se efectueaz concurent. In exemplul din
figura de mai jos, numrul culorilor este redus de la 15 la 6.
14

1
3

7
12

14

11

10

15

4
6
5

Nr 1 2
i 1 3
0 0
c 0 0
0 1
1 1
k 1 2
c 2 4

3
7
0
1
1
1
0
1

4
14
1
1
1
0
2
5

5
2
0
0
1
0
0
0

6
15
1
1
1
1
0
1

7
4
0
1
0
0
0
0

8
5
0
1
0
1
0
1

9
6
0
1
1
0
1
3

10
8
1
0
0
0
1
2

11
10
1
0
1
0
0
0

12
11
1
0
1
1
0
1

13
12
1
1
0
0
0
0

14
9
1
0
0
1
2
4

15
13
1
1
0
1
2
5

Fie t numrul de bii utilizai pentru reprezentarea culorilor prin c. Atunci,


fiecare culoare utilizat n c poate fi reprezentat cu [log2t] + 1 bii, unde [.] desemnez

66

cel mai mic ntreg mai mare dect valoarea dintre paranteze. Procedura de reducere a
culorilor poate fi aplicat de mai multe ori, atta timp ct t > [log2t] + 1, adic t > 3.
Pentru cazul t = 3, rezult o colorare cu cel mult 6 culori, 0 c(i) 5, 0 k 2 .
Numrul de culori poate fi redus la trei dup cum urmeaz. Procedura adiional
de recolorare const n trei etape, fiecare ocupndu-se de vrfurile de anumit culoare l
numerotat de la 3 la 5. Fiecare vrf i de culoare l se recoloreaz cu culoarea cu cel mai
mic numr posibil din mulimea {0, 1, 2}, adic cea mai mic culoare diferit de
culorile predecesorului i succesorului n cerc. Dup ultima etap se obine o 3-colorare.
In exemplul din figura anterioar, culorile vrfurilor dup aplicarea procedeului
de reducere sunt 0, 1, 2, 3, 4, 5. Vrful 6 este unicul de culoare 3. Deoarece vecinii si,
vrfurile 5 i 8, sunt colorate cu 1 i 2, vrful 6 este recolorat cu 0. Apoi, vrfurile 3 i 9
sunt recolorate cu 0, respectiv 1. n final, vrfurile 13 i 14 sunt recolorate cu 0,
respectiv 2.

67

Capitolul 4
ALGORITMI NUMERICI PARALELI
MODALITI DE CONSTRUIRE
A ALGORITMILOR NUMERICI PARALELI
n modelarea algoritmilor paraleli numerici exist o serie de ci:
analiza algoritmului serial i convertirea sa ntr-o procedur care opereaz cu
obiecte matematice compuse, cum ar fi vectorii i matricile, astfel nct mai multe date
s fie procesate simultan. De multe ori nu cel mai eficient algoritm serial este cel mai
bun n paralel. Metode mai puin eficiente n procesarea serial pot poseda un nalt grad
de paralelism i ca urmare sunt adaptabile calculului paralel;
algoritmi iterativi echivaleni cu anumite metode directe posed un nalt grad
de paralelism i pot fi organizai, sistematic, pe un calculator paralel;
calculul poate fi divizat n subuniti i distribuit ntre procesoare.
Exemplu. Cele mai comune exemple de paralelism n analiza numeric sunt
calculele cu vectori i matrici. De exemplu, cele n multiplicri necsare produsului scalar
a doi vectori pot fi evaluate simultan, la fel i cele n - 1 adunri. Modalitatea cea mai
banal de paralelizare este distribuirea sarcinilor procesoarelor la componentele
vectorului soluie. Un alt exemplu sunt iteraiile Jacobi pentru rezolvarea sistemului
liniar Ax = b, ce se scriu recursiv
x(n+l) = (I - A)x(n) + b.
Fiecare component a membrului drept poate fi calculat de ctre un procesor
dintrun sistem cu memorie comun. Dei algoritmul se poate implementa n paralel, este
executat ntr-o modalitate secvenial. Se poate spune c un asemenea algoritm are o
natur dubl: i secvenial i paralel.
EVALUAREA RELAIILOR RECURSIVE
Soluia problemelor numerice se reduce adesea la evaluarea ultimului termen sau
a tuturor termenilor unei relaii recursive.
Procesarea paralel standard a relaiilor recursive are la baz una din urmtoarele
tehnici:
tehnica dublrii recursive,
tehnica de reducere ciclic.
Exemplul 1. Fie relaia recursiv
xi ai xi 1 bi xi 2 , i 2
Valorile x0 , x1, ai , bi sunt cunoscute. Relaia recursiv poate fi reformulat vectorial
yi Mi yi 1, i 2

unde M i

ai bi
, yi
1 0

xi
xi 1

Atunci yn Mn Mn 1...M2 y1 .
Produsul matricilor poate fi calculat n paralel prin tehnica dublrii recursive
descrise la evaluarea expresiilor aritmetice.
Exemplul 2. Anumite relaii de recuren neliniare pot fi reduse la cazul liniar
i, deci, rezolvate n paralel cu tehnica menionat. De exemplu,

68

zi

ai

bi / zi

se reduce la relaia recursiv n x din exemplul anterior, dac zi z0 z1...zi . O asemenea


ecuaie se obine la descompunerea LU a unei matrici tridiagonale (U i L sunt, n acest
caz, matrici bidiagonale).
Exemplul 3. ntr-o serie de probleme apar recursii de tipul
xi

ai xi 1 bi
ci xi 1 d i

Soluia final este de tipul xn


unde

Ax0 B
Cx0 D

an bn
a b a b
... 2 2 1 1
cn d n
c2 d 2 c1 d1

A B
C D

Produsul matricial poate fi calculat, de asemenea, prin tehnica dublrii recursive.


Exemplul 4. In anumite condiii, metoda dublrii recursive se poate aplica
iteraiilor de forma xi f i (xi 1 ), i 1, x0 dat.
Soluia are forma xn f n ( f n 1 (...f1 (x0 )...)) .
Dac compunerea este asociativ n clasa funciilor fi , i 1 , atunci se poate aplica
tehnica dublrii recursive:
xn

(...((f n f n 1 ) ( f n 2 f n 3 ))...(f 2 f1 )...)(x0 )

POLINOAME
Fie polinomul
n

ai x i

P( x)
i 0

Algoritmul secvenial pentru evaluarea valorii polinomului n x0, construit pe


baza regulii Horner, presupune procesul iterativ
bj

aj

x0b j 1,

n 1,...,0, bn a n

Valoarea cerut este P(xo) = ba.


Algoritmul Dorn pentru calculul paralel cu r procesoare presupune aplicarea
simultan a regulii Horner la r subpolinoame, obinute prin partiionarea polinomului
iniial. Fie, de exemplu, r = 2. Procesul iterativ corespunztor este urmtorul:
bn a n , bn

a n 1, b j

aj

x 20 b j 2 ,

n 2,...,0

Atunci P(x0 ) b0 b1x0 .


Polinomul este partiionat astfel:
P(x0 ) [a0

x02 (a2

x02 (... x02 (a2 n / 2 )...] x0 (a1 x02 (a3 x02 (... x02 (a2 (n 1) / 2 1...) .

O alt variant de paralelizare este aplicarea tehnicii dublrii recursive pentru


procesul iterativ corespunztor regulii Horner.

METODE NUMERICE PARALELE DE REZOLVARE A SISTEMELOR DE


ECUATII LINIARE
SISTEME LINIARE TRIDIAGONALE

69

Sistemele tridiagonale formeaz o clas foarte important a ecuaiilor algebrice


liniare i intervin n rezolvarea numeric a unor probleme,cum ar fi aproximare cu
diferene finite a ecuaiilor difereniale cu derivate pariale.Exist metode seriale
performante pentru rezolvarea unor asemenea sisteme (exemplu: metoda Gauss de
eliminare parial ) dar noi vom studia doua metode potrivite rezolvrii cu mai multe
procesoare,utiliznd tehnica reducerii ciclice par-impar (care consta in reformularea
calculului in vederea evidentierii paralelismului dintr-un calcul serial) i a dublrii
recursive (care consta in descompunerea repetata a calculului in perechi de calcule de
complexitate egala care pot fi efectuate simultan).
METODA REDUCERII CICLICE
Fie sistemul

b1
a2

c1
0
b2 c2
a3 b3 c3

0 an 1 bn 1 cn 1
an bn

x1
x2
x3

xn 1
xn

d1
d2
d3

dn 1
dn

El poate fi scris sub forma unei recurene liniare cu trei termeni:

ai xi 1 bi xi ci xi
x0 xn 1 0 .

di , i 1, n ,

unde a1 cn
Pentru determinarea necunoscutei xi ,observm c aceasta apare n ecuaiile :

ai 1 xi 2 bi 1 xi 1 ci 1 xi d i 1 ,
ai xi 1 bi xi ci xi 1 d i ,
ai 1 xi bi 1 xi 1 ci 1 xi 2 d i 1.
Prin eliminarea necunoscutelor xi 1 i xi 1 , se obine o nou ecuaie :

ai1 xi

bi 1 xi

ci1 xi

di 1 .

Relund aceast operaie pentru fiecare i 1, n , se obine tot un system tridiagonal


dar numrul coeficienilor ai 1 va fi n 2 .
Continund raionamentul i utiliznd cele trei ecuaii ale noului system care l conin
pe xi ,se obine:

ai 2 xi

bi 2 xi ci 2 xi

di 2 ,

numrul coeficienilor ai 2 fiind n 4 .Dup k pai se obin ecuaii de forma:

70

ai k xi
cu
k 1
i 2k 1
k
i

2k

bi k xi

ci k xi

di k ,

2k

k log 2 n , unde coeficienii se obin recursiv din coeficienii


, ai k2k1 1 , ci k2k1 1 , ci k2k1 1 , bi k2k1 1 , bi k2k1 1 , di k2k1 1 , di k2k1 1 , bi k 1 , di k 1 , numrul coeficienilor

a , respectiv ci k fiind n 2k .n acest moment (deci dup k


bi k xi

di k

xi

log 2 n pai ),

di k / bi k

Apoi, prin substituii regresive, se determin valorile tuturor necunoscutelor.Un


prim algoritm de determinare a soluiei pe baza coeficienilor matricilor transformate i
care este optim din punct de vedere al numrului de operaii, este urmtorul:
1. Se determin xn i apoi, prin substituii regresive, celelalte componente ale
vectorului soluie:
a) pentru fiecare s 1, k , calculeaz

ai s , bi s , ci s , di s , unde i 2 s ,2 s 1 ,
b) pentru fiecare s k, k 1,,0 , se calculeaz soluia xi , i 2s ,2s
ps

2s 1 ,, n

n figura urmatoare se prezint algoritmul n cazul unui sistem tridiagonal de


dimensiune 7.

p1 0

p2 0

p3 0

p4 0

I0 0

p3

I4

0x3

0x4

p1

I2

0x1

0x2

p6 0

1
p2

p5 0

1
p4

1
p6

p7 0

2
p4

p5

I6

0x5

I8

p7

0x6

0x7

Determinarea soluiei unui sistem tridiagonal de dimensiune 7 cu un numr minim de


operaii
Un al doilea algoritm optim din punct de vedere al numrului de pai care pot fi
executai n parallel este prezentat n continuare. n acest caz, pentru eliminarea
complet a elementelor extradiagonale se completeaz matricea iniial cu 1 pe
diagonala principal, cu 0 pe subdiagonale i cu 1 n vectorul liber pn cnd numrul

71

de ecuaii ale sistemului este putere a lui doi minus unu. Fiecare x i poate fi calculat ca

x n 1 / 2 dac se impun condiiile ai k ci k di k 0, bi k 1,unde i 0 sau i n 1 i


k 0 pentru ca xi 0 , unde i 0 sau i n 1. Atunci soluia final poate fi exprimat
prin

xi

. Algoritmul este urmtorul:


2.Se calculeaz simultan toate valorile soluiei :
a) se calculeaz coeficienii p s ai s , bi s , ci s , di s , s 1, k

di k / bi k , k log 2 n 1

b) se determin xi di k / bi k .
n figura urmatoare se prezint algoritmul, n cazul unui sistem tridiagonal de
dimensiune 7.

0
P0

0 0 0 0 0 0 0 0
P1 P2 P 3 P4 P5 P6 P7 P8
1
1
P1 P2

1
P3

1 1
1 1
P4 P5 P6 P7

2
2
2
P1 P2 P3

3
P1

2
P4

2
P5

2 2
P6 P7

3
3 3 3 3 3
P2 P3 P4 P5 P6 P7

I1 I 2

I3

I4

I5

I6

I7

Determinarea soluiei unui sistem tridiagonal de dimensiune 7 cu un nur minim de pai


paraleli
REDUCEREA DIMENSIUNII PROBLEMEI
O alt metod adecvat execuiei paralele a relaiilor iterative este descompunerea
n subprobleme. Fie, de exemplu:

xk

Ax k

c,

unde A este o matrice n n , iar c este un vector de dimensiune n .Componentele


vectorului x k 1 pot fi calculate n parallel cu ajutorul mai multor procesoare.Dac lum
n considerare cazul a dou procesoare i n numr par ,vectorul x k 1 este descompus

72

n dou segmente, x1k 1 i x2k 1 , cu cte n / 2 componente fiecare,ce se actualizeaz


conform relaiei recursive:

x1k
x

k 1
2

A11 A12
A21 A22

x1k
x

k
2

c1
c2

La fiecare pas,cte un processor actualizeaz jumtate din componente ,iar


urmtoarea iteraie este realizat numai dup ce ambele procesoare au terminat
actualizarea.
SISTEME LINIARE CU MATRICI DENSE
Fie sistemul

Ax b ,
unde A este o matrice dens n n , iar x i b sunt vectori cu n componente.Ne
intereseaz posibilitile de paralelizare ale metodelor de rezolvare cunoscute, ct i
abordarea unor metode specifice execuiei cu mai multe procesoare.Vom avea n vedere
att metode directe, ct i metode iterative.
METODE DIRECTE
Metoda Gauss paralel
Metoda Gauss ( metoda eliminrii pariale ) este eficient ntr-o execuie serial,
dar poate fi executat i cu ajutorul mai multor procesoare, urmrind, la fiecare pas,
operaiile care pot fi executate independent unele de altele. Iniial avem:

a11x1 a12 x2 a1n xn b1

an1 x1 an 2 x2 ann xn bn
n prima etap,presupunnd a11 0 , toate cele n procesoare vor lucra simultan
la eliminarea necunoscutei x1 din ecuaiile 2,3,, n .Dup finalizarea primei etape, se
obine sistemul echivalent

x1 a121 x2 a11n xn

b11

a221 x2 a21n xn

b21

an12 x2 ann1 xn

bn1

73

n etapa a doua se va elimina necunoscuta x2 din ecuaiile 3,4,, n lucru care


se va realiza cu ajutorul a n 1 procesoare.Mai departe, n etapa a treia ,vor fi active
n 2 procesoare, .a.m.d. n final, se ajunge la sistemul superior triunghiular:

x1 a121 x2 a11,n 1 xn 1 a11n xn

b11

x2 a22,n 1 xn 1 a22n xn

b22

xn 1 ann 11 xn

bnn11

annn 1 xn

bnn 1

Rezolvarea acestui sistem se va afce prin substituie regresiv, ncepnd cu


ultima ecuaie.Dac la inceput un singur processor va fi activ i va executa operaia de
mprire

xn

bnn 1 / annn 1 ,

n continuare vor lucra 2 procesoare la determinarea valorii xn 1 , trei pentru calcularea


valorii lui xn 2 , .a.m.d,utiliznd tehnica dublrii recursive pentru obinerea valorilor.Cu
alte cuvinte, procesoarele se reactiveaz unul cte unul.
n concluzie, putem afirma c metoda Gauss se poate paraleliza, dar algoritmul
Gauss parallel nu este sufficient de performant, din cauza neutilizrii procesoarelor la
capacitatea maxim.
Metoda Gauss-Jordan paralel
Meotda Gauss-Jordan ( sau metoda eliminrii totale ) poate fi la rndul su
paralelizat.Astfel,considernd un calculator parallel cu n procesoare,dup o etap,
sistemul devine:

x1 a121 x2 a11n xn

b11

(1)
a22
x2 a21n xn

b21

an(12) x2 a1nn xn

bn(1)

unde

a1(1j)
(1)
ij

a
calculele

a1 j / a11,
(1)
1 j i1

j 2, n, b1(1)
(1)
i

aij a a , b

b1 / a11
(1)
1
i1

bi b a , i, j 2, n,

fcute n felul urmtor: un procesor calculeaz valorile


(1)
a fost calculat, restul de
a , a ,, a , b n aceast ordine. n momentul n care a12
(1)
12

(1)
13

fiind
(1)
1n

(1)
1

(1)
n 1 procesoare vor calcula elementele a22
,, an(12) , trecnd apoi mai departe la
(1)
calcularea lui a23
,, an(13) , .a.m.d., pn la b2(1) ,, bn(1) . Se presupune c n acest

74

moment procesorul unu a terminat cu prima linie de mpriri, i ncepe mpririle


( 2)
(1)
(1)
( 2)
necesare eliminrii necunoscutei x2 : a23
a fost
a23
/ a22
. n momentul n care a23
( 2)
(1)
(1)
calculat, acest procesor trece la urmtoarea mprire: a24
, etc., iar restul
a24
/ a22
n 1 procesoare vor calcula valorile pe coloane, deasupra i dedesubtul elementului de
pe diagonala principal.

Se continu acest proces pn cnd sistemul devine:

b1( n )
b2( n )

x1
x2

xn

bn( n )

deci ajunge la forma diagonal care indic direct soluia.


Dup cum se observ, n cazul algoritmului paralel al eliminrii totale, toate
procesoarele sunt active, pn la obinerea soluiei. Observaia care trebuie totui fcut
este aceea c, pe tot parcursul execuiei, un procesor execut numai operaii de
mprire, n timp ce celelalte n 1 execut o adunare i o nmulire. Pentru ca s nu
avem perturbri n execuia algoritmului, trebuie sincronizai timpii de execuie ai unei
mpriri cu cei ai unei adunri plus o nmulire.

Metoda factorizarii WZ
Factorizarea WZ este o variant a metodei eliminrii utilizat n implementarea
pralel. Ideea este aceea de a descompune matricea A ntr-un produs de matrice WZ,
astfel nct calculele ulterioare s poat fi executate simultan, de ctre mai multe
procesoare.
Fie sistemul de ecuaii

Ax b
i A WZ , unde
1
0
w21 1 0 0 w2n
W

wn 1,1 0 0 1 wn 1,n
0
0

z11
0 z22

0
0
zn1

z2,n
zii
0

adic

z1 j

wij

1,
daca i j
0,
daca i 1 j n i 1 sau n i 1
nenul, altfel

zij

0,
daca j 1 i n
nenul, altfel

j sau n

j 2 i

j i 1
j 1

Elementele nenule ale matricilor W i Z se calculeaz astfel:


a) Prima i ultima linie a lui Z sunt identice cu cele ale lui A
a1 j i znj anj , j 1, n

75

z1n
0

b) Pentru prima i ultima coloana din W, se rezolv n 2 sisteme de 2 ecuaii


cu 2 necunoscute de forma:

z11wi1 zn1win ai1


, i 2, n 1
z1n wi1 znnwin ain
Pentru

restul

elementelor,

k 1,,

pentru

1
(n 1) ,
2

calculele

sunt

urmtoarele:

zkl wik

zn

1,l wi ,n

k 1

k 1

s 1

s n k 2

ail

wis zsl , l k , n k 1.

O dat calculate elementele matricilor W i Z, vom rezolva sistemul iniial astfel.


Rescriem

Ax b
n forma

WZx b
i vom rezolva, mai nti, sistemul
Wp b ,
determinnd cele n componente ale vectorului p , iar apoi sistemul

Zx p
pentru a obine soluia final.
Vom avea, deci:

1
0
w21 1 0 0 w2n

wn 1,1 0 0 1 wn 1,n
0
1

p1
b1
p2
b2
=
pn 1
bn 1
pn
bn

La nceput se determin p1 i pn , la pasul urmtor p2 i pn 1 , .a.m.d. La pasul


i vom avea
pi bi(i ) , pn i 1 bn(i )i 1 ,

METODE ITERATIVE

Literatura de specialitate prezenta metode iterative de rezolvare a sistemelor de


ecuaii liniare. In capitolul de fa vom ncerca s dm o variant paralel posibil a
unor metode i vom prezenta i alte abordri specifice unei implementri paralele.
Metoda Jacobi paralel

76

Presupunnd c avem un sistem cu n procesore, fiecare poate calcula o


component a soluiei dup formulele:

1
b
aii i

xi

aij x j , i 1, n.
j 1
j i

S-a vzut c aceast metod se bazeaz pe o descompunere a matricei A ntr-o


matrice diagonal D, una strict inferior triunghiular L i alta strict triunghiular U, deci
A=D-L-U.
Pentru o execuie paralel eficient, se consider descompunerea dublu-diagonl
a matricei A:
A=X-W-Z,
unde

*
*
0
*
*

0 *
*
* 0
*
0 *

0 ... ...0 ... ... 0


*
*
**
**
* * *0* * *
**
**
*
*
0 ... ... 0 ... ... 0

0 * * * * * 0
* * *
*

*
* * *
0 * * * * * 0

cu alte cuvinte

xij

0, i j si i n j 1
aij , in caz contrar
wij

0, i j n i 1 si n i 1
aij , in caz contrar

j i

77

zij

0, j i n j 1 si n
aij , in caz contrar

j 1 i

In acest caz, metoda Jacobi este cunoscut sub numele de metoda Jacobi dubludiagonal i genereaz iteraia:

Xx( p 1) (W Z ) x ( p) b.
Schema poate fi privit ca o metod iterativ de blocuri, de dimensiune 2X2,
calculele fiind executate simultan de ctre mai multe procesoare.
Metoda Gauss-Seidel paralel
In cazul metodei Gauss-Seidel, datorit utilizrii succesive a componentelor
necunoscute deja actualizate, procesoarele pot lucra simultan la calcularea primei
componente a unei iteraii, apoi lucreaz toate la calcularea primei componente a unei
iteraii, apoi lucreaz toate la calcularea celei de-a doua componente, .a.m.d. Tehnica
utilizat este cea a dublrii recursive.
Metoda prezentat anterior ia n considerare numerotarea lexicografic a
necunoscutelor: x1, x2, , xn. Caracteristica metodei de a utiliza n calculul valorii unei
necunoscute valorile unor necunoscute deja calculate, permite i o altfel de
implementare paralel, dac utilizm numerotarea rou-negru (sau alb-negru,
tabl-ah, etc.) pentru componente. Ideea este aceea c, pe baza formulelor prezentate
n paragraful precedent, actualizm simultan componentele negre (adic pe cele cu
indicii impari): x1, x3, i apoi, simultan, componentele roii (adic pe cele cu indicii
pari): x2, x4,.., care vor folosi deja valorile calculate la pasul anterior. Putem vizualiza
procedeul cu ajutorul unei linii din tabla de ah.

Execuia tabla-de-ah a metodei Gauss-Seidel


Metoda paralel a relaxrii (SOR paralel)
Analog cu metoda Jacobi dublu-diagonal, cu ajutorul descompunerii matricei A:
A=X-W-Z

78

se poate introduce metoda SOR dublu-diagonal, conform creia o iteraie se descrie


astfel:

W ) x ( p 1)

(X

[ Z (1

) X ]x ( p)

b.

unde este factorul de relaxare al metodei SOR.


Se obine astfel o metod bloc-iterativ, convenabil unei execuii cu mai multe
procesoare.

METODE NUMERICE PARALELE DE REZOLVARE A ECUATIILOR


NELINIARE
Pentru rezolvarea ecuaiilor neliniare pe R exist diferite metode seriale. Vom
ncerca n acest capitol s abordm unele dintre ele din punct de vedere al implementrii
lor paralele.
Metoda paralel a njumtirii intervalului (metoda biseciei)
Fie ecuaia neliniar
(1)

f(x)=0,

unde f:[a,b] R este o funcie continu.


Dac f(a)f(b) < 0, atunci ecuaia dat are cel puin o soluie real n intervalul (a,
b). Se cere determinarea aproximativ, cu o eroare dat, a soluiilor reale ale ecuaiei
(1).
Din punct de vedere al unei execuii cu mai multe procesoare, putem considera
urmtoarele cazuri:
Cazul I. Ecuaia (1) are o singur soluie real n intervalul [a,b].

79

Situaia unei rdcini reale n intervalul [a,b]


In aceast situaie, metoda njumtirii intervalului const n definirea a trei
iruri {an}, {bn}, {cn}, astfel:
Iniializare: a0=a, b0=b, c0=(a+b)/2.
Fiind constuii termenii an-1, bn-1 i cn-1 definim, pentru n1
an=cn-1 i bn=bn-1 dac f(an-1)f(cn-1) >0
an=an-1 i bn=cn-1 dac f(an-1)f(cn-1) >0
cn=(an+bn)/2
Dac f(cn-1)=0 atunci am= an-1, bm=bn-1, cm=cn-1,

mn.

Determinarea elementelor celor trei iruri poate fi fcut simultan pe un sistem


paralel, fiecare ir fiind calculate de ctre un processor. Un al patrulea poate fi
folosit la calcularea valorii funciei n diferite puncte i la obinerea rezultatului.
Cazul II. Ecuaia (1) are mai multe rdcini reale n intervalul [a,b].

a
b

Situaia n care exist mai multe rdcini reale n [a,b]


In aceast situaie, problema se descompune n mai multe subprobleme, dup
cum intervalul iniial [a,b] se descompune n subintervale care izoleaz cte o
singur rdcin real.
Lucrnd cu mai multe procesoare, fiecare poate determina soluia aproximativ
corespunztoare subproblemei repartizat.

80

Metoda paralel a lui Newton (metoda tangentei)


Iteraia Newton pentru rezolvarea unei ecuaii neliniare
f(x) =0
este

xk

(2)

f ( xk )
f ( xk ) ,

xk

x0 dat.

Si n acest caz putem aborda paralelizarea metodei n dou feluri:


a) O manier natural ar diviza calculul n dou procese:
f1(xk)=f(xk) i f2(xk)=f(xk)
Cu alte cuvinte, un processor ar evalua tot timpul valoarea derivatei pe punct,
iar cellalt valoarea funciei pe punct. Un al treilea processor ar determina noua
component xk+1. Aceast posibilitate de execuie paralel nu asigur, totui, o eficien
prea ridicat, deoarece timpii de evaluare a celor dou funcii sunt, n general diferii.

0 , pentru k=0,1,, recurena (2) se poate scrie astfel:

b) In cazul n care xk

xk 1
1

1
xk 1

xk
1

, cu

f ( xk )
f ( xk ) ,

respectiv

xn
1

1
xn 11

n 1

1
xn 12

n 2

...

1
x0 1

x0
1

Dup evaluarea valorilor ak, produsul matriceal se poate executa cu mai multe
procesoare, conform tehnicii dublrii recursive.

81

Metoda paralel a secantei (metoda coardei)


Fie ecuaia
f(x)=0,
unde f:[a,b] R este o funcie continu.
Fr restricie de generalitate, putem presupune
f(a)<0 i f(b)>0,
ca n figura ce urmeaza

Ca si la metoda bisectiei, din punct de vedere al abordarii paralele, avem mai


multe cazuri:
Cazul I. Situatia in care in intervalul [a,b] exista o singura radacina reala.
Tinand cont de expresia iteratiei ce caracterizeaza metoda secantei, si lucrand simultan
cu trei procesoare, se pot construe, simultan, sirurile {a n }, {b n } si {c n }, astfel:
Initializare: a0

a, b0

b, c0

a0 f (b0 ) b0 f (a0 )
f (b0 ) f (b0 )

Fiind construite elementele a n 1 , bn 1 , cn 1 , pentru n1 definim:


a n cn 1 , bn bn 1 , dacaf(c n 1 ) 0
an an 1 , bn cn 1 , daca f(c cn 1 ) 0

an f (bn ) bn f (an )
f (bn ) f (an )
Daca f(c n 1 ) =0 atunci am
cn

an 1 , bm

bn 1 , cm

cn 1 , mn

Se demonstreaza ca sirul { c n } converge catre solutia exacta a ecuatiei f(x)=0.

82

Cazul II. Situatia in care ecuatia are mai multe radacini reale in intervalul [a,b],
ca in figura urmatoare.

In acest caz, se separa radacinile reale, astfel incat sa ne situam in ipotezele


aplicarii metodei secantei, si fiecare processor va executa metoda pe cate un subinterval.
Metoda tangenta-secanta
Fiind data ecuatia
f(x)=0
cu f:[a,b] -> R continua pe [a,b], si presupunand existenta unei singure radacini reale a
ecuatiei in (a,b), metoda tangenta-secanta presupune construirea unui sir de intervale
approximate, de forma:

(x1 ,t , x1s ) (x2 ,t , x2s ) ... (xn ,t , xns ) ....


unde sirul { xnt } se genereaza cu metoda tangentei, iar sirul { xns } cu metoda secantei.
Procedeul se opreste atunci cand
| xnt xns | ,
unde este o eroare prestabilita. In acest moment, oricare dintre cele doua aproximante
aproximeaza solutia reala exacta a ecuatiei cu precizia dorita. Metoda se poate
paraleliza usor, daca vom considera ca un processor genereaza sirul { xnt }, simultan cu
altul care genereaza sirul { xts }.
CUADRATURI NUMERICE PARALELE
Integrarea numerica a functiilor ocupa un loc important in analiza matematica,
deci este de mare interes o abordare a acestei probleme si din punctual de vedere al
calculului parallel.
Vom face referire doar la cuadraturile de tip interpolator, dar acest lucru nu
reprezinta o restrictie, caci rationamente similare sunt valabile si pentru alte tipuri de
formule de integrare numerica. Vom considera, in continuarem cuadraturile de tip
interpolator obtinute pe noduri echidistante, in cazul in care calculul integralei se face
repetat, pe subintervale in care se divide intervalul initial. Cu alte cuvinte ne vom referi
la formula Newton-Cotes repetate.

83

Formula repetata a trapezului


(1)
b
a

f ( x)dx

b a
[ f (a)
2a

n 1

f (b) 2

f ( xk )]
k 1

Lucrand simultan cu mai multe procesoare, am putea calcula valoarea numerica


a integralei astfel:
n 1

f ( xk ) , cu ajutorul tehnicii

a) in forma (1), n-2 procesoare pot evalua


k 1

dublarii recursive (vezi si paragraful evaluarea expresiilor aritmetice), iar


altele doua, f(a) si f(b).
b) Daca scriem formula repetata a trapezului
b
a

f ( x)dx

I k , cu I k
k 1

xk
xk

f ( x)dx ,
1

adica
(2)
b
a

f ( x)dx

{
k 1

xk

xk 1
[ f ( xk 1 )
2

f ( xk )]}

atunci, lucrand cu n procesoare, putem considera ca fiecare processor evalueaza


valoarea numerica a integralei pe un interval lk si la sfarsit, tot prin metoda dublarii
recursive, se evalueaza suma finala si se obtine rezultatul dorit.

CTEVA NOIUNI PRIVIND


PARALELISMUL N PROCESAREA IMAGINILOR
n sistemele grafice, rezultatele introducerii paralelismului sunt evidente.
mbuntirile aduse n asemenea sisteme sunt:
mai multe coprocesoare care mpart cu unitatea central de procesare acelai
bus;
mai multe procesoare de display cu memorie proprie;
procesoare integrate care conin suport hardware intern pentru mai multe
operaii grafice simultan.
De exemplu, procesorul Intel i860 este un microprocesor pe un singur cip cu
suport integrat pentru grafic tridimensional. Instruciunile sale opereaz n paralel pe
atia pixeli ci pot fi mpachetai ntr-un cuvnt de 64 bii. Pentru aplicaii care
utilizeaz, de exemplu, 8 bii pentru reprezentarea informaiei asociate cu un pixel, sunt
posibile 8 operaii grafice simultane. Instruciunile grafice paralele permise includ
urmtoarele:
1. calculul n paralel al interpolrilor liniare;
2. calculul n paralel al comparrilor asociate cu algoritmul z-buffer de
vizibilitate;
3. actualizarea, n paralel, condiionat, a pixelilor.

84

Etapele principale n transpunerea pe ecran a imaginilor tridimensionale a unui


corp sunt urmtoarele:
1. traversarea bazei de date care descrie obiectul (prin primitive grafice ca
puncte sau linii);
2. transformarea obiectului din sistemul de coordonate ale obiectului n sistemul
de coordonate a lumii nconjurtoare;
3. acceptarea sau respingerea primitivelor pentru ncadrarea n volumul de
observare;
4. simularea unui model de iluminare a corpului;
5. trecerea obiectului n sistemul de coordonate normalizate;
6. aplicarea transformrii perspective asupra obiectului;
7. transformarea primitivelor n valori per pixeli.
n figura de mai jos se poate observa distribuirea pixelilor unui ecran la
elementele de procesare: n blocuri contigue (a) i n zone fragmentate (b).
In fiecare din aceste faze, modalitatea de paralelizare a proceselor este diferit.
Se dau urmtoarele exemple:
1. mprirea bazei de date ntre procesoare;
2. exist mai multe variante:
(a) componentele individuale ale fiecrui punct al obiectului pot fi repartizate pe
procesoare diferite care efectueaz anumite transformri pe baza unor matrici;
(b) dac primitivele sunt uniforme, ca de exemplu un set de triunghiuri, toate
vrfurile triunghiurilor pot fi transformate simultan de ctre trei procesoare distincte;
3. se poate asocia fiecrui plan ce delimiteaz volumul de observare un procesor care
efectueaz testele de acceptare/respingere referitoare la planul corespunztor;
4. n iluminarea obiectelor se recomand utilizarea unui procesor specializat (hardware),
n virgul mobil, care calculeaz culoarea unui punct pornind de la vectorul incident al
luminii i informaiile referitoare la suprafaa pe care punctul se afl;
5. se desfoar analog cu (3);
6. calculele se preteaz la utilizarea unui procesor pipeline;
7. se partiioneaz pixelii ecranului ntre mai multe elemente de procesoare.
Exist dou strategii consacrate de partiionare a ecranului, dup cum se poate
observa n figura de mai jos:
n blocuri contigue (a) cnd primitivele sunt procesate numai n acele poriuni
n care sunt vizibile (determinate geometric). Pot aprea probleme de eficien prin
ncrcarea diferit a elementelor de procesare (poriuni care nu conin primitive ale
obiectului fa de poriuni care conin un numr mare de primitive ale obiectului);
n zone fragmentate (b) prin care efortul de calcul este echilibrat (cea mai
rspndit form de partiionare).

85

(a)

(b)

86

Capitolul 5
SISTEME DISTRIBUITE
DEFINIREA SISTEMELOR DISTRIBUITE
n literatura de specialitate pot fi regsite numeroase i diferite definiii ale
sistemelor informatice distribuite, nici una nefiind larg acceptat n rndul specialitilor.
Acest fapt poate fi explicat prin multitudinea tipurilor de sisteme distribuite
implementate astzi, ntr-o mare diversitate arhitectural, tehnologic sau de alt natur,
ceea ce face dificil identificarea unor caracteristici generale comune ntregii varieti
de sisteme dezvoltate. Din acest motiv, misiunea proiectanilor este dificil datorit
complexitii sistemelor distribuite, ei trebuind s identifice toate combinaiile fezabile
din care s o aleag pe cea optim.
Pentru a desprinde elementele definitorii ale sistemelor distribuite, vom prezenta
dou definiii simple, completate prin enumerarea caracteristicilor lor eseniale i cteva
exemple.
O prim definiie consider sistemele distribuite ca o colecie de calculatoare
independente care apar utilizatorilor acestora ca un singur sistem coerent. Aceast
definiie evideniaz dou aspecte eseniale. Primul privete hardware-ul:
calculatoarele sunt autonome. Cel de-al doilea vizeaz software-ul: utilizatorii au
impresia c lucreaz cu un singur sistem.
O alt definiie descrie sistemele distribuite ca acele sisteme n care
componentele hardware i software localizate ntr-o reea comunic i i coordoneaz
aciunile lor doar prin transmiterea de mesaje. Calculatoarele conectate prin
intermediul reelei pot fi separate de orice distan, putndu-se afla pe continente
diferite sau n aceeai cldire. ns, cel mai important aspect care trebuie reinut este
faptul c realizarea comunicrii ntre componentele unui sistem distribuit se face
numai prin intermediul schimbului de mesaje.
Dincolo de aceste definiii, problematica sistemelor distribuite poate fi clarificat
prin prezentarea caracteristicilor lor eseniale. Pe scurt, acestea sunt:
diferenele dintre variatele tipuri de calculatoare i modul n care ele comunic
sunt ascunse (transparente) pentru utilizator, la fel ca i organizarea intern a sistemului
distribuit;
utilizatorii i aplicaiile pot interaciona cu un sistem distribuit ntr-o manier
uniform i consistent, indiferent de locul i momentul n care are loc interaciunea;
execuia concurent a programelor reprezint regula ntr-un sistem distribuit. Doi
utilizatori i pot realiza sarcinile lor de lucru pe propriile calculatoare prin partajarea
unor resurse, precum paginile web sau fiiere, atunci cnd este necesar;
sistemele distribuite trebuie s fie scalabile adic, s poat fi uor extinse.
Aceast caracteristic este o consecin direct a independenei calculatoarelor din
sistem, dar i a faptului c pentru utilizator organizarea intern este transparent;
un sistem distribuit trebuie s asigure independena fa de eventualele cderi
sau disfuncionaliti ale unor calculatoare sau aplicaii din sistem, el trebuind s fie n
continuare disponibil utilizatorilor. Este responsabilitatea proiectanilor de a prevedea
consecinele eventualelor disfuncionaliti.
Conceptul de sistem distribuit este aplicat unei mari varieti de configuraii i
aplicaii. Totui, pornind de la cele dou componente principale ale unui software

87

prelucrrile i datele, pot fi identificate dou tipuri de baz de sisteme distribuite:


sisteme cu prelucrri distribuite i sisteme cu date distribuite. Exist mai multe
variante de configurare a unui mediu cu prelucrri distribuite: aplicaiile pot fi stocate
ntr-o singur locaie i accesate de ctre oricare procesor conectat n sistem; o aplicaie
poate fi replicat pe mai multe locaii din reea; diferite aplicaii pot fi rezidente pe
diferite locaii din reea, ns ele sunt accesibile tuturor utilizatorilor din reea.
Distribuirea datelor presupune proiectarea unei baze de date distribuite n care datele
sunt fragmentate i dispersate pe diferite locaii din reea sau ele sunt replicate pe mai
multe noduri din reea n vederea uurrii accesului la date. O alt configuraie de sistem
distribuit poate rezulta prin combinarea celor dou tipuri de baz. Oricum, asupra
arhitecturilor distribuite i asupra modului de distribuire a prelucrrilor i a datelor vom
reveni n capitolele urmtoare.
Pentru o mai bun nelegere a sistemelor distribuite vom prezenta n continuare
cteva exemple.
Exemplul 1. S considerm reeaua unei companii care, n afara staiilor de
lucru ale utilizatorilor, conine un grup de procesoare situate eventual ntr-o sal
special i care nu sunt atribuite unui utilizator anume, dar care pot fi alocate dinamic n
funcie de nevoi. Un astfel de sistem ar putea avea un singur sistem de fiiere n care
toate fiierele s fie accesibile de pe toate nodurile n acelai fel i utiliznd aceeai cale.
Mai departe, atunci cnd un utilizator introduce o comand, sistemul ar putea s caute
cel mai bun loc pentru a o executa, fie pe staia utilizatorului respectiv, fie pe o staie
mai liber a altui utilizator, fie pe unul din procesoarele nealocate unui anumit utilizator.
Att timp ct sistemul apare utilizatorului ca un sistem cu un singur procesor care
partajeaz timpul de acces la resursele sale, el este un sistem distribuit.
Exemplul 2. Lum n considerare un sistem informatic pentru gestiunea
comenzilor clienilor bazat pe tehnologia workflow. Un astfel de sistem poate fi utilizat
de oameni din diferite departamente i, eventual, dispersai n teritoriu. De exemplu,
angajaii din departamentul de vnzri pot fi mprtiai la nivelul unei regiuni sau a
ntregii ri. Comenzile pot fi introduse n baza de date prin intermediul unui laptop
conectat la sistem prin intermediul reelei telefonice sau chiar al unui telefon celular.
Odat introdus, comanda este naintat departamentului de producie pentru ntocmirea
comenzii de livrare. Comanda de livrare este apoi trimis la depozit i la departamentul
financiar pentru generarea facturii ce va fi ulterior nregistrat n contabilitate.
Utilizatorii nu au habar de circuitul fizic al comenzii prin sistem; ei percep sistemul ca
i cum ar exista o baz de date centralizat.
Fr ndoial, Internetul reprezint cel mai mare sistem distribuit din lume. El
reprezint cea mai vast colecie de calculatoare de tipuri diferite, interconectate ntre
ele; programele care ruleaz pe calculatoarele conectate interacioneaz prin schimbul
de mesaje; modul de organizare a Internetului, localizarea resurselor hard i soft (de
exemplu paginile Web) sunt transparente utilizatorului; utilizatorii pot utiliza serviciile
disponibile n acelai mod (precum Web-ul, transferul de fiiere, pota electronic),
indiferent de momentul i locul n care s-ar afla; setul de servicii oferite poate fi extins
prin adugarea unui server sau a unui nou tip de serviciu; mai muli utilizatori pot
accesa simultan aceeai pagin web; tolerana la disfuncionaliti a constituit
fundamentul Internetului.

88

AVANTAJELE I DEZAVANTAJELE SISTEMELOR DISTRIBUITE


Numeroasele progrese din domeniul tehnologiei informaionale au creat
premisele dezvoltrii sistemelor distribuite. ns, numai simplu fapt c este disponibil
nu justific utilizarea unei tehnologii informaionale. Probabil c motivaia principal
pentru utilizarea sistemelor distribuite o reprezint dorina principal a utilizatorilor de a
partaja resursele. Noiunea de resurs este una abstract, folosit pentru a descrie
mulimea lucrurilor care pot fi partajate ntr-o reea de calculatoare. Ea face referire la
componentele hardware, precum discurile i imprimantele, dar i la cele software,
precum fiierele, bazele de date, obiectele de toate tipurile.
Partajarea resurselor nu este singurul avantaj al sistemelor distribuite, numrul
lor mare fcnd dificil prezentarea lor exhaustiv. Mai mult, ele difer de la o tehnic
la alta (de exemplu distribuirea datelor i distribuirea prelucrrilor). De aceea, asupra
avantajelor sistemelor distribuite vom reveni n capitolele urmtoare, atunci cnd vom
aborda mai detaliat diferitele probleme ale dezvoltrii sistemelor distribuite.
Principalele avantajele generale care pot fi obinute prin implementarea
sistemelor distribuite sunt enumerate n tabelul de mai jos. Obinerea acestor avantaje
reprezint o sarcin dificil, deoarece ele depind de numeroi factori.
Avantaje
Dezavantaje
Creterea disponibilitii i siguranei Complexitatea sistemelor distribuite
resurselor
Reducerea costurilor de comunicaie
Sporirea
dificultilor
n
controlul
resurselor informaionale
Flexibilitatea dezvoltrii sistemelor Probleme legate de asigurarea consistenei
cretere incremental
datelor
Alinierea cu structura organizatoric a Sporirea dificultilor n testarea i
firmei
detectarea erorilor
Obinerea unor timpi de rspuns mai buni
Independena fa de tehnologiile unui
singur furnizor

n continuare vom comenta pe scurt cteva dintre avantajele i dezavantajele


prezentate n tabel, efectund o comparaie cu sistemele centralizate, deoarece ele
reprezint soluia alternativ la sistemele distribuite.
Flexibilitatea dezvoltrii sistemelor distribuite este dat de faptul c o firm
aflat n plin dezvoltare (extindere) are posibilitatea de a aduga incremental noi
resurse (hard i soft) n sistem, respectiv achiziionarea, instalarea i conectarea lor pe
msur ce ele sunt necesare. Flexibilitatea sistemelor centralizate este limitat de
inabilitatea lor de a asigura creterea incremental. Dezvoltarea sau extinderea activitii
firmei determin suprancrcarea sistemului informaional existent i, implicit,
necesitatea nlocuirii acestuia cu altul mai performant (n cazul sistemelor distribuite nu
se pune problema nlocuirii acestuia ci a extinderii lui, conservndu-se astfel investiiile
anterioare). Chiar dac s-ar pune problema planificrii extinderii viitoare a firmei n
vederea dezvoltrii unui sistem informatic corespunztor, soluia unui sistem centralizat
tot nu ar fi satisfctoare deoarece ea ar fi prea scump, att timp ct o bun parte din
capacitatea de stocare i prelucrare a sistemului nu va fi utilizat dect ulterior, pe
msura dezvoltrii firmei, i numai dac previziunile se adeveresc.

89

Una dintre motivaiile importante ale dezvoltrii sistemelor distribuite este


legat de reflectarea transformrilor din mediile de afaceri. Companiile
multinaionale au sisteme informatice pentru fiecare ar n care desfoar afaceri,
necesitatea integrrii lor fiind evident. De asemenea, reflectarea structurii
organizatorice a ntreprinderii n structura bazei de date reprezint un avantaj important;
multe organizaii sunt distribuite cel puin la nivel logic (n cteva subuniti,
departamente, grupuri de lucru etc.) dar, adesea, i la nivel fizic (uzine, fabrici, ateliere
etc.), iar distribuirea datelor conform organizrii din firma respectiv permite fiecrei
uniti organizatorice s stocheze i s gestioneze independent datele care privesc
operaiunile sale. Pe de alt parte, dezvoltarea afacerilor electronice i a afacerilor
mobile va potena extinderea utilizrii sistemelor distribuite. n fapt, dezvoltarea
afacerilor electronice i a celor mobile nu ar fi posibil fr utilizarea tehnologiei
sistemelor distribuite.
Creterea disponibilitii resurselor reprezint un alt avantaj major al
sistemelor distribuite. Apariia unei disfuncionaliti ntr-un sistem centralizat (cderea
serverului sau a liniei de comunicaie) determin blocarea ntregului sistem
informaional pn la remedierea problemei ivite. n schimb, sistemele distribuite sunt
proiectate s funcioneze i n condiiile apariiei unor disfuncionaliti, care va afecta
numai o parte a sistemului. Celelalte resurse rmn disponibile, ele putnd chiar prelua
sarcinile prii de sistem afectate, situaie n care utilizatorul nu va fi contient de
disfuncionalitatea aprut. Un studiu al International DARTS relev c pierderile medii
pe un minut de nefuncionare a sistemului n cazul aplicaiilor ERP, a aplicaiilor de
gestiune a relaiilor cu furnizorii i a aplicaiilor de comer electronic sunt de 7900$,
6600$, respectiv 7800$. n cazul altor aplicaii, nivelul pierderilor pe un minut de
nefuncionare a sistemului ar putea fi mult mai mari.
Sistemele distribuite permit reducerea costurilor de comunicaie i depirea
limitelor mediilor de comunicaie. ntr-un sistem distribuit, majoritatea prelucrrilor
pot fi realizate local, iar datele de interes local pot fi stocate i gestionate local, ceea ce
determin reducerea drastic a traficului n reea. Cea mai mare problem cu care se
poate confrunta o baz de date centralizat, atunci cnd ea este accesat de la distan,
este legat de eventualitatea blocajelor reelei de comunicaie; nici suprancrcarea
serverului de numeroasele accese de la distan nu trebuie neglijat.
Sistemele distribuite ofer timpi de rspuns mai buni la cererile utilizatorilor.
Sistemele centralizate pctuiesc adesea prin oferirea unor timpi de rspuns
nesatisfctori utilizatorilor, datorit volumului mare de date ce trebuie transmise prin
reea. Cele dou topologii cu baza de instalare cea mai mare Token Ring pe 16 Mb i
Ethernet la 10 Mb nu permit obinerea unor timpi de rspuns acceptabili atunci cnd
procesele de prelucrare solicit un volum mare de date.
n afara avantajelor prezentate, implementarea sistemelor distribuite au asociate
i unele dezavantaje ce trebuie luate n considerare la dezvoltarea lor.
Poate cea mai important piedic n extinderea utilizrii sistemelor distribuite o
reprezint dificultatea dezvoltrii lor generate de enorma complexitate a acestor sisteme.
Principalele surse ale complexitii sunt: distribuirea datelor i/sau replicarea lor,
distribuirea prelucrrilor, asigurarea diferitelor forme de transparen, asigurarea
consistenei datelor. Un sistem cu baze de date distribuite care trebuie s ascund natura
distribuit a datelor fa de utilizatori este fr ndoial mai complex dect un sistem cu
baze de date centralizate. Bazele de date replicate adaug cel puin un nivel suplimentar

90

de complexitate. Dac sistemul nu este bine proiectat, atunci el va furniza un nivel de


performan, disponibilitate i siguran inacceptabile.
OBIECTIVE GENERALE
PRIVIND PROIECTAREA SISTEMELOR DISTRIBUITE
Dincolo de avantajele oferite, prin proiectarea unui sistem distribuit trebuie
urmrit atingerea unor obiective care s permit obinerea avantajelor propuse. n
continuare vom descrie succint cteva dintre obiectivele care trebuie realizate n
dezvoltarea sistemelor distribuite.
Eterogenitatea. Un sistem distribuit trebuie s permit utilizatorilor accesarea
serviciilor i execuia programelor pe platforme eterogene. Eterogenitatea privete
reelele, calculatoarele, sistemele de operare, limbajele de programare (mediile de
dezvoltare a aplicaiilor) i implementrile diferiilor dezvoltatori de aplicaii.
Internetul reunete diferite tipuri de reele, ns eterogenitatea lor este ascuns de
faptul c toate calculatoarele conectate utilizeaz protocoalele Internetului pentru a
comunica ntre ele. Aceeai soluie este utilizat i pentru mascarea eterogenitii
sistemelor de operare, fiecare trebuind s aib implementate protocoalele Internetului.
Diferite tipuri de calculatoare pot utiliza metode diferite de reprezentare a datelor n
memoria calculatorului (de exemplu pentru tipul de date Integer), aspect ce trebuie s
fie transparent unor aplicaii ce ruleaz pe tipuri diferite de calculatoare pentru a putea
schimba mesaje ntre ele. n mod asemntor, limbajele de programare pot utiliza
diferite reprezentri ale caracterelor i structurilor de date, precum tablourile de date sau
nregistrrile, diferene ce trebuie rezolvate dac programele scrise n limbaje de
programare diferite trebuie s comunice ntre ele. n sfrit, miza cea mai important
pentru proiectani o reprezint dezvoltarea de programe care s poat comunica cu
programele scrise de ali proiectani, scop n care ei trebuie s adopte standarde comune.
Aceast problem vizeaz n primul rnd structura datelor din mesaje.
Rezolvarea eterogenitii n sistemele distribuite este asigurat prin componenta
middleware. Termenul middleware este aplicat unui nivel intermediar al software-ului
i are rolul de a ascunde eterogenitatea reelelor, a echipamentelor, a sistemelor de
operare i a limbajelor de programare. Cele mai cunoscute middleware sunt CORBA,
Java RMI i DCOM. n plus, middleware-ul furnizeaz un model uniform ce trebuie
adoptat de programatorii de aplicaii distribuite. Astfel de modele sunt: invocarea
obiectelor de la distan, notificarea evenimentelor de la distan, accesul SQL de la
distan i prelucrarea tranzaciilor distribuite. De exemplu standardul CORBA
furnizeaz un model pentru invocarea obiectelor de la distan, care permite unui obiect
dintr-un program ce ruleaz pe un calculator s invoce (apeleze) o metod a unui obiect
dintr-un program ce ruleaz pe alt calculator. Implementarea ei ascunde faptul c
mesajele sunt transmise prin reea.
O problem interesant o reprezint programele mobile (mobile cod). Ele fac
referire la programele care pot fi trimise de pe un calculator pe altul i s fie executate la
destinaie (este cazul applet-urilor Java). Exist numeroase situaii n care un utilizator
PC transmite un fiier executabil ataat la un email, ns destinatarul nu este n msur
s-l execute, de exemplu pe o platform Macintosh sau Linux. Acest eveniment
neplcut apare datorit faptului c limbajul main este diferit de la un tip de calculator
la altul.

91

Aceast problem poate fi rezolvat prin introducerea conceptului de main


virtual. Compilatorul unui anumit limbaj de programare va genera cod pentru o
main virtual n loc s genereze cod pentru limbajul main al unui anumit tip de
calculator. De exemplu, compilatorul Java genereaz cod pentru maina virtual Java,
acesta fiind implementat o singur data indiferent de tipul de calculator. Numai c
soluia Java nu este aplicabil programelor scrise n alte limbaje de programare.
SISTEME DESCHISE
Un sistem distribuit deschis este acel sistem care ofer servicii n conformitate
cu regulile care descriu sintaxa i semantica serviciilor respective. De exemplu, n
reelele de calculatoare formatul, coninutul i semnificaia mesajelor transmise sunt
stabilite prin intermediul unui set de reguli, formalizate sub forma protocoalelor de
comunicaie.
n sistemele distribuite, serviciile sunt specificate prin intermediul interfeelor,
descrise adesea prin intermediul unui limbaj de definire a interfeelor (Interface
Definition Language IDL). De regul, specificaiile unei interfee scrise ntr-un IDL
privesc doar sintaxa serviciilor, adic numele funciei care este disponibil mpreun cu
parametrii, valorile returnate, excepiile care pot apare etc. Specificaiile care privesc
semantica serviciilor (adic descrierea exact a modului n care sunt realizate serviciile
respective) sunt descrise prin intermediul limbajului natural. n fapt, ea se refer la
specificaiile de proiectare detaliat ale serviciilor.
Atingerea acestui obiectiv nu este posibil fr ca specificaiile i documentaia
interfeelor componentelor software ale sistemului s fie cunoscute proiectanilor i
programatorilor, adic s fie publice. Prin urmare, importana ntocmirii specificaiilor
de proiectare este accentuat n cazul dezvoltrii sistemelor distribuite. Ele au darul de a
uura sarcina proiectanilor de sisteme distribuite n care multe componente sunt
dezvoltate de persoane diferite. De exemplu, publicarea specificaiilor protocolului de
comunicare al Internetului, sub forma unei serii de documente numite Requests For
Comments (RFCs), a fcut posibil dezvoltarea unui imens numr de aplicaii Internet.
De asemenea, modelul CORBA este publicat prin intermediul unei serii de documente
tehnice, care includ specificaiile complete ale interfeelor serviciilor disponibile.
Specificaiile interfeelor trebuie s fie complete i neutre. Prin specificaii
complete se nelege ca tot ceea ce este necesar realizrii unei implementri s fie fcute
cunoscute. De asemenea, este foarte important ca specificaiile s nu prescrie modul n
care trebuie realizat o implementare; ele trebuie s fie neutre. Completitudinea i
neutralitatea specificaiilor sunt importante pentru obinerea interoperabilitii i a
portabilitii. Interoperabilitatea reprezint msura n care dou componente
implementate de dezvoltatori diferii pot co-exista i lucra mpreun prin apelarea
serviciilor fiecreia n maniera stabilit prin standardul comun. Portabilitatea se refer
la faptul c o aplicaie dezvoltat pentru sistemul distribuit A poate fi executat, fr
nici o modificare, pe sistemul distribuit B, diferit de primul, dac B implementeaz
aceleai interfee ca i A.
Caracterul deschis al sistemelor distribuite este determinat n primul rnd de
gradul n care noi servicii privind resursele partajate pot fi adugate i utilizate de o
varietate de programe. Altfel spus, caracterul deschis determin dac sistemul distribuit
poate fi extins sau reimplementat n diferite moduri. El poate fi extins la nivelul

92

hardware, prin adugarea de calculatoare, sau la nivelul software, prin adugarea unor
noi servicii i reimplementarea celor vechi.
Securitatea. Multe din resursele informaionale disponibile n sistemele
distribuite au o valoare intrisec pentru utilizatorii si. De aceea, securitatea lor prezint
o importan deosebit. Securitatea resurselor informaionale are trei componente:
confidenialitatea protecia mpotriva divulgrii neautorizate;
integritatea protecia mpotriva modificrii sau denaturrii;
disponibilitatea protecia mpotriva accesului neautorizat la resurse.
n general, cu ct numrul facilitilor oferite utilizatorilor si este mai mare, cu att
problema securitii unui sistem distribuit este mai dificil de rezolvat. Riscurile de
securitate ntr-un intranet sunt legate de accesul liber la toate resursele sistemului. Dei
se poate apela la utilizarea unui firewall pentru a forma o barier n jurul sistemului care
s restricioneze traficul la intrare i la ieire, el nu va asigura utilizarea corespunztoare
a resurselor de ctre utilizatorii din intranet.
Spre deosebire de sistemele centralizate, problema securitii sistemelor
distribuite este foarte ampl, ea neputnd fi abordat n cteva pagini. Oricum,
proiectanii de sisteme distribuite trebuie s fie contieni de importana ei i s-i acorde
atenia cuvenit.
Scalabilitatea. Problema scalabilitii este tipic i foarte important n
dezvoltarea sistemelor distribuite. Un sistem este considerat scalabil dac el rmne
eficace atunci cnd apare o cretere semnificativ a numrului de resurse i de
utilizatori. Internetul reprezint cea mai bun ilustrare a scalabilitii unui sistem, el
funcionnd bine n condiiile creterii dramatice a numrului calculatoarelor conectate
i a serviciilor furnizate.
n cazul n care noi servicii sau utilizatori trebuie adugai, principalele
probleme deriv din limitele centralizrii serviciilor, datelor i a algoritmilor. Acest
lucru se poate observa n tabelul de mai jos, care ofer exemple de limite ale
scalabilitii.
Concepte
Servicii centralizate
Date centralizate
Algoritmi centralizai

Exemple
Un singur server Web pentru toi utilizatorii
O singur baz de date pentru tranzaciile unei bnci
Rutarea bazat pe informaii complete

n cazul multor servicii centralizate (adic ele sunt implementate pe un singur server),
creterea numrului de utilizatori poate duce la apariia aa-ziselor gtuiri. Chiar dac
ar dispune de capacitate de prelucrare i stocare nelimitat, comunicarea cu acel server
tot va limita creterea, implicit i scalabilitatea sistemului. Soluia alternativ este
evident: distribuirea serviciilor respective pe mai multe servere. Numai c, n unele
situaii acest lucru nu este recomandat. Dac avem un serviciu care gestioneaz
informaii confideniale, precum conturile bancare, soluia cea mai bun const n
implementarea serviciului respectiv pe un singur server securizat ntr-o camer special
i protejat fa de celelalte pri ale sistemului distribuit prin intermediul unor
componente de reea speciale.
Dezavantajele centralizrii serviciilor se regsesc i n cazul centralizrii datelor.
Gestionarea datelor dintr-o banc printr-o baz de date centralizat (adic implementat
pe un singur server de baze de date) este aproape imposibil datorit att volumului
mare de date ce trebuie stocat, ct i mediului tranzacional puternic (de ordinul sutelor

93

de tranzacii pe secund), ceea ce solicit din plin capacitatea de comunicare a


serverului. n mod asemntor, cum ar fi putut funciona Internetul dac DNS-ul
(Domain Name System) ar fi fost implementat ntr-o singur tabel localizat pe un
singur server. Dup cum tim, DNS-ul gestioneaz informaii despre milioane de
calculatoare din lume i permite localizarea serverelor web. Dac cererile de rezolvare a
unui URL ar fi transmise unui singur server DNS, atunci nimeni nu ar mai fi putut
utiliza web-ul astzi.
Problemele sunt asemntoare n cazul centralizrii algoritmilor. De exemplu, n
sistemele distribuite mari trebuie transmise un numr imens de mesaje care trebuie
direcionate pe mai multe linii de comunicaie. Teoretic, soluia optim presupune
colectarea informaiilor despre ncrcarea tuturor calculatoarelor i a liniilor de
comunicaie, iar pe baza unui algoritm de calcul s se determine calea optim de
transmisie. Numai c, aceast soluie ar duce la ncrcarea suplimentar a
calculatoarelor i a liniilor de comunicaie, de vreme ce ele trebuie s schimbe
numeroase mesaje pentru a transmite informaiile necesare stabilirii cii optime la un
moment dat. De aceea, n practic se apeleaz la descentralizarea algoritmilor.
Pn acum am discutat problema scalabilitii din perspectiva creterii
dimensiunii sistemului prin adugarea de resurse (hard sau soft) i utilizatori. Ea este
mult mai complex dac lum n considerare alte dou dimensiuni ale scalabilitii:
scalabilitatea geografic i scalabilitatea administrativ. Scalabilitatea geografic se
refer la sistemele n care resursele i utilizatorii sunt localizai la distane foarte mari;
scalabilitatea administrativ presupune ca sistemul s fie uor de gestionat chiar dac el
este rspndit pe mai multe organizaii administrative independente.
Dac pn aici am prezentat problemele care se ivesc n legtur cu
scalabilitatea sistemelor distribuite, n continuare vom prezenta pe scurt soluiile de
rezolvare a lor. n acest sens, sunt folosite n general dou tehnici de scalare: distribuirea
i replicarea.
Distribuirea implic descompunerea unei componente n mai multe pri mai
mici i rspndirea acestora n diferite locuri din sistem. Un exemplu elocvent n acest
sens l reprezint DNS-ul din Internet, care este descompus i organizat ierarhic n trei
domenii, iar acestea la rndul lor sunt divizate n mai multe zone; numele din fiecare
zon sunt gestionate prin intermediul unui singur nume de server. n mod asemntor, o
aplicaie poate fi proiectat astfel nct realizarea unei funcii s fie asigurat, de mai
multe module de program ce pot fi rspndite pe mai multe servere sau ntre server i
clieni.
Replicarea reprezint o alt soluie pentru rezolvarea problemei scalabilitii
sistemelor distribuite. Ea nu determin doar sporirea disponibilitii, dar ajut i la
repartizarea ncrcrii ntre componentele sistemului n vederea mbuntirii
performanelor. O form special a replicrii o reprezint cashing-ul. Distincia dintre
replicare i cashing este dificil sau chiar artificial. Ca i n cazul replicrii, cashing-ul
presupune existena mai multor copii ale unei resurse plasate n apropierea clienilor
care o acceseaz. Spre deosebire de replicare, cashing-ul este o decizie pe care o ia
clientul care acceseaz o resurs i nu proprietarul resursei (respectiv serverul). Dincolo
de avantajele celor dou tehnici (replicarea i cashing-ul), neluarea n considerare a altor
aspecte la utilizarea lor poate determina o diminuare a performanelor i nu o
mbuntire a lor. Existena mai multor copii pentru o resurs poate duce la situaia n
care dup modificarea unei copii, aceasta s fie diferit de celelalte. Aadar, utilizarea

94

celor dou tehnici pot duce la apariia problemelor de consisten, asupra crora vom
reveni cu detalii n capitolele urmtoare.
TRATAREA DISFUNCIONALITILOR
Sistemele informatice nregistreaz uneori cderi n funcionarea normal. n
cazul disfuncionalitilor hardware sau software, programele pot produce rezultate
incorecte sau pot nceta s mai funcioneze nainte de a-i fi terminat sarcina de realizat.
Rezolvarea lor este dificil, deoarece disfuncionalitile n sistemele distribuite sunt
pariale. Aceasta nseamn c unele componente pot s nceteze s mai funcioneze, n
timp ce altele continu s funcioneze. De aceea, rezolvarea disfuncionalitilor
presupune gsirea soluiilor la urmtoarele probleme:
detectarea disfuncionalitilor. De exemplu, depistarea datelor alterate dintrun mesaj sau fiier poate fi realizat prin intermediul sumelor de control. Exist i
situaii n care prezena unei disfuncionaliti nu poate fi sesizat.
ascunderea disfuncionalitilor. Acest lucru poate fi realizat prin
retransmiterea mesajelor n cazul n care ele nu au ajuns la destinaie sau salvarea
datelor pe un disc pereche astfel nct, dac datele de pe primul disc sunt inconsistente,
ele pot fi refcute prin intermediul celui de-al doilea disc.
tolerarea disfuncionalitilor. n unele situaii (precum sistemele distribuite
mari) nu este indicat ascunderea disfuncionalitilor. Soluia alternativ const n
proiectarea aplicaiilor client astfel nct s le tolereze, ceea ce implic tolerarea lor i
din partea utilizatorilor. De exemplu, atunci cnd un browser nu poate contacta un
server de web, el nu-l va face pe utilizator s atepte pentru a ncerca de mai multe ori
s stabileasc legtura; el l va informa pe utilizator de problema ivit i rmne la
latitudinea acestuia s ncerce din nou mai trziu, el avnd posibilitatea s continue cu o
alt activitate.
refacerea n urma cderilor din sistem. Rezolvarea acestei probleme
presupune proiectarea aplicaiilor astfel nct s menin consistena datelor la cderea
unui server.
Transparena. Transparena reprezint unul dintre cele mai importante
obiective urmrite la dezvoltarea sistemelor distribuite i care are influene majore
asupra activitii de proiectare. Acest concept presupune ascunderea fa de utilizatori,
programatori i aplicaii a faptului c procesele i resursele din sistem sunt distribuite
fizic pe mai multe calculatoare. Sistemul trebuie perceput ca un ntreg i nu ca o colecie
de componente independente.
Modelul de referin al ISO (International Standards Organization) pentru
sistemele deschise cu prelucrri distribuite prezint 8 forme ale transparenei, prezentate
n tabelul de mai jos.
Forme ale
transparenei
Acces

Localizare
Migrare

Descriere
Ascunde diferenele n reprezentarea datelor. De asemenea,
permite accesarea resurselor locale i a celor aflate la distan
utiliznd operaiuni identice
Ascunde localizarea resurselor n sistem
Ascunde faptul c resursele au fost mutate la o alt locaie din
sistem.

95

Re-localizrii
Replicare
Concurena
Disfuncionaliti
Persistena

Ascunde faptul ca resursele pot fi mutate la o alt locaie din


sistem chiar n timpul utilizrii lor.
Ascunde existena unei copii pentru o resurs
Permite utilizarea concurent a resurselor partajate de ctre mai
muli utilizatori sau procese (programe), fr s existe
interferene ntre acetia.
Ascunderea disfuncionalitilor, cu posibilitatea ca utilizatorii
s-i poat termina sarcinile de lucru.
Ascunde faptul c o resurs software este n memoria
calculatorului sau pe disc.

Cel mai bun exemplu pentru ilustrarea transparenei accesului l reprezint


instrumentul grafic Windows Explorer. Acesta, indiferent de faptul c un folder este
local sau se afl pe un alt calculator, va folosi acelai simbol pentru reprezentarea lor,
ele putnd fi accesate n acelai mod, adic prin selectarea folderului dorit. Lipsa
transparenei accesului este evident atunci cnd un sistem distribuit nu permite
accesarea unui fiier aflat pe un alt calculator dect prin intermediul programului ftp. De
asemenea, modul de reprezentare a datelor difer de la un tip de calculator la altul, de la
un sistem de operare la altul, de la un limbaj de programare la altul. Aceste diferene
trebuie s fie ascunse utilizatorilor i aplicaiilor dintr-un sistem distribuit.
Transparena localizrii se refer la faptul c utilizatorul nu tie unde este
plasat fizic o anumit resurs din sistem, cu toate c el poate s o acceseze. Acest tip
de transparen poate fi obinut prin atribuirea de nume logice resurselor din sistem.
Utilizarea URL-urilor n web constituie un astfel de exemplu. Partea din URL care
identific numele de domeniu al unui server web se refer la numele calculatorului i nu
la adresa sa IP.
Transparena accesului i cea a localizrii mai sunt cunoscute mpreun ca
transparena reelei.
Atunci cnd ntr-un sistem distribuit resursele pot fi mutate fr a fi afectat
modul n care ele sunt accesate se spune c asigur transparena migrrii. Chiar dac
un program sau o tabel dintr-o baz de date sunt mutate n alt parte a sistemului,
utilizatorul nu va sesiza acest lucru la accesare, iar aplicaia nu va trebui modificat
pentru a reflecta noua localizare. Importana acestui tip de transparen i cile de
realizare a ei n bazele de date distribuite vor fi discutate pe larg ntr-un capitol viitor. i
mai puternic este transparena re-localizrii, care presupune mutarea unor resurse
chiar n timpul accesrii lor fr ca utilizatorii sau aplicaiile s fie nevoite s ia n
considerare aceast operaiune. Acest tip de transparen apare, de exemplu, atunci cnd
un utilizator mobil continu s utilizeze laptopul sau conectat printr-o reea fr fir pe
durata deplasrii sale de la un loc la altul fr s fie deconectat fie i temporar. Acest tip
de transparen este ntlnit mai ales n sistemele distribuite mobile.
Replicarea joac un rol important n sistemele distribuite, resursele putnd fi
replicate n vederea creterii disponibilitii i a performanelor prin plasarea unei copii
ct mai aproape de locul din care ele sunt accesate. Replicarea poate fi utilizat
mpreun cu tehnologia bazelor de date distribuite pentru a mbunti performanele
accesrii datelor. n sfrit, transparena replicrii presupune ascunderea faptului c
pentru o resurs exist mai multe copii n cadrul sistemului. Pentru a ascunde acest
lucru fa de utilizatori, va trebui ca toate copiile s aib acelai nume. De aceea, pentru

96

ca un sistem s ofere transparena replicrii, el trebuie s asigure i transparena


localizrii. Altfel, ar fi imposibil referirea copiilor plasate pe locaii diferite.
Unul dintre avantajele sistemelor distribuite l reprezint posibilitatea partajrii
resurselor. De exemplu, doi utilizatori pot accesa simultan acceai tabel a bazei de
date, ceea ce nseamn c ei partajeaz tabela respectiv. Numai c, este foarte
important ca fiecare utilizator s nu sesizeze faptul c un alt utilizator acceseaz aceeai
resurs odat cu el. Acest fenomen este numit transparena concurenei. Revenind la
exemplul nostru, vom vedea mai trziu c rezolvarea acestei probleme nu este att de
simpl, deoarece cei doi utilizatori pot lsa datele din baza de date ntr-o stare
inconsiten (presupunem c este vorba despre tabela de stocuri i c cei doi utilizatori
ncearc s vnd acelai produs simultan). De aceea, anticipnd niel, se apeleaz la
mecanismul de blocare, ceea ce contravine acestui tip de transparen.
Transparena disfuncionalitilor presupune ca utilizatorii s nu observe c
anumite resurse au ncetat s mai funcioneze sau nu mai funcioneaz normal. Mai
mult, sistemul va asigura ulterior refacerea situaiei datorate acelei disfuncionaliti.
Asigurarea acestui tip de transparen este cel mai dificil, datorit inabilitii sistemului
de a distinge ntre o resurs moart i una care funcioneaz, dar foarte ncet. De
exemplu, la accesarea unui server web foarte solicitat, este posibil ca browserul s
raporteze c pagina respectiv nu este disponibil.
Ultimul tip de transparen asociat sistemelor distribuite se refer la
transparena persistenei, i se refer la ascunderea faptului c o component software
se afl n memoria volatil sau pe disc. Acest tip de transparen este important n cazul
serverelor de baze de date. A se revedea n acest sens zona SQL Share i procesul de
scriere din Oracle Server.
n final trebuie spus c realizarea transparenei distribuirii reprezint un obiectiv
important n proiectarea i implementarea sistemelor distribuite ns, uneori este greu de
obinut, iar n alte situaii trebuie luate n calcul i alte aspecte precum performana
sistemului.
Prezentarea succint a celor mai importante obiective urmrite la proiectarea i
implementarea sistemelor distribuite, care se adaug la cele care privesc n general
sistemele informatice, demonstreaz complexitatea activitii de dezvoltare a sistemelor
distribuite.
ARHITECTURA SISTEMELOR DISTRIBUITE
Sistemele distribuite implementate pn n prezent evideniaz o varietate
arhitectural mare. Cu toate acestea, ele au n comun o serie de caracteristici i
mprtesc unele probleme comune n dezvoltarea lor. Caracteristicile comune i
aspectele de proiectare a sistemelor distribuite pot fi prezentate sub forma unor modele
descriptive. Fiecare astfel de model va reprezenta o descriere abstract, simplificat dar
consistent a aspectelor relevante ale proiectrii sistemelor distribuite.
Definirea arhitecturii sistemelor distribuite. O definiie standard, universal
acceptat, pentru arhitectura sistemului informatic nu exist, majoritatea opiniilor
exprimate punnd n centrul ateniei conceptele de component i conexiune. Una din
definiiile mai recente consider arhitectura programelor ca fiind structura sau
structurile care privesc componentele programului, proprietile externe ale acestor
componente, precum i relaiile dintre ele.

97

n funcie de semnificaia noiunii de component, arhitectura sistemelor


informatice poate fi definit ntr-un sens restrns i ntr-un sens mai larg. Proiectarea
arhitecturii unui program poate viza, n sens restrns, componentele programului,
respectiv modulele acestuia, ns ea poate fi extins prin includerea bazei de date i a
componentei middleware care permite configurarea comunicrii ntr-un sistem
client/server.
Proprietile acestor componente sunt acele caracteristici care permit nelegerea
modului n care ele interacioneaz, respectiv modul de apelare a unui modul din alt
modul sau mecanismul de accesare a bazei de date de ctre modulele programului.
Proiectarea arhitectural a programului nu ia n considerare proprietile interne ale
componentelor, cum ar fi detaliile unui algoritm specifice unui modul.
Relaiile dintre componente se pot referi fie la apelarea unei proceduri, cu
transmiterea eventual a datelor necesare execuiei procedurii respective, fie la
protocolul de accesare a bazei de date de ctre procedurile de program.
Obiectivul general urmrit n cadrul proiectrii arhitecturale vizeaz conceperea
unei structuri a sistemului care s corespund cerinelor prezente i celor viitoare, astfel
nct sistemul s fie sigur n funcionare, adaptabil, uor de gestionat, eficient. O bun
proiectare arhitectural se va traduce ntr-un sistem uor de implementat, testat i
modificat.
Multitudinea sistemelor informatice distribuite implementate pn n prezent
relev o varietate mare a arhitecturilor, dar care pot totui fi ncadrate n cteva modele
arhitecturale. Un model arhitectural definete modul n care interacioneaz ntre ele
componentele unui sistem, precum i localizarea (maparea) lor ntr-o reea de
calculatoare. Modelul arhitectural al unui sistem distribuit are rolul de a simplifica i
abstractiza (n sensul de a evidenia caracteristicile eseniale ale sistemului) funciile
componentelor sistemului. Apoi, el ia n considerare:
plasarea componentelor n cadrul reelei cutnd s defineasc modelele
corespunztoare de distribuire a datelor i a prelucrrilor;
interaciunile dintre componente adic, rolurile lor funcionale i modelele de
comunicare dintre ele.
Modelele de alocare a sarcinilor de lucru ntr-un sistem distribuit se reflect
direct asupra performanelor i eficacitatea sistemului rezultat. Localizarea
componentelor unui sistem distribuit este determinat de aspectele de performan,
siguran n funcionare, securitate i costurile implicate.
ARHITECTURA SOFTWARE
ntr-un sistem distribuit hardware-ul este important ns software-ul reprezint
elementul determinant; de componenta software depinde cum va arta un sistem
distribuit. De aceea, discuia privind arhitectura sistemelor distribuite se va axa pe
arhitectura software.
Iniial, prin arhitectura software se fcea referire la structurarea software-ului
pe niveluri sau module, cea mai cunoscut fiind structura ierarhic pe module. Recent,
acelai termen este descris n termenii serviciilor oferite i solicitate ntre procesele
localizate pe acelai calculator sau pe calculatoare diferite. Prin urmare, noua orientare,
ctre procese i servicii, poate fi exprimat prin intermediul nivelurilor de servicii. Ea
este prezentat schematic n figura de mai jos.

98

Calculator
A

Calculator
A

Calculator
A

Aplicaii distribuite
Middleware
Sistemul de
operare

Sistemul de
operare

Sistemul de
operare

Hardware

Hardware

Platforma
Hardware

Dup cum se poate observa, structura general a unui sistem distribuit presupune
trei niveluri (straturi): platforma, middleware i programele de aplicaii distribuite.
Fiecare nivel ofer servicii nivelului superior. Astfel, aplicaiile distribuite apeleaz la
serviciile oferite de componenta middleware care, la rndul su, beneficiaz de
serviciile oferite de sistemele de operare.
PLATFORMELE HARDWARE I SOFTWARE
N SISTEMELE DISTRIBUITE
Componenta hardware i nivelul cel mai de jos al software-ului sunt adesea
referite mpreun prin termenul platform. n practic ele pot fi referite separat prin
platforma hardware i platforma software. Acest nivel ofer servicii nivelurilor situate
deasupra sa, servicii care sunt implementate n mod independent pe fiecare calculator.
El ofer interfaa de programare nivelului care faciliteaz comunicarea i coordonarea
dintre procese. Printre cele mai cunoscute exemple de platforme se regsesc: Intel
x86/Windows, Sun SPARC/SunOS, PowerPC/MacOS, Intel x86/Linux.
Referindu-ne la arhitectura hardware, ea specific modul n care sunt conectate
calculatoarele, mai concret procesoarele. Orice sistem distribuit presupune existena a
multiple procesoare, dar care pot fi organizate n cteva moduri diferite n ce privete
interconectarea i comunicarea dintre ele. Dei n literatura de specialitate au fost
prezentate numeroase scheme de clasificare a sistemelor bazate pe multiple procesoare,
nici una nu a primit o recunoatere larg. n continuare vom face o succint prezentare a
ctorva clasificri.
Din punctul de vedere al partajrii sau nu a memoriei, exist dou tipuri de
sisteme: multi-procesoare, respectiv cele n care mai multe procesoare partajeaz
memoria, i multi-calculatoare, respectiv cele care care nu o partajeaz. n cazul
sistemelor multi-procesoare, toate procesoarele partajeaz o singur zon fizic de
memorie. Astfel, dac oricare procesor scrie valoarea 44 la adresa 1000, atunci ulterior
oricare alt procesor care va citi valoarea coninut la adresa respectiv va prelua
valoarea 44. n contrast, ntr-un sistem multi-calculatoare, fiecare procesor dispune de
propria memorie. Dac un procesor va scrie valoarea 44 la adresa 1000 a propriei
memorii, ulterior un alt procesor care va citi valoarea coninut la adresa 1000 va obine

99

probabil o alt valoare. Cel mai comun exemplu de sistem multi-calculatoare l


reprezint o colecie de calculatoare conectate la reea.
O alt clasificare grupeaz sistemele distribuite n sisteme eterogene i sisteme
omogene. Aceast clasificare este aplicat doar n cazul sistemelor multi-calculatoare.
Intr-un sistem omogen, toate procesoarele sunt la fel i, n general, acceseaz zone fizice
de memorie diferite dar de aceeai capacitate, iar n cadrul reelei se utilizeaz aceeai
tehnologie. De regul, acest tip de sisteme sunt utilizate mai mult ca sisteme paralele
(adic lucreaz pentru aceeai problem). n schimb, sistemele eterogene pot conine
calculatoare de tipuri diferite, interconectate prin reele de diferite tipuri. De exemplu,
un sistem distribuit poate fi construit pe baza unei colecii de reele locale care utilizeaz
tehnologii diferite, ele putnd fi interconectate printr-un backbone bazat pe tehnologia
FDDI.
Atunci cnd vorbim despre platforma software, cel mai adesea se face referire la
sistemul de operare. De fapt, sistemele distribuite se aseamn n bun msur cu
sistemele de operare tradiionale. Ele gestioneaz resursele hardware permind mai
multor utilizatori i aplicaii s le partajeze. Prin resurse hardware se face referire la
procesoare, memorie, echipamente periferice i reea. De asemenea, sistemele
distribuite ascund complexitatea i eterogenitatea resurselor hardware.
Sistemele de operare pentru sistemele distribuite pot fi mprite n dou
categorii: sisteme strns-cuplate (tightly-coupled) i sisteme slab-cuplate (looselycoupled). n cazul sistemelor strns-cuplate, sistemul de operare ncearc s menin o
singur imagine, global, asupra resurselor hardware, n timp ce sistemele slab-cuplate
pot fi vzute ca o colecie de calculatoare, fiecare cu propriul sistem de operare, dar care
colaboreaz.
Distincia ntre sistemele strns-cuplate i cele slab-cuplate este legat de
clasificrile prezentate anterior pentru componenta hardware. Astfel, sistemele strnscuplate, referite i ca sisteme de operare distribuite, sunt utilizate n sistemele multiprocesoare i sistemele omogene. Principala sarcin a unui sistem distribuit rezid n
ascunderea complexitii gestiunii resurselor hardware astfel nct ele s poat fi
partajate de multiple procese. n schimb, sistemele slab-cuplate, referite adesea ca
sisteme de operare de reea (NOS Network Operating System), sunt utilizate n
cazul sistemelor eterogene. Distincia dintre un NOS i un sistem de operare tradiional
const n faptul c, pe lng gestiunea resurselor, el asigur disponibilitatea serviciilor
locale clienilor aflai la distan.
Majoritatea sistemelor distribuite sunt eterogene, deci utilizeaz un NOS. n
aceast situaie, sunt necesare unele servicii suplimentare celor oferite de NOS, care s
asigure o mai bun transparen a naturii distribuite a sistemului. Toate aceste servicii
sunt grupate pe un nivel intermediar numit middleware. El reprezint inima sistemelor
distribuite moderne. Dac acesta ar lipsi, aplicaiile distribuite ar trebui s apeleze direct
la serviciile oferite de sistemele de operare pentru realizarea diferitelor sarcini (cum ar fi
transmiterea mesajelor), ceea ce ar presupune un efort suplimentar considerabil din
partea programatorilor, ntruct fiecare sistem de operare are implementri diferite ale
aceluiai serviciu. n tabelul urmtor este prezentat o comparaie ntre sistemele
distribuite (DOS), sistemele de operare pentru reea (NOS) i middleware.
Sistemul
DOS

Descriere
Obiectivul principal
Sisteme de operare strns-cuplate, utilizate Ascunde complexitatea
n sistemele multi-procesoare i sistemele gestiunii resurselor

100

multi-calculatoare omogene
Sisteme de operare slab-cuplate, utilizate
n sistemele multi-calculatoare eterogene
(LAN i WAN)
Middleware Strat software adiional situat deasupra
NOS-ului i furnizeaz servicii generale
NOS

hardware
Ofer servicii locale
clienilor aflai la distan
Furnizeaz transparena
distribuirii

Ultimul nivel al arhitecturii software conine aplicaiile specifice diferitelor domenii,


care apeleaz la serviciile oferite de middleware. Utilizatorii interacioneaz cu sistemul
distribuit prin intermediul acestor programe.
NIVELUL MIDDLEWARE
O definiie mai formal, consider middleware-ul ca un nivel al software-ului al
crui scop const n mascarea eterogenitii (platformei, s.n.) i furnizarea unui model
de programare comod dezvoltatorilor de aplicaii. El este format din procese sau obiecte
ce se regsesc pe un grup de calculatoare, i care interacioneaz ntre ele pentru a
asigura implementarea comunicrii i partajrii resurselor n aplicaiile distribuite.
Nivelul middleware sprijin comunicarea dintre programele de aplicaii prin
intermediul unor abstractizri precum invocarea metodelor de la distan,
comunicarea n cadrul unui grup de procese, notificarea evenimentelor, replicarea
datelor partajate i transmisia n timp real a datelor mutimedia.
Unele aplicaii distribuite apeleaz direct la interfaa de programare furnizat de
sistemul de operare al reelei, ignornd nivelul middleware. Avantajul oferit de nivelul
middleware const n ascunderea eterogenitii platformelor pe care este implementat
sistemul distribuit. De aceea, majoritatea sistemelor middleware ofer o colecie de
servicii mai mult sau mai puin complet, descurajnd utilizarea altor interfee dect a
celor ctre propriile servicii.
Pentru a simplifica dezvoltarea i integrarea aplicaiilor distribuite, majoritatea
soluiilor middleware se bazeaz pe un anumit model, care descrie aspectele privind
distribuirea i comunicarea. Cele mai utilizate astfel de modele sunt: apelarea
procedurilor de la distan, distribuirea obiectelor i distribuirea documentelor.
Apelarea procedurilor de la distan RPC (Remote Procedure Calls). Unul
dintre primele modele middleware are la baz mecanismul RPC. n acest model,
accentul este pus pe ascunderea particularitilor comunicaiei n reea astfel nct s
permit unui proces s apeleze o procedur localizat pe un alt calculator. La apelarea
unei astfel de proceduri, parametrii sunt transmii n mod transparent calculatorului pe
care este localizat procedura respectiv i pe care ea va fi executat; rezultatele
execuiei sunt transmise napoi procesului (procedurii) apelant(e). n acest mod, se va
crea impresia c procedura apelat este executat local; procesul apelant nu are habar c
este vorba de o comunicare n reea, cu excepia eventualei ntrzieri cu care primete
rezultatele. O soluie middleware care se bazeaz pe acest model este Sun RPC.
Distribuirea obiectelor. Lansarea modei orientate obiect a avut efecte i
asupra soluiilor middleware. Att timp ct o procedur poate fi apelat de la distan, sa pus problema posibilitii invocrii obiectelor rezidente pe alte calculatoare ntr-o
manier transparent. Astfel, a aprut un nou model, care st la baza multor soluii
middleware. n categoria soluiilor middleware bazate pe distribuirea obiectelor se
ncadreaz CORBA (Common Object Request Broker Architecture) al OMG

101

(Object Management Group), Java RMI (Java Remote Object Invocation), DCOM
(Distributed Component Object Model) al Microsoft i RM-ODP (Reference Model
for Open Distributed Processing) al ISO/ITU-T. Esena modelului bazat pe
distribuirea obiectelor const n faptul c fiecare obiect implementeaz o interfa care
ascunde detaliile interne ale obiectului fa de utilizatorii si (a se nelege de fapt
programatori). Singurul lucru pe care un proces l poate vedea la un obiect este interfaa
sa. O interfa const n metodele pe care obiectul le implementeaz.
De regul obiectele distribuite sunt implementate astfel nct fiecare obiect s fie
localizat pe un singur calculator i, n plus, interfaa sa s fie disponibil (vizibil) i pe
alte calculatoare. Invocarea unei metode de ctre un proces este transformat ntr-un
mesaj care va fi transmis obiectului n cauz (localizat pe alt calculator dect cel de pe
care este iniiat procesul); obiectul va executa metoda cerut i va transmite napoi
rezultatele, tot sub form de mesaje; mesajul de rspuns este transformat n valoare, ce
va fi preluat i prelucrat corespunztor de procesul invocant. Ca i n cazul
mecanismului RPC, procesul apelant nu va fi contient de comunicaia care a avut loc n
reea.
Distribuirea documentelor. Succesul Web-ului se datoreaz n bun msur
simplitii i eficacitii modelului middleware bazat pe distribuirea documentelor. n
acest model, informaiile sunt organizate sub form de documente (care conin nu doar
date de tip text, dar i video, audio etc), fiecare document fiind rezident pe un anumit
calculator, localizarea sa fiind transparent. Documentele pot conine link-uri ctre alte
documente, iar prin intermediul unui astfel de link documentul la care face referire
poate fi descrcat de pe calculatorul pe care este rezident i afiat pe ecranul
utilizatorului.
Dup cum spuneam anterior, middleware-ul pune la dispoziie o serie de servicii
care pot fi utilizate de programele de aplicaii. De exemplu, standardul CORBA
(Common Object Request Broker Architecture) ofer o varietate de servicii prin
intermediul crora furnizeaz aplicaiilor o serie de faciliti, precum: atribuirea
numelor, securitate, tranzacii, persistena, notificarea evenimentelor. Serviciile cele mai
comune oferite de majoritatea soluiilor middleware sunt:
Transparena accesului. Toate soluiile middleware acoper aceast cerin.
Astfel de servicii ofer faciliti de comunicare de nivel nalt care ascund modul n care
are loc transmiterea low-level a mesajelor prin reelele de calculatoare. n acest fel,
interfaa de programare a nivelului de transport specific diferitelor sisteme de operare
de reea este nlocuit complet (de exemplu, nivelul transport n sistemul de operare
Windows NT este implementat prin protocolul TCP). Modul n care este asigurat
suportul comunicrii difer foarte mult n funcie de modelul de distribuire pe care o
soluie middleware o ofer utilizatorilor i aplicaiilor. Dup cum am vzut anterior,
apelarea procedurilor de la distan sau invocvarea obiectelor distribuite reprezint
astfel de modele. n plus, multe din soluiile middleware ofer faciliti nu doar pentru
transmiterea mesajelor, ci i pentru transparena accesrii datelor aflate la distan, cum
ar fi bazele de date distribuite. Un alt exemplu de comunicare de nivel nalt l reprezint
ncrcarea documentelor de pe web.
Utilizarea numelor (naming). n sistemele distribuite, numele sunt utilizate
pentru referirea unei mari varieti de resurse, precum calculatoare, servicii, obiecte i
fiiere aflate la distan, utilizatori. Utilizarea numelor faciliteaz partajarea i regsirea
acestor entiti. De exemplu, un URL reprezint numele atribuit unei pagini web i care
va fi folosit pentru accesarea ei. Procesele nu pot partaja o anumit resurs gestionat de

102

un calculator dect dac i este asociat un nume. De asemenea, utilizatorii nu vor putea
comunica ntre ei n cadrul unui sistem distribuit dect dac ei pot fi referii printr-un
nume (de exemplu, adresele email). Acest serviciu este comparabil cu o carte de
telefoane sau arhicunoscutele pagini aurii. O limit specific utilizrii numelor este
legat de faptul c localizarea entitii care este referit prin nume trebuie s fie fix.
Aceast ipotez st la baza conceperii web-ului, de exemplu. Fiecare document are
atribuit un URL, acesta coninnd i numele serverului pe care este stocat documentul
respectiv. Dac se dorete mutarea documentului pe un alt server, atunci numele (URLul) nu mai este valabil.
Persistena. Multe din sistemele middleware ofer faciliti de stocare. n
forma cea mai simpl, persistena este asigurat prin intermediul unui sistem de fiiere
distribuite. Soluiile midleware mai avansate utilizeaz bazele de date sau ofer
aplicaiilor faciliti de conectare la baze de date.
Tranzacii distribuite. Aceste servicii sunt utile n sistemele n care stocarea
datelor joac un rol important. O tranzacie reprezint o operaiune atomic efectuat
asupra unei baze de date (de exemplu, adugarea unei noi facturi). Tranzaciile
distribuite opereaz asupra bazelor de date rspndite pe mai multe servere. De aceea, n
cazul lor sunt necesare unele servicii suplimentare, cum ar fi ascunderea erorilor ivite n
validarea sau anularea unei tranzacii. Asupra mecanismului tranzacional, a
tranzaciilor distribuite i a altor aspecte privind bazele de date distribuite vom reveni pe
larg n capitolul 3.
Securitatea. Desigur c sistemele de operare ofer serviciile necesare
asigurrii securitii sistemului, la care aplicaiile pot apela. Spre deosebire de acestea,
serviciile oferite de middleware sunt universale, adic pot fi utilizate la nivelul ntregii
reele de calculatoare, ceea ce nu este valabil n cazul celor oferite de sistemul de
operare care pot fi utilizate doar pe calculatoarele respective i nu la nivelul ntregii
reele. Prin urmare, serviciile de securitate sunt implementate din nou n nivelul
middleware (deasupra celor oferite de sistemele de operare).
Multe din sistemele distribuite moderne sunt construite ca middleware pentru o
serie de sisteme de operare. n acest fel, aplicaiile construite pentru un astfel de sistem
distribuit vor fi independente de sistemul de operare. Totui extinderea pe scar larg a
sistemelor distribuite este ncetinit tocmai de soluiile middleware, deoarece
independena fa de sistemul de operare a fost nlocuit cu o dependen puternic fa
de o anumit soluie middleware. Prin urmare este afectat una dintre caracteristicile
eseniale ale sistemelor distribuite, prezentate n capitolul nti, i anume caracterul lor
deschis.
Explicaiile rezid n existena mai multor standarde dezvoltate de diferite
organizaii ca soluii middleware. De cele mai multe ori, aceste standarde sunt
incompatibile ntre ele. Mai mult, produsele diferiilor productori rareori
interacioneaz corespunztor ntre ele, chiar dac au implementat acelai standard. O
astfel de situaie poate apare datorit incompletitudinii definiiilor interfeei, care oblig
programatorii s-i creeze propriile interfee (sau definiii). n consecin, aplicaiile
scrise de ei ar putea s nu fie portabile, dac dou echipe dezvolt propriile sisteme
middleware, chiar dac ambele echipe ader la acelai standard (incomplet).

103

MODELE ARHITECTURALE PENTRU SISTEMELE DISTRIBUITE


Dup cum artam n primul paragraf, una activitile specifice dezvoltrii
sistemelor distribuite const n proiectarea arhitecturii sistemului, respectiv diviziunea
responsabilitilor ntre componentele sistemului i plasarea lor pe calculatoarele din
reea. n acest sens, exist mai multe modele arhitecturale. Asupra lor ne vom opri n
continuare.
Modelul client/server. Aceast arhitectur este de departe cea mai cunoscut i
mai utilizat la dezvoltarea sistemelor distribuite, fiind prezentat schematic n figura de
mai jos. n fapt, ea presupune mprirea sarcinilor aplicaiei n procese client i procese
server care interacioneaz ntre ele prin schimbul de mesaje n vederea realizrii unei
activiti. Acest model va fi discutat pe larg n paragraful urmtor.
solicitare

Client

rezultat
rezultat

Server

Server

solicitare

Client

Servicii furnizate de mai multe servere. Conform acestei arhitecturi (vezi


figura urmtoare), serviciile pot fi implementate sub forma mai multor procese server
rezidente pe diferite calculatoare, care vor interaciona n funcie de necesiti n
vederea furnizrii serviciului cerut de un proces client. Setul de obiecte care st la baza
serviciului respectiv poate fi partiionat i distribuit pe mai multe servere. De asemenea,
este posibil ca mai multe servere s ntrein copii ale obiectelor respective (este vorba
despre replicare), cu scopul mbuntirii toleranei la erori, a perfomanelor de accesare
i a disponibilitii. De exemplu, serviciul web furnizat de altavista.digital.com este
partiionat pe mai multe servere care conin replici ale bazei de date.
Serviciu

Client
Client

Client
Client
Client

Servere proxy i tehnica de caching. Cache reprezint tehnica de stocare a


obiectelor de date recent utilizate mai aproape de locul de utilizare. Atunci cnd un
obiect este recepionat de un calculator, el va fi adugat n zona de stocare cache,

104

nlocuind eventual alte obiecte care exist deja n cache. La solicitatarea unui obiect de
ctre un proces client, serviciul de caching va cuta mai nti n cache pentru a pune la
dispoziie obiectul solicitat, numai dac exist o copie actualizat a acestuia; altfel, o
copie actualizat va fi ncrcat de pe server. Zonele cache pot fi dispuse pe fiecare
client sau ele pot fi localizate pe un server proxy partajat de mai muli clieni.
Tehnica aceasta este utilizat pe scar larg n practic. Browserele Web ntrein
pe fiecare client un cache cu cele mai recente pagini Web vizitate i alte resurse Web.
Ele utilizeaz o cerere HTTP special pentru a verifica dac paginile din cache sunt
corespunztoare cu cele originale de pe server nainte de a le afia (este vorba de
actualizarea lor). Serverele proxy Web (vezi figura urmtoare) ofer clienilor o zon de
stocare cache partajabil ce conine resursele Web ale unui singur site sau a mai multor
site-uri. n acest mod, se obine o cretere a disponibilitii i performanelor serviciilor
Web prin reducerea ncrcrii reelei i a serverului Web.

Server
WEB

Client
Server
proxy
Client

Server
WEB

Procese perechi. n aceast arhitectur toate procesele joac roluri similare,


interacionnd n mod colaborativ ca perechi n vederea realizrii unei activiti sau
prelucrri distribuite, fr a se face distincia ntre client i server. Codul corespunztor
proceselor perechi va avea rolul de a menine consistena resurselor de la nivelul
aplicaiei i de a sincroniza aciunile de la nivelul aplicaiei dac este necesar. n figura
de mai jos este prezentat o astfel de arhitectur, format din trei procese pereche, ns
pot exista n procese care s interacioneze ntre ele.
Aplicaie
Aplicaie
Programul
de
coordonare

Programul
de
coordonare

Aplicaie
Programul
de
coordonare

105

Eliminarea proceselor server determin reducerea ntrzierilor aferente comunicrii


inter-procese pentru accesarea obiectelor locale. De exemplu, o aplicaie poate fi
conceput astfel nct s permit utilizatorilor s afieze i s modifice interactiv o
schi (de exemplu schia unui proiect pentru un autoturism realizat cu un program
special, de exemplu AUTOCAD) care este partajat. Aplicaia poate fi implementat
sub forma unor procese aplicaie plasate pe fiecare nod care se va baza pe straturile
middleware pentru a realiza notificarea evenimentelor i comunicarea n cadrul grupului
pentru a ntiina toate procesele aplicaiei despre eventuala modificare a schiei. Acest
model ofer o comunicare interactiv mai bun (cu timpi de rspuns mai buni) pentru
utilizatorii unui obiect distribuit partajat dect n cazul unei arhitecturi bazate pe server.
MODELUL CLIENT/SERVER
n general, puine sunt problemele legate de dezvoltarea sistemelor distribuite n
care se nregistreaz un consens n rndul specialitilor. Un aspect asupra cruia se
nregistreaz un larg consens n rndul cercettorilor i practicienilor privete
organizarea componentelor unui sistem distribuit prin folosirea termenilor client, care
solicit servicii unui server, astfel nct s faciliteze nelegerea i stpnirea
complexitii sistemelor distribuite. Aadar, paradigma client/server reprezint modelul
arhitectural cel mai utilizat la dezvoltarea sistemelor distribuite.
DEFINIREA MODELULUI CLIENT/SERVER
Ideea subiacent conceptului client/server este serviciul. O aplicaie informatic
distribuit dezvoltat dup modelul client/server este descompus n dou grupuri de
procese: consumatorii de servicii, numii client i furnizorii de servicii, numii server,
care comunic ntre ele prin schimbul de mesaje de tip solicitare-rspuns. De exemplu,
un server poate fi conceput pentru a oferi un serviciu de baze de date clienilor si.
Serverul este funcional independent de client, iar relaia ntre client i server este de
colaborare (cooperare). Ea se difereniaz radical de aplicaiile centralizate, n care
relaia este de tip stpn-sclav (master-slave).
n modelul client/server, clientul solicit serverului execuia unui serviciu prin
transmiterea unui mesaj. La rndul su, serverul va transmite clientului rezultatul
solicitrii sale. Diferitele funcii ale aplicaiei informatice sunt regrupate sub forma
programelor client i server, fiecare cu roluri bine definite. Pentru utilizator totul este
transparent, el comunicnd cu programul client; schimbul de mesaje realizat ntre
programele client i server i sunt transparente, el percepnd aplicaia ca un ansmablu
executat doar pe postul su de lucru.
Figura urmtoare prezint modelul general al interaciunii dintre client i server.
Clientul

Ateptarea
rspunsului
Rspuns

Solicitare
Serverul
Furnizarea
serviciului

106

Timp

Arhitectura client/server poate fi definit ca un model de dezvoltare a aplicaiilor


conform cruia sistemul informaional este descompus ntr-un mare numr de funcii
server, executate pe una sau mai multe platforme hardware, care furnizeaz servicii
comune unui mare numr de funcii client, executate pe una sau mai multe platforme
hardware diferite dar interconectate, i care realizeaz sarcini bine definite n legtur
cu serviciile furnizate de server.
Spre deosebire de cele prezentate pn acum, mai pot fi identificate dou situaii
distincte:
un server poate apela la serviciile furnizate de ctre un alt server, obinndu-se
o relaie client server pe mai multe straturi. n figura de mai jos este prezentat o astfel
de relaie pe dou straturi.
Client

Serviciul 1

Serviciul 2

Roluri
client - - - - - - - - - - - - - - - server
client - - - - - - - - - - - - - - - - - - server

programele client i server se pot gsi pe acelai calculator, un exemplu n


acest sens constituindu-l schimburile inter-aplicaii de tip DDE (Dynamic Data
Exchange).
Din cele prezentate pn aici se poate clarifica relaia dintre sistemele distribuite
i sistemele client/server. Astfel, ntr-un sistem client/server nu este obligatoriu ca cele
dou grupe de funcii (client i server) s fie localizate pe calculatoare diferite, ele
putnd fi rezidente pe acelai calculator; de cele mai multe ori arhitectura client/server
este implementat ntr-un sistem distribuit. Pe de alt parte, un sistem distribuit nu
implic neaprat arhitectura client/server. Arhitectura cvasi-utilizat la dezvoltarea
sistemelor distribuite este reprezentat de modelul client/server ns, nu este singura
alternativ. Aadar, dei diferite conceptual, de cele mai multe ori n practica dezvoltrii
sistemelor informaionale se poate pune semnul de egalitate ntre sistemele distribuite i
sistemele client/server. De aceea, pe parcursul cursului cele dou noiuni vor fi utilizate
interschimbabil cu acelai sens.
ARHITECTURI CLIENT/SERVER MULTISTRAT
Modelul client/server a constituit subiectul multor dezbateri i controverse.
Problema principal este legat de distincia clar dintre client i server. Proiectarea
sistemelor client/server presupune conceperea arhitecturii aplicaiilor pe straturi bine
definite. O astfel de abordare permite proiectarea independent a straturilor, singura
grij constnd n definirea clar i proiectarea atent a interfeelor, urmrindu-se ca:
fiecare strat s aib un domeniu bine definit, n sensul definirii foarte clare a
sarcinilor i responsabilitilor fiecrui strat;
fiecare strat trebuie s ndeplineasc o sarcin specific; dac, de exemplu,
unul din straturi este responsabil cu interaciunea cu utilizatorul, atunci numai acel strat

107

va comunica cu utilizatorul, celelalte straturi realiznd acest lucru prin intermediul


acestui strat dac au nevoie de informaii de la utilizator.
stabilirea unor protocoale bine definite pentru interaciunea dintre straturi,
interaciune care s se realizeze numai prin intermediul acestor protocoale.
O prim ncercare n acest sens a constituit-o mprirea aplicaiilor pe dou
straturi, rezultnd arhitectura cu dou straturi. Aceast arhitectur presupune
descompunerea aplicaiei n urmtoarele dou straturi:
stratul corespunztor aplicaiei, n care se include interfaa grafic cu
utilizatorul, respectiv logica prezentrii, i implementarea regulilor de afaceri (business
rules), respectiv logica aplicaiei. Tot acest strat poate coordona i logica tranzaciei,
care garanteaz c actualizrile n baza de date specifice unei tranzacii sunt terminate
complet (validate sau anulate).
stratul corespunztor bazei de date, care este responsabil de meninerea
integritii bazei de date. n acest strat poate fi implementat ntreaga logic a tranzaciei
sau o parte a ei.
Distincia dintre cele dou straturi nu este ntotdeauna bine definit deoarece
logica tranzaciei este adesea implementat pe server BD, sub forma procedurilor
stocate, iar regulile afacerilor, parte a logicii aplicaiei sunt de asemenea implementate
pe server, sub forma trigger-elor. n plus, sunt ntmpinate greuti considerabile n
dezvoltarea sistemului informaional pe baza creterii accentuate a numrului de
aplicaii, a numrului i tipului serverelor de baze de date. Aceast deficien poate fi
rezolvat prin introducerea unui nivel suplimentar, care s trateze regulile afacerii,
rezultnd o arhitectur cu trei straturi.
Arhitectura cu trei straturi presupune mprirea aplicaiei n urmtoarele
straturi:
gestiunea interfaei utilizator (gestiunea prezentrii) privete dialogul
ntre utilizatori i aplicaie, incluznd aici logica de prezentare a informaiei (ansamblul
prelucrrilor efectuate asupra datelor necesare afiarii lor);
logica aplicaiei - cuprinde ansamblul operaiilor de prelucrare specifice
aplicaiei i nlnuirea lor logic;
gestiunea datelor rezolv cererile de date, asigur integritatea datelor,
emiterea anumitor mesaje de alertare, precum i gestiunea fizic a datelor (adugri,
modificri, tergeri).
n esen, arhitectura pe trei straturi difer de cea pe dou straturi prin separarea
logicii afacerii ntr-un strat distinct, localizat de regul pe un server de aplicaii care
comunic strns cu serverul de baze de date. Introducerea unui strat intermediar permite
definirea i implementarea regulilor afacerii independent de logica prezentrii interfeei
GUI i a regulilor de proiectare a bazei de date. Acest avantaj devine evident n
condiiile n care regulile afacerii sunt supuse mai des modificrilor, facilitnd astfel
reimplementarea lor.
Dac cele trei straturi vor fi implementate pe calculatoare diferite, atunci vom
avea situaia n care un server va juca i rolul de client. O arhitectur pe trei straturi este
prezentat n figura de mai jos. Se observ c programele care formeaz stratul logicii
afacerii sunt rezidente pe un server separat.

108

Ateptare rezultat

Interfaa
utilizator
(Prezentare)

Solicitare
operaie

Transmiterea
rezultatelor

Ateptare date

Serverul de
aplicaie

Transmiterea
datelor

Solicitare
date
Serverul de
baze de date

Timp

Un exemplu tipic de arhitectur pe trei straturi l reprezint modul de funcionare al unui


motor de cutare pe Internet, prezentat n figura urmtoare.
Nivelul
gestiunea
interfeei

Interfaa utilizator
Pagina HTML
ce conine lista

Expresia tastat

Generarea
interogrilor
Interogri ale
bazei de date

Generator
HTML
Lista ordonat a paginilor

Nivelul
logica
aplicaiei

Ordonarea
componentelor

Titlurile paginilor Web


i metainformaii

Baza de date cu
paginile Web

Nivelul
gestiunea
datelor

Interfaa (partea de front-end) permite utilizatorului s introduc expresia dup


care dorete s se efectueze cutarea i, ulterior, va afia o list cu titlurile de pagini
Web care corespund expresiei introduse. Partea de back-end va consta dintr-o imens
baz de date cu informaii despre paginile Web. ntre cele dou niveluri se afl inima
motorului de cutare, respectiv partea de logic a programului, care transform expresia
introdus de utilizator prin intermediul interfeei n una sau mai multe interogri ale
bazei de date, dup care va ordona rezultatele interogrilor ntr-o list, i pe care o va
transforma ntr-o serie de pagini HTML.
Un alt exemplu de arhitectur pe trei straturi, este cel al unui sistem de asistare a
deciziei pentru gestiunea portofoliului de aciuni. Acest sistem poate fi de asemenea
mprit pe trei niveluri: partea front-end va implementa interfaa utilizator, partea backend va asigura accesarea bazei de date cu date financiare, iar partea de mijloc va conine
programele de analiz financiar. Analiza datelor financiare poate implica tehnici i
metode sofisticate, de la cele statistice la cele de inteligen artificial, motiv pentru care
logica aplicaiei ar putea fi implementat pe un server special, capabil s execute
operaiuni de calcul complexe.

109

Printre avantajele unei arhitecturi client/server distribuit pe trei straturi


enumerm:
Reutilizare. Componentele dezvoltate pot fi construite astfel nct
funcionalitatea lor s fie partajate ntre mai multe aplicaii;
Performan. Aplicaiile ruleaz ntr-un strat dedicat, bazat eventual pe
resurse proprii i tehnologii ale cror scop esenial este atingerea unei viteze de execuie
superioare i a unei scalabiliti superioare.
Mentenan. ntreinerea i reinstalarea aplicaiilor sau a unor pri ale
acesteia, n cazul schimbrii regulilor afacerii, este mult simplificat prin administrarea
separat, centralizat, a componentelor lor.
Suport multi-limbaj. Aplicaiile dezvoltate pe componente pot fi scrise n mai
multe limbaje de programare (VB, C++, C#, Java) i pot fi fcute interoperabile, chiar
dac provin de pe platforme diferite (.NET, J2EE).
Scalabilitate i echilibrarea solicitrii resurselor. Componentele pot fi
distribuite pe mai multe servere, ceea ce permite ridicarea pragului de scalabilitate n
condiiile pstrrii parametrilor de performan i disponibilitate a aplicaiilor.
Eficientizarea accesului la date. Serverele de baze de date nu vor mai fi
solicitate de un numr mare de cereri de acces, gestiunea cererilor clienilor revenind
serverelor de aplicaii (deci stratului intermediar). n acest mod, clienii nu mai sunt
nevoii s se conecteze direct la baza de date i, prin urmare, nu vor mai avea nevoie de
drivere specifice (ca n cazul arhitecturii pe dou straturi).
mbuntirea securitii. Componentele din stratul intermediar pot fi
gestionate din punctul de vedere al securitii printr-o infrastructur centralizat
comun, determinnd simplificarea i reducerea costurilor de administrare.
n prezent se manifest tendina dezvoltrii aplicaiilor multistrat, n care pot exista mai
mult de trei straturi, att din punct de vedere logic, ct i fizic. Acest lucru este posibil
datorit apariiei unei noi paradigme n dezvoltarea sistemelor informaionale, referit
prin sintagma orientat pe componente. Aceast nou abordare, coroborat cu
libertatea n distribuirea componentelor datorit apariiei unor protocoale (API) de
comunicare specifice, determin orientarea ctre dezvoltarea de aplicaii client/server
multistrat.
CLASIFICAREA MODELELOR ARHITECTURALE CLIENT/SERVER
Proiectarea sistemelor informatice conform tehnologiei client/server trebuie s ia
n considerare diferitele tipuri de sisteme client/server. O clasificare a modelelor
client/server a fost propus de Gartner Group, pornind de la cele trei pri funcionale
componente ale unei aplicaii. Figura de mai jos arat cele cinci tipuri de arhitecturi
regrupate sub numele client-server, fiecare tip fiind prezentat n continuare.

110

Gestiunea
datelor

Gestiunea
datelor

Gestiunea
datelor

Logica
aplicaiei

Logica
aplicaiei

Logica
aplicaiei

Interfaa

Gestiunea
datelor

Gestiunea
datelor

E
R

Interfaa

Gestiunea
datelor

Interfaa

Logica
aplicaiei

Logica
aplicaiei

Logica
aplicaiei

Interfaa

Interfaa

Interfaa

Interfaa (prezentarea) distribuit urmrete dispunerea de faciliti grafice pe


postul client, motiv pentru care acest model mai este referit i prin cosmetica
aplicaiei. Concret, acest model presupune adugarea unei interfee grafice evoluate la
o aplicaie centralizat, rezident pe un mainframe sau minicalculator, n vederea
nlturrii dezavantajelor asociate interfeelor la modul caracter specifice platformelor
mari. Aplicaia central nu este modificat ci numai partea de interfa a aplicaiei, adic
acea parte care selecteaz datele provenite de la calculatorul central i le afieaz ntr-un
mediu grafic specific microcalculatoarelor.
Operaia de transformare a interfeei se poate face de-o manier mai simpl, fr
alterarea succesiunii ecranelor specifice aplicaiei originale (unui ecran n modul
caracter i corespunde un ecran n modul grafic) fie de-o manier mai radical, n
sensul modificrii succesiunii dialogurilor i ecranelor utilizator specifice aplicaiei
originale, ns tot fr a efectua vreo modificare n programele aplicaiei (unui ecran n
modul caracter i poate corespunde mai multe ecrane n modul grafic, precum i invers).
Dei aduce unele mbuntiri aplicaiei, modelul interfa distribuit poate fi cu greu
ncadrat n arhitectura client/server, ntru-ct partea server a aplicaiei rmne
semnificativ, manifestndu-se o relaie de tip master-slave. i totui, acest model ofer
unele avantaje legate de:
ameliorarea calitii interfeei aplicaiei;
conservarea investiiilor anterioare efectuate pentru realizarea aplicaiei,
deoarece programele aplicaiei nu sunt modificate;
ofer o soluie intermediar n vederea trecerii la arhitectura client/server.
Dei o asemenea rezolvare rspunde cerinelor utilizatorilor n materie de
interfa grafic, ea nu poate reprezenta dect o soluie temporar, deoarece:
nu rezolv problemele de comunicare a datelor, generate de traficul intens de
date din reea (la datele aplicaiei care tranziteaz reeaua ntre client i server se adaug
informaiile tehnice legate de poziia cmpurilor n ecran, controale etc.)
nu ofer deloc (sau prea puin) performane noi, serverul asigurnd n
continuare toate prelucrrile aplicaiei.

111

Interfaa (prezentarea) izolat (deportat) este ea n care gestiunea interfeei


utilizator a aplicaiei este rezident pe platforma client, platform ce asigur n
ntregime gestionarea dialogului. Terminalele X reprezint un exemplu de implementare
a acestui model, ele oferind o mare portabilitate a aplicaiilor i o independen total
fa de productori de hard i soft, putnd lucra uor cu platforme hard i software
eterogene.
Acest model asigur urmtoarele avantaje:
mbuntete calitatea interfeei aplicaiei;
conserv investiiile anterioare efectuate pentru realizarea aplicaiei prin
separarea strict a interfeei de prelucrrile aplicaiei (logica aplicaiei);
determin reducerea substanial a costurilor, datorit preului redus al
terminalelor X i uurina ntreinerii acestora.
Totui, ca i n primul caz, nu ofer performane deosebite deoarece serverul asigur
ansamblul prelucrrilor ceea ce presupune o mare ncrcare a reelei. n plus,
terminalele X sunt utilizate doar n mediile UNIX.
Prelucrri distribuite, model care presupune repartizarea prelucrrilor
aplicaiei ntre client i server. Pe platforma client se regsete logica funcional de
baz care apeleaz serverul pentru executarea unor servicii externe prin lansarea unor
cereri ce vor activa prelucrrile localizate pe server, numite i proceduri. Apelarea
procedurilor de pe server de ctre clieni se poate face prin intermediul mecanismului
RPC (Remote Program Call). Acest mecanism permite, de exemplu, apelarea de ctre
aplicaia client a procedurilor rezidente pe server care, la rndul lor, pot conine una sau
mai multe cereri SQL.
Adoptarea acestui model necesit stabilirea unor criterii clare de repartizare a
prelucrrilor, ceea ce complic procesul de proiectare a sistemelor informatice. Aceast
problem constituie una din dificultile dezvoltrii de aplicaii conforme acestui model,
deoarece rezolvarea ei necesit o bun cunoatere a echipamentelor i programelor pe
care va fi implementat aplicaia, precum i o mare experien n dezvoltarea unor astfel
de aplicaii. n general, se consider c, cu ct numrul de cereri de accesare a datelor
specifice unei proceduri este mai mare i cu ct procedura este mai complex, cu att
mai mult se justific localizarea acelei proceduri pe server. Aceasta deoarece
prelucrrile sunt mai aproape de locul fizic de stocare a datelor, iar prin reea vor
tranzita numai cererile de apel de la distan a procedurilor, nu i datele.
Avantajele principale ale modelului bazat pe prelucrri distribuite constau n
reducerea traficului prin reea i o repartizare echilibrat a prelucrrilor ntre client i
server. n schimb, dup cum am mai spus, dezvoltarea unor asemenea aplicaii este
dificil datorit cunotinelor numeroase i a experienei solicitate.
Un exemplu de adoptare a acestui model l reprezint aplicaiile care dispun de
formulare pentru culegerea datelor i care implementeaz diferite operaiuni de
prelucrare i verificare a datelor n cadrul formularelor, pentru a fi transmise datele ctre
server ntr-o form consistent. n acest fel, dialogul interactiv dintre utilizator i
aplicaie (n cazul apariiei unor erori de culegere, de exemplu) este localizat pe
platforma client, reducnd astfel costurile i ntrzierile specifice comunicaiilor.
Gestiunea izolat (deportat) a datelor, n care platforma client asigur att
gestionarea dialogului ct i logica aplicaiei, iar serverul asigur doar gestionarea
datelor. n acest caz se realizeaz o repartizare clar a funciilor ntre client i server i
se asigur o securitate sporit a datelor. Aplicaia client transmite cererile sale de date

112

serverului, iar acesta din urm transmite napoi datele cerute. Toate prelucrrile asupra
datelor, specifice aplicaiei, sunt efectuate pe platforma client.
Dezvoltarea aplicaiilor conform acestui model este facilitat nu numai de
repartizarea clar a funciilor ntre client i server ci i de oferta bogat de produse
mature, cum ar fi SGBDR-urile. Astzi, SGBDR-urile asigur i controlul integritii
datelor din BD, ceea ce reprezint o facilitate foarte important ntr-un mediu
client/server n care mai multe aplicaii client pot modifica aceste date. Localizarea
controlului integritii datelor n acelai loc n care se afl datele (pe server) permite
consultarea i actualizarea datelor de ctre oricare din aplicaiile client n deplin
siguran, precum i reducerea traficului de reea (cererile privind controlul integritii
numai tranziteaz reeaua, ca n cazul n care controlul integritii ar fi localizat pe
platforma client). Introducerea trigger-elor n SGBDR-uri faciliteaz controlul
integritii BD i gestiunea datelor independent de aplicaiile client.
Modelul gestiunea izolat a datelor se difereniaz de sistemele bazate pe simpla
partajare a fiierelor de date, n care pe server sunt stocate numai datele n timp ce
serviciile de gestionare a datelor sunt rezidente pe client. Desigur c, n acest caz,
traficul n reea este mult mai mare.
Din cele prezentate anterior se pot desprinde urmtoarele avantaje ale acestui
model:
este mai uor de neles deoarece funciile aplicaiei sunt clar repartizate ntre
client i server;
garanteaz o securitate i consistena mai bun a datelor;
exist o ofert variat de produse bine maturizate.
ntre dezavantajele asociate pot fi enumerate:
nu este adaptat mediilor tranzacionale intensive; dei SGBDR-urile asigur
accesul concurent la date, ele nu suport dect un numr limitat de utilizatori (cteva
sute), caz n care se face apel la mainile tranzacionale, care au rolul de server frontal al
SGBDR.
traficul n reea este mai mare dect n cazul modelului bazat pe distribuirea
prelucrrilor.
Gestiunea distribuit a datelor presupune repartizarea datelor ntre client i
unul sau mai multe servere. Datele repartizate vor fi gestionate ca un ansamblu logic,
fiind numai fizic distribuite. Postul client devine el nsui server de date i se creeaz
legturi de tip server-server care, de cele mai multe ori presupune o gestiune a datelor
ntr-un mediu eterogen (calculatoare, sisteme de operare, reele sau SGBD-uri diferite).
Acest model reprezint n teorie modelul ideal de distribuire deoarece permite
combinarea datelor ntr-o manier avantajoas att pentru unitate (coerena sistemului
prin globalizarea resurselor eterogene) ct i pentru utilizatori (sunt mai aproape de
date, iar prelucrrile datelor sunt mai rapide). Cu toate c asigur coerena global a
sistemului, n condiiile existenei unor resurse eterogene, i ofer performane sporite,
implementarea acestui model este deosebit de complex, fie i numai pentru c o cerere
SQL trebuie analizat i rezolvat la nivel global, iar pentru consistena datelor trebuie
implementate mecanisme n dou sau mai multe faze. La aceast complexitate se
adaug i oferta (nc) limitat privind arsenalul de produse necesare pentru
implementarea unui asemenea model.
n practic, arhitectura client/server a unei aplicaii poate combina mai multe din
cele cinci modele prezentate anterior. O asemenea arhitectur poate rezulta prin
distribuirea att a datelor ct i a prelucrrilor.

113

ALTE MODELE CLIENT/SERVER


Dincolo de variantele clasice ale modelului client/server, prezentate anterior,
mai pot fi imaginate altele, rezultate prin combinarea facilitilor tehnologice existente
cu cerinele utilizatorilor i obiectivele urmrite n dezvoltarea sistemelor distribuite.
Cteva dintre aceste variante vor fi prezentate n continuare.
Programe mobile (mobile cod). Applet-urile reprezint cele mai cunoscute i
utilizate programe mobile. Prin intermediul unui browser (Internet Explorer), un
utilizator poate selecta un link ctre un applet al crui cod este stocat pe un server web;
codul (programul) este ncrcat (download) pe calculatorul utilizatorului unde va fi i
executat (vezi figura de mai jos, care prezint schematic modul de utilizarea a appleturilor web). Avantajul executrii locale a programului const n mbuntirea
comunicrii interactive (reducerea timpului de rspuns), att timp ct ea nu mai
nregistreaz ntrzierile inerente comunicrii n reea.
a) clientul solicit ncrcarea applet-ului
Server
Web

Client
Appletul

b) clientul interacioneaz cu applet-ul


Client

Server
Web

Applet

Accesarea unui serviciu presupune lansarea n execuie a unui program care va


invoca operaiile acestuia (ale serviciului). Chiar dac multe din servicii sunt
standardizate pentru a putea fi accesate prin intermediul unor aplicaii arhicunoscute
(web-ul este un exemplu n acest sens), totui unele site-uri web utilizeaz anumite
funciuni care nu sunt regsite n browser-ele standard. n aceast situaie este necesar
ncrcarea unor programe adiionale. De exemplu, un astfel de program poate asigura
comunicarea cu serverul atunci cnd o aplicaie solicit punerea la curent a utilizatorului
cu modificrile informaiilor stocate pe server, imediat ce ele apar. Acest lucru nu poate
fi realizat prin intermediul interaciunilor obinuite cu server-ul web, care sunt iniiate
de client (clientul nu ar ti cnd s iniieze comunicarea). Ar trebui ca interaciunea
dintre client i server s poat fi iniiat de server (atunci cnd au loc modificri ale
informaiilor), problem ce poate fi rezolvat tocmai prin ncrcarea unui program
adiional pe platforma client.
Un exemplu concret: un broker ar putea oferi un serviciu personalizat pentru a
ntiina clienii despre schimbarea preurilor aciunilor pe pia; pentru a beneficia de
acest serviciu, fiecare client va trebui s ncarce un applet special care s preia
actualizrile preurilor de pe serverul brokeru-lui, s le afieze i, eventual, s execute
cumprri sau vnzri automate n funcie de condiiile stabilite de client i care sunt
stocate pe calculatorul su.
Totui, nu trebuie s ne entuziasmm prea mult n ce privete utilizarea appleturilor i s nu ignorm problemele de securitate care pot apare la calculatorul destinaie.
De aceea, browser-ele ofer applet-urilor un acces limitat la resursele locale (ale
calculatorului destinaie).

114

Agenii mobili. Un agent mobil reprezint o aplicaie (include att programul


ct i datele) care cltorete n reea de la un calculator la altul pentru a realiza o
sarcin n numele cuiva, cum ar fi colectarea informaiilor i, eventual, returnarea
rezultatelor. n acest scop, un agent mobil poate face numeroase invocri ale resurselor
locale ale fiecrui nod pe care l viziteaz (de exemplu accesarea unei baze de date
locale). O astfel de problem ar putea fi rezolvat de un client static, care ar putea
invoca resursele necesare de la distan, dar care ar presupune un volum mare de date de
transferat (prin urmare costuri mari de comunicaie i ntrzieri n realizarea sarcinii
respective). n cazul arhitecturii bazate pe ageni mobili, invocarea resurselor de pe alte
calculatoare (noduri) ale reelei nu se face de la distan, ci chiar invocarea este iniiat
la distan.
Agenii mobili pot fi utilizai la instalarea i ntreinerea aplicaiilor de pe
calculatoarele unei organizaii sau pentru compararea preurilor diferiilor productori
pentru un anumit produs, prin vizitarea site-urilor fiecrui productor i efectuarea unor
operaiuni de interogare a bazei de date.
Problema securitii este i mai acut dect n cazul applet-urilor. Un agent
mobil poate reprezenta o ameninare pentru reursele calculatoarelor pe care le viziteaz
(de exemplu baza de date). n cazul utilizrii lor, calculatorul care i primete n vizit
trebuie s decid asupra resurselor care le vor fi disponibile, n funcie de identitatea
utilizatorului n numele cruia acioneaz agentul. Prin urmare, identitatea utilizatorului
trebuie s fie inclus, de o manier securizat, n agent, alturi de program i datele sale.
Network computers (NC). Aceste tipuri de calculatoare au fost introduse ca
rspuns la problema gestiunii fiierelor din aplicaii i a ntreinerii diferitelor programe
locale. Ele solicit un efort i cunotine tehnice pe care de cele mai multe ori utilizatorii
nu le au. De asemenea, ele sunt mai ieftine ntruct dispun de resurse mai reduse fa de
un PC; capacitatea procesorului i a memoriei pot fi mai reduse. NC-urile ncarc
sistemul de operare i programele de aplicaii necesare utilizatorilor de pe un server. n
acest mod, aplicaiile vor rula local, ns vor fi gestionate i ntreinute centralizat, pe
server. Un alt avantaj al utilizrii NC-urilor const n faptul c utilizatorul se va putea
deplasa i lucra pe orice calculator din reea, att timp ct programele de aplicaii i
datele sunt rezidente pe server. n cazul n care NC-ul dispune de un hard disc, pe el va
fi stocat doar un minim de aplicaii, iar partea de disc rmas disponibil va fi utilizat
ca loc de stocare de tip cache (n care vor fi memorate programele de aplicaii i datele
care au fost accesate i ncrcate de pe server recent). n ciuda acestor avantaje,
tehnologia NC nu a reprezentat un succes comercial.
Client slbnog (thin client). n aceast arhitectur, pe calculatorul
utilizatorului este disponibil o interfa bazat pe ferestre prin care acesta poate executa
anumite programe de aplicaii pe un alt calculator. Acest model ofer acelai avantaje ca
n cazul NC-urilor, numai c el nu ncarc programele necesare de pe un server pentru a
le executa local, ci le execut chiar pe serverul pe care programele sunt rezidente.
Bineneles, serverul trebuie s fie un calculator cu capacitate mare de prelucrare i s
permit execuia simultan a numeroase aplicaii. De regul, el va avea mai multe
procesoare i va rula o versiune a sistemului de operare UNIX sau Windows NT. Acest
tip de calculator poate fi utilizat n aplicaiile interactive precum CAD (Computer
Aidded Design) sau prelucrarea imaginilor, atunci cnd ntrzierile aferente comunicrii
prin reea sunt compensate de nevoia de a lucra n echip. Astfel de implementri sunt:
sistemul X-11 pentru UNIX, sistemul Teleporting and Virtual Network Computer
(VNC) dezvoltat la laboratoarele AT&T din Cambridge.

115

Echipamentele mobile i reeaua spontan. Lumea de astzi este invadat de


dispozitivele de calcul portabile, precum laptop-urile, PDA-urile, telefoanele mobile,
camerele de luat vederi digitale etc. Multe dintre aceste echipamente pot fi conectate
ntr-o reea fr fir, iar prin integrarea lor ntr-un sistem distribuit se poate pune la
dispoziia utilizatorilor o putere de calcul mobil. Modalitatea de distribuire care
integreaz echipamentele mobile i cele ne-mobile ntr-o reea dat poate fi referit prin
termenul reea spontan. El este utilizat pentru descrierea aplicaiilor care implic
conectarea dispozitivelor mobile i a celor ne-mobile n reea ntr-o manier mai
informal dect a fost posibil pn n prezent. Este evident sprijinul pe care-l ofer n
dezvoltarea afacerilor mobile.

116

Capitolul 6
SISTEME CU BAZE DE DATE DISTRIBUITE
Una dintre activitile cele mai importante ale dezvoltrii sistemelor informatice
privete proiectarea bazei de date. Din punctul de vedere al partajrii datelor, exist trei
alternative de proiectare: sisteme informatice independente, fiecare cu propria baz de
date, care nu partajeaz date ntre ele; sisteme informatice care utilizeaz o baz de
date centralizat; sisteme informatice cu baz de date distribuit.
Alegerea primei variante este justificat atunci cnd diferitele aplicaii din sistem
au cerine reduse de partajare a datelor. Datele care trebuie totui partajate sunt
transmise pe hrtie, sub forma rapoartelor, prin fax sau telefon, sau chiar prin email.
Desigur c aceste metode de partajare a datelor sunt ineficace. n plus, astfel de aplicaii
independente sunt ntlnite din ce n ce mai rar astzi, datorit accentului pus pe
integrarea sistemelor informatice din ultimii ani.
Majoritatea sistemelor informatice dezvoltate n ultimii ani au la baz cea de-a
doua opiune. ns, utilizarea bazelor de date centralizate implic unele deficiene legate
de costurile transmiterii datelor ctre/dinspre serverul central, timpii de rspuns
nesatisfctori, disponibilitatea limitat a resurselor, etc.
Primele dou alternative pot fi vzute ca extremele spectrumului format de
soluiile de partajare a datelor. La mijloc se afl soluia axat pe baze de date distribuite
care, prin diferitele faciliti pe care le ofer, este mai flexibil i permite combinarea
avantajelor oferite de cele dou soluii aflate la extremitatea spectrumului. Dup cum
vom vedea ulterior, putem vorbi de un spectrum de soluii, deoarece tehnologia bazelor
de date distribuite, prin facilitile oferite, permite alegerea din mai multe variante a
soluiei celei mai potrivite cerinelor sistemului, de la o baz de date pur distribuit pn
la una complet replicat.
n acest capitol, vom aborda principalele aspecte ale dezvoltrii sistemelor
informatice cu baze de date distribuite. Astfel, ne vom ocupa de definirea bazelor
distribuite, de avantajele pe care le ofer aceast tehnologie, de principiile care stau la
baza distribuirii datelor, de problema mecanismului tranzacional i alte aspecte de
dezvoltare a aplicaiilor n condiiile utilizrii bazelor de date distribuite.
DEFINIREA BAZELOR DE DATE DISTRIBUITE
I AVANTAJELE ACESTORA
O baz de date distribuit este definit ca o colecie de date integrate din punct
de vedere logic dar distribuite fizic pe mai multe platforme conectate printr-o reea,
asigurndu-se transparena localizrii fizice a datelor pentru aplicaiile care le
acceseaz. Aadar, o baz de date distribuit poate fi considerat ca o baz de date
virtual.
Post definete o baz de date distribuit ca un sistem ce const din multiple baze
de date independente care opereaz pe dou sau mai multe calculatoare conenctate n
reea i care partajeaz date prin intermediul reelei. Fiecare baz de date este gestionat
de un SGBD independent, care este responsabil pentru meninerea integritii bazei de
date. n situaii extreme, bazele de date pot fi implementate pe platforme hardware
eterogene, ce ruleaz sisteme de operare diferite i care utilizeaz SGBD-uri de la
furnizori diferii. Un astfel de sistem este dificil de proiectat, implementat i ntreinut.

117

De regul, sistemele cu baze de date distribuite utilizeaz acelai SGBD pe toate


calculatoarele pe care sunt distribuite datele.
Distribuirea datelor poate fi justificat de obinerea urmtoarelor avantaje:
Depirea limitrilor capacitii de stocare. Bazele de date voluminoase i
cu un mare numr de accesri pot depi capacitatea de stocare i prelucrare ale
serverului sau pot determina performane sczute n accesarea datelor, dac baza de date
ar fi centralizat. Fragmentarea bazei de date n subseturi funcionale i stocarea
acestora pe platforme diferite, dar care s reprezinte un ansamblu logic, duce la
reducerea cerinelor de prelucrare i stocare a datelor pentru fiecare platform pe care
este distribuit baza de date.
Depirea limitrilor specifice mediilor de transmisie. n cazul n care
datele trebuie accesate de la mare distan apare problema limitrilor privind lrgimea
de band a mediilor de transmisie n reele. De exemplu, astzi majoritatea LAN-urilor
lucreaz la 10 Mbps, cu soluii implementate deja de 100 Mbps sau peste aceast limit
n curnd. n unele cazuri aceste performane nu sunt suficiente pentru traficul de date
solicitat, iar dac da, serviciile de comunicaie sunt foarte scumpe. De aceea este mai
eficient distribuirea i localizarea datelor ct mai aproape posibil de locul de accesare a
datelor.
Disponibilitatea. De cele mai multe ori o baz de date deservete mai multe
aplicaii. Dac o baz de date centralizat este parial distrus sau inaccesibil la un
moment dat, atunci toate aplicaiile care o acceseaz devin inoperabile. Replicarea
datelor n conformitate cu cerinele funcionale ale aplicaiilor protejeaz aplicaiile
mpotriva eventualelor cderi ale bazei de date.
Reflectarea structurii organizaionale n arhitectura sistemului. n funcie
de modul de organizare al firmei este necesar distribuirea controlului i gestiunii
datelor, fiecare departament fiind responsabil pentru coninutul schemei ce i-a fost
alocat. Facilitile de interogare distribuit permit, dac este cazul, obinerea unei
imagini consolidate (globale) asupra datelor, ca i cum ar fi o singur baz de date.
Combinarea surselor de date eterogene. Este, poate, cea mai ntlnit
situaie care justific distribuirea bazei de date. n acest caz, optarea pentru un sistem
informaional bazat pe distribuirea datelor nu este consecina unei decizii strategice ci o
reacie fa de o situaie existent n cadrul firmei. n marile firme este foarte probabil s
existe instalate i utilizate dou sau mai multe SGBD-uri diferite, situaie n care este
necesar combinarea datelor din aceste surse diferite astfel nct s ofere utilizatorilor
(i aplicaiilor) imaginea unei singure baze de date.
Scalabilitatea bazelor de date distribuite. n comparaie cu bazele de date
centralizate, bazele de date distribuite sunt foarte uor de extins. De exemplu, dac o
companie utilizeaz o baz de date centralizat, eventuala extindere a activitii sale
ntr-o nou regiune geografic, ceea ce solicit spaiu de stocare i capacitate de
prelucrare suplimentare, ar putea determina nlocuirea serverului bazei de date. n cazul
utilizrii unei baze de date distribuite, eventuala extindere a activitii ar putea fi
acoperit prin adugarea unui nou server de baze de date care s realizeze noile
operaiuni, iar echipamentele i aplicaiile existente vor rmne funcionale.
OBIECTIVELE SPECIFICE BAZELOR DE DATE DISTRIBUITE
Dezvoltarea aplicaiilor care utilizeaz baze de date distribuite reprezint o
sarcin dificil (sau mai bine spus reprezenta). De aceea, numeroi specialiti s-au

118

preocupat de formularea unor reguli care s simplifice dezvoltarea unor astfel de


aplicaii. n acest sens, C.J. Date a formulat un principiu fundamental pentru bazele de
date distribuite: o baz de date distribuit ar trebui s apar utilizatorilor exact ca o
baz de date nedistribuit. Cu alte cuvinte, utilizatorii dintr-un sistem distribuit ar
trebui s vad baza de date ca i cum ea ar fi centralizat. Prin utilizatori facem referire
att la utilizatorii finali ct i la dezvoltatorii de aplicaii. Pornind de la acest principiu,
trebuie fcut diferena dintre o baz de date distribuit i accesarea de la distan a mai
multor baze de date.
Punerea n practic a acestui principiu solicit atingerea a 12 obiective specifice
bazelor de date distribuite, formulate tot de C.J. Date, i pe care le vom prezenta succint
n continuare.
1. Autonomia local. Conform acestui obiectiv, nodurile dintr-un sistem
distribuit trebuie s fie autonome. Autonomia local presupune ca toate operaiile
efectuate pe un nod s fie controlate de ctre acel nod; funcionarea unui nod nu trebuie
s depind de alte noduri (dac nodul Y nceteaz s funcioneze la un moment dat din
varii motive, atunci funcionarea normal a nodului X nu trebuie s fie afectat). De
asemenea, autonomia local implic i faptul c datele locale vor fi gestionate local de
nodul pe care ele sunt rezidente, independent de faptul c datele respective sunt accesate
de la distan de alte noduri. Astfel, problemele de securitate, asigurarea integritii,
stocarea datelor etc. rmn sub controlul nodului local.
n practic, realizarea total a acestui obiectiv este imposibil, existnd anumite
situaii n care un nod cedeaz controlul asupra unor operaiuni unui alt nod. De aceea,
acest obiectiv ar putea fi formulat astfel: nodurile trebuie s fie ct mai autonome
posibil.
2. Sistemul nu trebuie s se bazeze pe un nod central. Autonomia local
presupune ca toate nodurile s interacioneze de la egal la egal. Prin urmare, nu trebuie
s existe un nod central care s joace rolul de master i care s gestioneze anumite
servicii n mod centralizat, cum ar fi: prelucrarea centralizat a interogrilor, gestiunea
centralizat a tranzaciilor, atribuirea centralizat a numelor. n cazul unei asemenea
situaii ntregul sistem distribuit ar deveni dependent de nodul respectiv, fiind mai
vulnerabil. n fapt, acest obiectiv reprezint un corolar al obiectivului prezentat anterior.
Cu toate acestea ele trebuie considerate ca obiective distincte deoarece, chiar dac
autonomia local complet nu poate fi obinut, acest obiectiv trebuie realizat n mod
imperios.
3. Funcionarea nentrerupt. Acest obiectiv este legat de dou dintre
avantajele generale majore ale sistemelor distribuite: sigurana n funcionare, adic
probabilitatea ca sistemul s fie funcional n orice moment, i disponibilitatea, adic
probabilitatea ca sistemul s funcioneze continuu o anumit perioad de timp. Un
sistem cu baze de date distribuite va continua s funcioneze n condiiile n care o
component (de exemplu un nod) nceteaz s funcioneze.
4. Independena (transparena) localizrii. Conform acestui obiectiv,
utilizatorii nu trebuie s cunoasc locul din sistem unde datele sunt stocate, ei putnd s
interacioneze cu baza de date ca i cum datele ar fi stocate local (din punct de vedere
logic), pe nodul la care sunt conectai. Transparena localizrii este necesar pentru a
simplifica accesul la baza de date distribuit. n plus, ea permite migrarea datelor de pe
un nod pe altul fr a afecta programele sau alte activiti de gestionare a datelor.
Migrarea datelor este necesar atunci cnd se dorete mutarea datelor pe alte noduri din
reea n vederea mbuntirii performanelor sistemului distribuit.

119

n mediul ORACLE, mecanismul de transparen a localizrii poate fi creat prin


intermediul view-urilor, sinonimelor i a procedurilor.
5. Independena (transparena) fragmentrii. Un sistem care suport
fragmentarea datelor trebuie s asigure i transparena fragmentrii. Aceasta presupune
ca utilizatorul s se comporte, cel puin din punct de vedere logic ca i cum datele nu ar
fi fragmentate. Ea asigur, ca i transparena localizrii, simplificarea sarcinilor
dezvoltatorilor de programe. n plus, transparena fragmentrii trebuie s permit
oricnd recombinarea datelor fr s afecteze programele existente. Recombinarea
datelor este necesar atunci cnd se schimb cerinele de performan ale sistemului.
Transparena fragmentrii este realizat prin intermediul view-urilor puse la
dispoziia utilizatorilor n care fragmentele de date sunt recombinate prin operaii
succesive de jonciune i reuniune. Sistemul va determina care fragmente trebuie
accesate fizic pentru a rspunde la o anumit cerin a utilizatorilor. Problema
actualizrii datelor fragmentate i distribuite fizic pe noduri diferite este similar cu cea
a actualizrii view-urilor bazate pe operaii de jonciune i reuniune.
6. Independena (transparena) replicrii. Replicarea datelor presupune
existena uneia sau mai multor copii ale aceluiai fragment de date pe diferite noduri.
Faptul c datele sunt replicate trebuie s fie transparent utilizatorului, acesta trebuind s
se comporte, cel puin din punct de vedere logic, ca i cum datele nu ar fi replicate. Ca
i n cazul obiectivelor anterioare, transparena replicrii simplific sarcinile
programatorilor i ale altor utilizatori care acceseaz baza de date. Ei nu trebuie s se
preocupe de faptul c actualizarea datelor de pe un nod trebuie propagat i pe celelalte
noduri unde sunt replicate datele actualizate, sau care nod trebuie accesat pentru a
rezolva cerina unui utilizator. n plus, transparena replicrii trebuie s permit
tergerea sau crearea unor noi replici ale datelor, ca rspuns la schimbarea cerinelor
sistemului, fr s afecteze programele existente.
7. Prelucrarea distribuit a interogrilor. Acest obiectiv vizeaz n primul
rnd optimizarea interogrilor distribuite. Transparena localizrii permite utilizatorilor
s creeze i s execute o interogare ca i cum toate datele sunt stocate local. n fapt,
pentru a genera rezultatul interogrii, SGBD-ul va accesa date stocate pe diferite noduri.
Pentru rezolvarea interogrii pot exista mai multe variante de mutare a datelor de pe un
nod pe altul n vederea limitrii traficului n reea i diminurii timpului de rspuns. De
aceea, n cazul interogrilor distribuite trebuie acordat o atenie deosebit optimizrii
acestora. Conform acestui obiectiv, o interogare distribuit nu trebuie executat ca o
interogare local aplicat asupra tuturor datelor dup ce acestea au fost transferate de pe
diferite noduri pe nodul de la care a fost iniiat interogarea; ea va fi descompus n mai
multe pri, fiecare fiind executat pe diferite noduri, n funcie de planul de execuie
stabilit de mecanismul de optimizare. ORACLE ofer dou metode de optimizare a
interogrilor, aplicate n special n cazul interogrilor distribuite: metoda bazat pe
costuri i metoda bazat pe reguli.
8. Gestiunea tranzaciilor distribuite. O tranzacie distribuit apare atunci
cnd ea implic actualizarea datelor pe mai multe noduri. Mecanismul tranzacional
privete dou aspecte majore ale actualizrii datelor: controlul refacerii datelor i
controlul accesului concurenial. Ambele aspecte trebuie tratate n mod special n cazul
tranzaciilor distribuite. Astfel, garantarea atomicitii unei tranzacii distribuite implic
garantarea faptului c toate nodurile implicate vor realiza aceeai aciune validarea sau
anularea tranzaciei. Aceeai problem apare i n legtur cu durabilitatea, n sensul c
dac unul din nodurile implicate a validat sau anulat tranzacia respectiv, atunci

120

sistemul trebuie s garanteze c toate celelalte noduri vor realiza aceeai aciune, chiar
dac funcionarea unora dintre noduri este ntrerupt temporar. Acest garanii sunt
oferite de sistem prin intermediul mecanismului Two Phase-Commit (2 PC). Asupra
mecanismului tranzacional i a protocolului 2 PC vom reveni n acest capitol.
Controlul accesului concurent se bazeaz tot pe mecanismul de blocare, ca i n
cazul sistemelor nedistribuite.
9. Independena hardware. Acest obiectiv se refer la posibilitatea integrrii
datelor stocate pe calculatoare de diferite tipuri, toate acionnd ca parteneri n cadrul
sistemului. Astfel, ar fi de dorit ca prin intermediul aceluiai SGBD s poat fi
gestionate date localizate pe calculatoare de tipuri diferite.
10. Independena sistemului de operare. Acest obiectiv deriv din cel anterior
i presupune ca un SGBD s funcioneze nu doar pe platforme hardware diferite, ci i
platforme software diferite. SGBD-ul va putea s gestioneze date stocate pe calculatoare
diferite care ruleaz sisteme de operare diferite, precum UNIX, WINDOWS NT, MVS
etc.
11. Independena reelei. Dac un sistem poate funciona pe platforme
hardware i software diferite, atunci este de dorit ca el s poat funciona i n condiiile
existenei n sistem a mai multor reele de comunicaie de diferite tipuri.
12. Independena sistemului de gestiune a bazei de date. Acest obiectiv se
refer la sistemele eterogene n care datele din baza de date distribuit sunt gestionate de
SGBD-uri diferite.
CTEVA ELEMENTE PRIVIND PROIECTAREA
BAZELOR DE DATE DISTRIBUITE
Proiectarea bazelor de date distribuite difer n bun msur de proiectarea
bazelor de date centralizate. n fapt, proiectarea bazelor de date distribuite ridic pe
lng majoritatea problemelor care privesc proiectarea bazelor de date centralizate i
unele probleme specifice, deoarece la distribuirea datelor trebuie luate n considerare
unele restricii de proiectare, precum:
asigurarea transparenei localizrii datelor pentru aplicaii i utilizatori;
oferirea de performane pentru interogrile distribuite, n condiiile unor
lrgimi de band date;
gestiunea complet a tranzaciilor, asigurarea consistenei actualizrilor
distribuite i a controlului accesului concurent distribuit;
identificarea administratorilor bazei de date distribuite n cadrul organizaiei.
Aadar, proiectarea unei baze de date distribuite presupune parcurgerea urmtoarelor
etape de lucru:
proiectarea schemei globale,
proiectarea schemei fizice,
proiectarea fragmentrii i
proiectarea alocrii.
Activitile din primele dou etape de lucru sunt asemntoare cu cele care privesc
proiectarea bazelor de date centralizate. Specific bazelor de date distribuite sunt
problemele legate de fragmentarea i alocarea datelor. n general, distribuirea datelor se
poate realiza sub trei forme:
Actualizri distribuite. Aceast form de distribuire permite partiionarea
total a datelor pe mai multe noduri, iar actualizrile care implic mai multe noduri vor

121

fi distribuite nodurilor corespunztoare pentru comiterea tranzaciilor. Astfel se asigur


o transparena deplin a localizrii datelor pentru aplicaiile care actualizeaz datele. n
acest caz vom avea o baz de date nereplicat (se mai spune baz de date distribuit
pur), n sistemul distribuit existnd o singur copie a bazei de date.
Interogarea distribuit. Aceast form de distribuire reprezint o soluie mai
puin tehnic i asigur aplicaiilor transparena localizrii datelor, dar numai pentru
interogarea lor. n acest caz, serverul de baze de date asigur doar pstrarea
informaiilor relative la localizarea datelor, jonciunea datelor distribuite i oferirea
datelor solicitate n forma dorit.
Replicarea datelor. Aceast form reprezint cea mai simpl soluie de
distribuire a datelor, motiv pentru care este i cea mai des utilizat. Replicarea datelor
este procesul prin care serverul de baze de date este responsabil pentru copierea
automat a datelor selectate pe mai multe server (dup cum este proiectat sistemul
informaional), n cazul n care se modific starea acelor date (sunt actualizate). Aceast
operaiune de copiere se realizeaz,de regul, n mod asincron, iar n cazul apariiei unor
probleme, serverul va ncerca din nou pn cnd va reui s finalizeze operaia de
replicare. Toate acestea sunt transparente pentru aplicaie, replicarea fiind n fapt o
funcie server-server. n acest caz vom avea o baz de date replicat, ea putnd fi
replicat total sau parial.
FRAGMENTAREA DATELOR
n general, fragmentarea presupune partiionarea schemei globale a bazei de date
n mai multe pri disjuncte care, evident, se vor numi fragmente. Foarte important este
alegerea unitii de distribuire. n acest sens, cea mai simpl cale de distribuire const
n stocarea unei tabele sau a unui grup de tabele pe noduri diferite, caz n care unitatea
de distribuire va fi tabela. n general, aceast soluie nu reprezint cea mai bun cale de
distribuire a datelor, deoarece majoritatea aplicaiilor acceseaz doar un subset al
nregistrrilor sau doar anumite coloane ale unei tabele. De aceea, de regul operaiunea
de fragmentare se refer la partiionarea tabelelor. Fragmentarea unei tabelele presupune
partiionarea ei ntr-un numr minim de fragmente disjuncte, astfel nct fiecare
fragment s conin suficiente informaii care s permit reconstruirea tabelei iniiale
(ca la normalizarea relaiei universale).
Distribuirea fragmentelor unei tabele prezint unele avantaje. De exemplu,
timpul de execuie a unei interogri asupra unei tabele de mari dimensiuni poate fi redus
prin distribuirea execuiei acelei interogri pe mai multe noduri, respectiv nodurile pe
care se afl fragmentele tabelei. n acest mod se introduce i paralelismul n execuia
interogrii.
Fragmentarea poate fi realizat n dou moduri de baz: orizontal i vertical.
Prin combinarea celor dou metode se obine o a treia: fragmentarea mixt.
Fragmentarea orizontal presupune partiionarea unei tabele n mai multe
fragmente, iar fiecare fragment va conine un subset al nregistrrilor. Orice nregistrare
se va regsi cel puin ntr-un fragment i numai ntr-un singur fragment. Prin urmare un
fragment va fi rezultatul unei operaiuni de selecie utiliznd un predicat (o condiie pe
care trebuie s o satisfac toate nregistrrile din fragment). Reconstrucia tabelei poate
fi realizat prin operaia de reuniune aplicat asupra tuturor fragmentelor.
Fragmentarea vertical a unei tabele presupune divizarea ei n mai multe
fragmente, n care fiecare fragment va conine un subset al coloanelor din tabela

122

respectiv. Fiecare coloan trebuie inclus n cel puin un fragment, iar fiecare fragment
va include coloanele care formeaz cheia candidat (toate fragmentele trebuie s aib
aceeai cheie candidat). Prin intermediul acestor coloane se va reconstrui tabela
original, prin operaia de jonciune natural aplicat asupra tuturor fragmentelor.
Deoarece coloanele care formeaz cheia candidat trebuie s fie incluse n toate
fragmentele, fragmentarea vertical implic replicarea. Prin fragmentarea vertical se
poate realiza replicarea i a altor coloane dect cele care formeaz cheia candidat.
n modelul de aplicaie prezentat la laborator nu ntlnim fragmentarea vertical.
Ea apare atunci cnd aplicaiile de pe fiecare nod acceseaz doar un subset al coloanelor
unei tabele. Acest gen de aplicaii este ntlnit atunci cnd sistemul informatic (deci i
activitatea din firm) este distribuit (descentralizat) pe criterii departamentale i nu
regionale.
Fragmentarea mixt presupune aplicarea succesiv a fragmentrii orizontale i
verticale, respectiv aplicarea fragmentrii verticale la un fragment orizontal sau
aplicarea fragmentrii orizontale la un fragment vertical. Aceste operaii pot fi repetate
recursiv genernd arbori de fragmentare de mare complexitate. Ordinea n care sunt
aplicate fragmentrile orizontale i verticale este foarte important, deoarece poate
afecta rezultatul final al fragmentrii.
n practic, fragmentarea vertical este mai rar aplicat, deoarece distribuirea pe criterii
funcionale a sistemului informatic este mai rar ntlnit. Cel mai adesea, distribuirea
sistemului informatic se face pe criterii geografice.
STRATEGIA ALOCRII DATELOR
Selectarea strategiei de alocare a datelor depinde de arhitectura sistemului i de
facilitile oferite de SGBD-ul ales. Exist patru abordri de baz:
centralizat, n care toate datele vor fi localizate pe un singur nod. n acest caz
apare problema spaiului de stocare limitat i cea a disponibilitii reduse a datelor. n
schimb, implementarea acestei soluii este cea mai simpl.
partiionat, care presupune partiionarea bazei de date n fragmente disjuncte
i alocarea fiecrui fragment pe un singur nod. Alegerea acestei soluii poate fi
justificat atunci cnd dimensiunea bazei de date depete spaiul de stocare a unui
singur nod sau performanele de accesare a datelor sunt mbuntite prin creterea
numrului de accese locale.
replicarea complet a datelor, care presupune existena unei copii complete a
bazei de date pe toate nodurile din sistem. Replicarea complet a datelor este rar
ntlnit n practic, ea fiind aplicat doar atunci cnd sigurana datelor este critic,
dimensiunea bazei de date este redus, iar ineficiena operaiilor de actualizare poate fi
tolerat.
replicarea parial a datelor, presupune partiionarea bazei de date n
fragmente critice i necritice. Fragmentele necritice vor fi stocate pe un singur server, n
timp ce fragmentele critice vor fi replicate pe mai multe noduri, n funcie de cerinele
de disponibilitate i performan ale sistemului.
n general, prin alocarea datelor se urmrete minimizarea costului total, calculat
prin nsumarea costurilor de comunicaie (aferente transmiterii mesajelor i datelor), a
costurilor de prelucrare (aferente utilizrii procesorului i operaiilor de intrare/ieire) i
a costurilor cu stocarea datelor. De asemenea, se ia n considerare timpul de rspuns al

123

unei tranzacii, calculat prin nsumarea urmtoarelor elemente: timpul de transmisie prin
reea, timpul de accesare local a datelor i timpul de prelucrare local a datelor.
La proiectarea alocrii datelor trebuie respectat o regul general: datele trebuie
s fie plasate ct mai aproape de locul n care ele vor fi utilizate. n acest scop, pot fi
utilizate mai multe metode, n funcie de rezultatul dorit, respectiv alocarea
neredundant sau alocarea redundant a datelor. n practic mai cunoscute sunt trei
metode de alocare:
Metoda de determinare a alocrii neredundante, numit i metoda celei mai
bune alegeri (the nonredundant best fit method), const n evaluarea fiecrei alocri
posibile i alegerea unui singur nod, respectiv a nodului cu beneficiile cele mai mari.
Beneficiile vor fi calculate prin luarea n considerare a tuturor operaiilor de interogare
i actualizare.
Metoda alocrii redundante pe toate nodurile profitabile, presupune
selectarea tuturor nodurilor pentru care alocarea unui fragment va face ca beneficiile s
fie mai mari dect costurile aferente. Aceast metod va selecta toate nodurile
profitabile. Beneficiul aferent unei copii suplimentare pentru fragmentul F la nodul N
este calculat ca diferen ntre timpul de rspuns corespunztor interogrii la distan i
cel corespunztor interogrii locale (adic pe nodul respectiv ar exista o copie a
fragmentului de date), nmulit cu frecvena interogrilor asupra fragmentului F iniiate
la nodul N. Costul aferent unei copii suplimentare a fragmentului F pe nodul N este
calculat prin nsumarea timpului total de rspuns corespunztor tuturor operaiunilor de
actualizare local a datelor din fragmentul F iniiate de pe nodul N i timpul total de
rspuns corespunztor tuturor operaiunilor de actualizare la distan a datelor din
fragmentu F de pe nodul N iniiate de pe alte noduri.
Metoda alocrii progresive a fragmentelor, presupune construirea iniial a
unei soluii neredundante i apoi introducerea progresiv a copiilor replicate ncepnd
cu nodul cel mai profitabil. Mai nti fiecare fragment va fi alocat pe un nod pe baza
valorii maxime a profitului (diferena dintre beneficii i costuri). Urmtoarea decizie de
alocare va lua n considerare nodul la care a fost plasat n prima etap un fragment i
valoarea maxim a profitului pentru nodurile rmase. Aceast procedur va continua
succesiv, realizndu-se o singur alocare n fiecare etap, pn cnd toate nodurile
rmase sunt neprofitabile.
innd cont de consideraiile anterioare, proiectarea unei baze de date distribuite
trebuie ia n considerare rspunsurile la ntrebrile prezentate n tabelul de mai jos.
Alocarea redundant (replicarea) a datelor este justificat doar n condiiile prezentate n
ultima coloan din tabel.
Distribuirea
pur

ntrebare
Care sunt cerinele privind:
nivelul de consisten a datelor?
costurile cu stocarea datelor?
accesarea partajat a datelor?
frecvena de actualizare a tabelelor?
viteza de realizare a operaiilor de
actualizare?
Care este importana timpilor planificai de
execuie a tranzaciilor?

124

Replicare

Mare
Mediu-mare
Globale
Deseori
Mare
Mare

Redus mediu
Mic
Locale
Rareori
Mic
Mic

Bune-excelente

Slabe

Cum sunt facilitile pentru accesul concurent i


blocare oferite de SGBD-ul ales?
Pot fi evitate accesele partajate?

Nu

Da

GESTIUNEA TRANZACIILOR
N BAZELE DE DATE DISTRIBUITE
Gestiunea tranzaciilor se refer la problematica meninerii bazei de date ntr-o
stare consistent n condiiile n care accesul la date se face n regim concurent sau n
condiiile apariiei unor defecte. Prin urmare, mecanismul tranzacional trebuie s
rezolve urmtoarele dou probleme:
Controlul concurenei, adic sincronizarea acceselor astfel nct s fie
meninut integritatea bazei de date. De regul, aceast problem este rezolvat prin
intermediul mecanismelor de blocare.
Rezistena la defecte, care se refer la tehnicile prin care se asigur att
tolerana sistemului fa de apariia unor defecte, ct i capacitatea de recuperare a
acestuia, adic posibilitatea de revenire la o stare consistent n urma apariiei unui
defect care a determinat rmnerea bazei de date ntr-o stare de inconsisten.
O baz de date este ntr-o stare consistent dac datele respect toate restriciile
de integritate definite asupra lor (restricii privind cheia, restricii de integritate
referenial, restricii specifice domeniului problemei). Trecerea bazei de date dintr-o
stare n alta are loc atunci cnd se realizeaz operaiuni de actualizare a datelor. Evident,
orice actualizare asupra bazei de date trebuie s o lase ntr-o stare consistent.
DEFINIIA I PROPRIETILE CONCEPTULUI DE TRANZACIE
Prin noiunea de tranzacie se nelege un ansamblu de operaiuni care sunt
executate mpreun asupra unei baze de date n vederea realizrii unei activiti. O
tranzacie reprezint o unitate logic de prelucrare care asigur consistena bazei de
date. Consistena bazei de date este asigurat independent de faptul c tranzacia a fost
executat n mod concurent cu alte tranzacii sau c au aprut disfuncionaliti n
timpul execuiei tranzaciei.
O tranzacie simpl poate fi adugarea unui nou client n baza de date, iar o
tranzacie mai complex poate fi ncasarea unei facturi (presupune adugarea unei
nregistrri n tabela de ncasri, actualizarea contului prin care s-a efectuat ncasarea,
precum i actualizarea soldului clientului respectiv). Pe timpul execuiei unei tranzacii,
baza de date poate fi ntr-o stare inconsistent, ns ea trebuie s fie ntr-o stare
consistent att nainte, ct i dup execuia tranzaciei.
Pentru ca o tranzacie s garanteze consistena unei baze de date, ea trebuie s
satisfac 4 condiii, referite n literatura de specialitate prin termenul proprieti ACID:
Atomicitate se refer la faptul c o tranzacie este considerat o unitate
elementar de prelucrare, adic execuia unei tranzacii se face pe principiul totul sau
nimic. O tranzacie este validat numai dac toate operaiunile care o compun sunt
validate, altfel datele trebuie restaurate n starea n care se aflau nainte de nceperea
tranzaciei (tranzacie nu poate fi parial executat). Rezolvarea tranzaciilor a cror
execuie a fost ntrerupt de diverse cauze revine SGBD-ului. Dup eliminarea cauzei,
n funcie de stadiul de execuie n care a rmas tranzacia, SGBD-ul va proceda n unul
dintre urmtoarele dou moduri: fie va executa i restul operaiunilor care compun

125

tranzacia respectiv, terminnd tranzacia cu succes, fie va anula efectele operaiunilor


executate pn n momentul ntreruperii, anulnd astfel tranzacia.
Consistena se refer la corectitudinea sa din punctul de vedere al
consistenei datelor. Trecerea de la o stare la alta a datelor, n urma unei tranzacii, nu
trebuie s afecteze consistena bazei de date. Tranzacia este corect dac transform
baza de date dintr-o stare consistent ntr-o alt stare consistent. Sarcina asigurrii
acestei proprieti revine proiectanilor i programatorilor.
Izolarea presupune ca orice tranzacie s aib acces doar la strile
consistente ale bazei de date. Altfel spus, efectele unei tranzacii nu sunt percepute de o
alt tranzacie dect dup ce prima tranzacie a fost comis. De regul, toate datele
solicitate de o tranzacie sunt blocate pn n momentul finalizrii ei astfel nct o alt
tranzacie s nu le poat modifica.
Durabilitatea se refer la faptul c odat ce tranzacia este validat, efectele
sale devin permanente i vor fi nscrise n baza de date. Efectele unei tranzacii validate
vor fi nscrise n baza de date chiar dac dup momentul validrii apare un defect care
mpiedic nscrierea normal a rezultatelor tranzaciei n baza de date; aceast activitate
va fi realizat imediat dup nlturarea defeciunii ivite. Sarcina asigurrii acestei
proprieti revine SGBD-ului, iar mecanismul prin care este realizat are la baz
conceptul de jurnal. Jurnalul este un fiier secvenial n care sunt nregistrate toate
operaiunile efectuate de tranzaciile din sistem. El evideniaz toate operaiunile
executate deja, inclusiv starea dinainte i cea de dup a datelor. Dac tranzacia este
complet executat, atunci modificrile efectuate asupra datelor vor fi permanentizate i
se spune c tranzacia a fost comis; altfel, sistemul va utiliza jurnalul pentru a restaura
baza de date n starea iniial (cea dinaintea nceperii tranzaciei) i se spune c
tranzacia a fost anulat.
TRANZACII DISTRIBUITE
O tranzacie este distribuit dac ea acceseaz date gestionate pe mai multe
noduri, adic ea acceseaz date din mai multe tabele aflate pe servere diferite. De
exemplu, tranzacia Adugare vnzare nou este o tranzacie distribuit dac ea
presupune inserarea n tabelele cu facturi i linii facturi, aflate pe acelai nod,
actualizarea tabelelor cu clieni i stocuri, aflate pe alte noduri. Prin urmare, aceast
tranzacie va fi descompus n trei subtranzacii, transmise celor trei noduri implicate:
cele dou operaiuni de insert, efectuate pe primul nod; operaiunea de actualizare a
soldului clientului, efectuat pe nodul pe care este rezident tabela cu clieni;
operaiunea de actualizare a stocului produselor de pe factur, efectuat de cel de-al
treilea nod, respectiv nodul pe care este stocat tabela cu stocuri.
n exemplul nostru, fiecare din cele trei noduri va fi responsabil cu respectarea
local a proprietilor ACID. n plus, mecanismul tranzacional n cazul tranzaciilor
distribuite trebuie s garanteze:
Atomicitatea global, adic toate nodurile implicate n execuia unei tranzacii
distribuite s finalizeze n acelai mod partea lor de tranzacie (validarea sau anularea).
Nu este permis ca unele noduri s valideze partea lor de tranzacie, iar altele s anuleze.
Evitarea blocrilor globale, n care mai multe noduri s fie blocate simultan.
Serializarea global, care trebuie aplicat tuturor tranzaciilor, distribuite i
locale.

126

Ne vom opri n continuare asupra primei probleme. Atomicitatea global a unei


tranzacii este asigurat de SGBD-uri prin intermediul mecanismului Two Phase
Commit (2 PC), pe care-l vom discuta n cele ce urmeaz.
n cazul unei tranzacii distribuite, Oracle definete un model ierarhic al
tranzaciei care descrie relaiile dintre nodurile implicate. Acest model este denumit
arborele sesiunii. n cadrul acestuia, fiecare nod va juca unul sau mai multe din
urmtoarele roluri:
Client. Un nod va juca rolul de client atunci cnd face referire la date situate la
un alt nod al bazei de date (acesta se va numi serverul de date).
Server de date. Reprezint nodul care stocheaz datele referite de un client.
Coordonator local. Un nod care face referire la datele stocate pe alte noduri
pentru a-i executa partea sa de tranzacie este numit coordonator local. El este
rspunztor de coordonarea tranzaciei ntre nodurile pe care el le refer n mod direct.
n acest sens, el va comunica cu aceste noduri pentru primirea i retransmiterea
informaiilor de stare privind tranzacia, transmiterea interogrilor ctre acestea etc.
Coordonator global. Este reprezentat de nodul la care este conectat aplicaia
care iniiaz tranzacia distribuit, i care reprezint astfel locul de origine al tranzaciei
distribuite. El devine printele sau rdcina arborelui sesiunii i realizeaz urmtoarele
operaiuni: formeaz arborele sesiunii prin transmiterea comenzilor SQL care formeaz
o tranzacie distribuit ctre nodurile corespunztoare (acestea vor fi nodurile referite
direct); instruiete toate nodurile referite direct s pregteasc tranzacia; instruiete
nodul de comitere s iniieze comiterea global; instruiete toate nodurile s anuleze
tranzacia dac s-a ntmplat ceva.
Nodul de comitere. Este nodul care va iniia comiterea sau anularea tranzaciei
n funcie de ceea ce-i va comunica coordonatorul global. Nodul de comitere trebuie s
fie nodul pe care se gsesc datele considerate a fi cele mai critice pentru c el va fi
primul care va face comiterea local. Mai mult, din momentul n care nodul de comitere
a realizat comiterea prii de tranzacie care i-a revenit (ceea ce nseamn implicit c
toate celelalte noduri sunt pregtite s comit tranzacia) se consider c tranzacia
distribuit este comis, chiar dac unele din nodurile implicate nu au reuit s fac
comiterea. La aceste noduri tranzacia va fi n starea n dubiu (in-doubt) pn cnd va
dispare problema ivit. Oricum, tranzacia nu va mai putea fi anulat (rollback-uit).
Nodul de comitere va fi determinat de ctre sistem pe baza punctajului atribuit fiecrui
server de baze de date. Atribuirea punctajului de comitere se poate face prin parametrul
COMMIT_POINT_STRENGTH. Dac mai multe noduri vor avea acelai punctaj,
atunci Oracle va desemna unul dintre acestea drept nod de comitere. Oricum, trebuie
reinut c nodul de comitere desemnat n cazul unei tranzacii distribuite poate fi diferit
de coordonatorul global al acelei tranzacii.
MECANISMUL DE COMITERE N DOU FAZE
(TWO-PHASE COMMIT)
n cazul tranzaciilor distribuite trebuie asigurat atomicitatea global adic, fie
toate nodurile implicate valideaz partea lor de tranzacie, fie toate nodurile anuleaz
partea lor din tranzacie. Chiar dac un nod a efectuat toate operaiunile care compun
partea sa din tranzacie i este pregtit pentru validare, el nu poate lua aceast decizie
unilateral, deoarece este posibil ca alte noduri s nu poat realiza partea lor de
tranzacie. Prin urmare, nodurile pregtite pentru validare trebuie s atepte pn cnd

127

toate nodurile implicate vor fi pregtite i apoi vor iniia validarea. Respectarea acestei
proprieti este garantat de nodul coordonator prin iniierea mecanismului 2 PC.
Protocolul (sau mecanismul) de comitere n dou faze presupune un schimb de mesaje
ntre nodul coordonator i celelalte noduri implicate n efectuarea tranzaciei.
n cazul ORACLE, mecanismul 2 PC presupune parcurgerea a urmtoarelor 3
faze:
Faza de pregtire, n care coordonatorul global instruiete toate nodurile
implicate s pregteasc comiterea tranzaciei, cu excepia nodului de comitere. Fiecare
nod n parte va verifica dac poate s comit tranzacia i va transmite rspunsul su
coordonatorului global, rmnnd n ateptarea indicaiilor acestuia dac s comit sau
s anuleze tranzacia n funcie de rspunsurile celorlalte noduri. Oricum, din momentul
n care nodul a transmis rspunsul el va garanta fie comiterea tranzaciei fie anularea
acesteia. Din momentul n care toate nodurile sunt pregtite i pn la comiterea sau
anularea modificrilor, se spune c tranzacia este n dubiu.
Faza de validare realizeaz comiterea propriu-zis a tranzaciei distribuite
(dac toate nodurile au rspuns pozitiv). n aceast faz, coordonatorul global i spune
nodului de comitere s efectueze comiterea, iar dup ce primete confirmarea de la
acesta va transmite cte un mesaj tuturor nodurilor implicate prin care s le cear s
comit tranzacia, dup care va atepta confirmrile din partea acestora. n momentul n
care au fost primite toate confirmrile, faza de comitere este complet, iar consistena
bazei de date globale este asigurat.
Faza de uitare, n care nodul de comitere i coordonatorul global terg toate
informaiile privind starea tranzaciei ce tocmai a fost comis.
Dac se ntmpl ca una din cele trei faze s nu poat fi realizat complet, atunci
tranzacia respectiv va fi n starea n dubiu. O tranzacie distribuit poate ajunge n
aceast stare datorit apariiei unor defecte ale unuia din serverele de baze de date
implicate, ntreruperii conexiunii de reea ntre dou sau mai multe servere Oracle sau
unor erori care privesc logica aplicaiei utilizatorului (de exemplu apariia unor erori
care nu sunt gestionate prin program, iar aplicaia se blocheaz).
Mecanismul 2 PC din Oracle este complet transparent utilizatorilor. Totui,
intimitile acestui mecanism trebuie cunoscute pentru a putea interveni n cunotin de
cauz dac se ivesc unele probleme generate de ntreruperea mecanismului.
ACCESAREA BAZELOR DE DATE
N APLICAIILE CLIENT/SERVER
BD relaionale au devenit astzi un standard de facto pentru stocarea datelor, iar
SQL (Structured Query Language) a devenit, mai nti, standard de facto ca limbaj de
accesare a datelor din BD, i standard de jure astzi. Normele limbajului SQL au fost
stabilite prima dat de ANSI (1986) i mbuntite de ISO (1989). n 1993 a aprut o
nou versiune, numit SQL/2. n aceste condiii, toi productorii de SGBDR-uri trebuie
s se conformeze acestui standard, ceea ce ofer posibilitatea accesrii unor date
gestionate de SGBD-uri diferite. Mai mult, unii autori afirm c dezvoltarea limbajului
SQL ca standard se datoreaz creterii popularitii tehnologiei client/server. n afara
acestor standarde mai exist alte dialecte, cum sunt cele ale SQL Server (Microsoft),
Oracle, Ingres.
Accesarea bazelor de date, ca una din principalele componente ale platformei
client, reprezint o interfa prin care clientul poate transmite cererile de accesare a BD,

128

cel mai adesea sub forma instruciunilor SQL, ele sunt analizate i verificate, i se
primesc rspunsurile de la server. n general, interogrile SQL sunt generate de client i
executate de server, iar unele interogri sunt stocate pe server ca proceduri stocate ce
pot fi apelate de aplicaiile client i executate tot pe server.
Aceast component este format din dou pri, aa cum rezult din figura
urmtoare.
Format specific
protocolului

Cereri SQL

SQL
API

Aplicaie
nregistrri

Buffere de
date

Operaiuni
specifice
protocolului i
reelei

Pachete de date
pregtite pentru
transmisie

Pachete

primite

Limbajul SQL nu este un limbaj de programare propriu-zis ci este specializat n


extragerea, organizarea i actualizarea datelor din bazele de date relaionale. Majoritatea
limbajelor de programare permit apelarea instruciunilor SQL din interiorul lor n cadrul
programelor. Pentru nglobarea instruciunilor SQL n programele scrise n diferite
limbaje exist mai multe modaliti de apelare a SQL API:
SQL nglobat. Programatorul poate include instruciuni SQL direct n program,
la fel de normal ca i celelalte instruciuni. Programul va fi analizat de un precompilator
furnizat de productorul SGBDR-ului. Acest precompilator are rolul de a analiza
programul surs ce urmeaz a fi preluat de compilator, n vederea nlocuirii unor
instruciuni cu echivalentul lor n limbajul de ansamblare sau comenzi de apelare a
funciilor.
naintea compilrii programului, acesta este prelucrat de un precompilator SQL
care caut instruciunile SQL nglobate n codul programului surs. Precompilatorul
creeaz dou fiiere de ieire: primul este un program translatat, n care toate
instruciunile SQL nglobate au fost nlocuite cu apeluri la rutinele bibliotecii SGBDului corespunztor; al doilea este un modul de interogare a bazei de date DBRM
(Database Request Module), care conine instruciunile SQL terse din programul surs
original. Programul surs translatat este prelucrat de compilator, n timp ce modul
DBRM este prelucrat de un program special, numit bind, pentru crearea unui plan al
aplicaiei (reprezint o versiune executabil a instruciunilor SQL nglobate n
program). La execuia programului, planul aplicaiei este utilizat pentru accesul la baza
de date.
Aceast abordare ofer anumite avantaje: caracterul simplu i direct al interfeei
program, portabilitatea relativ a programului obinut (majoritatea precompilatoarelor
utilizeaz o sintax standard iar cei mai muli furnizori de SGBDR-uri respect cel puin
nivelul 1 al standardului ANSI SQL). Principalul dezavantaj este legat de faptul c cele
mai multe precompilatoare sunt disponibile doar pentru cteva compilatoare (COBOL,
FORTRAN, C).
Interfa de apelare a funciilor (Function call interface). Aceast abordare
implic accesarea direct a bibliotecii de funcii puse la dispoziie de furnizor. Prin
intermediul funciilor apelate se pot transmite instruciunile SQL i primi rezultatele
prin apelarea unor funcii adiionale care au rolul de a pune datele n variabilele de
program specificate (ex. de astfel de funcii: SQLCONNECT, SQLCOMMAND,
SQLEXEC, SQLGETDATA).

129

Avantajele acestei abordri constau n posibilitatea utilizrii n orice limbaj de


programare sau instrument de dezvoltare care poate iniia apelul de funcie i
posibilitatea oferit programatorului de a scrie programe de acces la baza de date mai
eficient prin apelarea direct la funciile din bibliotec. Dezavantajele sunt legate de
complexitatea programului rezultat (se lucreaz la nivel jos, spre deosebire de primul
caz) i de faptul c majoritatea bibliotecilor de funcii furnizate sunt specifice unui
anumit SGBD.
Utilizarea unei interfee pentru nivelul de apelare - CLI (Call Level Interface).
Unii autori consider c numai aceast tehnic este referit prin SQL API. Aceast
modalitate permite introducerea de rutine speciale de interfa cu limbajul SQL pentru
accesarea bazei de date, n locul nglobrii de instruciuni SQL n program.
n ultimul timp se constat preocupri pe linia dezvoltrii de standarde asociate
cu interfaa de apelare a funciilor, ceea ce a dus la ntocmirea specificaiilor standard
privind CLI. Pe baza acestor specificaii, Microsoft a dezvoltat standardul API numit
Open Database Connectivity (ODBC) i oferit liber distribuitorilor de SGBDR-uri i
altor furnizori preocupai de oferirea pe pia de versiuni specifice de baze de date ale
acestei interfee comune de apelare. Un alt API este Integrated Database Aplication
Programming Interface (IDAPI) i a fost propus de un grup de distribuitori de soft, n
frunte cu firmele Borland, IBM i Novell.
Ambele API-uri mpart mecanismul de accesare a bazei de date n dou module
independente din punct de vedere funcional: primul furnizeaz aplicaiilor o interfa
CLI standardizat, n timp ce cel de-al doilea preia i convertete o cerere CLI ntr-o
comand SQL specific SGBD-ului respectiv.
De fapt, exist dou tipuri distincte de interfee CLI: o interfa API specific
unui SGBDR (i care este unic), iar cealalt este o interfa API standard, suportat de
mai muli productori. Interfaa API specific productorului este, de obicei, calea cea
mai eficient de accesare a BD ns, presupune limitarea la utilizarea SGBDR-ului
respectiv.
Instrumentele de dezvoltare de nivel nalt proprietare protejeaz programatorii
de complexitatea interfarii directe cu diferite biblioteci de funcii specifice diferitelor
SGBD-uri, prin oferirea unor mecanisme generice de accesare a bazei de date. Mai
mult, asemenea mecanisme permit oferirea unei viziuni unice asupra datelor, chiar dac
ele se gsesc pe servere diferite i gestionate de SGBD-uri diferite, lucru aproape
imposibil de realizat cu ajutorul instrumentelor de nivel jos.
OPTIMIZAREA INTEROGRILOR DISTRIBUITE
Optimizarea interogrilor privete reducerea timpului de rspuns i a costurilor
de comunicaie implicate de execuia interogrilor asupra bazei de date. De regul,
proiectanii de aplicaii au un control limitat asupra optimizrii interogrilor de vreme ce
majoritatea SGBD-urilor dispun de o component care rezolv aceast problem n mod
automat. De exemplu, Oracle dispune de dou metode de optimizare automat:
optimizarea bazat pe costuri (CBO Cost-Based Optimizer) i optimizarea
bazat pe reguli (RBO - Rule-Based Optimizer). Aplicnd una din aceste metode,
Oracle va rescrie interogrile distribuite ale utilizatorilor utiliznd collocated inline
views, n funcie de datele statistice care privesc tabelele referite i calculele de
optimizare efectuate. Procesul de rescriere a interogrilor este transparent pentru
utilizator.

130

Totui, analiza interogrilor asupra bazei de date trebuie luat n considerare n


cadrul a dou activiti specifice dezvoltrii aplicaiilor: proiectarea bazei de date i
optimizarea manual a interogrilor n anumite situaii.
Analiza interogrilor este important att n cazul proiectrii bazelor de date
distribuite ct i a celor centralizate. n cazul bazelor de date centralizate proiectantul
poate modifica schema iniial prin denormalizarea tabelelor. n cazul bazelor de date
distribuite, analiza interogrilor poate sprijini proiectantul n luarea unor decizii privind:
plasarea tabelelor pe diferite noduri,
fragmentarea tabelelor n diferite moduri i plasarea lor pe diferite noduri,
replicarea tabelelor (sau a fragmentelor) i plasarea acestor copii pe diferite
noduri.
Oricum ar fi, alternativa de proiectare a bazei de date aleas nu va putea s
asigure execuia eficient a tuturor operaiunilor de interogare; execuia unor interogri
va fi ncetinit, iar a altora va fi optimizat. De aceea, proiectantul va trebui s ia n
considerare frecvena fiecrei operaiuni de interogare, precum i importana timpului
de rspuns pentru acea operaiune. n plus, trebuie analizate i tranzaciile bazei de date,
mai ales n cazul n care se opteaz pentru replicarea datelor.
Optimizarea manual a interogrilor este necesar n cazul sistemelor cu baze de
date eterogene sau datorit limitelor SGBD-ului n optimizarea lor automat. n primul
caz, fiecare SGBD dispune de o interfa SQL proprie, motiv pentru care orice
interogare a unor date situate pe noduri diferite trebuie descompus, manual, ntr-o
secven de comenzi SQL, fiecare comand fiind executat pe un anumit nod. Pentru cel
de-al doilea caz, vom da de exemplu ORACLE: n documentaia sa se specific faptul
c optimizarea automat bazat pe costuri este inadecvat n cazul interogrilor
distribuite care conin agregri, subinterogri sau comenzi SQL complexe. n astfel de
situaii, utilizatorul poate s rescrie el interogrile, utiliznd collocated inline views
i/sau sugestiile (hints) (vezi la laborator).
n continuare ne vom opri asupra optimizrii interogrilor n condiiile unei
scheme date a bazei de date, n situaia existenei unei scheme globale, fr a lua n
considerare sistemele cu baze de date multiple, limitndu-ne doar la optimizarea global
a interogrilor distribuite, fr a lua n considerare optimizarea local.
Procesul de optimizare a interogrilor distribuite este i el distribuit, ceea ce
implic un schimb de informaii ntre servere. Cu alte cuvinte, procesul de optimizare
presupune doi pai: optimizarea global, moment n care are loc schimbul de
informaii ntre servere n vederea transformrii interogrii distribuite ntr-o succesiune
de operaii ce vor fi executate pe noduri diferite, i optimizarea local, care privete
optimizarea prii din interogare executat de fiecare nod. De exemplu, n ORACLE
acest proces de optimizare este realizat astfel: serverul Oracle va descompune o
interogare distribuit n mai multe interogri la distan care vor fi transmise nodurilor
corespunztoare. Fiecare nod va executa partea sa de interogare (realiznd n prealabil
optimizarea) i va transmite rezultatul napoi nodului de pe care a fost iniiat
interogarea distribuit. Dup primirea rezultatelor de la toate nodurile solicitate, acesta
va efectua prelucrrile necesare i va transmite rezultatul final utilizatorului.
Vom pune n eviden procesul de optimizare global prin intermediul unui
exemplu. La evaluarea alternativelor vom lua n considerare doar costurile de
comunicaie, att timp ct ele sunt reprezentative att din punctul de vedere al costurilor
implicate, ct i al timpului de rspuns (costurile de comunicaie sunt mult mai mari n
cazul interogrilor distribuite dect costurile asociate operaiunilor de accesare a

131

fiierelor - operaiuni I/O). Costurile asociate operaiunilor I/O sunt luate n considerare
n faza optimizrii locale, ele fiind considerate mult mai mari dect cele care privesc
operaiunile de prelucrare.
Interogrile care presupun jonciunea unor tabele situate pe noduri diferite sunt
costisitoare, deoarece ele implic un volum mare de date care trebuie transmise prin
reea n vederea determinrii tuplurilor rezultate. S presupunem c o aplicaie de pe
nodul A lanseaz o interogare care implic jonciunea a dou tabele situate pe nodurile
B, respectiv C. Cele dou tabele sunt Clienti i Facturi.
Pentru a compara planurile alternative de execuie a interogrii, se consider
urmtoarele date de ipotez:
lungimea tuplurilor din cele dou tabele este de 25, respectiv 70 bytes, iar
lungimea cmpului CODCL este 8 bytes (prin CODCL se va realiza jonciunea);
firma are relaii comerciale cu 52.000 de clieni, din care anual sunt emise
facturi pentru 11.000 clieni, cu o medie anual de 5 facturi pe client. Prin urmare,
tabela Facturi va conine 55.000 de tupluri;
rata de transfer a datelor n reea este de 50.000 bytes/sec.
Prin jonciunea celor dou tabele vor rezulta 55.000 de tupluri, iar lungimea unui tuplu
va fi de 87 bytes (25+70-8).
Optimizatorul va lua n considerare urmtoarele alternative de execuie:
transmiterea ambelor tabele pe nodul A i realizarea jonciunii pe acel nod;
transmiterea celei mai mici tabele pe nodul pe care se afl cealalt tabel (n
cazul nostru, transmiterea tabelei Clienti pe nodul C). Pentru claritate, se va lua n calcul
i varianta transmiterii tabelei Facturi pe nodul B.
Rezultatele obinute n urma calculelor sunt prezentate n tabelul urmtor. Se
observ c cea mai avantajoas este prima alternativ de execuie.
Timpul aprox. de
Alternative de execuie
Volumul de date transferat
rspuns
1. Transmiterea ambelor tabele 52.000*25 + 55.000*70 =
103 sec.
pe nodul A
5.150.000 bytes
2. Transmiterea tabelei Clienti 52.000*25 + 55.000*87 =
121,7 sec.
pe nodul C i a rezultatului
6.085.000 bytes
jonciunii ctre nodul A
3. Transmiterea tabelei Facuri 55.000*70 + 55.000*87 =
172,7 sec.
pe nodul B i a rezultatului
8.635.000 bytes
jonciunii ctre nodul A
O alt soluie care ar putea fi luat n considerare presupune transmiterea de la
nodul B ctre nodul C numai a acelor tupluri din tabela Client care vor participa efectiv
n realizarea jonciunii. Apoi, la nodul C se va realiza jonciunea dintre aceste tupluri i
toate tuplurile din tabela Facturi. Aceast abordare mai este denumit planificarea
semijonciunilor, i implic parcurgerea a trei pai:
La nodul C se va obine o tabel P, rezultat din aplicarea proieciei asupra
tabelei Facturi, care va conine doar coloanele implicate n operaiunea de jonciune (n
cazul nostru doar coloana CODCL). Aceast tabel va fi transmis nodului A (ea va
conine doar codurile clienilor pentru care exist cel puin o factur).
La nodul B se va efectua echijonciunea dintre tabelele Client i P, obinnduse tabela Q. Aceast tabel va conine toate tuplurile din Client care particip la

132

jonciune i numai coloanele necesare n obinerea rezultatului final. Ea va fi transmis


nodului C.
La nodul C se va efectua echijonciunea dintre tabelele Q i Facturi. Rezultatul
obinut va fi transmis nodului A.
Tabela Q, obinut ca rezultat n cel de-al doilea pas, este denumit
semijonciunea tabelei Client cu Facturi. La o prim vedere, s-ar prea c aceast soluie
este mai costisitoare de vreme ce o jonciune a fost nlocuit prin dou jonciuni. ns,
prin primul pas al acestei abordri se poate obine o important reducere a costurilor de
comunicaie, deoarece proiecia tabelei Facturi poate s fie mult mai mic dect tabela
Facturi, evitndu-se astfel transmisia unui volum mare de date prin legtura de
comunicaie.
Pornind de la aceleai date ca n cazul primelor trei variante, n urma calculelor
rezult un volum al datelor de transmis de 5.148.000 bytes (11.000*8 + 11.000*25 +
55.000*87), respectiv un timp de acces de 102,9 sec. (5.148.000/50.000). Comparativ
cu variantele anterioare, aceasta ar fi cea mai avantajoas n cazul problemei noastre.

133

Capitolul 7
LIMBAJUL JAVA
Proiectul Java a nceput n anul 1990 la firma Sun. Scopul su a fost crearea
unui limbaj asemntor cu C++, dar mai simplu, portabil i mai flexibil, pentru
aparatele electrocasnice de larg consum. Caracteristicile noului limbaj sunt:
simplitate: s-a renunat la o parte dintre operatori, la pointeri i la
motenirea multipl. A fost introdus un colector automat de reziduuri, care rezolv dealocarea memoriei fr intervenia programatorului.
portabilitate: compilatorul genereaz instruciuni ale unei maini virtuale.
Execuia aplicaiilor nseamn interpretarea acestor instruciuni. Singura parte care
trebuie deci portat este interpretorul i o parte din bibliotecile standard care depind de
sistem.
necesit resurse sczute: interpretorul i bibliotecile standard pentru legarea
dinamic necesit aproximativ 300 kB.
este orientat obiect: se pot crea clase i instane ale lor, se pot ncapsula
informaiile, se pot moteni variabilele i metodele de la o clas la alta. Nu exist
motenire multipl, dar s-a introdus conceptul de interfa, care permite definirea
comportamentului clasei.
este distribuit: posed biblioteci pentru lucrul n reea, oferind TCP/IP,
URL i ncrcarea resurselor la distan; aplicaiile se pot rula n reele eterogene.
este robust: legarea se face la execuie i informaiile legate de compilare
sunt disponibile pn la execuie. Indicii tablourilor sunt verificai permanent la
execuie.
este sigur: se verific operaiile disponibile fiecrui obiect; are sistem de
protecie a obiectelor prin declararea lor private/protected/public. n plus, se poate
configura mediul de execuie astfel nct s protejeze calculatorul gazd al aplicaiei.
este concurent: permite definirea firelor de execuie i sincronizarea lor,
independent sau conectat la sistemul de operare.
este dinamic: legarea claselor se face la interpretare i regsirea cmpurilor
se face prin calificarea numelui clasei cu numele cmpului. Astfel, dac se modific
superclasa, nu este necesar recompilarea subclaselor.
Java a ajuns cunoscut n 1995, cnd Netscape l-a liceniat pentru a putea fi
folosit n browser-ul su, Navigator. Applet-urile Java (programe cu interfa grafic,
nglobate ntr-un navigator de web) au revoluionat paginile web. Odat cu lansarea
versiunii Java 2, limbajul a fost extins i pentru a putea fi folosit n dezvoltarea general
de programe.
Pachetul JDK (Java Development Kit) al firmei Sun este disponibil gratuit la
adresa http://java.sun.com. Acesta ofer un set de instrumente n linie de comand
folosite pentru scrierea, compilarea i testarea programelor Java. Au aprut medii
vizuale pentru programare n Java: Borland JavaBuilder, Microsoft Visual Java, Xinox
Software Jcreator Pro, etc.
JAVA LIMBAJ TOTAL ORIENTAT SPRE OBIECTE
Programarea orientat spre obiecte nseamn organizarea programelor dup
modelul n care sunt organizate obiectele n lumea real. Un program este alctuit din

134

elemente denumite clase. O clas poate genera prin instaiere un obiect. Obiectele
lucreaz mpreun n program, fiecare n felul su, pentru rezolvarea problemei propuse.
Clasa se definete prin cele dou aspecte ale sale: stare (cum este) i comportament
(ce face). Clasele se pot lega, deoarece se pot crea ierarhii de clase, bazate pe relaia
de motenire: o clas poate fi sub-clasa alteia, motenindu-i att starea ct i
comportamentul. n plus, sub-clasa poate avea noi caracteristici i noi comportamente.
De exemplu, dac definim clasa Student ca sub-clas a clasei Persoana, atunci orice
instan a clasei Student are toate caracteristicile i comportamentele unei instane a
clasei Persoana (de exemplu, are o adres de domiciliu) i altele n plus (de exemplu,
are un permis de intrare la biblioteca facultii).
Spre deosebire de alte limbaje de programare, Java nu accept motenirea
multipl. Toate clasele deriv dintr-o clas generic Object iar motenirea simpl
creeaz un arbore al tuturor claselor. Aceast caracteristic a limbajului l face uor de
folosit, dar restricioneaz proiectarea aplicaiilor. Cazul cel mai des ntlnit este al
diferitelor ramuri din arborele de clase care au comportamente asemntoare.
Rezolvarea acestei situaii este folosirea interfeelor.
O interfa este o colecie de metode care descriu un comportament
suplimentar pentru o clas, fa de ceea ce motenete de la super-clasa sa. O clas
poate implementa mai multe interfee, ceea ce rezolv problema motenirii multiple.
Spre deosebire de clas, interfaa conine numai definiii abstracte de metode, deci
acestea trebuie scrise de programator, pentru a rezolva problema specific la care
lucreaz.
Clasele care au elemente comune de concepie se pot grupa n pachete. De
exemplu Java API este setul standard de pachete Java. Din acest set, cele mai folosite
pachete sunt: java.lang, java.io, java.util, java.awt, java.swing, java.applet.
Caracteristicile obiectelor i claselor sunt urmtoarele: identitatea (fiecare obiect
este unic), ncapsularea (se pot ascunde o parte din date i metode), agregarea (se pot
ncorpora obiecte n obiecte), clasificarea (un obiect este instana unei clase), motenirea
(o clas conine toate variabilele i metodele super-clasei) i polimorfismul (metodele
din super-clas se pot rescrie pentru a implementa alt comportament).
TIP DE DAT, CLAS, METOD, VARIABIL
Toate programele scrise n Java definesc unul sau mai multe tipuri de date,
folosind construcia uneia sau mai multor clase. Metoda este o construcie de program
care ofer mecanismul de realizare a unei aciuni. De exemplu, n unul dintre cele mai
simple programe Java:
public class Simulare {
public static void main(String[] args) {
System.out.println("Aceasta este o carte de programare
distribuita.");
}
}
autorul definete tipul de dat Simulare, prin construirea clasei asociate. Aceast clas
ncepe prin cuvntul cheie class, urmat de numele definit de programator (Simulare)

i de specificarea a ceea ce trebuie s fie acest tip de dat, folosind o pereche de


acolade. n acest exemplu, exist doar metoda special main,care are o singur aciune
de realizat: afieaz pe monitor textul

135

Aceasta este o carte de programare distibuita.


Metoda main este declarat totdeauna de tipul void (adic nu furnizeaz valori
la terminare), iar modificatorii si sunt public static (adic accesul este neprotejat i
metoda aparine clasei Simulare). Parametrul formal al acestei metode este args, un
tablou de iruri de caractere. Afiarea se realizeaz prin invocarea metodei println
din pachetul System (java.lang.System).

Principiul programrii orientate-obiect impune programe care manevreaz clase


i obiecte, ce comunic prin mesaje. O clas conine date i metode. Obiectul este
instana unei clase. Prin operaia de instaniere se creeaz o concretizare a clasei obiectul - care se poate folosi n program. Clasa este un model abstract, un ablon al
tuturor caracteristicilor pe care trebuie s le ndeplineasc un obiect al su. Aceste
caracteristici se refer la atribute i comportament. Atributele unei clase se refer la
starea obiectului care face parte din clasa respectiv. Atributele se definesc prin
variabile, ca n exemplul urmtor:
static class Actiuni implements ActionListener {
static int S;
static int T;
}
n acest exemplu, variabilele S i T aparin clasei Actiuni,
obiect-instaniere a acestei clase le posed. Dac se definete obiectul act:
static Actiuni act=new Actiuni();
atunci se pot folosi n program variabilele S i T ale obiectului act:
scara=170.0/(act.S+act.T); //scara desenului

deci fiecare

Referitor la comportamentul unei clase, acesta este specificat prin metodele sale,
care arat ce pot face obiectele sale n raport cu ele nsele sau fa de alte obiecte.
APLICAIE, APPLET, SERVLET
Acest prim program, prezentat anterior, este o aplicaie. Dup editarea sa, se
salveaz cu identificatorul Simulare.java (n cazul general, numele_clasei.java).
Etapa urmtoare const n compilarea aplicaiei i generarea fiierului Simulare.class,
dac nu exist erori. Interpretarea nseamn execuia aplicaiei, prin realizarea efectiv a
instruciunilor specificate - pe baza datelor specificate - ncepnd cu metoda main.
O aplicaie poate conine mai multe clase, obligatoriu una dintre ele definind
metoda main. n acest caz, aplicaia se salveaz cu numele clasei care conine metoda
main.
Una dintre caracteristicile limbajului Java este alocarea dinamic, drept metod
de management a memoriei: la interpretare, se aloc pe stiv spaiul necesar obiectelor.
Atunci cnd obiectele de pe stiv nu mai sunt referite, spaiul lor este eliberat n mod
automat de ctre colectorul de reziduuri (garbage collector).
Un applet Java este iniiat, afiat i distrus de o aplicaie-gazd: un browser
Internet. Applet-ul nu definete metoda main, se compileaz ca i aplicaia, dar la
interpretare rolul principal revine browser-ului web, care afieaz rezultatul n fereastra
sa. Unele applet-uri redau o imagine ntr-o anumit zon a ferestrei browser-ului, altele
genereaz interfee grafice, permind iniierea unor operaii cu ajutorul butoanelor de
comand.
Applet-urile lucreaz n condiii de restricie a securitii, pentru protejarea
calculatorului gazd de aciuni nedorite (preluare de date, distrugerea sistemului);
applet-urile nu au acces la fiierele sau sistemul de intrare/ieire al gazdei. Dac se

136

utilizeaz un browser care nu suport Java, utilizatorii nu vd nimic n zona unde ar


trebui s se execute applet-ul. Dac proiectanii paginii doresc, pot oferi un text sau o
imagine ca alternativ de afiare n zona respectiv.
Applet-ul este cea mai popular utilizare a limbajului Java, la momentul actual.
Un alt lucru remarcabil referitor la Java este orientarea sa ctre Internet.
Comunicarea n reea este capacitatea unei aplicaii de a stabili conexiuni cu un alt
sistem de calcul prin intermediul reelei. Pachetul java.net ofer metode multiplatform pentru principalele operaii de reea: conectarea, transferul de fiiere, crearea
de socluri UNIX. O aplicaie care se execut pe un server se numete servlet.
FUNDAMENTELE LIMBAJULUI JAVA
Comentarii. Tot ce urmeaz, pe un rnd, dup caracterele // este interpretat
drept comentariu. Dac se dorete un comentariu pe mai multe rnduri, tot ce se afl
ntre /* i */ este ignorat la compilare.
Tipuri de date i iniializri. Data se definete prin specificarea clasei din care
face parte i numele su. n Java exist (ca i n alte limbaje de programare) tipuri
primitive de date i tipuri definite de programator (derivate). Spre deosebire ns de alte
limbaje de programare, Java este total orientat spre obiecte i singurul tip derivat de date
este clasa (chiar i tablourile sunt obiecte).
int varf1, varf2;
double scara;
JLabel label, eti, intro;
Variabilele varf1, varf2 i scara sunt
precizie. Variabilele label, eti, intro sunt

primitive: ntregi, respectiv real n dubl


instane ale clasei JLabel.
Dac se dorete iniializarea unor variabile chiar n momentul definirii lor, acest
lucru se poate realiza astfel:
int x=4, y=200, z, t;

Variabilele z i t sunt iniializate implicit cu 0.


Tipurile de date primitive (ncorporate n limbaj) sunt urmtoarele:
boolean, alctuit din true i false.
Operatorii suportai de variabilele de acest tip sunt: atribuirea (a=b),
comparaiile (a<b, a<=b, a>b, a>=b, a==b, a!=b), negaia (!a), i
logic (a&b, a&&b), sau logic (a|b, a||b), sau exclusiv (a^b).
- numerice, cu variantele: ntregi, reale i char. Operaiile suportate de
variabilele numerice sunt atribuirea, comparaiile, operaiile aritmetice i
conversia. Conversia poate fi implicit (cnd se realizeaz ctre un tip mai
cuprinztor de date i nu se pierde informaie) sau explicit (cnd se
realizeaz ctre un tip mai restrns de date i se poate solda cu pierdere de
precizie). Tipurile ntregi de date sunt: byte (reprezentat pe un octet),
short (reprezentat pe 2 octei), int (reprezentat pe 4 octei) i long
(reprezentat pe 8 octei). Tipurile reale sunt: float (reprezentat n virgul
mobil pe 4 octei) i double (reprezentat pe 8 octei). Tipul char se
reprezint intern pe 2 octei, prin numere ntregi pozitive.
Dou variabile primitive diferite pot avea valori egale. De exemplu:
int x=2, y=2;

Egalitatea lor se poate testa folosind o instruciune if:


if (x==y) System.out.prinln("Sunt egale");

137

else System.out.println("Nu sunt egale");

n urma execuiei acestei secvene, pe monitor apare mesajul


Sunt egale

Dou variabile derivate sunt egale numai dac sunt identice (reprezint acelai
obiect). De exemplu, dou iruri de aceeai lungime i cu aceleai caractere nu sunt
egale dac al doilea, n ordinea crerii, s-a creat cu operatorul new. La testarea cu
operatorul == se primete false. Exist ns metoda equals care testeaz egalitatea
valorilor unui obiect (a componentelor de stare). Dac toate sunt egale, metoda
returneaz true. La testarea celor dou iruri descrise mai sus se primete deci true.
n memorie, variabila de tip primitiv are alocat un anumit numr de octei, n
care este reprezentat. Variabila de tip derivat este o referin ctre zona de memorie
unde se afl obiectul ce reprezint valoarea sa. De exemplu, variabilele label, eti i
intro definite mai sus ca obiecte JLabel conin adresele de memorie unde se afl cele
trei obiecte.
Cuvntul cheie null refer un obiect null i poate fi folosit pentru orice
referin a unui obiect.
Mediul de execuie Java (Java RunTime Environment) conine i un nucleu de
clase predefinite, pentru comunicarea ntre programele Java i sistemul de operare al
gazdei. Clasele uzuale se afl n pachetul java.lang. Referirea la aceste clase se face
prin specificare numelui lor (de exemplu String). Referirea la o clas din alte pachete
se face prin specificarea complet a irului de pachete din care face parte clasa
respectiv (de exemplu java.awt.Color).
Expresii. Expresia este o combinaie legal de simboluri, ce reprezint o
valoare. Tipul expresiei este tipul valorii acesteia. Iat exemple de expresii:
a=b*a (dac a=2 i b=3, atunci a devine 6)
x=y=z=5 (x i y i z devin 5)
y=x%y (dac x=17 i y=4, atunci y devine 1, adic restul mpririi
lui 17 la 4)
m=t++ (dac t este 14, atunci m devine 14 i apoi t crete cu 1 i
devine 15)
x/=y (dac x=20 i t=5, atunci x devine 20/5, adic 4)
b=(a<35)?a:30 (dac a=15 atunci b devine 15, deoarece a<35 este
adevrat, i b primete valoarea lui a; dac a=41, atunci b devine 30,
deoarece a<35 este fals).
Instruciuni. O instruciune indic una sau mai multe aciuni ale calculatorului.
Instruciunile simple sunt: declaraiile de variabile locale, instruciunile-expresie i
instruciunea vid. Exemple de instruciuni simple:
boolean ultima;
int x, nprobe=0;
S=T=0;
S++;
; //instructiunea vida

Instruciunile structurate sunt: blocul, instruciunile de test i instruciunile repetitive.


Blocul sau secvena const dintr-un grup de instruciuni cuprinse ntre dou
caractere acolad:
{int m=0;
if (a<b) m=2;
System.out.println(m);
}

138

Variabilele declarate n bloc sunt locale, adic ele exist de la momentul


declarrii pn la sfritul blocului.
Instruciunile de test sunt instruciunea if i instruciunea switch. Instruciunea
if are dou variante:
if (expresie logic) instruciune
if (expresie logic) instruciune1 else instruciune2
lucreaz astfel: dac expresie logic este adevrat, atunci

i ea
se execut
instruiunea care urmeaz. Pentru a doua variant, dac expresia logic este fals, atunci
se execut instruciune2. Dac sunt necesare mai multe prelucrri, atunci se
folosete secvena. Instruciunile cuprinse ntr-o instruciune if pot fi alte instruciuni
if (cazul instruciunilor imbricate). Exemplu:
if (n>0) {// test la numarul de extrageri n
if (n>20) n=20;
if (rez[i][14]==1) g.setColor(Color.red);
g.drawString(Integer.toString(rez[i][j]),5*i,45);
g.setColor(Color.black);
}
Instruciunea switch realizeaz o testare generalizat, nu numai cu dou
opiuni ca n cazul instruciunii if. Expresia testat poate fi numai de tip primitiv:
byte, char, short sau int, testul poate fi doar egalitatea, iar valorile testate pot fi
de asemenea numai de tip byte, char, short sau int:
switch (expresie) {
case val_1: secventa_1 [break;]
case val_2: secventa_2 [break;]

case val_n: secventa_n


[default: secventa]
}
Modul de lucru al instruciunii switch este urmtorul: expresie este
comparat pe rnd cu fiecare dintre valorile case; dac se gsete o potrivire, se

execut toate secvenele care urmeaz. Dac se dorete ieirea nainte de sfritul lui
switch, se folosete instruciunea break - aceasta ntrerupe execuia n punctul curent
i o reia dup prima acolad nchis. Dac exist default, secventa se execut dac
nu se gsete nici o potrivire. Exemplu:
switch (nota) {
case 5: ;
case 6: ;
case 7: System.out.println(Se putea mai bine); break;
case 8: ;
case 9: System.out.println(Bine);break;
case 10: System.out.println(Excelent);
default: System.out.println(Ai picat examenul);
}
Instruciunile repetitive sunt: instruciunea while (condiionat anterior),
instruciunea do-while (condiionat posterior) i instruciunea for (cu contor).
Instruciunea while are sintaxa:
while (condiie) instruciune
i execut instruciune ct timp condiie este ndeplinit. Exemplu:
while (y*y+x*x<=raza[2]*raza[2]) {
aleat2=Math.random();
y=min+(int) Math.floor(aleat2*(max-min));
}

139

Aceast instruciune while conine o secven alctuit din dou instruciuni de


atribuire. Prima dintre acestea genereaz o valoare de tip double, aleatoare, din
intervalul [0, 1) i o depune n variabila aleat2. A doua instruciune atribuie variabilei
y o valoare calculat pe baza valorii din aleat2. Metoda floor din clasa Math
returneaz partea ntreag a argumentului su, ca dat double, deci este necesar o
conversie explicit la tipul int. De fapt, expresia pentru y permite alegerea unei
valori ntregi aleatoare n intervalul [min, max).
Instruciunea do-while execut o instruciune ct timp condiie rmne
adevrat. Sintaxa instruciunii este:
do
instruciune while (condiie); Exemplu:
do {
x*=i;
i++;
} while (i<10);
Instruciunea for

se folosete atunci cnd o anumit instruciune se repet de


un numr specificat de ori; contorul este cel care controleaz instruciunea for.
Sintaxa acestei instruciuni este:
for (iniializare; condiie; trecere_pas) instruciune
unde iniializare nseamn una sau mai multe expresii separate

de virgul,
care se execut o singur dat, la nceput. Dac n aceast zon se declar variabile,
acestea sunt locale instruciunii for, deci i nceteaz existena dup ncheierea
execuiei sale. condiie este testul care se realizeaz pentru ncheierea execuiei. Dac
valoarea sa este false, execuia se oprete. Dac valoarea sa este true, atunci se
execut instruciune, urmat de trecere_pas.trecere_pas este alctuit din una
sau mai multe expresii, separate de virgul. Aceast etap asigur modificarea
contorului la fiecare iteraie. Exemplu:
for (int i=0;i<n;i++) {
n1=n2=n3=n4=n5=n6=0;
for (int j=0;j<aruncari;j++) {
aleat=Math.random(); }}

Principiile programrii structurate interzic folosirea etichetelor i a ntreruperii


structurilor repetitive. Limbajul Java nu este total structurat, deoarece permite ambele
aciuni. Eticheta este un identificator care precede o instruciune, dup modelul:
eticheta: instruciune

Forarea ieirii din instruciunile switch sau din cele repetitive se face cu
instruciunea break. n instruciuni repetitive, break produce prsirea instruciunii
curente. Astfel, dac exist instruciuni repetitive imbricate, un break n cea interioar
pred controlul celei exterioare. ntreruperea iteraiei curente i trecerea la urmtoarea
iteraie se face folosind instruciunea continue. Instruciunile break i continue se
pot eticheta, pentru a transfera controlul instruciunilor etichetate cu etichete identice.
Exemple:
while (index1<20) {
if (A[index2]==1) continue;
B[index2++]= (float) A[index];
}
afara: for (i=1;i<5;i++)
for (j=1;j<5;j++) {
System.out.println("i= "+i+" j= "+j);
if (i+j>4) break afara;
}

140

Limbajul Java conine o instruciune care realizeaz tratarea excepiilor. Atunci


cnd programatorul consider c se poate ajunge la o situaie ce conduce la euarea
aplicaiei, folosete instruciunea try-catch pentru a trata excepia respectiv i a
specifica modul de revenire n aplicaie. O excepie este un obiect (deci o instan a unei
clase), care conine informaii despre situaia special respectiv. Dac ntr-o secven
din try se produce un eveniment special (deci o excepie), obiectul se capteaz i se
trateaz ntr-o secven catch:
try { // protectie la valoare neintreaga
n=Integer.parseInt(text);
S=0;
for (int i=0;i<n;i++) {
}
iug.label.setText(text1+" numarul intreg "+n);
iug.eti.setText("Cazuri favorabile: "+S);
iug.gr.repaint();
}
catch(Exception e1) {
iug.gr.repaint();
iug.eti.setText("Cazuri favorabile: 0
");
iug.label.setText(" nu este un numar intreg!");
}

n exemplu, dac utilizatorul introduce o valoare care nu este ntreag, atunci


programul avertizeaz prin afiarea mesajului
nu este un numar intreg!

iruri. irurile de caractere sunt obiecte ale clasei String. Definirea i manevra
lor se realizeaz folosind metodele acestei clase:
String prenume = "Adela";
System.out.println("Hello! My name is "+prenume);
int x = prenume.compareTo(cod);

n acest exemplu, se definete un ir prenume, cu care apoi se afieaz mesajul


Hello! My name is Adela i apoi se compar irul memorat n variabila prenume cu
irul din variabila cod. Variabila x este negativ dac irul din prenume precede
lexicografic irul din cod, pozitiv dac irul din cod precede pe cel din prenume i 0
dac cele dou iruri sunt identice.
Tablouri. Un tablou este o colecie indexat de variabile de acelai tip. Nefiind
date primitive, tablourile sunt deci obiecte. Ca orice obiect, tabloul este instan a unei
clase. Variabilele care au tablouri ca valori sunt deci referine ctre zona de memorie
unde este stocat tabloul respectiv. Tablourile cu un indice se declar astfel:
int a[];
String tab[];

int[] a;
String[] tab;

sau
sau

Crearea unui tablou se poate face prin specificarea elementelor sale sau prin
apelarea operatorului new:
int[] b={1, 2, 3, 4, 5};
String[] tab = new String[20];
n primul caz, b este un tablou cu 5 elemente de tip int, primul element b[0]
are valoarea 1, al doilea element b[1] este 2, etc. (indicii tablourilor ncep de la 0). n
cel de-al doilea caz, tab este un tablou de 20 de iruri de caractere, toate elementele
sale fiind iruri vide. Aceasta deoarece operatorul new iniializeaz toate poziiile
tablourilor cu 0 pentru date numerice, cu false pentru tipul boolean, cu iruri vide
pentru String i cu null pentru obiecte. Dup crearea unui tablou, lungimea sa poate

fi referit prin variabila asociat lui:


int x=b.length; //x devine 5

141

Tablourile multidimensionale sunt tablouri de tablouri: un tablou cu n


dimensiuni este un tablou de obiecte, fiecare dintre acestea este un tablou cu n-1
dimensiuni. Exemplu:
private static double adjMat[][], d[][];
adjMat = new double [MAX_VERTS][MAX_VERTS];
d = new double [MAX_VERTS][MAX_VERTS];
for (int i=0;i<n;i++)
d[i][n] = Math.sqrt(((v[i].x-v[n].x) *(v[i].x-v[n].x) +
(v[i].y-v[n].y) * (v[i].y-v[n].y)));
Elementele din din matricea d din acest exemplu primesc valorile

din

(v(i).x v(n).x) 2 (v(i).y v(n).y) 2 , pentru 1

n.

ELEMENTE GRAFICE N JAVA


Pentru realizarea elementelor de grafic, platforma Java ofer pachetele de clase
java.awt (Abstract Windowing Toolkit), care conine elemente grafice din toate
platformele (toate sistemele de operare) i pachetul javax.swing, care folosete stilul
sistemului propriu de operare. n aplicaii se pot folosi simultan clase din ambele
pachete.
O interfa grafic este un obiect grafic structurat, alctuit din diverse
componente. O component este un obiect grafic afiabil pe ecran i care poate
interaciona cu utilizatorul. Aceste componente pot fi atomice (etichete, butoane, liste,
meniuri, cmpuri de text) sau containere (care conin alte componente, cum ar fi:
panouri, casete de dialog). Aranjarea componentelor ntr-un container se face folosind
un gestionar de poziionare, care este tot un obiect Java, dar este invizibil n interfaa
grafic.
Clasa BorderLayout din pachetul java.awt determin 5 regiuni ale
containerului (NORTH, SOUTH, WEST, EAST, CENTER), n care se pot aranja
diverse componente. Mai exist i alte posibiliti: clasa FlowLayout aranjeaz
componentele una sub alta, clasa GridLayout le aliniaz ntr-o gril iar clasa
BoxLayout le aeaz pe o singur direcie orizontal sau vertical.
Culorile folosite ntr-o interfa grafic sunt obiecte ale clasei Color din acelai
pachet java.awt. Culorile uzuale se pot specifica prin numele lor (Color.blue), dar se
poate edita orice culoare prin specificarea a patru atribute, valori ntregi cuprinse ntre 0
i 255: componenta rou, componenta verde, componenta albastru i transparena.
Pentru componente, o valoare de 255 nseamn culoarea respectiv la maxim; iar 255
pentru transparen nseamn opacitate.
Componentele grafice sunt caracterizate de aspect (cum arat pe ecran), stare
(valorile cmpurilor lor) i comportament (cum reacioneaz la aciunile utilizatorilor,
la invocarea de metode).
Dup crearea containerului, acesta devine vizibil prin invocarea metodei
setVisible(true). Scrierea n interfeele grafice necesit metode speciale, fiind
asimilat cu desenarea. Pentru scrierea irurilor de caractere se folosete metoda
drawString, cu trei argumente: irul care trebuie scris, coordonata pe orizontal
(abscisa) i coordonata pe vertical (ordonata) fa de colul din stnga-sus al panoului
curent de desenare. Unitatea de msur a sistemului de coordonate este pixelul, deci
coordonatele trebuie s fie ntregi. Cu metodele corespunztoare, se pot desena
dreptunghiuri, arce de cerc, segmente, linii poligonale, elipse i alte imagini.

142

Toate comenzile de desenare sunt metode ale clasei Graphics. Locul uzual unde
se invoc comenzile de desenare este metoda paint, deoarece aceast metod este
special din urmtorul punct de vedere: se apeleaz automat atunci cnd containerul
curent trebuie redesenat, deoarece a fost acoperit de o alt fereastr. Programatorul
poate cere redesenarea n mod explicit apelnd metoda repaint.
EVENIMENTE
Un eveniment este orice modificare a strii dispozitivelor de intrare sau a
obiectelor de pe ecran. n Java programarea orientat spre evenimente folosete modelul
bazat pe delegare. Acest model clasific obiectele n:
- generatoare de evenimente (surse), care sunt componente ale interfeei
grafice;
- captatori de evenimente (asculttori), care capteaz i trateaz evenimentele;
- evenimente, care pot fi la rndul lor: de fereastr, de mouse, de tast.
Lucrul acestor categorii de obiecte se descrie astfel: sursa transmite
evenimentele generate numai asculttorilor nregistrai. Cele mai multe programe
folosesc ferestre Windows care reacioneaz la clasicele manevre de minimizare i
nchidere. Aceste evenimente sunt captate de metoda windowClosing, care face parte
dintr-o clas (AF) care extinde clasa WindowAdapter. Legarea asculttorului de
fereastr se realizeaz prin metoda addWindowListener. Cmpurile de text, care sunt
singurele care trebuie s genereze evenimente n aplicaiile noastre (despre manevrele
ferestrelor am discutat deja) sunt ascultate de clasa Actiuni, care implementeaz
interfaa ActionListener. Aceast interfa are o singur metod
actionPerformed care trebuie rescris astfel nct s descrie aciunile care trebuie
executate.
GENERAREA NUMERELOR ALEATOARE N JAVA
Limbajul Java are mai multe faciliti destinate generrii numerelor aleatoare.
Cea mai simpl facilitate este metoda random() din clasa Math, care se afl n
pachetul lang i care este identificat n mod standard astfel:
Java.lang.Math.random()
ntruct lang este biblioteca sistemului, nu este necesar s se foloseasc
cuvntul lang n denumirea unor elemente care aparin acestei biblioteci. Cu alte
cuvinte, apelul se mai sus poate fi scris: Math.random().
Cnd este apelat prima dat metoda random(), se creaz un generator de

numere aleatoare, folosind o valoare iniial bazat pe ora curent (obinut de la


orologiul calculatorului) i o formul liniar de congruene. Acest generator de numere
aleatoare este folosit apoi la apelurile ulterioare ale metodei random(), pentru a genera
un ir de numere aleatoare.
Un alt instrument oferit de limbajul Java pentru generarea numerelor aleatoare
este clasa Random din pachetul util i care este identificat n mod standard astfel:
Java.util.Random

Pentru a genera un ir de numere aleatoare, se poate folosi un obiect de clas Random.


Aceast clas folosete o valoare iniial reprezentat pe 48 de bii i o formul de
congruene liniare. Crearea unui obiect de clas Random se poate face cu oricare din
urmtorii doi constructori:

143

Random() acest constructor creeaz un nou generator de numere aleatoare,


folosind o valoare iniial obinut pe baza orei curente;
Random(long seed) acest constructor creeaz un nou generator de numere
aleatoare, folosind o valoare iniial seed, dat ca parametru de ctre programator.
Clasa Random mai conine urmtoarele metode care pot fi folosite la crearea
unor programe Java, pentru generarea numerelor aleatoare n diferite formate.
setSeed(long seed) comunic generatorului curent de numere aleatoare
valoarea iniial seed cu care s nceap generarea;
next(int nrbii) - genereaz urmtorul numr aleator pentru irul creat de
generatorul curent (n format int, pe un numr de bii precizat n parametrul nrbii, un
numr ntreg cuprins ntre 1 i 32);
nextBytes(byte[] octei) - genereaz un tablou de octei care conine
numere aleatoare, dimensiunea tabloului fiind precizat de ctre utilizator;
nextInt() genereaz urmtorul numr aleator de tip int (ntreg pe 32 de bii)
din secvena de valori cu repartiia uniform pe (0,1) a generatorului curent. Toate cele
232 valori posibile sunt generate cu aproximativ aceeai probabilitate;
nextInt(int n) genereaz urmtorul numr aleator de tip int (ntreg pe 32
de bii) din secvena de valori cu repartiia uniform pe [0, n) a generatorului curent.
Toate cele n valori posibile sunt generate cu aproximativ aceeai probabilitate;
nextLong() - genereaz urmtorul numr aleator de tip long (ntreg pe 64 de
bii) din secvena de valori cu repartiia uniform pe (0,1) a generatorului curent. Toate
cele 264 valori posibile sunt generate cu aproximativ aceeai probabilitate;
nextBoolean() - genereaz urmtoarea valoare aleatoare de tip bolean (true
sau false) cu repartiia uniform din secvena de valori a generatorului curent. Valorile
true i false sunt generate cu aproximativ aceeai probabilitate;
nextFloat() genereaz urmtorul numr aleator de tip float (real simpl
precizie) din secvena de valori cu repartiia uniform pe [0.0, 1.0) a generatorului
curent. Toate cele 224 valori posibile de forma m*2-24, unde m este un ntreg pozitiv mai
mic dect 224, sunt generate cu aproximativ aceeai probabilitate;
nextDouble() genereaz urmtorul numr aleator de tip double (real dubl
precizie) din secvena de valori cu repartiia uniform pe [0.0, 1.0) a generatorului
curent. Toate cele 253 valori posibile de forma m*2-53, unde m este un ntreg pozitiv mai
mic dect 253, sunt generate cu aproximativ aceeai probabilitate;
nextGaussian() genereaz urmtoarea valoare aleatoare de tip double (real
dubl precizie), pe baza unei repartiii normale (Gaussiene) standard cu media 0.0 i
abaterea standard 1.0, din secvena de valori a generatorului curent de numere aleatoare.

144

BIBLIOGRAFIE

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

Athanasiu I. - Java ca limbaj pentru programarea distribuit, Matrix


Rom, 2000
Baltac V. (coordonator) - Calculatoarele Electronice, Grafica Interactiv
i Prelucrarea Imaginilor, Editura Tehnic, Bucureti, 1986
Boian F.M. - Programarea distribuit n Internet, Ed. Albastr, ClujNapoca, 1999.
Bumbaru S. Curs practic de programare orientat pe obiecte n
limbajul Java, Universitatea Dunrea de Jos, Galai, 2000
Chiorean I. - Calcul paralel. Fundamente, Ed. Microinformatica, 1995
Cormen T., Leiserson C. Rivest R. Introducere n algoritmi, Computer
Libris Agora, 2000
Craus M. Algoritmi pentru prelucrri paralele, Editura Gh.Asachi,
Iai, 2002
Cristea V. - Algoritmi de prelucrare paralel, Ed. Matrix Rom, 2005
Croitoru C. - Introducere in proiectarea algoritmilor paraleli, Ed. Matrix
Rom, 2004
Dollinger R. - Baze de date i gestiunea tranzaciilor, Editura Albastr,
Cluj-Napoca, 1999
Gorunescu F., Prodan A. Modelare stochastic i simulare, Editura
Albastr, Cluj Napoca, 2001
Grigora D. Calculul Paralel: De la sisteme la programarea
aplicaiilor, Computer Libris Agora, 2000
Hockney R.W., Jesshope C.R. - Calculatoare paralele. Arhitectura,
programare, algoritmi, Ed. Tehnic, 1991
Jalobeanu M. - Internet, Informare i Instruire: Pai n lumea
comunicaiilor, Ed. Promedia Plus, Cluj-Napoca, 1995.
Jalobeanu M. - Acces n Internet -Pota electronic i transferul de
fiiere, Ed. Promedia Plus, Cluj-Napoca, 1996.
Jalobeanu M. - WWW n nvmnt: Instruirea prin Internet, Cum
cutm i Cum publicm pe Web, Ed. CCD, Cluj-Napoca, 2001.
Lungu, I., Bodea, C., Bdescu, G., Ioni, C. - Baze de date. Organizare,
proiectare i implementare, Editura ALL Educational, Bucureti, 1995
Petcu D. - Procesare paralel, Editura Eubeea, Colecia Informatica,
Timioara, 2001.
Petcu D., Negru V. - Procesare distribuit, Editura Universitii de Vest,
Seria Alef, Timioara, 2002
Petcu D. - Algoritmi paraleli, Tipografia Universitii Timioara, 1994
* * * ORACLE8i, Replication
* * * ORACLE8i, Replication Management API Reference
* * * ORACLE8i, Distributed Database Systems

145

RESURSE WEB
1. http://www-users.cs.umn.edu/~karypis/parbook/ - Introduction to Parallel
Computing, V. Kumar, A. Grama, A. Gupta, G. Karypis, Benjamin-Cummings
2. http://www.cs.vu.nl/~ast/books/ds1/ - Distributed systems. Principles and
paradigms, A. Tannenbaum
3. http://www-unix.mcs.anl.gov/dbpp/ - Design and building parallel programs:
Concepts and Tools for Parallel Software Engineering, Ian Foster
4. http://www.cs.usfca.edu/mpi/ - Parallel Programming with MPI, Peter
Pacheco, Morgan Kaufmann, 1996
5. http://www.cs.brown.edu/courses/cs176/ - Introduction to Distributed
Computing
6. http://relis.uvvg.ro/~jalobean/Cursuri/Paralel/algorithms.html
Internet
Parallel Computing Archive
7. http://www.dcd.uaic.ro/default.php?t=site&pgid=58 - Serviciul DNS la D.C.D.
i RoEduNet
8. http://www.cerfacs.fr/algor/ - The Parallel Algorithms Project
9. http://www.ornl.gov/sci/techresources/Human_Genome/home.shtml - Human
Genome Project Information

146

S-ar putea să vă placă și