Sunteți pe pagina 1din 146

UNIVERSITATEA DIN BACU FACULTATEA DE TIINE

ELENA NECHITA MIHAI TALMACIU

CERASELA CRIAN

ALGORITMI PARALELI I DISTRIBUII

Curs pentru studenii facultilor

INGINERIE, specializarea TEHNOLOGIA INFORMAIEI


i

TIINE, specializarea INFORMATIC

2008

It would appear that we have reached the limits of what it is possible to achieve with computer technology, although one should be careful with such statements, as they tend to sound pretty silly in 5 years.

(John von Neumann, 1949)

CUPRINS Introducere. NECESITATEA ALGORITMILOR PARALELI I A CALCULULUI DISTRIBUIT Capitolul 1. SISTEME DE CALCUL PARALEL Ce sunt calculatoarele paralele? Ce este programarea paralel? Analogie cu viaa cotidian Niveluri de paralelism Clasificarea sistemelor paralele Sisteme SISD Sisteme SIMD Sisteme MISD Sisteme MIMD Instruciuni condiionale in sistemele SIMD i MIMD Sisteme partiionabile Tipuri de MIMD i transputere Tehnica pipeline i procesoare pipeline Procesoare vectoriale Procesoare matriceale Sisteme cu memorie comun Sisteme cu memorie distribuit Clasificarea reelelor de interconectare Sisteme gazd Capitolul 2. PROGRAMARE PARALEL Procese concurente Multiprogramare i multiprocesare Comunicare i sincronizare Eficiena Organizarea datelor Tehnici de distribuire a datelor Tehnica de transfer a datelor Cnd o problem este paralelizabil? Generarea algoritmilor paraleli Capitolul 3. ALGORITMI PARALELI FUNDAMENTALI Divide et impera Multiplicarea a doua matrici Evaluarea expresiilor aritmetice Tehnica dublrii recursive Paralelism la nivelul expresiilor aritmetice Paralelism la nivelul instruciunilor Algoritmi pentru sisteme organizate pe bii 9

11 12 13 16 16 18 18 20 20 21 22 22 24 27 28 29 31 32 35 36 36 36 36 43 46 46 47 48 49 51 51 52 54 54 55 56 57

Sortare Sortarea prin numrare Procedeul bulelor Sortarea par-impar Sortare cu arbori Sortarea rapid Sortarea bitonic Cutare Interclasare Problema colorrii unui graf Capitolul 4. ALGORITMI NUMERICI PARALELI Modaliti de construire a algoritmilor numerici paraleli Evaluarea relaiilor recursive Polinoame Metode numerice paralele de rezolvare a sistemelor de ecuatii liniare Sisteme liniare tridiagonale Sisteme liniare cu matrici dense Metode numerice paralele de rezolvare a ecuatiilor neliniare Cuadraturi numerice paralele Cteva noiuni privind paralelismul n procesarea imaginilor Capitolul 5. SISTEME DISTRIBUITE Definirea sistemelor distribuite Avantajele i dezavantajele sistemelor distribuite Obiective generale privind proiectarea sistemelor distribuite Sisteme deschise Tratarea disfuncionalitilor Arhitectura sistemelor distribuite Arhitectura software Platformele hardware i software n sistemele distribuite Nivelul middleware Modele arhitecturale pentru sistemele distribuite Modelul client/server Definirea modelului client/server Arhitecturi client/server multistrat Clasificarea modelelor arhitecturale client/server Alte modele client/server Capitolul 6. SISTEME CU BAZE DE DATE DISTRIBUITE Definirea bazelor de date distribuite i avantajele acestora Obiectivele specifice bazelor de date distribuite Cteva elemente privind proiectarea bazelor de date distribuite Fragmentarea datelor Strategia alocrii datelor

59 59 60 61 61 62 63 65 65 66 68 68 68 69 69 69 73 79 83 84 87 87 89 91 92 95 97 98 99 101 104 106 106 107 110 114 117 117 118 121 122 123

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

125 125 126 127 128 130 134 134 135 136 137 142 143 143 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 l a bnci de memorie. Memoria este distribuit ntre procesoare i o parte este accesibil tuturor unitilor. Unitatea central unic este nlocuit cu mai multe procesoare care, dei individual pot lucra ncet, accelereaz viteza de procesare opernd n paralel. Schemele de interconectare fizic a procesoarelor, utilizate n prezent, sunt de tip hipercub, inel sau latice. Calculul paralel a dat o dimensiune nou construciei de algoritmi i programe. Programarea paralel nu este o simpl extensie a programrii seriale. Experiena a artat c modul de judecare a eficienei algoritmilor bazai pe tehnici seriale nu corespunde n cazul paralel. Nu toi algoritmii secveniali pot fi paralelizai, aa cum n natur exist o serie de exemple (exemplul lui N. Wilding: trei femei nu pot produce un copil numai n trei luni, lucrnd mpreun la aceast problem). Pe de alt parte, o serie de algoritmi numerici standard seriali dovedesc un grad nalt de paralelism: conin numeroase calcule care sunt independente unele de altele i pot fi executate simultan. In proiectarea unor algoritmi de calcul paralel este necesar regndirea sistemelor, limbajelor, problemelor nenumerice i a metodelor numerice. Viitorul calculatoarelor paralele depinde n mare msur de efortul care se face n momentul de fa pentru stabilirea algoritmilor paraleli cei mai eficieni i de proiectarea limbajelor paralele n care aceti algoritmi pot fi exprimai. In cadrul unui calculator paralel, nu este necesar ncorporarea unor procesoare cu performane deosebite. Astfel, costul unui calculator paralel cu un numr mare de

11

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

12

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

13

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

14

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

15

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

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

16

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

17

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

o instruciune

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 asupr a unui operand format dintr-un singur bit, n fiecare ciclu de memorie. Sistemele SIMD sunt indicate pentru rezolvarea problemelor care pot fi descompuse n subprobleme ce presupun un efort de calcul similar (descompunere regulat). Asemenea probleme sunt: procesarea de imagini: grupuri contigue de pixeli sunt asignate unui procesor, grupuri nvecinate fiind asociate cu procesoare nvecinate;

18

dinamica fluidelor: traiectoriile moleculelor unui gaz sunt urmrite relativ la o gril, fiecare procesor fiind responsabil pentru o seciune din gril; automate celulare, care sunt sisteme elementare a cror comportare colectiv simuleaz fenomene complexe din natur. Un automat celular formeaz n spaiu o gril sau o latice. Fiecrei celule i se asociaz o variabil de stare care se poate schimba dup anumite intervale, conform unor reguli. Figurile urmtoare prezint schema, respectiv funcionarea unui SIMD: MCU (IS) Reea P1 P2 (DM) Date

Pn Unitate de control o instruciune mai multe date

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

19

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

Pn Unitate de control mai multe instruciuni o dat

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 P1 P2 (DM) Date

Pn Unitate de control mai multe instruciuni mai multe date memorie comun

Seturile de instruciunile corespunztoare unor procesoare distincte sunt independente unele de altele, execuia unei instruciuni nu influeneaz execuia alteia i n consecin toate procesoarele pot opera la orice moment. Spre deosebire de sistemul

20

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

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

21

* Secven program SIMD * instruciune 1 if not conditie then enable =False instruciune 2 enable=not enable instruciune 3 instruciune 4 enable=True instruciune 5 instruciune 6

* Secven program MIMD * instruciune 1 if conditie then instruciune 2 else {instruciune 3 instruciune 4} instruciune 5 instruciune 6

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

22

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

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

23

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

24

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

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

Exemplul 4. Un exemplu similar de aplicare a tehnicii pipeline este multiplicarea n virgul flotant ntr-un procesor vectorial. Sunt necesare mai multe suboperaii (staii de lucru) care sunt prezentate n figura urmtoare.

25

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

26

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

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 u n procesor sunt copiate n cache. Prin acest procedeu cerinele de citire ale unor asemenea locaii sunt satisfcute de ctre cache i nu necesit referine n memoria comun. Se reduce timpul de accesare pentru o locaie individual de memorie i se mbuntesc performanele sistemului reducnd comunicrile prin bus; 2. printr-o reea cu magistral multipl: se permite accesul simultan a unui numr de procesoare egal cu numrul de magistrale existente la diferitele bnci de memorie; 3. prin linii de comutatoare (crossbar switch): se permit interconectri arbitrare ntre procesoare i bncile de memorii; 4. prin comutatoare multietape: interconectri de acest tip caut balansarea costperforman. Cea mai comun conectare de acest tip este cea descris prin metoda amestecrii perfecte. Primele trei modele sunt schiate n figura de mai jos.

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

30

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

31

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

32

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

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

33

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

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

34

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

35

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

36

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

37

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

38

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

39

Expresiile de drum sunt formate din numele unor operaii reprezentate printr-un set de proceduri i o serie de operatori care definesc secvenele permise de exe cutare 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 identificato rilor 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.
Proces1 send receive Proces productor 1 send Proces productor m send Proces client 1 send receive Proces client p send receive

Proces2 send receive receive receive Proces tampon send send

Proces n-1 send receive Proces n

receive Proces consumator 1

receive Proces consumator m

send receive

send receive

(a)

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

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

41

(a)

(b)

(c)

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

42

tamponul este plin (se depete numrul maxim de mesaje recepionate i care nu au fost re-emise), iar consumatorii se blocheaz dac tamponul este gol. EFICIENA O problem important n introducerea calculatoarelor paralele este eficiena calculului paralel relativ la calculul secvenial. Scopul procesrii paralele depinde de problema cere se rezolv. Astfel, scopul poate fi maximizarea numrului de sarcini independente realizate n paralel ntr-o seciune de calcul cu scop general sau interactiv; scopul poate fi maximizarea numrului de procese paralele care coopereaz i minimizarea timpului de rspuns. Teoretic, un program care lucreaz cu p procesoare este executat de p ori mai rapid dect programul similar care lucreaz cu un singur procesor. Din pcate, n practic, viteza este mult mai mic. O prim surs este dificultatea de a diviza un program n uniti executabile n aceeai perioad de timp. Resursele de msurare a performanei unui algoritm secvenial sunt timpul i spaiul de memorie. Pentru evaluarea performanei unui algoritm paralel, timpul este resursa major. Timpul n calculul paralel nu depinde numai de complexitatea operaiilor, ci i de complexitatea operaiilor de tip comunicare, sincronizare, limitele schimbului de date. Viteza calculatoarelor paralele nu este derivat din puterea procesoarelor, ci din numrul lor. Pentru un algoritm paralel se definesc dou tipuri de optimalitate: un algoritm paralel pentru rezolvarea unei probleme date este optim din punct de vedere al timpului (optimal n sens tare) dac se poate demonstra c timpul de execuie nu poate fi mbuntit de alt algoritm paralel cu aceeai complexitate de calcul, adic nu poate fi mbuntit fr schimbarea numrului de operaii; un algoritm paralel pentru rezolvarea unei probleme date este optim din punct de vedere computaional (optimal n sens slab) dac numrul total al operaiilor utilizate este asimptotic egal cu numrul de operaii a celui mai rapid algoritm secvenial pentru problema dat. Timpul de calculul paralel este perioada care s-a scurs de la iniierea primului proces paralel i momentul cnd toate procesele paralele au fost terminate. ntr-un sistem cu memorie comun, timpul de calcul paralel a unui algoritm sincron se poate exprima ca sum a mai multor valori: 1. timpul de procesare de baz, care este suma perioadelor de timp necesare pentru fiecare etap (ntre dou puncte de interaciune); 2. timpul de blocare, care este perioada de timp n care procesul ateapt date de intrare ntr-un program sincron, sau intrarea ntr-o seciune critic, ntr-un program asincron. 3. timpul de sincronizare a comunicrilor necesar pentru anumite operaii asupra unor variabile comune cu alte procesoare sau necesar execuiei seciunilor critice. ntr-un sistem cu transmitere de mesaje, dac timpul de execuie a unei operai i 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 m od curent se atribuie o unitate de timp pentru operaiile de citire i scriere n memorie i pentru operaiile aritmetice i logice (ca adunarea, scderea, compararea, multiplicarea, sau logic etc). Costul unei asemenea operaii nu depinde de lungimea cuvntului; se utilizeaz ceea ce se numete criteriul costului uniform. O alt msur a performanei unui algoritm paralel este eficiena, definit prin
E p (n) T1 ( p) pTp (n)

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

44

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

Pe lng definiiile de mai sus se ntlnesc i o serie de alte variante de definire a vitezei i eficienei: 1. viteza implementrii pe un sistem cu p procesoare a unui algoritm paralel
S' p (n) T1 (n) / Tp (n)

2. viteza algoritmului paralel asociat unui algoritm serial:


S ' ' p [(1 ) / p]
1

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. Vectorii date sunt partiionai n subvectori de maxim p componente. Performana calculului paralel este funcie de mrimea problemei. Dac problema nu este aleas conform configuraiei de interconectare a sistemului, nu se msoar performana real. Performana unei arhitecturi paralele este msurat prin indicele de performan, care este o funcie real definit pe spaiul parametrilor arhitecturii. De obicei, indicele de performan este exprimat prin rata de utilizare a unui procesor n timp, U. De exemplu, dac se consider cazul evalurii unei funcii iterative prin metoda descompunerii n subprograme de complexitate egal, astfel nct procesoarele individuale execut setul de instruciuni asociat n aceeai perioad de timp, atunci
U t0 / t1

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

45

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

n tehnica de ncreire se mparte grila n mulimi de blocuri de dimensiune 2 x 2, fiecare fiind asignat la un procesor , ca n figura de mai jos.

46

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

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.

1 (aij 4

ai

1j

aij

ai

1 j ), i,

j 2,...,7

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

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

47

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

48

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

49

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

50

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

ai bi .
i 1

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

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

51

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

cij
l 0

c'lij .

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

Valorile aikbkj sunt elementele matricii rezultat


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

Care poate fi rearanjat astfel


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

Pentru cazul general se consider

52

A A A

T T B1 * B p* T B1* BT p*

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

C
k 1

Ck , unde (Ck )ij

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

operaie *:
Ck a1k a1k am k am k bk1 bkp bk1 bkp

unde matricele au dimensiunea mxp. 2. min(m,n,p) = m. Se utilizeaz algoritmul produsului intern pe linii. Linia Ci* a lui C (i=1,...,m) poate fi obinut prin nsumarea elementelor corespunztoare de pe fiecare linie a matricii
ai1 ai1 ain ain b11 b1 p bn1 bnp

unde matricele au dimensiunea nxp. 3. min(m,n,p) = p. Se utilizeaz algoritmul produsului intern pe coloane. Linia C*j a lui C (j=1,...,p) poate fi obinut prin nsumarea elementelor corespunztoare coloanelor matricii
a11 a1n am1 am n b1 j bnj b1 j bnj

unde matricele au dimensiunea mxn. Figura urmtoare schieaz nmulirea a dou matrici pe un sistem de N<mnp procesoare:

53

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

54

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

Exemplul 2. Fie expresia E2 (x1x2 x3 )x4 x5 . Intr-un calculator secvenial, expresia este evaluat prin Es
((((x1 x2 ) x3 ) x4 ) x5 ).

55

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

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

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

56

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

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

57

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

Exemplul 2. Cnd se utilizeaz tehnica dublrii recursive pentru nsumarea a n numere, numrul de procesoare utilizate se diminueaz (50% la primul pas, 25% la al doilea .a.m.d). ntr-un sistem organizat pe bii, aritmetica operaiilor este mprit ntre procesoare n scopul utilizrii maxime. La pasul k al procesului de dublare recursiv fiecare operaie de adunare este distribuit ntre procesoarele disponibile. Un grup de procesoare poate lucra asupra biilor cei mai semnificativi, iar alt grup asupra biilor mai puin semnificativi. Astfel toate procesoarele sunt utilizate la maxim. Exemplul 3. Algoritmii pe bii asociai funciilor elementare presupun nmuliri i mpriri n binar care se efectueaz simultan, astfel nct timpul de estimare este comparabil cu cel al unei nmuliri sau mpriri. Fie de exemplu, problema evalurii funciei exponeniale. Se cere evaluarea lui ex, 0 < x < 1, n condiiile n care valorile ei, eia , ai 2 i , i 1,..., p sunt cunoscute. Se presupune c x se reprezint n binar prin . Se calculeaz mulimea valorilor E0 1, Ek 1, Ek Ek 1 , bk 0, k 1,..., p . Atunci E p e x . Evaluarea se efectueaz printr-o singur parcurgere a planelor de bii a lui x. Exemple similare se pot construi pentru problemele determinrii rdcinii ptrate, determinrii logaritmului, a valorilor funciilor trigonometrice sau ridicarea la ptrat. Algoritmii la nivel de bit sunt de asemenea utilizai la sortare i prelucrarea imaginilor. b1b2...bp. Atunci e x
eb1a1 ...e Ek 1eek , bk
bpa p

58

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

59

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

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

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

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

1 0 0 0

1 1 0 1

1 1 1 1

1 0 . 0 1

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

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

(a)

(b)

60

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

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

Pas 1:
* 2 * * 3 9 7 * * 1 * 8 * 3 4

Pas 2:
2 * 2 * * 9 7 * * * 1 8 * 3 4

Pas 3:
* 3 2 1 * 9 7 * * 8 * * * 3 4

61

Pas 4:
* 3 2 * * 9 7 * * 8 3 * * * 4

Pas 5:
* 3 * 2 * 9 7 * * 8 3 * * 4 *

Pas 6:
* * 3 * * 9 7 * * 8 3 * * 4 *

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

62

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

= = = = = =

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

O reea de comparare este realizat din comparatori. Un exemplu de asemenea reea este prezentat n figua de mai jos, unde xl, x2, x3, x4 sunt intrrile, iar y1, y2, y3, y4, ieirile (ce reprezint datele de intrare ordonate cresctor).

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

63

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

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

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

64

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

65

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

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

3 7 0 1 1 1 0 1

4 14 1 1 1 0 2 5

5 2 0 0 1 0 0 0

6 15 1 1 1 1 0 1

7 4 0 1 0 0 0 0

8 5 0 1 0 1 0 1

9 6 0 1 1 0 1 3

10 8 1 0 0 0 1 2

11 10 1 0 1 0 0 0

12 11 1 0 1 1 0 1

13 12 1 1 0 0 0 0

14 9 1 0 0 1 2 4

15 13 1 1 0 1 2 5

Fie t numrul de bii utilizai pentru reprezentarea culorilor prin c. Atunci, fiecare culoare utilizat n c poate fi reprezentat cu [log2t] + 1 bii, unde [.] desemnez

66

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

67

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

unde M i

ai bi , yi 1 0

xi xi 1

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

68

zi

ai

bi / zi

se reduce la relaia recursiv n x din exemplul anterior, dac zi z0 z1...zi . O asemenea ecuaie se obine la descompunerea LU a unei matrici tridiagonale (U i L sunt, n acest caz, matrici bidiagonale). Exemplul 3. ntr-o serie de probleme apar recursii de tipul
xi ai xi 1 bi ci xi 1 d i Ax0 B Cx0 D

Soluia final este de tipul xn unde


A B C D

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

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

POLINOAME Fie polinomul


n

P( x)
i 0

ai x i

Algoritmul secvenial pentru evaluarea valorii polinomului n x0, construit pe baza regulii Horner, presupune procesul iterativ
bj aj x0b j 1, j n 1,...,0, bn a n

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

a n 1, b j

aj

x2 b , 0 j 2

n 2,...,0

Atunci P(x0 ) b0 b1x0 . Polinomul este partiionat astfel:


P(x0 ) [a0
2 x0 (a2 2 2 2 2 2 x0 (... x0 (a2 n / 2 )...] x0 (a1 x0 (a3 x0 (... x0 (a2 (n 1) / 2 1...) .

O alt variant de paralelizare este aplicarea tehnicii dublrii recursive pentru procesul iterativ corespunztor regulii Horner.

METODE NUMERICE PARALELE DE REZOLVARE A SISTEMELOR DE ECUATII LINIARE SISTEME LINIARE TRIDIAGONALE

69

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

c1 0 b2 c2 a3 b3 c3 0 an 1 bn 1 cn 1 an bn

b1 a2

x1 x2 x3 xn 1 xn

d1 d2 d3 dn 1 dn

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

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

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

di , i 1, n ,

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

ai1 xi

bi 1 xi

ci1 xi

di 1 .

Relund aceast operaie pentru fiecare i 1, n , se obine tot un system tridiagonal dar numrul coeficienilor ai 1 va fi n 2 . Continund raionamentul i utiliznd cele trei ecuaii ale noului system care l con in pe xi ,se obine:

ai 2 xi

bi 2 xi ci 2 xi

di 2 ,

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

70

ai k xi
cu

2k

bi k xi

ci k xi

2k

di k ,

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


bi k xi di k xi di k / bi k

k 1 i 2k 1 k i

k log 2 n , unde coeficienii se obin recursiv din coeficienii , ai k2k1 1 , ci k2k1 1 , ci k2k1 1 , bi k2k1 1 , bi k2k1 1 , di k2k1 1 , di k2k1 1 , bi k 1 , di k 1 , numrul coeficienilor log 2 n pai ),

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

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

2s 1 ,, n

n figura urmatoare se prezint algoritmul n cazul unui sistem tridiagonal de dimensiune 7.

p1 0

p2 0

p3 0

p4 0

p5 0

p6 0

p7 0

1 p2

1 p4 2 p4


1 p6


I0 0

p3
0 x3


I8 0

p5
0 x5

I2


I6


p7

p1
0x1

I4

0x2

0x4

0x6

0x7

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

71

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

x n 1 / 2 dac se impun condiiile ai k ci k di k 0, bi k 1,unde i 0 sau i n 1 i k 0 pentru ca xi 0 , unde i 0 sau i n 1. Atunci soluia final poate fi exprimat
prin

xi

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

di k / bi k , k log 2 n 1

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

0 P0

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

2 2 2 P P2 P3 1

3 P 1

3 3 3 3 3 3 P2 P3 P4 P5 P6 P7 I3 I4 I5 I6 I7

I1 I 2

Determinarea soluiei unui sistem tridiagonal de dimensiune 7 cu un nur minim de pai paraleli REDUCEREA DIMENSIUNII PROBLEMEI O alt metod adecvat execuiei paralele a relaiilor iterative este descompunerea n subprobleme. Fie, de exemplu:

xk

Ax k

c,

unde A este o matrice n n , iar c este un vector de dimensiune n .Componentele vectorului x k 1 pot fi calculate n parallel cu ajutorul mai multor procesoare.Dac lum n considerare cazul a dou procesoare i n numr par ,vectorul x k 1 este descompus

72

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

x1k x

k 1 2

A11 A12 A21 A22

x1k x
k 2

c1 c2

La fiecare pas,cte un processor actualizeaz jumtate din componente ,iar urmtoarea iteraie este realizat numai dup ce ambele procesoare au terminat actualizarea. SISTEME LINIARE CU MATRICI DENSE Fie sistemul

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

a11x1 a12 x2 a1n xn b1 an1 x1 an 2 x2 ann xn bn


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

b11 b21 bn1

73

n etapa a doua se va elimina necunoscuta x2 din ecuaiile 3,4,, n lucru care se va realiza cu ajutorul a n 1 procesoare.Mai departe, n etapa a treia ,vor fi active n 2 procesoare, .a.m.d. n final, se ajunge la sistemul superior triunghiular:
1 x1 a12 x2 a11 a11 , n 1 xn 1 n xn

b11 b22 bnn11 bnn 1

x2 a22 a22 , n 1 xn 1 n xn xn 1 ann 11 xn


n 1 ann xn

Rezolvarea acestui sistem se va afce prin substituie regresiv, ncepnd cu ultima ecuaie.Dac la inceput un singur processor va fi activ i va executa operaia de mprire

xn

n 1 , bnn 1 / ann

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

b11 b21
(1) bn

unde
(1) a1 j

a1 j / a11,
(1) 1 j i1

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

b1 / a11
(1) 1 i1

a
calculele
(1) 12 (1) 13

(1) ij

aij a a , b
fiind
(1) 1n (1) 1

bi b a , i, j 2, n,

fcute n felul urmtor: un procesor calculeaz valorile (1) a fost calculat, restul de a , a ,, a , b n aceast ordine. n momentul n care a12

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

74

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

Se continu acest proces pn cnd sistemul devine:

x1 x2 xn

b1( n ) (n) b2
(n) bn

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

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

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


adic

z11 0 z22 0 0 zn1

z2,n zii 0

z1n 0 0

wij

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


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

j i 1
j 1

zij

z1 j

Elementele nenule ale matricilor W i Z se calculeaz astfel: a) Prima i ultima linie a lui Z sunt identice cu cele ale lui A a1 j i znj anj , j 1, n

75

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

z11wi1 zn1win ai1 , i 2, n 1 z1n wi1 znnwin ain


Pentru urmtoarele:
k 1 n

restul

elementelor,

pentru

k 1,,

1 (n 1) , 2

calculele

sunt

zkl wik

zn

1,l wi ,n

k 1

ail
s 1 s n k 2

wis zsl , l k , n k 1.

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

Ax b
n forma

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

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

1 0 w21 1 0 0 w2n 1 wn 1,1 0 0 1 wn 1,n 0 1

p1 b1 p2 b2 = pn 1 bn 1 pn bn

La nceput se determin p1 i pn , la pasul urmtor p2 i pn 1 , .a.m.d. La pasul i vom avea (i ) pi bi(i ) , pn i 1 bn i 1,

METODE ITERATIVE

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

76

Presupunnd c avem un sistem cu n procesore, fiecare poate calcula o component a soluiei dup formulele:

xi

1 b aii i

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

S-a vzut c aceast metod se bazeaz pe o descompunere a matricei A ntr-o matrice diagonal D, una strict inferior triunghiular L i alta strict triunghiular U, deci A=D-L-U. Pentru o execuie paralel eficient, se consider descompunerea dublu -diagonl a matricei A: A=X-W-Z, unde

* * 0 * *

0 * * * 0 * 0 *

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

0 * * * * * 0 * * * * 0 * * * * 0 * * * * * 0

cu alte cuvinte

xij

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

77

zij

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

j 1 i

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

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

Execuia tabla-de-ah a metodei Gauss-Seidel Metoda paralel a relaxrii (SOR paralel) Analog cu metoda Jacobi dublu-diagonal, cu ajutorul descompunerii matricei A: A=X-W-Z

78

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

(X

W ) x ( p 1)

[ Z (1

) X ]x ( p)

b.

unde este factorul de relaxare al metodei SOR. Se obine astfel o metod bloc-iterativ, convenabil unei execuii cu mai multe procesoare.

METODE NUMERICE PARALELE DE REZOLVARE A ECUATIILOR NELINIARE Pentru rezolvarea ecuaiilor neliniare pe R exist diferite metode seriale. Vom ncerca n acest capitol s abordm unele dintre ele din punct de vedere al implementrii lor paralele. Metoda paralel a njumtirii intervalului (metoda biseciei) Fie ecuaia neliniar (1) f(x)=0, Dac f(a)f(b) < 0, atunci ecuaia dat are cel puin o soluie real n intervalul (a, b). Se cere determinarea aproximativ, cu o eroare dat, a soluiilor reale ale ecuaiei (1). Din punct de vedere al unei execuii cu mai multe procesoare, putem considera urmtoarele cazuri: Cazul I. Ecuaia (1) are o singur soluie real n intervalul [a,b]. unde f:[a,b] R este o funcie continu.

79

Situaia unei rdcini reale n intervalul [a,b] In aceast situaie, metoda njumtirii intervalului const n definirea a trei iruri {an}, {bn}, {cn}, astfel: Iniializare: a0=a, b0=b, c0=(a+b)/2. Fiind constuii termenii an-1, bn-1 i cn-1 definim, pentru n1 an=cn-1 i bn=bn-1 dac f(an-1)f(cn-1) >0 an=an-1 i bn=cn-1 dac f(an-1)f(cn-1) >0 cn=(an+bn)/2 Dac f(cn-1)=0 atunci am= an-1, bm=bn-1, cm=cn-1, mn. Determinarea elementelor celor trei iruri poate fi fcut simultan pe un sistem paralel, fiecare ir fiind calculate de ctre un processor. Un al patrulea poate fi folosit la calcularea valorii funciei n diferite puncte i la obinerea rezultatului. Cazul II. Ecuaia (1) are mai multe rdcini reale n intervalul [a,b].

a b

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

80

Metoda paralel a lui Newton (metoda tangentei) Iteraia Newton pentru rezolvarea unei ecuaii neliniare f(x) =0 este (2)

xk

xk

f ( xk ) f ( xk ) ,

x0 dat.

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

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

xk 1 1
respectiv

1 xk 1

xk 1

, cu

f ( xk ) f ( xk ) ,

xn 1

1 xn 11

n 1

1 xn 12

n 2

...

1 x0 1

x0 1

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

81

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

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

a, b0

b, c0

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

Fiind construite elementele a n 1 , bn 1 , cn 1 , pentru n1 definim: a n cn 1 , bn bn 1 , dacaf(c n 1 ) 0 an an 1 , bn cn 1 , daca f(c cn 1 ) 0

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

an 1 , bm

bn 1 , cm

cn 1 , mn

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

82

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

In acest caz, se separa radacinile reale, astfel incat sa ne situam in ipotezele aplicarii metodei secantei, si fiecare processor va executa metoda pe cate un subinterval. Metoda tangenta-secanta Fiind data ecuatia f(x)=0 cu f:[a,b] -> R continua pe [a,b], si presupunand existenta unei singure radacini reale a ecuatiei in (a,b), metoda tangenta-secanta presupune construirea unui sir de intervale approximate, de forma:
s s (x1 ,t , x1s ) (x2 ,t , x2 ) ... (xn ,t , xn ) .... t s unde sirul { xn } se genereaza cu metoda tangentei, iar sirul { xn } cu metoda secantei.

Procedeul se opreste atunci cand


t s | xn xn | , unde este o eroare prestabilita. In acest moment, oricare dintre cele doua aproximante aproximeaza solutia reala exacta a ecuatiei cu precizia dorita. Metoda se poate t paraleliza usor, daca vom considera ca un processor genereaza sirul { xn }, simultan cu

altul care genereaza sirul { xts }. CUADRATURI NUMERICE PARALELE Integrarea numerica a functiilor ocupa un loc important in analiza matematica, deci este de mare interes o abordare a acestei probleme si din punctual de vedere al calculului parallel. Vom face referire doar la cuadraturile de tip interpolator, dar acest lucru nu reprezinta o restrictie, caci rationamente similare sunt valabile si pentru alte tipuri de formule de integrare numerica. Vom considera, in continuarem cuadraturile de tip interpolator obtinute pe noduri echidistante, in cazul in care calculul integralei se face repetat, pe subintervale in care se divide intervalul initial. Cu alte cuvinte ne vom referi la formula Newton-Cotes repetate.

83

Formula repetata a trapezului (1)


b a

f ( x)dx

b a [ f (a) 2a

n 1

f (b) 2
k 1

f ( xk )]

Lucrand simultan cu mai multe procesoare, am putea calcula valoarea numerica a integralei astfel:
n 1

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


k 1

f ( xk ) , cu ajutorul tehnicii

dublarii recursive (vezi si paragraful evaluarea expresiilor aritmetice), iar altele doua, f(a) si f(b). b) Daca scriem formula repetata a trapezului
b a n

f ( x)dx
k 1

I k , cu I k

xk xk
1

f ( x)dx ,

adica (2)
b a n

f ( x)dx
k 1

xk

xk 1 [ f ( xk 1 ) 2

f ( xk )]}

atunci, lucrand cu n procesoare, putem considera ca fiecare processor evalueaza valoarea numerica a integralei pe un interval lk si la sfarsit, tot prin metoda dublarii recursive, se evalueaza suma finala si se obtine rezultatul dorit.

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

84

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

85

(a)

(b)

86

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

87

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

88

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

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

89

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

90

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

91

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

92

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

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

93

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

94

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

Localizare Migrare

95

Re-localizrii Replicare Concurena Disfuncionaliti Persistena

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

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

96

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

97

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

98

Calculator A

Calculator A Aplicaii distribuite Middleware

Calculator A

Sistemul de operare

Sistemul de operare

Sistemul de operare

Platforma
Hardware Hardware Hardware

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

99

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

100

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

hardware Ofer servicii locale clienilor aflai la distan Furnizeaz transparena distribuirii

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

101

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

102

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

103

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

Client
rezultat Server

rezultat

Server

solicitare

Client

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

Client Client

Client Client Client

Servere proxy i tehnica de caching. Cache reprezint tehnica de stocare a obiectelor de date recent utilizate mai aproape de locul de utilizare. Atunci cnd un obiect este recepionat de un calculator, el va fi adugat n zona de stocare cache,

104

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

Client Server proxy Client

Server WEB

Server WEB

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

Aplicaie Programul de coordonare

Aplicaie Programul de coordonare

105

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

Rspuns

106

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

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

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

107

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

108

Interfaa utilizator
(Prezentare) Serverul de aplicaie Solicitare operaie

Ateptare rezultat
Transmiterea rezultatelor

Ateptare date
Solicitare date

Transmiterea datelor
Timp

Serverul de baze de date

Un exemplu tipic de arhitectur pe trei straturi l reprezint modul de funcionare al unui motor de cutare pe Internet, prezentat n figura urmtoare.
Interfaa utilizator Pagina HTML ce conine lista Generator HTML
Lista ordonat a paginilor

Nivelul gestiunea interfeei

Expresia tastat

Generarea interogrilor Interogri ale bazei de date

Nivelul logica aplicaiei

Ordonarea componentelor

Baza de date cu paginile Web

Titlurile paginilor Web i metainformaii

Nivelul gestiunea datelor

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

109

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

110

Gestiunea datelor Logica aplicaiei Interfaa

Gestiunea datelor Logica aplicaiei

Gestiunea datelor Logica aplicaiei

Gestiunea datelor

Gestiunea datelor

A E R
Logica aplicaiei Logica aplicaiei Interfaa Gestiunea datelor Logica aplicaiei Interfaa

Interfaa

Interfaa

Interfaa

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

111

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

112

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

113

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

b) clientul interacioneaz cu applet-ul


Client Applet

Server Web

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

114

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

115

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

116

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

117

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

118

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

119

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

120

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

121

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

122

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

123

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

124

Cum sunt facilitile pentru accesul concurent i blocare oferite de SGBD-ul ales? Pot fi evitate accesele partajate?

Nu

Da

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

125

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

126

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

127

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

128

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

Cereri SQL Aplicaie nregistrri

SQL API
Buffere de date

Operaiuni specifice protocolului i reelei

Pachete

primite

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

129

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

130

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

131

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

132

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

133

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

134

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

i de specificarea a ceea ce trebuie s fie acest tip de dat, folosind o pereche de acolade. n acest exemplu, exist doar metoda special main,care are o singur aciune de realizat: afieaz pe monitor textul

135

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

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

deci fiecare

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

136

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

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

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

Egalitatea lor se poate testa folosind o instruciune if:


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

137

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

n urma execuiei acestei secvene, pe monitor apare mesajul


Sunt egale

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

Instruciunile structurate sunt: blocul, instruciunile de test i instruciunile repetitive. Blocul sau secvena const dintr-un grup de instruciuni cuprinse ntre dou caractere acolad:
{int m=0; if (a<b) m=2; System.out.println(m); }

138

Variabilele declarate n bloc sunt locale, adic ele exist de la momentul declarrii pn la sfritul blocului. Instruciunile de test sunt instruciunea if i instruciunea switch. Instruciunea if are dou variante: i ea se execut instruiunea care urmeaz. Pentru a doua variant, dac expresia logic este fals, atunci se execut instruciune2. Dac sunt necesare mai multe prelucrri, atunci se folosete secvena. Instruciunile cuprinse ntr-o instruciune if pot fi alte instruciuni if (cazul instruciunilor imbricate). Exemplu:
if (n>0) {// test la numarul de extrageri n if (n>20) n=20; if (rez[i][14]==1) g.setColor(Color.red); g.drawString(Integer.toString(rez[i][j]),5*i,45); g.setColor(Color.black); } Instruciunea switch realizeaz o testare generalizat, nu numai cu dou opiuni ca n cazul instruciunii if. Expresia testat poate fi numai de tip primitiv: byte, char, short sau int, testul poate fi doar egalitatea, iar valorile testate pot fi de asemenea numai de tip byte, char, short sau int: switch (expresie) { case val_1: secventa_1 [break;] case val_2: secventa_2 [break;] case val_n: secventa_n [default: secventa] } Modul de lucru al instruciunii switch este urmtorul: expresie este comparat pe rnd cu fiecare dintre valorile case; dac se gsete o potrivire, se if (expresie logic) instruciune if (expresie logic) instruciune1 else instruciune2 lucreaz astfel: dac expresie logic este adevrat, atunci

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

139

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

se folosete atunci cnd o anumit instruciune se repet de un numr specificat de ori; contorul este cel care controleaz instruciunea for. Sintaxa acestei instruciuni este: 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(); }} for (iniializare; condiie; trecere_pas) instruciune unde iniializare nseamn una sau mai multe expresii separate

Principiile programrii structurate interzic folosirea etichetelor i a ntreruperii structurilor repetitive. Limbajul Java nu este total structurat, deoarece permite ambele aciuni. Eticheta este un identificator care precede o instruciune, dup modelul:
eticheta: instruciune

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

140

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

n exemplu, dac utilizatorul introduce o valoare care nu este ntreag, atunci programul avertizeaz prin afiarea mesajului
nu este un numar intreg!

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

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

int[] a; String[] tab;

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

fi referit prin variabila asociat lui:


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

141

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

din

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

n.

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

142

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

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

Pentru a genera un ir de numere aleatoare, se poate folosi un obiect de clas Random. Aceast clas folosete o valoare iniial reprezentat pe 48 de bii i o formul de congruene liniare. Crearea unui obiect de clas Random se poate face cu oricare din urmtorii doi constructori:

143

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

144

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

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