Documente Academic
Documente Profesional
Documente Cultură
Curs Par Dis Completat
Curs Par Dis Completat
FACULTATEA DE TIINE
CERASELA CRIAN
ELENA NECHITA
MIHAI TALMACIU
ALGORITMI PARALELI
I DISTRIBUII
2008
CUPRINS
Introducere. NECESITATEA ALGORITMILOR PARALELI
I A CALCULULUI DISTRIBUIT
11
12
36
36
36
36
43
46
46
47
48
49
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
68
68
68
69
69
87
87
89
91
92
95
97
98
99
101
104
106
106
107
110
114
117
117
118
121
122
123
69
73
79
83
84
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
12
13
14
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.
16
17
(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
(IS)
Reea
(DM)
Date
P1
P2
Pn
Unitate
de control
o instruciune
19
(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
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
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.
23
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
25
26
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.
30
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.
34
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
38
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
41
(a)
(b)
(c)
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)
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.
/ 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
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.
47
48
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)
51
c'lij .
cij
l 0
a11 a11
a21 a21
b11 b12
b11 b12
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
k 1
operaie *:
Ck
a1k a1k
am k am k
bk1 bkp
bk1 bkp
b11 b1 p
bn1 bnp
am1 am n
b1 j bnj
b1 j bnj
53
54
55
((((x1 x2 ) x3 ) x4 ) x5 ).
(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
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
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
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
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
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
*
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}:
63
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
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
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
ai xi 1 bi
ci xi 1 d i
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
POLINOAME
Fie polinomul
n
ai x i
P( x)
i 0
aj
x0b j 1,
n 1,...,0, bn a n
a n 1, b j
aj
x 20 b j 2 ,
n 2,...,0
x02 (a2
x02 (... x02 (a2 n / 2 )...] x0 (a1 x02 (a3 x02 (... x02 (a2 (n 1) / 2 1...) .
69
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
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 .
ai 2 xi
bi 2 xi ci 2 xi
di 2 ,
70
ai k xi
cu
k 1
i 2k 1
k
i
2k
bi k xi
ci k xi
di k ,
2k
di k
xi
log 2 n pai ),
di k / bi k
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
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
71
de ecuaii ale sistemului este putere a lui doi minus unu. Fiecare x i poate fi calculat ca
xi
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
xk
Ax k
c,
72
x1k
x
k 1
2
A11 A12
A21 A22
x1k
x
k
2
c1
c2
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:
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
b11
x2 a22,n 1 xn 1 a22n xn
b22
xn 1 ann 11 xn
bnn11
annn 1 xn
bnn 1
xn
bnn 1 / annn 1 ,
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,
(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
b1( n )
b2( n )
x1
x2
xn
bn( n )
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
75
z1n
0
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.
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
METODE ITERATIVE
76
1
b
aii i
xi
aij x j , i 1, n.
j 1
j i
*
*
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.
78
W ) x ( p 1)
(X
[ Z (1
) X ]x ( p)
b.
f(x)=0,
79
mn.
a
b
80
xk
(2)
f ( xk )
f ( xk ) ,
xk
x0 dat.
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
a, b0
b, c0
a0 f (b0 ) b0 f (a0 )
f (b0 ) f (b0 )
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
82
Cazul II. Situatia in care ecuatia are mai multe radacini reale in intervalul [a,b],
ca in figura urmatoare.
83
f ( x)dx
b a
[ f (a)
2a
n 1
f (b) 2
f ( xk )]
k 1
f ( xk ) , cu ajutorul tehnicii
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 )]}
84
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
88
89
90
91
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
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
96
97
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
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
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
Client
rezultat
rezultat
Server
Server
solicitare
Client
Client
Client
Client
Client
Client
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
Programul
de
coordonare
Aplicaie
Programul
de
coordonare
105
Ateptarea
rspunsului
Rspuns
Solicitare
Serverul
Furnizarea
serviciului
106
Timp
Serviciul 1
Serviciul 2
Roluri
client - - - - - - - - - - - - - - - server
client - - - - - - - - - - - - - - - - - - server
107
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
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
Baza de date cu
paginile Web
Nivelul
gestiunea
datelor
109
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
111
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
Client
Appletul
Server
Web
Applet
114
115
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
118
119
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
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
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
126
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
129
130
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
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)
135
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
137
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
138
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;]
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
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(); }}
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
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);
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
141
din
n.
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
143
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.
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