Sunteți pe pagina 1din 198

Universitatea Titu Maiorescu

Facultatea de Informatic
Prof. univ. dr. Pau Valentin Lector univ. dr. Apostolescu Tudor Ctlin As. univ. ing. Stnescu Octavian

Bazele informaticii

Curs pentru nvmntul la distan

Bucureti 2011

Cuprins
INTRODUCERE ........................................................................................................................... 5 UNITATEA DE NVARE 1 ................................................................................................. 11 1. Stocarea datelor .................................................................................................................. 11 1.1. Stocarea biilor ................................................................................................................ 11 1.1.1. Pori logice i circuite basculante bistabile ..................................................................... 11 1.1.2. Tehnici de stocare ........................................................................................................... 12 1.1.3. Sistemul de notaie hexazecimal ..................................................................................... 13 1.2. Memoria principal ......................................................................................................... 13 1.2.1. Organizarea memoriei principale.................................................................................... 14 1.2.2. Organizarea unei celule de memorie .............................................................................. 15 1.3. Dispozitive de stocare de mas ....................................................................................... 19 1.3.1. Discuri magnetice ........................................................................................................... 21 1.3.2. Discuri compacte ............................................................................................................ 25 1.3.3. Benzi magnetice .............................................................................................................. 26 1.3.4. nregistrri logice i fizice .............................................................................................. 26 1.4. Codificarea utilizat pentru stocarea informaiilor ......................................................... 27 1.4.1. Reprezentarea simbolurilor ............................................................................................. 27 1.4.2. Reprezentarea valorilor numerice ................................................................................... 28 1.4.3. Reprezentarea altor tipuri de date ................................................................................... 30 1.5. Sistemul binar de numeraie ........................................................................................... 31 1.5.1. Adunarea n binar............................................................................................................ 31 1.5.2. Reprezentarea fraciilor n sistemul binar ....................................................................... 32 1.6. Stocarea numerelor ntregi .............................................................................................. 34 1.6.1. Notaia n exces ............................................................................................................... 34 1.6.2. Notaia n complement fa de doi .................................................................................. 35 1.6.3. Adunarea numerelor reprezentate n complement fa de doi ........................................ 38 1.6.4. Problema depirii superioare ......................................................................................... 39 1.7. Stocarea numerelor fracionare ....................................................................................... 40 1.7.1. Notaia n virgul mobil ................................................................................................ 40 1.7.2. Erori de rotunjire ............................................................................................................. 42 1.8. Erori de comunicaie ....................................................................................................... 43 1.8.1. Bii de paritate ................................................................................................................. 43 1.8.2. Coduri corectoare de erori .............................................................................................. 45 TEST AUTOEVALUARE 1 (Stocarea datelor) ....................................................................... 47 UNITATEA DE NVARE 2 .................................................................................................. 52 2. Manipularea datelor ............................................................................................................ 52 2.1. Unitatea central de prelucrare ....................................................................................... 52 2.2. Execuia instruciunilor ................................................................................................... 55 2.3. Execuia programelor ...................................................................................................... 60

2.4. 2.5. 2.6. 2.7. 2.8. 2.9.

Alte instruciuni .............................................................................................................. 61 Principii de proiectare pentru calculatoarele actuale ...................................................... 63 Prelucrare simultan ...................................................................................................... 64 Instruciuni aritmetice i logice ................................................................................... 65 Comunicaia ntre unitatea central i controlere ....................................................... 67 Comunicaia serial i paralel ..................................................................................... 69

TEST AUTOEVALUARE 2 (Manipularea datelor) ............................................................... 73 UNITATEA DE NVARE 3 .................................................................................................. 75 3. Sistemele de operare........................................................................................................... 75 3.1. Evoluia sistemelor de operare .................................................................................... 75 3.2. Arhitectura unui sistem de operare ................................................................................. 77 3.3. Coordonarea activitilor desfurate de calculator........................................................ 81 3.4. Gestionarea proceselor concurente ................................................................................. 85 TEST AUTOEVALUARE 3 (Sisteme de operare)................................................................... 88 UNITATEA DE NVARE 4 .................................................................................................. 92 4. Algoritmii ........................................................................................................................... 92 4.1. Conceptul de algoritm .................................................................................................... 92 4.2. Reprezentarea algoritmilor ............................................................................................. 93 4.3. Dezvoltarea algoritmilor ................................................................................................. 96 4.4. Structuri iterative ............................................................................................................ 98 4.5. Structuri recursive......................................................................................................... 102 4.6. Eficien i corectitudine .............................................................................................. 103 TEST AUTOEVALUARE 4 (Algoritmii) ............................................................................... 107 UNITATEA DE NVARE 5 ................................................................................................ 111 5. Limbaje de programare .................................................................................................... 111 5.1. Perspective istorice ....................................................................................................... 111 5.2. Conceptele programrii clasice .................................................................................... 114 5.3. Module de program ...................................................................................................... 121 5.4. Implementarea limbajelor ............................................................................................. 123 5.5. Programarea declarativ ............................................................................................... 128 TEST AUTOEVALUARE 5 (Limbaje de programare) ........................................................ 132 UNITATEA DE NVARE 6 ................................................................................................ 139 6. Structuri de date ............................................................................................................... 139 6.1. Vectori .......................................................................................................................... 139 6.1.1. Vectori unidimensionali ............................................................................................... 139 6.1.2. Vectori multidimensionali ............................................................................................ 140
3

6.2. 6.3.

Liste .............................................................................................................................. 141 Arbori ............................................................................................................................ 150

TEST AUTOEVALUARE 6 (Structuri de date) .................................................................... 154 UNITATATEA DE NVARE 7........................................................................................... 157 7. Structuri de fiiere ............................................................................................................ 157 7.1. Fiierele secveniale ...................................................................................................... 157 7.2. Fiiere de text ................................................................................................................ 159 7.3. Fiiere indexate ............................................................................................................. 160 7.4. Fiiere dispersate (hashed files) .................................................................................... 161 7.5. Rolul sistemului de operare .......................................................................................... 162 TEST AUTOEVALUARE 7 (Structuri de fiiere) ................................................................. 164 UNITATEA DE INVATARE 8 ................................................................................................ 166 8. Structuri de Baze de date .................................................................................................. 166 8.1. Consideraii generale ................................................................................................... 166 8.2. Implementarea stratificat a bazelor de date................................................................. 167 8.3. Modelul relaional ......................................................................................................... 169 TEST AUTOEVALUARE 8 (Structura bazelor de date)...................................................... 181 UNITATEA DE NVARE 9 ................................................................................................ 183 9. Sistem informatic i sistem informaional ........................................................................ 183 9.1 Conceptul de informaie................................................................................................ 183 9.2 Noiunea de sistem ........................................................................................................ 185 9.3 Sistem informatic .......................................................................................................... 190 TEST AUTOEVALUARE 9 (Sistem Informaional i Sistem Informatic de fiiere) ......... 196 BIBLIOGRAFIE ......................................................................................................................... 198

INTRODUCERE
Informatica este o disciplin care construiete baza tiinific pentru mai multe domenii, ca: proiectarea i programarea calculatoarelor; prelucrarea informaiilor; rezolvarea algoritmic a problemelor; procesul algoritmic propriu-zis. Prin urmare, nu putem reduce studiul informaticii la deprinderea modului de utilizare a calculatoarelor actuale (eventual a PC-urilor), ci trebuie s nelegem att aria de cuprindere, ct i dinamica unui mare numr de domenii nrudite.

a) Studiul algoritmilor Algoritm = set de pai prin care se definete modul n care poate fi dus la ndeplinire o anumit sarcin. n domeniul calculatoarelor algoritmii sunt reprezentai prin programe. Aceste

programe formeaz software-ul, spre deosebire de calculatoarelor propriu-zise care poart numele de hardware. Pentru ca un calculator s poat duce la ndeplinire o anumit sarcin, trebuie (ca mai nti) s se descopere i s se reprezinte sub form de program un algoritm pentru efectuarea sarcinii respective. Algoritmii ocup un rol central n informatic. Principalul obiectiv al acestor eforturi era descoperirea unui set mic de instruciuni care s descrie modul de rezolvare a oricrei probleme dintr-o anumit categorie. Unul dintre cele mai cunoscute rezultate obinute n acest domeniu este algoritmul lui Euclid (descoperit n antichitate de matematicianul precizat). Determinarea celui mai mare divizor comun a 2 numere ntregi pozitive. Descriere: Algoritmul primete ca intrare 2 numere ntregi pozitive i calculeaz cel mai mare divizor comun al celor 2 numere. Procedura: Pasul 1 : Se noteaz cu M cea mai mare valoare i cu N cea mai mic valoare de intrare. Pasul 2 : Se mparte M la N i se noteaz cu R restul mpririi.
5

Pasul 3 : Dac R 0, se atribuie lui M valoarea N i lui N valoare R, apoi se revine la pasul 2: cel mai mare divizor comun al celor 2 numere este valoarea notat cu N. Dup descoperirea algoritmului (n cazul nostru al lui Euclid), ntr-un fel, putem spune c toate informaiile necesare pentru efectuarea [activitii] operaiei respective sunt incluse ntro form codificat n algoritm. Dezvoltarea algoritmilor este o preocupare major n domeniul efecturii calculelor i principalele probleme legate de aceast aciune sunt : descoperirea unui algoritm care s rezolve o problem (gsisirea soluiei pentru o problem). Pentru anumite domenii (ex. contabilitate), algoritmii se gsesc exprimai n legi i metodologii (norme) specifice. reprezentarea algoritmului ntr-o form n care poate fi comunicat unei maini sau altor oameni. Adic scrierea unui algoritm trebuie transcris din forma conceptual ntr-un set clar de instruciuni lipsit de ambiguitate. Exist o mulime de variante de scheme de reprezentare a algoritmilor numite limbaje de programare. n prezent, n acest domeniu s-au realizat sisteme automate de organizare i planificare care permit i nespecialitilor s dezvolte, fr ajutor din afar, sistemele de care au nevoie. Exprimarea curent a acestei activiti este ingineria software. Scopul acestor prelegeri nu este prezentarea n detaliu a modului n care arhitectura calculatoarelor este implementat prin intermediul circuitelor electronice (este vorba de un alt domeniu electronic). Ar fi de dorit ca arhitectura calculatoarelor s reflecte numai cunotinele legate de procesele algoritmice i s nu fie limitat de tehnic. Arhitectura calculatoarelor poate fi studiat i n alt context dect acela al stocrii i regsirii datelor. n acest domeniu, caracteristicile interne ale calculatorului se reflect adesea n caracteristicile externe. Proiectarea sistemele de calcul este strns legat de interfaa lor cu lumea exterioar. De exemplu, se pune problema modului n care algoritmul poate fi furnizat calculatorului i a modului de precizare n care algoritm s fie executat. n contextul n care calculatorul ndeplinete diferite sarcini, trebuie rezolvate multe probleme legate de coordonarea activitilor i alocarea resurselor .

b) Dezvoltarea mainilor algoritmice Unul din primele dispozitive de calcul utilizate de oameni a fost abacul. Prezena lui a fost atestat n civilizaiile antice (greac i roman), el fiind folosit i astzi. Bilele poziionate pe srme n cadrul abacului semnific anumite valori. Abacul reprezint i stocheaz valori prin poziia bilelor aezate de operatorul uman (intrrile) care, de asemenea, observ poziiile finale ocupate de bile, ceea ce reprezint rezultatul (ieirile). Deci abacul este o main de stocare a datelor i devine o main algoritmic numai mpreun cu omul care-l utilizeaz. Proiectarea mainilor de calcul s-a bazat ntr-o vreme pe tehnologia roilor dinate. Printre inventatorii acestui tip de maini de calcul s-a aflat i Blaise Pascal (16231662), Gottfried Leibniz (16461716) i Charles Babbage (17921871). Mainile lor reprezentau datele prin poziionarea unor roi dinate, datele de intrare erau furnizate mecanic prin stabilirea poziiei particulare a acestor roi. n cazul mainilor lui Pascal i Leibniz, valorile de ieire erau obinute prin observarea poziiei finale a roilor (similar citirii numerelor pe indicatorul de kilometraj al automobilului). La maina lui Babbage rezultatele se tipreau pe hrtie, evitnd erorile de transcriere. n ceea ce privete abilitatea de a urma algoritm putem spune c: maina lui Pascal efectua numai adunri; maina lui Leibniz avea algoritmii (operaiile aritmetice) nglobai, dar operatorul trebuia s-l selecteze pe cel dorit; maina lui Babbage era astfel proiectat nct secvena de pai trebuia executat s poat fi comunicat acesteia prin perforarea ntr-un anumit mod a unor cartele de hrtie. Mai trziu, Herman Hollerith (18601929) a folosit ideea reprezentrii informaiilor sub forma unor perforaii n cartele de carton, pentru mbuntirea procesului de nregistrare n cadrul recensmntului efectuat n 1890 n Statele Unite. Lucrrile sale au stat la baza crerii companiei I B M. Anul de nastere al informaticii tehnice este 1946 cand a fost creat creat computerul electronic de integrare numerica aritmetica construit cu tuburi electronice si cantarind sute de tone. John von Neumann a construit in 1951 calculatorul EDVAC (Electronic Discrete Variable Automatic Computer), iar in 1949 la Universitatea Cambridge (SUA) a fost realizat EDSAC

(Electronic Delay Storage Automatic Computer), primul calculator care dispunea de sistem de operare.

c) Evoluia informaticii Capacitatea-limit de stocare a datelor, ca i procedurile de programare consumatoare de timp au reprezentat restricii care au redus complexitatea algoritmilor executai de primele generaii de calculatoare. Pe msur ce aceste limite au nceput s fie depite, sistemele de calcul au nceput s fie folosite pentru sarcini de mai mare anvergur, din ce n ce mai complexe. Eforturile s-au ndreptat din ce n ce mai mult ctre studiul algoritmilor i al procesului de programare. Aceste eforturi se pot aduna, fr a exagera, n tiina algoritmilor. Aria de cuprindere a acestei tiine este foarte larg, incluznd subiecte de matematic, inginerie, psihologie, management, lingvistic etc. Ceea ce ne propunem s prezentm n cadrul acestor prelegeri (lecii) sunt : ideea central a fiecrui domeniu; direciile curente de cercetare; tehnicile utilizate n domeniul respectiv. De exemplu, n domeniul programrii ne vom concentra asupra principiilor de baz ale instrumentelor de programare i asupra evoluiei lor, i nu asupra dezvoltrii abilitilor de programare. Pentru a nu pierde din vedere imaginea de ansamblu, vom ncerca s identificm cteva ntrebri fundamentale pentru informatic : 1. Ce probleme se pot rezolva prin procesele algoritmice? 2. Cum se pot descoperi algoritmii? 3. Cum se pot mbunti tehnicile de reprezentare i comunicare a algoritmilor? 4. Cum pot fi aplicate cunotinele dobndite cu privire la algoritmi (tehnologia vederea obinerii unor maini algoritmice mbunttite) ? n

5. Cum pot fi analizate i comparate caracteristicile diverilor algoritmi?

Rolul central detinut de algoritm in informatica


8

d) Rolul abstractizrii Pentru sistemele de o complexitate care depete capacitatea noastr de nelegere se poate privi sistemul respectiv ca un ansamblu de componente ale cror caracteristici interne pot fi ignorate, ceea ce ne permite s ne concentrm asupra modului n care componentele respective interacioneaz unele cu altele i asupra modului cum sunt utilizate pentru construirea unor componente de nivel mai nalt. Aceast distincie care se face ntre proprietile externe ale unei componente i detaliile interne care in de construcia componentei respective poart numele de abstractizare. n orice progres obinut, o mic parte a societii noastre se specializeaz n implementarea lui, ceilali folosesc rezultatul ca pe un instrument abstract, deci o unealt a crei implementare intern nu suntem obligai s o nelegem.

e) Implicaii etice, sociale i juridice Informatica estompeaz multe distincii are serveau n trecut ca reguli pe care oamenii i ntemeiau deciziile i pune sub semnul ntrebrii o parte din principiile care stau la baza societii, ca de exemplu : Care este diferena ntre un comportament inteligent i inteligena propriu-zis? n ce condiii putem vorbi despre existena vieii? Care este diferena ntre plante i animale? Informatica genereaz asemenea ntrebri, punnd n discuie principiile i bazele pe care este construit cunoaterea noastr. n context juridic, se pune ntrebarea n ce msur cineva poate deine n proprietate un produs software i care sunt drepturile i obligaiile care decurg din aceast proprietate. n domeniul eticii, suntem confruntai cu numeroase opiuni care pun la ndoial principiile uzuale de comportament. n context politic, apare ntrebarea dac i n ce msur tehnologia calculatoarelor i aplicaiile acesteia trebuie controlate de stat. Rezolvarea acestor probleme necesit existena unor cunotine organizate sub forma metodelor, tehnicilor, normelor pentru fiecare tiin sau tehnologie pus n discuie.

Pentru a putea s lum decizii logice cu privire la depozitarea deeurilor radioactive, trebuie s nelegem care sunt efectele radiaiilor, care sunt msurile de protecie care trebuie luate i s putem evalua durata de risc. Pentru a acorda sau nu guvernelor sau companiilor dreptul de a construi baze de date referitoare la ceteni sau clieni, membrii societi trebuie s neleag care sunt posibilitile, limitele i implicaiile tehnologiei bazelor de date. Ceea ce va fi prezentat n cursul pe care-l propunem v furnizeaz aceste cunotine elementare n domeniul a ceea ce numim i n f o r m a t i c . Cu toate acestea, tiina nu reuete ntotdeauna s rspund clar i hotrt tuturor problemelor sociale care-i sunt ridicate. Nu ntotdeauna exist un singur rspuns corect; de multe ori aa-zisele soluii sunt n fapt compromisuri ntre mai multe puncte de vedere. Este nevoie de capacitatea de a asculta i de a nelege i alte puncte de vedere, de a purta discuii raionale i de a-i schimba opiniile n funcie de datele obinute n urma dialogului. Pentru a ncuraja un astfel de comportament, fiecare capitol al cursului se va finaliza cu un set de probleme de etic, pe care le considerm, mai ales n contextul profesiunii pe care ai ales-o, la fel de importante ca i aspectele tehnice propuse spre dezbatere.

10

UNITATEA DE NVARE 1
1. 1.1. Stocarea datelor Stocarea biilor

Calculatoarele utilizate n prezent reprezint informaiile sub forma iruri de bii. Un bit (biniary digit = cifr binar) simbolizeaz una din cifrele 0 sau 1. Stocarea unui bit ntr-un calculator necesit un dispozitiv care s poat s se afle ntr-una din cele dou stri. De exemplu: un ntreruptor (pornit/oprit); un releu (deschis/nchis); un steag de start (ridicat/cobort). Una din stri este reprezentarea simbolului 1. utilizat pentru reprezentarea simbolului 0, iar cealalt pentru

1.1.1. Pori logice i circuite basculante bistabile Trebuie introduse operaiile AND (= i), OR (= sau) i XOR (= sau exclusiv) care sunt prezentate mai jos :

Figura 1.1 - Operaiile AND, OR i XOR


11

Aceste operaii lucreaz cu valorile adevr (true)/fals (false) i sunt denumite operaii booleene. Intrrile operaiei AND sunt reprezentate de adevrul sau falsitatea componentelor expresiei; ieirea reprezint adevrul sau falsitatea expresiei compuse. Expresia P AND Q este adevrat numai cnd ambele sale componente sunt adevrate. Toate variantele operaiei AND se pot vedea n prima linie a figurii 1.1. Similar, operaia OR se bazeaz pe o expresie compus sub forma P OR Q. Asemenea expresie compus este

adevrat cnd cel puin una dintre componente este adevrat, ceea ce coincide cu reprezentarea OR din linia a doua a figurii 1.1. n limbajul curent nu exist o conjuncie care s poat exprima semnificaia operaiei XOR. XOR produce ca rezultat o ieire cu valoarea 1 atunci cnd una dintre intrrile sale este 1 i cealalt 0 (vezi linia a treia din fig. 1.1.). Operaia NOT este o alt operaie boolean de AND, OR i XOR, prin faptul c are o singur intrare i o singur ieire. Ieirea reprezint opusul intrrii; dac intrarea operaiei NOT este adevrat, ieirea este fals, i invers.

1.1.2. Tehnici de stocare Calculatoarele anilor '60 conineau inele de material magnetic de dimensiuni mici, denumite miezuri (cores), pe care erau nfurate fire electrice, [mini]bobine. La trecerea curentului electric prin bobine, miezul poate fi magnetizat ntr-una din cele dou direcii. Direcia cmpului magnetic poate fi detectat observndu-se efectul asupra unui curent electric ce trece prin centrul miezului. Astfel un miez reprezint o posibilitate de memorare a unui bit. Datorit dimensiunilor lor mari i a necesarului ridicat de putere (electric), aceste sisteme sunt depite astzi. Calculatoarele nregistreaz datele nc utiliznd tehnologia magnetic, dar ntr-un mod foarte apropiat de acela n care se fac nregistrrile pe band magnetic. In unele sisteme de calcul se folosete, de asemenea, i tehnica laserului pentru nregistrarea bitilor. Diferenele dintre circuitele basculante bistabile electronice i dispozitivele de stocare magnetice (sau laser) reprezint argumente pro i contra n ceea ce privete aplicaiile lor.

12

Circuite basculante bistabile electronice care pot fi acionate electronic sunt mai rapide dect cele magnetice i, de aceea, sunt utilizate pentru stocarea datelor n circuitele interne ale calculatorului. ns un circuit basculant bistabil electronic pierde informaia stocat n el atunci cnd sursa de alimentare este oprit. n schimb, dispozitivele de stocare magnetice sau cu laser pstreaz datele, ceea ce le recomand pentru realizarea de sisteme de stocare cu longevitate mare.

1.1.3. Sistemul de notaie hexazecimal Cnd ne referim la activitile din interiorul unui calculator lucrm cu iruri de bii, care pot fi uneori foarte lungi. Pentru a simplifica reprezentarea irurilor de bii, se va analiza o notaie prescurtat, denumit notaia hexazecimal (hexadecimal notation). Notaia hexazecimal utilizeaz un singur simbol pentru reprezentarea a patru bii. Sistemul de codificare hexazecimal:

Figura 1.2 - Sistemul de notaie hexazecimal

1.2.

Memoria principal

n scopul stocrii datelor, un calculator conine un mare numr de circuite, fiecare dintre ele fiind capabile s stocheze bii. Acest "rezervor" de bii este cunoscut sub numele de memorie principal (main memory).

13

1.2.1. Organizarea memoriei principale Celulele de stocare din memorie sunt organizate n uniti, (cuvinte) cu dimensiunea uzual de 8 bii. Acest ir de 8 bii a impus cuvntul octet i, de asemenea, a impus pentru cuvntul byte - ir de bii cu aceeai lungime. Dimensiunea memoriei este adesea msurat n multipli de 1.048.576 celule (1.048.576 = 220, fiind mai natural pentru a fi utilizat dect 1.000.000 care este o putere a lui 10). Pentru a desemna aceast unitate de msur se folosete termenul mega. Deci: 1 mega byte (1 MB) 1.048.576 byte. Alte uniti de msur a dimensiunilor de memorie sunt kilooctetul kilobyte (KB) care este egal cu 1024 octei (210 octei) i gigaoctetul gigabyte (GB) care este egal cu 1024 MB (230 octei). Pentru identificarea celulelor individuale din memoria principal a unui calculator, fiecare are atribuit un nume unic, denumit adres. Adresele utilizate in tehnica de calcul sunt n ntregime numerice. Pentru exemplificare putem considera toate celulele de memorie plasate pe un singur rnd i numerotate n ordine cresctoare pornind de la 0. Acest sistem permite identificarea unic a unei celule i, de asemenea, o relaie de ordonare ntre celule permite referiri de tipul "celula precedent" sau "celula urmtoare". Celulele din memoria principal care stocheaz bii sunt combinate cu circuite necesare pentru a permite, si altor circuite s stocheze i s recupereze datele din celulele memoriei principale. Exist astfel si alte celule (circuite) care pot prelua datele din memorie solicitnd informaii despre coninutul unei anumite adrese (operaie de citire) sau pot nregistra informaii n memorie solicitnd ca un anumit ir de bii s fie plasat n celula aflat la o anumit adres (operaie de scriere). Acest sistem de identificare a celulelor memoriei principale permite apelarea, cercetarea i modificarea individual a acestora. Astfel, o celul a memoriei principale cu o adres mic este la fel de accesibil ca si una cu o adres foarte mare, deci datele stocate n memoria principal a calculatorului pot fi prelucrate n orice ordine. Din aceste motive memoria principal a unui calculator se mai numete i memorie cu acces aleator (random access memory RAM).

14

Acest acces aleator la mici uniti de date (celula) se deosebete radical de sistemele de stocare de mas (care manipuleaz iruri lungi de bii sub forma de blocuri).

1.2.2. Organizarea unei celule de memorie Considerm biii dintr-o celul de memorie ca fiind aranjai pe un rnd. Vom denumi capetele acestui rnd marginea superioar , iar cellalt capt marginea inferioar. Considera deasemenea biii aranjai ntr-un rnd orientat de la stnga la dreapta cu marginea superioar plasat la stnga. Bitul de la captul din stnga este denumit cel mai semnificativ bit.

Figura 1.3 - Organizarea unei celule de memorie cu dimensiune de un octet

Memoria primara Memoria (Memory) pstreaz programele i datele. Fr o memorie, din care procesoarele s poat citi i n care s poat scrie informaii, nu poate exista nici un calculator numeric cu program memorat. Bii Unitatea elementar a memoriei este cifra binar, numit bit. Un bit poate conine un 0 sau un 1. Sistemul de numerotare binar necesit numai dou valori distincte, reprezentnd cea mai sigur metod pentru codificarea informaiei numerice. Ordinea octeilor Octeii dintr-un cuvnt pot fi numerotai de la stnga la dreapta, sau de la dreapta la stnga. Vom reprezenta n figur o parte a memoriei unui calculator pe 32 bii.

15

Figura 1.4 a Bii numerptai de la stnga la dreapta

Figura 1.4 b Bii numerotai de la dreapta la stnga

16

S precizm cum vom reprezenta valoarea numeric: 6 este reprezentat de biii 110 n partea cea mai din dreapta a unui cuvnt i de zerouri pe ceilali 29 de bii din stnga. Majoritatea aplicaiilor au nevoie de un amestec de numere intregi, iruri de caractere i alte tipuri de date. S considerm o fi simpl de personal: nume angajat, vrsta i codul departamentului (Paul Sandu, 21 ani, Departament = 260 = 1 x 256 + 4) i s o reprezentm n cele dou moduri precizate mai sus.

Figura 1.5 Reprezentarea unei fie de personal

Reprezentrile sunt bune i consistente intern, problema apare la transmiterea fiei, prin reea de la maina cea mai semnificativ ctre cealalt main. Rezultatul transferului propus arat astfel:

Figura 1.6 Rezultatul obinut Maina a inversat n timpul transmisiei: ordinea caracterelor din cuvnt (ceea ce este corect), octeii dintr-un ntreg (ceea ce este incorect). O soluie este de a inversa octeii prin software (dup crearea unei copii), ceea ce va conduce la :

17

Figura 1.7 Soluia de inversare prin software a octeilor

Problema este poziia caracterului "U poziionat prost. Soluii de ndreptare nu exist la transferul ntre maini diferite ca organizare a memoriei. Apare evident necesitatea unui standard pentru stabilirea ordinii octeilor n cadrul organizrii memoriei.

Memoria intermediar ntotdeauna CPU-urile au fost mai rapide dect memoriile. Proiectanii CPU-ului sunt preocupai de sporirea vitezei acestora, pe cnd proiectanii memoriilor sunt preocupai de sporirea capacitii, i nu de sporirea vitezei. Datorit acestor abordri, situaia CPU-urilor i a memoriilor, vis--vis de vitez, continu s se nruteasc n timp. Practic, acest dezechilibru are urmtoarea metamorfozare: dup ce CPU-ul a lansat o cerere ctre memorie, nu va primi cuvntul ateptat timp de mai multe cicluri CPU; cu ct memoria este mai lent, cu att CPU-ul are mai mult de ateptat. n acest moment, inginerii tiu cum s construiasc memorii la fel de rapide ca i CPUurile, dar ar trebui ncorporate n cip-ul CPU, crescndu-i dimensiunile i costul. Cip-ul CPU este limitat la anumite dimensiuni. n acest sens, se cunosc tehnici de combinare a unei cantiti mici de memorie rapid cu o cantitate mare de memorie lent, la un pre moderat. Memoria mic, rapid, se numete memorie intermediar (cache). Ideea de baz a unei memorii intermediare : cuvintele de memorie cele mai frecvent utilizate sunt pstrate n memoria intermediar.

18

Figura 1.8 Plasarea memoriei intermediare

1.3.

Dispozitive de stocare de mas

Limitele tehnologice precum i necesitatea stocrii unor copii de siguran ale datelor vitale, au fcut ca memoria principal a unui calculator s nu satisfac cerinele impuse de diversele aplicaii. Din aceste motive, calculatoarele sunt echipate, pe lng memoria principal, cu sisteme de stocare de mas (mass storage system), denumite i memorie secundar. Stocarea datelor pe aceste sisteme se face n uniti de mari dimensiuni denumite fiiere (files). Unul din principalele dezavantaje ale sistemelor de stocare de mas este acela c, n general, ele necesit o micare suplimentara mecanic, astfel fiind mai lente la stocarea i recuperarea datelor n comparaie cu memoria principal a calculatorului. Principalul avantaj al dispozitivelor de stocare de mas este acela c, n multe situaii, sunt mai ieftine dect memoria principal, iar suportul pe care se nregistreaz datele poate fi extras din calculator i depozitat ntr-un loc sigur n scopul recuperrii ulterioare a datelor. Cu privire la dispozitivele care pot fi cuplate sau decuplate de la calculator, se folosesc termenii on-line i off-line. Termenul On-line indica c dispozitivul sau informaiile sunt conectate i pot fi folosite de calculator fr intervenie uman. Termenul Off-line indica c este necesar intervenia uman nainte ca dispozitivul sau informaiile s poat fi utilizate de calculator; dispozitivul trebuie pornit sau informaiile trebuie introduse ntr-un anumit mecanism.

19

Memoria secundar Orict de mare ar fi memoria principal. ntotdeauna ea va fi prea mic pentru cerinele utilizatorilor.

Figura 1.9 - Ierarhie de memorii cu cinci niveluri Mrimea memoriei intermediare are dimensiuni de la 32 KB pn la zeci de MB. Memoria principal are dimensiuni de la 16 MB pn la zeci de GB. Discul magnetic este suportul actual pentru pstrarea permanent (80 GB, 100 GB, 120 GB, 200 GB) i st la baza ierarhiei de memorii, iar banda magnetic i discul optic sunt destinate pstrrii arhivelor. Exist urmtorii parametri importani de caracteristice specifice, pe msur ce ne deplasm spre baza ierarhiei: 1. Timpul de acces se mrete (crete). Registrele CPU pot fi accesate n cteva monosecunde; Memoriile intermediare pot fi accesate ntr-un multiplu apropiat de timpul de acces al registrelor; Timpii de acces la memoria principal au valori tipice de cteva zeci de nanosecunde ; Timpii de acces la discul magnetic 10 msec;
20

Timpii de acces la banda magnetic i discul optic sunt de mrimea secundelor (inclusiv timpul de extragere i inserare n dispozitivul de intrare/ieire).

2. Capacitatea de stocare crete. Registrele CPU pot stoca 128 octei; Memoriile intermediare pot stoca civa megaoctei (MB); Memoriile principale: zeci mii MB; Discurile magnetice: zeci sute GB; Benzile magnetice i discurile optice nu sunt tot timpul utilizate, astfel nct capacitatea lor este limitat de bugetul proprietarului. 3. Numrul de bii primit pe dolar crete. Preurile pe componente se msoar astfel: Memoria principal, n dolari/MB; Stocarea pe discul magnetic n centime/pennies/MB; Stocarea pe banda magnetic, n dolari/GB.

1.3.1. Discuri magnetice Un disc magnetic este alctuit din unul sau mai multe platane de aluminiu, cu un nveli magnetizabil. Iniial, diametrele acestor discuri erau de 50 cm, 12 cm, dar acum (2005) au n general 3 cm sau mai puin. Un cap de citire/scriere, care conine o bobin de inducie ce se deplaseaz foarte aproape de suprafaa platanului, sprijinindu-se pe o pern de aer (cu

excepia discurilor flexibile/dischetelor unde atinge suprafaa). La trecerea unui curent negativ/pozitiv prin bobina capului, acesta magnetizeaz suprafaa de dedesubtul capului, aliniind particulele magnetice la dreapta sau la stnga, funcie de polaritatea curentului. Astfel, se realizeaz scrierea, citirea realizndu-se n modul precizat n paragraful urmtor. La trecerea capului de citire peste o suprafa magnetizat, un curent pozitiv/negativ este indus n bobina capului. n continuare este prezentat geometria unei piste specifice discului magnetic.

21

Figura 1.10 - O poriune a unei piste a discului (sunt precizate dou sectoare) Secvena circular de bii scris la rotaia complet a discuie se numete pist (track). Fiecare pist este mprit n sectoare de lungime fix, de obicei de cte 512 octei de date, precedai de un preambul care permite capului s se sincronizeze nainte de citire sau scriere. Dup zona de date urmeaz un cod corector de erori (ECC Error Correcting Code), fie un cod Hamming, fie un cod care poate corecta erori multiple numit Cod Reed Solomon. Sectoarele consecutive sunt separate de un spaiu ntre sectoare (Intersector gap). Capacitatea discului formatat este cu cca. 15% mai mic dect cea a discului neformatat. La fiecare distan radial poate fi scris o alt pist. Pistele (coroane circulare) sunt cercuri concentrice fa de axul discului. Cu tehnologia actual, discurile au ntre 800 i 2000 de piste pe centimetru, lrgimea pistei fiind ntre 5-10 microni. Discurile actuale ajung de la densiti de 50000 pn la 100000 bii/cm. Astfel de discuri se numesc discuri Wincester. Majoritatea discurilor sunt constituite din mai multe platane suprapuse pe vertical. Fiecare platan dispune de propriul bra i cap. Braele sunt sudate ntre ele; la o deplasare ntr-o nou poziie radial sunt mutate toate odat. Setul de piste dintr-o poziie radial se numete cilindru. Factorii care influeneaz performanele discurilor sunt:

22

deplasare n poziia radial corect, cutare (seek); timpii medii de cutare (ntre piste alese aleatoriu) se situeaz n intervalul 5-15 msec.; latena de rotaie (rotational latency) necesar rotirii platanului astfel nct sectorul dorit s ajung sub capul de citire; ntrzierea medie: 4 8 msec. Majoritatea discurilor se rotesc la 5400, 7200, 10800 rotaii/minut;

timpul de transfer depinde de densitatea linear i de viteza de rotaie i are valori de 25 100 microsecunde (la data de transfer 5 20 MB/sec., pentru un sector de 512 octei). Evident, timpul de cutare i latena sunt predominante n timpul de transfer. Fiecrui

disc i este asociat un controlor de date (disk controller), un cip care controleaz dispozitivul. Printre sarcinile controlerului sunt : acceptarea comenzilor de la software, de tipul READ, WRITE, FORMAT; controlul micrii braului; detecia i corecia erorilor; conversia datelor citite din memorie; cnd controlorul descoper un sector defect, l nlocuiete cu unul din sectoarele libere rezervate n acest scop n cadrul fiecrui cilindru. Cea mai obinuit form de stocare de mas utilizat n prezent o reprezint stocarea pe disc. n aceast structur, stocarea datelor se face pe un disc subire care se nvrtete i care este acoperit cu o pelicul subire de material magnetic. Deasupra i/sau dedesubtul discului sunt plasate capete de citire/scriere, astfel nct, pe msur ce discul se rotete, fiecare cap parcurge un cerc denumit pist (track) care se afl pe suprafaa de sus sau jos a discului. Deoarece fiecare pist conine mai multe informaii dect vom dori s prelucrm la un moment dat, pistele sunt mprite n arce de cerc denumite sectoare, unde informaiile sunt nregistrate ca un ir continuu de bii. Prin repoziionarea capetelor de citire/scriere se obine acces la sectoare situate pe diferite piste concentrice. Pistele sunt compuse din mai multe sectoare individuale, fiecare dintre ele putnd fi tratate ca un ir de bii independent. Numrul de piste de pe suprafaa discului, precum i numrul de sectoare de pe o pist, difer de la un sistem la altul. Dimensiunile sectoarelor sunt n general fie de 512 octei, fie de 1024 octei.

23

Figura 1. 11 - Structura unui sistem de stocare pe disc

Localizarea pistelor i sectoarelor nu reprezint ceva permanent n structura fizic a discului, ele sunt marcate magnetic printr-un proces denumit formatare (sau iniializare) a discului. Cele mai multe sisteme de calcul pot reformata discurile atunci cnd formatul acestuia nu este compatibil cu cel propriu. Reformatarea unui disc distruge toate informaiile stocate anterior pe el. Sistemele cu capacitate mic utilizeaz un singur disc, denumit i dischet/disc flexibil (floppy disk). Sunt disponibile in comer astfel de dischete. Dischetele au diametrul de 31/2 oli, si sunt introduse ntr-o carcas rigid de plastic. Dei capacitatea dischetelor este limitat la civa megaoctei (1,44 MB), ele au avantajul c se introduc i se scot uor n unitatea citire/scriere i sunt uor de pstrat. Dischetele reprezint o soluie bun pentru stocarea off-line a informaiilor. Discurile de mare capacitate, care pot stoca mai muli gigaoctei de date, constau dintr-un numr de cinci pn la zece discuri fixe, montate n paralel pe un ax comun, cu suficient spaiu ntre ele nct s permit accesul capetelor de citire/scriere. Deoarece aceste discuri sunt rigide, ele sunt cunoscute sub numele de hard-disc. n cazul acestor sisteme (hard-disc) capetele de citire/scriere nu ating suprafaa discului, ceea ce-i permite acestuia viteze mari de rotaie. Distana dintre capetele de citire/scriere i suprafaa dischetei este foarte mic, astfel nct o particul de praf se poate bloca ntre cap i
24

suprafaa discului deteriorndu-le pe amndou. Pentru prevenirea acestui fenomen hard-discul este nchis ntr-o carcas etan. Pentru evaluarea performanei discurilor se folosesc mai multe criterii (parametrii): timpul de cutare (seek time) = timpul necesar deplasrii capetelor de citire/scriere de la o pist la alta; timpul de ntrziere (rotation delay/latency time) = jumtate din timpul necesar pentru ca discul s efectueze o rotaie complet, respectiv timpul mediu n care datele respective ajung n poziia capului de citire/scriere dup ce acesta a fost adus la pista dorit; timpul de acces (access time) = suma dintre timpul de cutare i timpul de ntrziere; rata de transfer (transfer rate) a datelor ctre sau de la disc. Deoarece capetele de citire/scriere nu ating suprafaa discului, ele pot avea viteze de rotaie de cca. 50007000 rotaii/minut, n timp ce n cazul discurilor flexibile aceste viteze nu depesc 300 rotaii/minut. Rata de transfer a discurilor fixe se msoar n megabytes/secund, fa de cea a dischetelor care se msoar n kilobytes/ secund. Dac timpul de ntrziere se msoar, n cazul circuitelor electronice n nanosecunde (miliardimi de secund) i chiar mai mici, timpii de cutare, ntrziere i acces n cazul discurilor se msoar n milisecunde (miimi de secund).

1.3.2. Discuri compacte Discul compact (CD) este compatibil cu cel utilizat n domeniul nregistrrilor muzicale, cu diferena c, pentru a obine rate ridicate de transfer al datelor, cititoarele de CD-uri din calculatoare, rotesc mult mai rapid discul. Aceste discuri, cu diametrul de cca. 5 oli, sunt confecionate dintr-un material reflectorizant, acoperit cu o pelicul protectoare transparent. nregistrarea informaiilor pe CD se face prin creare de striaii n adncimea suprafeei reflectorizante. Informaiile sunt stocate pe o singur pist care are form de spiral. Una din cele mai rspndite forme actuale de stocare a datelor pe compact-disc este reprezentat de dispozitivele ce pot fi numai citite, denumite CD-ROM (Compact disk read only memory). Capacitatea de stocare a acestor CD-ROM-uri este de 600 MB. Sunt, de asemenea, dispozitive si sisteme CD care permit si modificarea datelor stocate. Exist de asemenea sisteme care utilizeaz dispozitive magneto-optice pentru nregistrarea
25

informaiilor, topind suprafaa reflexiv de pe CD cu ajutorul unei raze laser i apoi rearanjnd-o prin intermediul unor cmpuri magnetice nainte ca aceasta s se rceasc.

1.3.3. Benzi magnetice Dispozitivele de stocare mai vechi utilizeaz banda magnetic. Informaiile se nregistreaz pe o pelicul magnetic depus pe o band de material plastic, care este stocat pe un sir de role. Pentru acces la date, banda magnetic este introdus ntr-o unitate de band care poate derula banda, citi i scrie informaia sub controlul calculatorului. Exist i uniti de band magnetic cu cartu care utilizeaz casete. Depinznd de formatul utilizat, pe unele benzi magnetice pot fi stocate volume de ordinul gigabytes (GB).

1.3.4. nregistrri logice i fizice Datele n memoria principal a unui calculator pot fi apelate la nivelul celulelor de memorie de dimensiunea unui octet. Proprietile fizice ale dispozitivelor de stocare de mas impun ca manipularea datelor stocate s se fac utiliznd uniti cu dimensiuni mai mari de un octet. Un bloc de date corespunztor caracteristicilor fizice ale unui dispozitiv de stocare este denumit nregistare fizic (phisycal record). n afara mpririi datelor n nregistrri fizice determinate de caracteristicile dispozitivului de stocare, fiierele stocate posed o diviziune natural, legat de structura aplicaiei din care fac parte. De exemplu, un fiier care conine informaii referitoare la angajaii unei firme este alctuit de obicei din blocuri de informaii referitoare la fiecare angajat. Aceste blocuri de date care apar n mod natural sunt denumite nregistrri logice (logical records). Dimensiunile nregistrrilor logice se potrivesc cu totul ntmpltor ca lungime (mrime) cu dimensiunile nregistrrilor fizice impuse (ca mrime) de un dispozitiv de stocare. n consecin este posibil s existe mai multe nregistrri logice stocate ca o singur nregistrare fizic sau o nregistrare logic stocat pe mai multe nregistrri fizice. n acest spirit, pentru

26

recuperarea datelor de pe sistemele de stocare de mas este necesar o anumit activitate de decodificare.

1.4.

Codificarea utilizat pentru stocarea informaiilor

n continuare vor fi studiate mai n amnunt tehnicile utilizate pentru reprezentarea informaiilor sub forma unor iruri de bii.

1.4.1. Reprezentarea simbolurilor Reprezentarea datelor ntr-un calculator se realizeaz prin proiectarea unui cod n care diferite simboluri (litere alfabetice, semne de punctuaie etc.) au asociate abloane (modele) de bii unice pentru ca informaia sa poata fi stocata sub forma unor propoziii codificate pe suportul magnetic. Astfel au fost create i folosite diverse coduri pentru diferite echipamente, acest lucru avnd ca efect apariia i proliferarea problemelor de comunicaie. Pentru a remedia aceast situaie, Institutul American pentru Standarde (American National Standards Institute ANSI) a adoptat codul American Standard Code form Information Interchange (ASCII). Acest cod utilizeaz modele cu o lungime de apte bii pentru reprezentarea literelor mari i mici ale alfabetului englez, semnelor de punctuaie, cifrelor de la 0 la 9, precum i a anumitor caractere de control (trecere rndul urmtor line feed, revenire la marginea din stnga a rndului carriage return, tabulator tab). n prezent codul ASCII este extins la un format de opt bii pe simbol, prin adugarea uni zero pe poziia celui mai semnificativ bit n faa fiecrui ablon al vechiului cod pe apte bii. Exist i alte coduri mai puternice capabile s reprezinte documente scrise ntr-o varietate de limbaje. Ele utilizeaz abloane (modele) pe 16 bii (65.536 abloane diferite) sau chiar pe 32 bii (peste 17 milioane de abloane). [Unicode, cod dezvoltat de I S O (International Standard Organisation).]

27

1.4.2. Reprezentarea valorilor numerice Metodele de stocare a informaiilor sunt ineficiente atunci cnd informaiile ce trebuie memorate sunt de natur numeric. Pentru nelegere, s presupunem c vrem s stocm nr. 99 sub forma unor simboluri ASCII; sunt necesari 16 bii, dar observm c acesta este cel mai mare numr stocabil pe 16 bii. O abordare mult mai eficient este stocarea valorii reprezentate n baza doi (binar). n notaia binar (baza doi) poziia fiecrei cifre este asociat cu o anumit pondere, numai c ponderea asociat fiecrei poziii este de dou ori mai mare dect ponderea poziiei din dreapa. Mai exact, cifra cea mai din dreapta a unei reprezentri binare are asociat ponderea 1 (20), urmtoarea poziie n stnga cu 2 (21) i aa mai departe.

Figura 1.12 - Sistemul zecimal de numeraie

Figura 1.13 - Sistemul binar de numeraie

Pentru a afla valoarea unei reprezentri n binar, vom nmuli valoarea fiecrei cifre cu ponderea asociat poziiei sale i vom aduna rezultatele.

28

Figura 1.14 - Decodificarea reprezentrii binare 100101

Pentru a afla reprezentarea n binar exist un algoritm clasic. Pasul 1. Pasul 2. Se mparte valoarea la doi i se memoreaz restul. Ct timp ctul obinut difer de zero, se continu mprirea noului ct la doi, memorndu-se restul. Pasul 3. Cnd s-a obinut un ct egal cu zero, reprezentarea n binar a valorii iniiale const din resturile mpririlor afiate de la dreapta la stnga n ordinea n care au fost memorate.

29

Figura 1.15 - Reprezentarea n binar a numrului treisprezece

1.4.3. Reprezentarea altor tipuri de date Aplicaiile utilizate n informatica implica si folosirea de imagini, sunete, secvene video. Tehnicile pentru reprezentarea acestor categorii de date nu sunt nc global standardizate la nivel mondial. Una din metodele utilizate pentru stocarea imaginilor este considerarea imaginii ca o colecie (suma) de puncte (pixel picture element). n forma cea mai simpl, o imagine albnegru poate fi codificat ca un lung ir de bii ce reprezint liniile de pixeli, unde fiecare bit are valoarea 1 sau 0, funcie de culoarea alb sau negru. Reprezentrile de acest tip sunt cunoscute sub numele de hri de bii (bit maps), deci irul de bii nu este altceva dect o hart a imaginii reprezentate. Sistemele hri de bii includ fiiere de tip T I F F (Tag Image Format File) i "populare" de G I F (Graphic

Interchange Format). Fotografiile sunt prezentate ca hri de bii prin fiiere n format JPEG (Joint Photographic Experts Group). n cadrul acestor reprezentri acestor fiier imaginea nu poate fi scalat la o dimensiune arbitrar. Exist posibilitatea scalrii imaginii prin memorare ca un set de directive care precizeaz modul de desenare. Acest mod de precizare a modului de desenare furnizeaz o

30

descriere compatibil cu orice mrime a unitilor sistemului de coordonate care ar putea fi specificat atunci cnd se afieaz imaginea. De asemenea, tot metode de reprezentare a datelor sunt i MPEG (Motion Picture Experts Group) tehnic pentru date video i audio, i D X F (Drowing Interchange Format) utilizat la sisteme de proiectare asistat de calculator, unde imaginile trebuie rotite i redimensionate pe ecranul monitorului.

1.5.

Sistemul binar de numeraie

Pentru studierea tehnicilor de stocare a valorilor numerice utilizate la calculatoarele de astzi, trebuie mai nti cunoscut sistemul de reprezentare binar.

1.5.1. Adunarea n binar Pentru a aduna dou valori reprezentate n notaia binar, se procedeaz astfel: Se adun cifrele din coloana cea mai din dreapta, se scrie cifra cea mai puin semnificativ a acestei sume sub coloan, se transport cea mai semnificativ cifr a sumei (dac exist) n urmtoarea coloan din stnga i se adun apoi coloana respectiv.

Exemplu :

00111010 + 00011011

Se adun cifrele cele mai din dreapta 0 i 1 i obinem cifra 1, pe care o scriem sub coloana respectiv.

00111010 +00011011 1 Se adun apoi 1 i 1 din coloana urmtoare, obinnd rezultatul 10. Vom scrie 0 sub coloan i vom transfera cifra 1 deasupra coloanei urmtoare.

31

1 00111010 +00011011 101 Se adun cifrele 1, 0 i 0 din coloana urmtoare, obinnd rezultatul 1, i vom scrie 1 sub coloan. Cifrele din coloana urmtoare 1 i 1 dau ca rezultat al adunrii 10; se va scrie cifra 0 sub coloana respectiv i vom transfera cifra 1 deasupra coloanei urmtoare. 1 00111010 +00011011 0101

Adunm cifrele 1, 1 i 1 din aceast coloan i obinem 11; se va scrie cifra 1 sub coloana respectiv i vom transfera cifra 1 deasupra coloanei urmtoare. 1 00111010 +00011011 10101

Se va continua n acelai fel, obinnd n final:

00111010 + 00011011 01010101

1.5.2. Reprezentarea fraciilor n sistemul binar Pentru extinderea notaiei binare, pentru a fi adecvat reprezentrii valorilor fracionare, se va utiliza notaia n virgul fix (radix point). Aceasta nseamn c cifrele de la stnga virgulei mobile (punctului) reprezint partea ntreag a valorii i sunt interpretate ca n sistemul

32

binar, iar cifrele din dreapta punctului reprezint partea fracionar a valorii i sunt interpretate ntr-o manier similar, poziiile lor avnd asociate ponderi fracionare. Astfel prima poziie din dreapta punctului are atribuit ponderea 1/2, urmtoarea 1/4, apoi 1/8 i aa mai departe. Rezult c regula aplicat anterior rmne valabil, fiecare poziie are o pondere alocat de dou ori mai mare dect cea a poziiei din dreapta sa. Exemplu :

Figura 1.16 - Decodificarea reprezentrii binare 101 . 101

Pentru a aduna dou reprezentri binare n virgul fix, se vor alinia unul sub altul punctele de separare ntre partea ntreag i cea fracionar i se va aplica acelai proces de adunare ca i cel prezentat anterior. Exemplu : 1 0 0 1 1 +1 0 0 1 1 1 2 1 1 0 0 1

33

1.6.

Stocarea numerelor ntregi

Adesea avem nevoie s memorm att valori pozitive ct i valori negative, deci este nevoie de un sistem de notare care s reprezinte ambele categorii de numere (pozitive i negative). Sistemele de notaie pentru reprezentarea ambelor categorii de numere pot folosi circuite electronice realizate i utilizate pe scar larg n cadrul echipamentelor de calcul. Vom prezenta n continuare dou astfel de sisteme de notaie: notaia n exces (excess notation) i notaia n complement fa de doi (two's complement notation).

1.6.1. Notaia n exces Valorile din sistemul de reprezentare n exces sunt codificate utiliznd cuvinte binare de aceeai lungime. Pentru realizarea unui sistem de notaie n exces se stabilete mai nti lungimea cuvintelor binare utilizate, apoi scriem una sub alta toate combinaiile posibile n ordinea n care ar aprea dac am numra n binar. n aceast niruire observm c primul cuvnt binar care are pe poziia biului cel mai semnificativ valoarea 1 survine aproximativ la jumtatea listei. se va considera c acest model reprezint valoarea 0. cuvintele binare care urmeaz reprezint valorile 1, 2, 3,... cuvintele binare care-l preced sunt utilizate pentru codificarea valorilor negative -1, 2, -3,... -

34

Figura 1.17 - Tabel conversie pentru sistemul de notaie n exces cu opt

Figura 1.18 - Sistemul de notaie n exces care utilizeaza cuvinte cu lungimea de trei bii

1.6.2. Notaia n complement fa de doi Cel mai folosit sistem de reprezentare a numerelor ntregi n informatica este notaia n complement fa de doi (two's complement notation). Acest sistem utilizeaz un numr fix de bii pentru reprezentarea valorilor din cadrul sistemului. n figurile 1.13.1 si 1.13.2. sunt prezentate sistemele n complement fa de doi bazate pe cuvinte de cod cu lungimea de trei i
35

patru. Pentru construcia unui astfel de sistem se ncepe cu un ir de bii cu valoarea 0 de lungime adecvat i apoi se numr n binar pn cnd se ajunge la un ir de bii care ncepe cu un bit 0, iar toi ceilali bii sunt 1. Cuvintele obinute astfel reprezint valorile 0, 1, 2, 3,... Utiliznd cuvinte binare de lungime trei bii :

Figura 1.19 - Sisteme de notaie n complement fa de doi (trei bii)

Utiliznd cuvinte binare de lungime patru bii :

Figura 1.20 - Sisteme de notaie n complement fa de doi (patru bii)

36

Cuvintele care reprezint valorile negative se obin ncepnd cu un ir de bii cu valoarea 1 i numrul n sens descresctor, pn la atingerea cuvntului care ncepe cu un bi 1 i are toi ceilali bii 0. Cuvintele astfel obinute reprezint valorile -1, -2, -3,... Se observ c bitul de semn, n notaia n complement fa de doi, este 1 pentru valorile negative i 0 pentru valorile pozitive. Complementul unui cuvnt binar este cuvntul obinut prin schimbarea tuturor biilor de 1 n valoarea 0, respectiv a tuturor biilor 0 n 1; cuvntul 0110 este complementul lui 1001 i invers. n sistemul de codificare n complement fa de doi pe 4 bii din figura 1.13.2., cuvintele care reprezint valorile 2 i -2 se termin amndou n 10, cuvntul corespunztor valorii 1 ncepe cu 00, iar reprezentarea valorii -2 ncepe cu 11. Aceast observaie conduce la realizarea unui algoritm care s permit obinerea reprezentrii binare pentru valori de semne contrare, dar care au acelai modul. Vom copia cuvntul original ncepnd de la dreapta pn dup apariia unui bit cu valoarea 1, apoi vom face complementul biilor rmai (vom schimba toi biii 1 rmai n 0 i toi biii 0 n 1) pe msur ce-i copiem.

Figura 1.21 - Codificarea valorii -6 n complement fa de doi utiliznd 4 bii


37

Aceste proprieti elementare ale sistemelor n complement fa de doi conduc la obinerea unui algoritm pentru decodificarea reprezentrilor n complement fa de doi. Dac modelul (ablonul) ce trebuie decodificat are bitul de semn 0, se va citi direct valoarea ca i cum cuvntul ar fi o reprezentare binar (ex. 0110 reprezint valoarea binar 110, adic 6). Dac ablonul care trebuie decodificat are bitul de semn 1, se va nelege c valoarea reprezentat este negativ i trebuie gsit modulul acestei valori. Modulul cutat se va

determina copiind cuvntul original de la dreapta la stnga, pn la primul bit egal cu 1 (inclusiv acesta), apoi vom complementa biii rmai i i vom scrie n continuare tot de la dreapta la stnga (lng biii deja copiai), iar n final vom decodifica cuvntul obinut ca i cnd ar fi o reprezentare binar normal (ex. decodificm 1010; bitul de semn este 1, deci valoarea numrului este negativ; convertim cuvntul i obinem 0110, ceea ce corespunde valorii 6, deci ablonul original reprezint valoarea -6).

1.6.3. Adunarea numerelor reprezentate n complement fa de doi Pentru adunarea valorilor reprezentate n complement fa de doi se aplic acelai algoritm ca i pentru adunarea n binar, cu excepia faptului c toate cuvintele binare, inclusiv rezultatul, au aceai lungime. Altfel spus, la adunarea n complement fa de doi, orice bit suplimentar generat la stnga rspunsului de ctre un transport final va fi eliminat.

De exemplu:

0 1 0 1 0 0 1 0 0 1 1 1

0 1 1 1 1 0 1 1 0 0 1 0

Acceptnd aceast convenie, s considerm urmtoarele trei probleme de adunare: 3

0 0 1 1

+2 +0 0 1 0 0 1 0 1

1 + (-2) + 1
(-3)

1 0 1 1 1 0

1 0 1 1 -5

38

0111 +(-5) +1 0 1 1
7 0 0 1 0

Figura 1.22 - Probleme de adunare utiliznd notaia n complement fa de 2

n fiecare caz n parte, vom codifica valorile utiliznd notaia n complement fa de doi (pe patru bii), vom efectua adunarea procednd aa cum s-a descris anterior i vom decodifica rezultatul napoi la notaia zecimal. Se observ c, prin trecerea la notaia n complement fa de doi, putem calcula rspunsul corect aplicnd n toate cazurile acelai algoritm de adunare. Dac am folosi tehnicile uzuale, a treia problem ar fi de fapt un proces complet diferit de primele dou; este vorba de operaia de scdere. Deci, n calculatorul care utilizeaz notaia n complement fa de doi se realizeaz numai adunare i negarea biilor. n consecint, dac n calculator se dorete scderea lui 5 (0101) din 7 (0111), mai nti va fi schimbat n -5 (1011) i apoi se va efectua adunarea 0111 + 1011 = 0010, ceea ce reprezint valoarea 2. n ceea ce privete nmulirea, ea este o adunare repetat, iar mprirea o scdere repetat (ex. 6:2 reprezint de fapt de cte ori poate fi sczut 2 din 6 fr s se obin un rezultat negativ). Astfel putem efectua toate cele patru operaii aritmetice standard (adunarea, scderea, nmulirea i mprirea) utiliznd un circuit pentru adunare combinat cu un circuit pentru negarea unei valori.

1.6.4. Problema depirii superioare n oricare din sistemele de numeraie pe care le-am prezentat exist o limit privind mrimea pe care pot s o reprezinte valoric. La utilizarea notaiei n complement fa de doi cu cuvinte de patru bii, valoarea 9 nu are asociat un model (ablon), deci nu putem efectua corect adunarea 5+4.

39

O problem similar apare la utilizarea de cuvinte de cinci bii;de ex. s ncercm s reprezentm valoarea 17, apar erori. Aceste erori se numesc depiri superioare (overflow). Depirea superioar, la utilizarea notaiei n complement fa de doi, poate apare la adunarea a dou valori negative sau pozitive. Depirea poate fi detectat prin verificarea bitului de semn al rspunsului. Altfel spus, dac rezultatul adunrii a dou valori pozitive/ negative apare ca fiind negativ/pozitiv, este semnalata depasirea superioara. Deoarece calculatorul manipuleaz cuvinte mult mai lungi dect cele precizate mai sus (3 bii/4 bii), valorile mari pot fi prelucrate fr s apar o valoare de depire (de exemplu, pentru calculatoarele care utilizeaz cuvinte de 32 de bii pentru stocare, n notaia n complement fa de doi, este posibil lucrul cu valori de pn la 2.147.483.647, fr apariia depirii superioare). Dac sunt necesare valori i mai mari, se folosete metoda denumit dubla precizie (double precision). Aceast metod permite ca lungimea cuvintelor utilizate s fie mrit fa de cea utilizat de obicei de ctre calculator. Exist i alte soluii, cum ar fi schimbarea unitii de msur cu pstrarea preciziei impuse.

1.7.

Stocarea numerelor fracionare

n acest caz trebuie memorat i poziia virgulei zecimale nu numai modelele (abloanele) de 0 i 1. Metoda uzual pentru a face acest lucru se numete notaia n virgul mobil (floating point notation).

1.7.1. Notaia n virgul mobil Vom explica notaia n virgul mobil printr-un exemplu care utilizeaz numai un octet pentru efectuarea stocrii. Cel mai semnificativ bit din cadrul octetului este bitul de semn. Dac bitul de semn este 0, valoarea stocat este pozitiv; iar dac este 1, valoarea stocat este negativ. mprim cei apte bii rmai n dou grupuri/cmpuri: cmpul exponentului (exponent field) i cmpul mantisei (mantissa fied). Considerm trei bii, care urmeaz dup bitul de semn, ca fiind cmpul exponentului, iar cei patru bii rmai ca fiind cmpul mantisei :

40

Figura 1.23 - Elemente ale notaiei n virgul mobil

Se poate explica semnificaia acestor cmpuri considernd urmtorul exemplu. Octetul conine irul de bii 01101011. Deci, bitul de semn = 0, exponentul = 110, mantisa = 1011. Pentru a decodifica octetul, extragem mai nti mantisa i plasm n stnga ei o virgul zecimal, obinnd 1011. Extragem apoi coninutul cmpului exponentului (110) i-l interpretm ca pe un ntreg stocat utiliznd metode n exces pe trei bii, n cazul nostru reprezint valoarea pozitiv 2. Acest fapt ne precizeaz c trebuie s mutm virgula la dreapta cu doi bii (un exponent negativ nseamn c virgula trebuie deplasat la stnga). n cazul nostru obinem : 10 11 ceea ce nseamn 23/4. Observm c bitul de semn din exemplul considerat este 0, deci valoarea reprezentat este pozitiv. Vom trage concluzia c 01101011 reprezint valoarea 23/4. Pentru a stoca o valoare utiliznd notaia n virgul mobil, vom proceda n sens invers dect n prezentarea de mai sus. De exemplu, pentru a codifica valoarea 11/8, o vom exprima mai nti in notaia binar 1.001 vom copia apoi cuvntul binar n cmpul rezervat mantisei de la stnga la dreapta, ncepnd cu primul bit diferit de zero din reprezentarea binar.

Octetul arat astfel : 1 0 0 1

41

Acum trebuie completat cmpul exponentului. Ne imaginm coninutul cmpului mantisei avnd o virgul zecimal la stnga i vom determina numrul de bii i direcia n care trebuie s fie deplasat virgula pentru a se obine numrul binar iniial. n exemplul nostru, observm c virgula din .1001 trebuie deplasat cu un bit la dreapta pentru a obine 1.001. Din aceast cauz, exponentul trebuie s aib valoarea pozitiv 1; vom plasa combinaia 101 (care este reprezentarea valorii pozitive 1, n exces cu patru) n cmpul exponentului: 1 0 1 1 0 0 1

exponent n final vom nscrie 0 n bitul de semn, deoarece valoarea stocat este pozitiv; la sfrit octetul arat astfel : 0 1 0 1 1 0 0 1

semn

1.7.2. Erori de rotunjire S studiem ncercarea stocrii valorii 25/8 utiliznd sistemul n virgul mobil pe un octet (prezentat anterior). Scriem mai nti valoarea 25/8 n binar : 10.101. La copierea acestui rezultat n cmpul mantisei, vom descoperi c nu avem suficient spaiu i, ca urmare, ultimul 1 (cel care orespunde ultimului 1/8) se va pierde.

Figura 1.24 - Codificarea valorii 25/8


42

Dac ignorm aceast problem i continum completarea cmpului exponentului i a bitului de semn, obinem cuvntul:

bit de semn

exponentul 2 pentru notaia n exces pentru exprimare pe 4 bii

Acest cuvnt ns reprezint valoarea 21/2. Ceea ce s-a ntmplat poart numele de eroare de rotunjire {round - off error), cauzat n acest caz de lungimea prea mic a cmpului de primire a mantisei. Soluia pentru rezolvarea acestei probleme este creterea dimensiunii cmpului mantisei, ceea ce se ntmpl n cazul calculatoarelor reale.De obicei, pentru stocarea valorilor n virgul mobil se utilizeaz cel puin 32 bii; dac nici n acest mod nu se rezolv problema, se poate aplica conceptul de dubl precizie.

1.8.

Erori de comunicaie

La transferarea informaiilor ntre diverse componente ale calculatorului sau n cazul stocrii datelor, exist posibilitatea ca irul de bii primit napoi s nu fie identic cu cel original. Pentru rezolvarea unor asemenea probleme, au fost dezvoltate diferite tehnici de codificare care permit detectarea i corectarea erorilor. n prezent, datorit faptului c aceste tehnici de codificare sunt implementate pe scar larg n componentele inteme ale sistemelor de calcul, ele sunt invizibile pentru cei care utilizeaz calculatoarele, dar pe ele se bazeaz fiabilitatea echipamentelor actuale.

1.8.1. Bii de paritate O metod simpl pentru detectarea erorilor se bazeaz pe urmatoarea regula : dac fiecare cuvnt binar manipulat are un numr impar de bii de 1, apariia unui cuvnt cu un numr par de
43

bii de 1 semnaleaz o eroare. Pentru a folosi aceast regul, avem nevoie de un sistem n care fiecare cuvnt binar s conin un numr impar de bii 1, ceea ce se obine uor prin adugarea unui bit suplimentar, bitul de paritate (parity bit). Bitul de paritate se plaseaz pe poziia bitului cel mai semnificativ, deci codul de opt bii devine un cod de nou bii. Bitul de paritate va lua valoare 0 sau 1, astfel nct cuvntul rezultat s aibe un numr impar de 1.

Figura 1.25 - Modificarea codurilor ASCII pentru caracterele A si I, astfel nct s aibe paritatea impar

Dup aceast modificare ( precizat in figura de mai sus pentru caracterele A i I ), ambele cuvinte vor avea nou bii i conin un numr impar de bii 1. Dup aceast modificare a sistemului de codificare, un cuvnt cu un numr par de bii 1 semnaleaz faptul c s-a produs o eroare i deci cuvntul respectiv este incorect. Sistemul de paritate descris poart numele de paritate impar (odd parity), deoarece fiecare cuvnt conine un numr impar de bii 1.

44

O alt tehnic utilizeaz paritatea par (even parity). n aceast tehnic, fiecare cuvnt trebuie s conin un numr par de bii 1, iar prezena unei erori este semnalat de apariia unui cuvnt cu un numr impar de bii 1. irurile lungi de bii sunt nsoite adesea de un grup de bii de paritate dispui ntr-un octet de control (checkbyte). Printre variantele principiului de verificare cu octet de control, se numr schemele de detecie a erorilor numite semne de control (checksums) i control de coduri ciclice (cyclic redundancy check CRC).

1.8.2. Coduri corectoare de erori

Bitul de paritate permite detectarea unei erori singulare, dar nu furnizeaz informaia necesar pentru corectarea erorii. Pot fi, ns, concepute coduri corectoare de erori (error corecting codes) care nu numai c detecteaz erorile, dar le i corecteaz. Intuitiv, se poate crede c nu poate fi corectat informaia dintr-un mesaj, dect dac se cunoate informaia coninut de mesaj.Contrarul acestei afirmatii se va demonstra in continuare. Pentru a nelege modul de funcionare a codului corector de erori, vom defini distana Hemming dintre dou numere binare. Distana Hemming ntre dou numere binare este numrul de bii prin care difer cele dou cuvinte.

Figura 1.26 Exemplu de cod corector de erori

45

Exemplu: n figura de mai sus, distana Hemming dintre simbolurile A i B n codul prezentat este patru, dintre B i C este trei. Caracteristica important a codului prezentat este c oricare dou cuvinte de cod sunt separate de o distan Hemming de cel puin trei biti. Altfel spus, trebuie s modificm cel puin patru bii n cod pentru a apare un alt cuvnt din lista propus de coduri. S presupunem c recepionm 010100. Dac comparm acest cuvnt binar cu lista de coduri propus n fig. 1.26, obinem distanele din figura 1.27. Vom putea trage concluzia c a fost transmis caracterul D, acesta fiind cel mai apropiat de codul recepionat. Cu ct distana Hemming dintre dou coduri utilizate este mai mare, cu att de pot detecta i corecta mai multe erori.

Figura 1.27 - Decodificarea cuvntului 010100 utiliznd codul din figura 1.26

46

TEST AUTOEVALUARE 1 (Stocarea datelor)


1. Care din urmatoarele reprezentari zecimale este egala cu valoarea binara : 111.01001 1. 2. 3. 7 5/32 7 9/32 7 7/16

2. Care din urmatoarele reprezentari zecimale este egala cu valoarea octala : 71.15 1. 58 11/64 2. 57 13/64 3. 59 17/64 3. Care dintre urmatoarele afirmatii despre memoria interna (RAM) este falsa : 1. poate fi doar citita 2. de regula are componente electromecanice in miscare 3. informatia dispare la scoaterea de sub tensiune 4. Care din urmatoarele 41A.0CA: 1. 1050 202/4096 2. 1060 198/4096 3. 1030 214/4096 5. Convertiti urmatoarea fractie ordinara : - 1 folosind notatia in virgula mobila. Se va utiliza notatia in exces pe trei biti. 111.3 110.2 101.1 100.0 011-1 010-2 001... -3 000.. -4
47
(10)

reprezentari

zecimale

este egala cu valoarea hexazecimala

in informatii stocate intr-un octet,

6. Convertiti in baza opt urmatoarele siruri de biti : 1. 1011011. 1011 011 2. 11101011. 1010101010101 7. Care sunt sirurile de biti reprezentate de urmatoarele numere hexazecimale : 1. BAF61C. 6A11 2. 11010.1101111 8. Convertii fiecare dintre urmtoarele reprezentri octale n forma zecinala (baza 10) echivalent : 1. 2. 6714. 1062 314281. 217

9. Convertii fiecare dintre urmtoarele reprezentri binare n forma intreg si fractie ordinara echivalent : 1. 1 0 0 1 . 0 1 0 1 2. 0 . 1 0 1 1 0 1 10. Exista urmatoarele informatii stocate intr-un octet, folosind notatia in virgula mobila : 1. 1 010 1 0 0 1

Calculati valoarea in baza 10 a sirului de biti de mai sus. Pentru rezolvare utilizati urmatoarea notatie in exces pe trei biti 111.3 110.2 101.1 100.0 011-1 010-2 001... -3 000.. -4

48

11. Care din urmatoarele reprezentari zecimale este egala cu valoarea binara : 1010.0111 1. 2. 3. 10 3/4 10 7/16 10 11/64

12. Care dintre urmatoarele afirmatii despre memoria interna (RAM) este adevarata : 1. poate fi doar citita 2. de regula are componente electromecanice in miscare 3. informatia dispare la scoaterea de sub tensiune 13. Convertiti urmatoarea fractie ordinara : - 2
(10)

in informatii stocate in mantisa unui

octet, folosind notatia in virgula mobila. Se va utiliza notatia in exces pe trei biti. 111.3 110.2 101.1 100.0 011-1 010-2 001... -3 000.. -4
14.

Utilizati notatia hexazecimala pentru a reprezenta urmatoarele siruri de biti : 1. 1101101.110 011 2. 11101001011.1010101010101

15. Convertiti in baza opt urmatoarele siruri de biti : 1. 1101101.110 011 2. 1110100.10111010101 16. Exista urmatoarele informatii stocate intr-un octet, folosind notatia in virgula mobila : 1. 11111001

Convertiti sirurul de biti de mai sus in valoarea lor in baza 10 Pentru rezolvare utilizati urmatoarea notatie in exces pe trei biti 111.3 110.2
49

101.1 100.0 011-1 010-2 001... -3 000.. -4 17. Utilizati notatia hexazecimala pentru a reprezenta urmatoarele siruri de biti : 1. 10110110.1110 011 2. 1110100101.11010101010101 18. Se considera urmatoarea reprezentare a numerelor binare in complement fata de doi: 0111.7 0110.6 0101.5 0100.4 0011.3 0010.2 0001.1 0000.0 1111-1 1110-2 1101-3 1100-4 1011-5 1010................................-6 1001-7 1000-8 Efectuati adunarile 7+4 ; si scaderea 6 - 2.

Detaliati modul de rezolvare a fiecarei operatii solicitate.

50

19. Care din sirurile de mai jos ar putea reprezenta un numar scris in baza hexa (16) : 1. 2. 3. 20. 10010 101011 10111

Care dintre urmatoarele afirmatii despre memoria externa (CD-W, HDD, DVD-W,

discheta) este adevarata 1. poate fi doar citita 2. informatia dispare la scoaterea de sub tensiune 3. de regula are componente electromecanice in miscare 22. Care dintre urmatoarele afirmatii despre memoria externa (CD-W, HDD, DVD-W,

discheta) este falsa : 1. poate fi doar citita 2. informatia dispare la scoaterea de sub tensiune 3. de regula are componente electromecanice in miscare

51

UNITATEA DE NVARE 2
2. 2.1. Manipularea datelor Unitatea central de prelucrare

Circuitele care realizeaz diferite operaii asupra datelor nu sunt conectate direct la celulele memoriei principale. Aceste circuite sunt grupate n unitatea central de prelucrare (central processing unit CPU). Unitatea central de prelucrare (CPU) se compune din: unitatea aritmetico-logic (aritmetic/logic unit) conine circuitele care realizeaz manipularea datelor ; unitatea de comand (control unit) conine circuitele utilizate pentru coordonarea activitii calculatorului. registri (registrele) n figura de mai jos este prezentat organizarea unui calculator [simplu] construit n jurul unei magistrale. Unitatea Central de Prelucrare (UCP/CPU Control Processing Unit), creierul calculatorului, are rolul de a executa programele pstrate n memoria principal prin extragerea instruciunilor componente ale unui program, examinarea lor i execuia lor secvenial (una dup alta). Componentele sunt conectate printr-o magistral (bus), format dintr-o mulime de ci paralele prin care sunt transmise adrese, date i semnale de control. Magistralele se pot afla att n exteriorul UCP, conectnd-o cu memoria i dispozitivele de intrare/ieire, ct i n interiorul UCP. Aceasta este alctuit din mai multe componente : Unitatea de control care rspunde de extragerea instruciunilor din memoria principal i de determinarea tipului [lor] fiecruia. Unitatea aritmetic i logic execut operaii necesare pentru ndeplinirea instruciunilor (SI logic, SAU logic, ).

52

Figura 2.1 - Organizarea unui calculator simplu

UCP conine de asemenea i o memorie special foarte rapid, folosit pentru depozitarea rezultatelor temporare, precum i a unor informaii de control. Aceast memorie este format dintr-un numr de registre, fiecare cu o anumit dimensiune i o anumit funciune. Principalele registre sunt: contorul de program (PC Program Computer) el indic urmtoarea instruciune care va fi extras pentru execuie; registrul de instruciuni (Instruction Register IR), n care se pstreaz instruciunea n execuie. Interfaa CPU / Memorie Transferarea cuvintelor binare ntre unitatea central a unui calculator i memoria principal se realizeaz prin conectarea acestora printr-un grup de fire denumite magistral Prin intermediul magistralei, unitatea central poate s extrag (s citeasc)/s plaseze (s scrie) date din/n memoria principal, furniznd adresa celulei de memorie dorite, mpreun cu un semnal de citire. Analiznd acest mecanism, observm c presupune att implicarea unitii de comand ct i a unitii aritmetico-logice.

53

Figura 2.2 - Arhitectura unitate central de prelucrare/memorie principal

Organizarea CPU-ului Von Neumann (tipic) Aceast parte se numete calea de date (data path) i include pn la 32 de registre, Unitatea aritmetic i logic (UAL) i mai multe magistrale de legtur. Registrele trimit datele n cele dou registre de intrare ale UAL, notate cu A i B, care le pstreaz n timp ce UAL face calculele.

Figura 2.3 - Calea de date a unei maini Von Neumann (adunarea)

54

Dup ce UAL execut cu datele de intrare, adunri, scderi i alte operaii simple, transmite rezultatul n registrul de ieire. Majoritatea instruciunilor executate de UAP sunt de tip: registru-memorie, registru-registru. Instruciunile registru-memorie permit cuvintelor din memorie s fie ncrcate n registre, de unde sunt folosite ca date de intrare pentru UAL n instruciunile urmtoare. Instruciunile registru-registru extrag doi operanzi din registre, i aduc n registrele de intrare UAL, execut o operaie oarecare asupra lor (adunare, SI logic, ) i depun rezultatul napoi ntr-unul din registre. Acest ultim proces se numete ciclul cii de date (Data path cycle) i reprezint inima celor mai multe UCP-uri. Cu ct acest ciclu este mai rapid, cu att maina merge mai repede.

2.2.

Execuia instruciunilor

UCP execut fiecare instruciune printr-o serie de pai mici, dup cum urmeaz : a. transformarea instruciunii urmtoare din memorie n registrul de instruciuni; b. schimbarea contorului de program, pentru a indica instruciunea urmtoare; c. determinarea tipului instruciunii proaspt extrase; d. dac instruciunea are nevoie de un cuvnt din [spaiul] de memorie, determinarea locului unde se gsete acesta; e. extragerea cuvntului ntr-unul din registrele UCP, dac este cazul; f. executarea instruciunii; g. reluarea pasului a pentru a ncepe execuia instruciunii urmtoare. Aceast secven [de pai] se mai numete ciclul extrageredecodificareexecuie (fetchdecodeexecute). n fig. 2.4 este prezentat n detaliu procesul adunrii a dou valori stocate n memorie. Instruciuni n cod main Instruciunile prezentate n fig. 2.4 reprezint instruciuni executabile de ctre unitatea central de prelucrare i poart denumirea instruciunii n cod main (machine instructions). Cnd ne referim la instruciunile cunoscute de un calculator, observm c ele pot fi clasificate n trei categorii (grupe): instruciuni de transfer de date, instruciuni aritmeticologice, instruciuni de control.

55

Figura 2.4 - Adunarea unor valori stocate n memorie

Instruciuni de transfer de date Instruciuni care realizeaz deplasarea datelor dintr-un loc n altul, dar fr dispariia lor din poziia iniial. Paii 1, 2 i 4 din fig. 2.4 intr n aceast categorie. Termenii transfer sau mutare sunt mai puin adecvai; mai exaci ar fi copiere sau clonare. Cererea de ncrcare a unui registru de uz general cu coninutul unei celule de memorie este desemnat de o instruciune LOAD, iar transferul coninutului unui registru ntr-o celul de memorie se face prin intermediul unei instruciuni STORE. n fig. 2.4 paii 1 i 2 reprezint instruciuni LOAD, iar pasul 4 este o instruciune STORE. O parte important a instruciunilor de transfer se refer la operaii (comenzi) ntre dispozitive n afara CPU i memoria intern. Aceste instruciuni se ocup de operaiile de intrare/ieire (input/ output - I/O) din calculator i uneori plasate ntr-un grup distinct de instruciuni.

Instruciuni aritmetice i logice Instruciunile care indic uniti de comand s solicite unitii aritmetico-logice efectuarea unei anumite operaii. Pasul 3 din fig. 2.4 face parte din aceast categorie de instruciuni. Operaiile logice posibile de efectuat sunt: AND, OR i XOR. Operaii care realizeaz deplasarea la dreapta sau la stnga a coninutului registrilor: SHIFT, ROTATE. Vor fi dataliate in subcapitolul 2.7.

56

Instruciuni de control Instruciuni care nu manipuleaz date, ci dirijeaz modul de execuie al programelor. Pasul 5 din fig. 2.4 face parte din aceast categorie ca un caz elementar. Aceast familie de instruciuni conine i instruciunile de salt (JUMP, BRANCH) care realizeaz aciune ca unitatea de comand s execute alt instruciune dect cea care urmeaz. Exist dou variante de instruciuni de salt: salt necondiionat exemplu, pentru saltul condiionat prezentm secvena urmtoare: i salt condiionat. Ca

Figura 2.5 - mprirea a dou valori stocate n memorie

Saltul condiionat se utilizeaz cnd se dorete ndeplinirea unei anumite condiii. Primele calculatoare erau foarte puin flexibile, deoarece programul executat de fiecare dispozitiv era cablat n unitatea de comand, ca o parte a sistemului. Una din soluiile utilizate n primele calculatoare electronice pentru a dobndi mai mult flexibilitate a constituit-o proiectarea unitilor de control, astfel nct diversele blocuri s poat fi reconectate dup nevoie. Acest lucru se poate realiza utiliznd o plac de conexiuni realizate pe principiul plcilor de comutare (utilizate n centralele telefonice).

57

Instruciunile ca iruri de bii Un pas nainte s-a fcut odat cu nelegerea faptului c, n mod similar datelor, programele pot fi codificate i stocate n memoria principal a calculatorului. Programul unui calculator poate fi schimbat prin modificarea coninutului memoriei, n loc s se reconecteze blocurile unitii de comand a calculatorului. Conceptul de program stocat n memoria calculatorului a devenit n prezent situaiastandard de lucru. Pentru a-l putea aplica, calculatorul e proiectat astfel nct s recunoasc anumite modele de bii ca reprezentnd diferite instruciuni. Aceast colecie de instruciuni, mpreun cu sistemul de codificare, poart numele de limbaj-main (machine language) i definete modul de comunicare al algoritmului pe care calculatorul trebuie s-l execute. O instruciune-main, din punctul de vedere al codificrii, const, de obicei, din dou pri: cmpul codului de operaie (operation code - op.code) i cmpul operandului (operand code). irul de bii care apare n cmpul "op-code"-ului specific operaia elementar (STORE, SHIFT, XOR, JUMP) a crei execuie e solicitat de instruciune. Modelul de bii pentru codul operandului ofer detalii asupra operaiei respective (Ex.: pentru operaia de tip STORE, informaia din cmpul operandului precizeaz registrul care conine datele ce trebuie stocate precum i precizarea celulei de memorie n care se vor stoca ele).

Un limbaj tipic main n continuare vom preciza cum ar trebui codificate instruciunile unui calculator obinuit. Pentru aceasta propunem un calculator prezentat schematic mai jos.

Figura 2.6 - Arhitectura calculatorului model


58

Calculatorul are 16 regitri de uz general, numerotai de la 0 la F n hexazecimal, iar memoria sa conine 256 celule. Fiecare celul de memorie este desemnat individual (identificat) printr-un numr ntreg ntre 0 i 255. Vom considera c att registrii ct i celulele de memorie au mrimea de opt bii.

Coduri de operaie Fiecare instruciune este codificat pe un numr de 16 bii, reprezentai cu ajutorul a patru cifre hexazecimale (vezi figura urmatoare).

Figura 2.7 - Formatul unei instruciuni main pentru limbajul restrns

Codul de operaie al fiecrei instruciuni este reprezentat de primii patru bii sau de prima cifr hexazecimal. Calculatorul dispune de dou instruciuni de adunare ADD: una pentru adunarea

reprezentrilor n complement fa de doi i una pentru adunarea reprezentrilor n virgul mobil. Tratarea este diferit datorit faptului c adunarea cuvintelor binare care reprezint valori codificate cu notaia n complement fa de doi necesit executarea unor aciuni diferite fa de cele de la adunarea valorilor reprezentate n virgul mobil.

59

2.3.

Execuia programelor

Un program este "urmrit" de calculator prin copierea instruc-iunilor din memorie, n unitatea de comand, pe msur ce are nevoie de ele. Fiecare instruciune ajuns n unitatea de comand este decodificat i executat. Ordinea de extragere a instruciunilor din memorie corespunde ordinii n care sunt stocate, cu excepia cnd o instruciune de salt (JUMP) specific altfel. Pentru nelegerea executrii unui program trebuie studiat amnunit unitatea de comand din interiorul CPU. Aceasta (UC) conine doi registri cu destinaie special: contorul programului (program counter) i registrul de instruciuni (instruction register), conform fig. 2.4. Registrul contorului programului conine adresa urmtoarei instruciuni care trebuie executat, permind calculatorului s urmreasc locul n care se afl n program. Registrul de instruciuni este utilizat pentru stocarea instruciunilor n curs de execuie. Unitatea de comand i realizeaz sarcinile repetnd continuu un algoritm, denumit ciclul mainii (machinecycle), care const n 3 pai: extragere (fetch), decodificare i execuie (fig. 2.8).

Figura 2.8 - Ciclul main

n timpul pasului de extragere, unitatea de comand solicit memoriei principale s-i furnizeze urmtoarea instruciune care va fi executat. Unitatea tie unde se afl urmtoarea

60

instruciune n memorie, deoarece adresa acesteia se afl n registrul contorului programului. Unitatea de comand plaseaz instruciunea recepionat din memorie n registrul su de instruciuni i incrementeaz apoi contorul programului astfel nct acesta s conin adresa urmtoarei instruciuni. Avnd astfel instruciunea n registrul de instruciuni, unitatea de comand ncepe faza de decodificare din ciclul mainii. n acest moment, ea analizeaz cmpurile codului de operaie i operanzilor pentru determinarea aciunilor ce trebuie efectuate. Dup decodificarea instruciunii, unitatea de comand intr n faza de execuie. De exemplu, dac instruciunea se refer la ncrcarea datelor din memorie, unitatea de comand realizeaz (efectueaz) operaia de ncrcare; dac instruciunea se refer la o operaie aritmetico-logic, unitatea de comand activeaz unitatea aritmetico-logic, avnd ca intrri registrii corespunztori. Dup execuia oricrei instruciuni, unitatea de comand ncepe un nou ciclu al mainii cu faza de extragere. Deoarece contorul programului a fost incrementat la sfritul fazei precedente de extragere, el furnizeaz din nou unitii de comand adresa corect a instruciunii.

Programe i date Mai multe programe pot fi stocate simultan n memoria principal a unui calculator, att timp ct ocup zone de memorie diferite, iar prin setarea adecvat a contorului programului se poate determina care program se va executa la pornirea calculatorului. Deoarece datele sunt stocate de asemenea n memorie i sunt codificate tot cu cifre binare (0 i 1), calculatorul nu poate face distincia ntre date i programe. Existena unui aspect comun pentru programe i date permite unui program s manipuleze alte programe (sau chiar pe el nsui) ca pe nite date.

2.4.

Alte instruciuni

Pentru a avea o perspectiv mai larg, s studiem alte alternative la arhitectura de calculator prezentat.

61

Arhitecturi CISC i RISC Proiectarea unui limbaj-main implic luarea multor decizii, una dintre ele fiind s construim: masina cu structur complex care s poat decodifica i executa o larg varietate de instruciuni; o main mai simpl care s dispun de un set limitat de instruciuni.

Prima structur se numete calculator cu set complex de instruciuni (complex instruction set computer - CISC), iar a doua opiune conduce la realizarea unui calculator cu set restrns de instruciuni (reduced instruction set computer - RISC). Cu ct structura procesorului este mai complex cu att mai simpl este programarea, n timp ce n cazul calculatorului mai simplu aceeai operaie ar necesita o secven de mai multe instruciuni. Pe de alt parte, structurile complexe sunt mai greu i mai scump de realizat, utilizarea lor fiind mai costisitoare. n prezent pe pia exist att procesoare CISC ct i RISC. Procesul Pentium (Intel Corporation) reprezint un exemplu de arhitectur CISC; seriile de procesoare Power PC

(dezvoltate de Apple Computer IBM i Motorola) urmeaz arhitectura RISC. RISC vs. CISC n anii '70, proiectanii de calculatoare au ncercat acoperirea spaiului semantic dintre posibilitile calculatoarelor i necesitile limbajelor de programare de nivel nalt. Cu greu s-ar fi gndit atunci cineva s proiecteze maini mai simple. n 1980 s-a nceput proiectarea cip-urilor. VLSI pentru UCP fr interpretator, aprnd termenul de RISC pentru cip-ul de unitate central. Aceste noi procesoare erau mult mai diferite dect procesoarele de pn atunci, n sensul c aceste noi UCP-uri nu trebuiau s pstreze compatibilitatea cu produsele existente. n aceast situaie, proiectanii erau liberi s aleag noi seturi de instruciuni care maximizau performanele globale ale mainii. Conta mai puin ct dura o instruciune, dar conta numrul de instruciuni care puteau fi lansate n execuie ntr-o secund. Caracteristica pregnant a acestor procesoare a fost numrul relativ mic de instruciuni disponibile (cca. 50) comparativ cu numrul mult mai mare de instruciuni ale altor procesoare de calculatoare ale firmelor IBM, DBC (cca. 250-300).
62

Acronimul folosit pentru procesoarele calculatoarelor cu set redus de instruciuni este RISC (Calculator cu Set Redus de Instruciuni Reduced Instruction Set Computer). S-ar putea crede c datorit unor avantaje oferite de tehnologia RISC, mainile RISC ar fi trebuit s detroneze mainile CISC, dar nu s-a ntmplat aa. Care au fost motivele care au generat aceast situaie: compatibilitatea cu modelele anterioare; dezvoltarea unor componente software dedicate gamei de procesoare Intel; procesoarele Intel au ncorporat instruciuni RISC (un nucleu RISC) ntr-o arhitectur CISC. Chiar dac aceast abordare hibrid nu este la fel de rapid ca i cea RISC pura, le permite obinerea unei performane globale competitive i rularea vechiului software nemodificat.

2.5.

Principii de proiectare pentru calculatoarele actuale (principiile proiectrii RISC RISC design principles)

1) Toate instruciunile sunt executate direct de ctre hardware Instruciunile uzuale nu sunt interpretate prin microinstruciuni. Eliminarea unui nivel de interpretare conduce la creterea majoritii instruciunilor. pentru seturile de instruciuni CISC, instruciunile mai complicate pot fi sparte n pri separate, aciune care ncetinete maina, dar pentru instruciuni care apar mai rar. 2) Maximizeaz rata de lansare n execuie a instruciunilor n calculatoarele moderne, lansarea n execuie a ct mai multe instruciuni pe secund este problema principal. Procesorul MIPS (Millions of Instructions per Second) realizeaz paralelismul execuiei instruciunilor, ceea performanelor. 3) Instruciunile trebuie s fie uor de decodificat Decodificarea instruciunilor individuale, pentru a determina resursele de care au nevoie, este un factor critic care limiteaz rata de lansare a instruciunilor. Cu ct se folosesc mai puine formate diferite pentru instruciuni, acestea sunt mai eficiente. de asemenea, numrul mic de cmpuri cu dimensiune prestabilit este o alt component care poate eficientiza execuia instruciunii.
63

ce

conduce

la

mbuntirea

4) Numai instruciunile LOAD i STORE trebuie s acceseze memoria Unul din modurile simple de a descompune operaiile n pai separai este impunerea condiiei ca operanzii majoritii instruciunilor s fie transferai n/din registre. Deoarece accesul la memorie poate dura mult, cel mai bine ar fi s se suprapun execuia acestor instruciuni cu a altora, dac ele nu fac altceva dect s mute operanzi ntre registre i memorie. 5) Furnizeaz registre suficiente Datorit accesului la memorie relativ lent, sunt necesare multe registre (>/= 32). Trebuie evitat s se intre n criz de registre i s fim obligai s le salvm n memorie.

2.6.

Prelucrare simultan

Exist o limit n ceea ce privete dezvoltarea calculatoarelor foarte rapide, semnalele electrice se propag prin circuite cu maximum viteza luminii. Chiar i viitoarele "calculatoare optice" sunt afectate de aceast limitare. Deoarece lumina (unda electromagnetic) parcurge o distan de aproximativ 30 de cm. ntr-o nanosecund (o miliardime de secund), rezult c sporirea vitezei de execuie (lucru) a unui calculator devine n ultim instan o problem de miniaturizare. ntr-un efort de rezolvare a acestei probleme, cercetarea i-a ndreptat atenia asupra conceptului de capacitate de transfer (throughput). Capacitatea de transfer se refer la cantitatea total de operaii pe care le poate efectua calculatorul ntr-un anumit timp. mbuntirea capacitii de transfer a unui calculator (fr creterea vitezei de execuie) este tangibil prin tehnica de prelucrare simultan (pipelining). Aceast metod se refer la posibilitatea ca n orice moment, n conduct (pipe) s se afle mai multe instruciuni "n lucru". O instruciune este executat, alta este decodificat i inca o alta este extras din memorie. Datorit "prelucrrii" n acelai timp a 3 instruciuni, capacitatea de transfer a calculatorului crete de 3 ori.

64

Calculatoare -multiprocesor Alte soluii pentru creterea capacitii de transfer face parte din categoria prelucrrii paralele (parallel processing), n care se utilizeaz mai multe procesoare pentru executarea operaiei curente. Argumentul n favoarea acestei abordri l reprezint creierul uman. Susintorii prelucrrii paralele se pronun n favoarea calculatoarelor-multiprocesor, care conin, n opinia lor, configuraii cu un factor de utilizare mult mai ridicat.

2.7.

Instruciuni aritmetice i logice

Grupul operaiile aritmetice i logice conine instruciuni care solicit operaii aritmetice, logice i de deplasare.

Operaii logice Operaiile logice AND (I), OR (SAU), XOR (SAU echivalent) se pot extinde la operaii care combin dou iruri de bii pentru a produce o ieire de forma unui ir de bii, aplicnd operaia elementar bit cu bit.

Exemplu : AND

10011010 11001001 10001000 10011010 OR 11001001 11011011 10011010 XOR 1 1 0 0 1 0 0 1 01010011

Operaia AND este utilizat la mascare (masscing).

Exemplu : AND

00001111 10101010

operand masc (mask)

n acest caz operandul denumit masc (mask) determin care parte a celuilalt operand va afecta rezultatul. Deci operaia AND permite copierea unei pri a unui ir de bii, plasndu-se 0 n partea neduplicat.

65

Operaia OR poate fi utilizat i ea pentru a copia o parte a unui ir de bii, plasndu-se ns pe poziiile neduplicate. Una din utilizrile principale ale operaiei XOR o reprezint compunerea complementului unui ir de bii, astfel:

11111111 XOR 10101010 01010101

Operaii de rotire i deplasare la nivel de bit Operaiile de rotire i deplasare furnizeaz posibilitatea de deplasare a biilor dintr-un registru i sunt folosite la rezolvarea problemelor de aliniere. Aceste operaii sunt clasificate dup direcia de micare (stnga/dreapta), inndu-se cont i dac procesul este circular. Dac se face deplasarea ctre un capt al irului de bii, bitul de la captul spre care se face deplasarea dispare, iar la cellalt capt al irului apare un spaiu liber. Operaiunile de deplasare se difereniaz tocmai prin ceea ce se ntmpl cu acest bit suplimentar n urma deplasrii. Una din tehnicile de deplasare este s se plaseze bitul suplimentar n spaiul liber de la cellalt capt. Rezultatul este o deplasare circular, denumit rotaie. Alt tehnic de deplasare elimin bitul de la captul irului spre care se face deplasarea i completeaz cu 0 spaiul liber aprut la cellalt capt, adic realizeaz o deplasare logic (logical shift). Se ntlnesc adesea deplasri la dreapta care completeaz ntotdeauna spaiul liber, cu valoarea bitului de semn; acestea se numesc deplasri aritmetice (arithmetic shift).

Operaii aritmetice (precizri suplimentare) Aceste operaii pot fi adesea efectuate utiliznd doar operaia de adunare, alturi de negarea logic. n cazul adunrii: dac valorile care trebuie adunate sunt stocate utilizndu-se notaia n complement fa de doi, operaia de adunare trebuie realizat ca o operaie de adunare n binar;

66

dac operanzii sunt stocai utilizndu-se notaia n virgul mobil pentru adunare, trebuie mai nti efectuat extragerea mantiselor operanzilor, deplasarea acestora la stnga sau la dreapta n funcie de valoarea cmpurilor exponenilor, verificarea biilor de semn, adunarea propriu-zis i apoi convertirea rezultatului n virgul mobil. n cazul celor 2 operaii de adunare, din punctul de vedere al calculatorului ntre ele nu

exist nici o similitudine.

2.8.

Comunicaia ntre unitatea central i controlere

Comunicaia ntre unitatea central de prelucrare i un controler este controlat la fel ca i comunicaia dintre CPU i memoria principal. Faptic, controlerul este reprezentat de un bloc de celule din memoria principal. Atunci cnd CPU scrie un ir de bii ntr-o celul de memorie din cadrul blocului de memorie (ex. instruciunea STORE), ablonul e transferat de fapt controlerului i nu memoriei. Similar, atunci cnd CPU ncearc s citeasc date dintr-una din celulele de memorie (instruciune LOAD), ea primete un ir de bii de la controler. Acest sistem de comunicaie, denumit mapare n memorie a operaiilor de intrare/ieire (memory mapped I/O) este reprezentat de fig. 2.9.

Figura 2.9 - Reprezentarea principal a maprii n memorie a operaiilor de I / O

Blocul de adrese asociate unui controler este denumit port, el reprezint "poarta" prin care informaiile intr sau ies din calculator.

67

ntre controler i dispozitivul periferic pe care-l controleaz are loc o comunicare n ambele sensuri. Dac n-ar exista o cale de comunicaie n ambele sensuri ntre calculator i imprimant (de exemplu), imprimanta ar rmne foarte repede n urm.

Controlere Comunicaia dintre unitatea central de prelucrare a unui calculator i un dispozitiv periferic este controlat de un dispozitiv intermediar, denumit controler (controller). Fiecare controler gestioneaz comunicaia cu un anumit tip de dispozitiv periferic. Un controler corespunde fizic unei plci cu circuite electrice. Controler-ul convertete mesajele i datele la forme compatibile cu caracteristicile interne ale calculatorului respectiv la cele ale dispozitivelor periferice ataate controlerului. Controlerele sunt ataate la aceeai magistral care conecteaz unitatea central la memoria principal (fig. 2.10).

Figura 2.10 - Conectarea controlerelor la magistrala unui calculator

Fiecare controler monitorizeaz semnalele transmise de unitatea central de prelucrare i rspundere atunci cnd i este adresat un semnal. Abilitatea (facilitatea) unui controler de a accede la memoria principal a calculatorului poart numele de acces direct la memorie (direct
68

memory access - D M A).

Unitatea central poate trimite controlerului cereri codificate prin

care s-i cear s citeasc un anumit sector de pe disc i s plaseze aceste date ntr-o anumit zon de memorie precizat. Apoi CPU poate continua execuia altor operaii n timp ce controlerul efectueaz cererea solicitat. Dup terminarea sarcinii atribuite, controlerul transmite prin magistrala calculatorului un anumit semnal ctre CPU (astfel de semnale iau forma de ntreruperi i vor fi studiate n cap. Sistemul de operare). Un bloc de memorie utilizat pentru transferul datelor spre i dinspre dispozitivele periferice poart numele de zon-tampon (buffer). Ataarea controlerelor n magistrala unui calculator mrete semnificativ complexitatea operaiilor de control al comunicaiei de-a lungul acestei ci principale de comunicaie. Chiar n cazul unei proiectri foarte bune, magistrala principal poate deveni un punct critic, cunoscut sub numele de gtuirea von Neumann (von Neumann bottleneck), se datoreaz concurenei pentru accesul la magistral ntre unitatea central de prelucrare i controlere.

2.9.

Comunicaia serial i paralel

Comunicaia dintre diferite pri ale unui sistem de calcul se efectueaz ntr-una dintre cele dou forme elementare paralel sau perial. Este vorba de modul de transfer al irurilor de bii. n cazul comunicaiei paralele (parallel communication), toi biii dintr-un ir sunt transferai simultan, fiecare pe o linie separat. n acest mod se realizeaz transferul rapid al datelor, dar este necesar o linie de comunicaie cu un numr mare de cabluri electrice. Comunicaia serial (serial communication) se bazeaz pe transmiterea irului bit cu bit. Aceast metod este mai lent, dar linia de comunicaie este mai simpl. Un exemplu obinuit l reprezint liniile telefonice, informaiile digitale fiind convertite n semnale audio cu ajutorul unui dispozitiv numit modem (modulator-demulator). Datorit limitrilor impuse de caracteristicile sistemului telefonic existent, o astfel de comunicaie nu se poate realiza prin tehnicile de comunicaie paralel. Viteza comunicaiei seriale se msoar n bii pe secund (bps), iar domeniul de variaie se situeaz ntre cteva sute de bii pe secund i milioane de bii pe secund. O alt unitate

69

uzitat este rata band (band rate); ea se refer la viteza cu care se schimb starea liniei pe care are loc comunicaia. O alt metod de cretere a eficienei transferurilor de date (inclusiv stocarea datelor) este compresia de date (data compression), adic reducerea numrului de bii necesar pentru reprezentarea informaiilor. n cazul reprezentrii unor iruri de caractere se poate recurge la un cod Huffman (cod dependent de frecven). n cadrul acestui cod, lungimea unui ir de bii care reprezint un caracter s fie invers proporional cu frecvena de utilizare a caracterului. n acest fel se obine o reprezentare mai scurt a textului dect dac am utiliza un cod de lungime uniform (codul ASCII). Eforturile de standardizare a tehnicilor de compresie a datelor au dus la includerea acestora n multe din modemurile existente n prezent pe pia. Atunci cnd 2 modemuri care utilizeaz scheme de compresie compatibile comunic ntre ele, modemul emitor comprim datele nainte de a efectua transmisia, iar modemul receptor decomprim datele dup recepionarea lor. Folosind asemenea soluii, modemurile pot obine rate de transfer echivalente cu 56700 bps, chiar dac de fapt sunt transmii numai 14400 bii pe secund, la o rat band de 1200.

Limbajul - main Fiecare instruciune/main are o lungime de doi octei. Primii patru bii alctuiesc cmpul codului de operaie, iar urmtorii doisprezece bii formeaz cmpul operandului. n tabelul urmtor sunt prezentate instruciunile/main, n notaie hexazecimal, nsoite de o scurt descriere. Literele R, S i T sunt utilizate n locul cifrelor hexazecimale pentru a reprezenta identificatorul de registri. Literele X i Y sunt utilizate n locul cifrelor hexazecimale n diferite cmpuri care nu reprezint registrii.

70

Cod operaie

Operand

D e s c r i e r e ncarc (LOAD) registrul R cu valoarea gsit n celula de

RXY

memorie a crei adres este X Y. Ex. 1 4 A 3 va avea ca rezultat plasarea coninutului celulei de memorie cu adresa A 3 n registrul 4. ncarc (LOAD) registrul R cu valoarea reprezentat de irul de bii

RXY

X Y. Ex. 2 0 A 3 va avea ca rezultat nscrierea valorii A 3 n registrul 0. Stocheaz (STORE) valoarea registrului R n celula de memorie a

RXY

crei adres este X Y. Ex. 3 5 B 1 va avea ca rezultat plasarea coninutului registrului 5 n celula de memorie cu adresa B 1. Mut (MOVE) coninutul registrului R n registrul S.

ORS

Ex. 4 0 A 4 va avea ca rezultat copierea coninutului registrului A n registrul 4. Adun (ADD) irurile de bii din registrii S i T, ca i cum ar fi reprezentri n complement fa de doi, i depune rezultatul n

RST

registrul R. Ex. 5 7 2 6 are ca rezultat adunarea valorilor din registrii 2 i 6 i plasarea rezultatului n registrul 7. Adun (ADD) irurile de bii din registrii S i T ca i cum ar fi reprezentai n virgul mobil i depune rezultatul n registrul R.

RST

Ex. 6 3 4 E are ca rezultat adunarea valorilor din registrii 4 i E ca valori reprezentate n virgul mobil i plasarea rezultatului n registrul 3.

71

Cod operaie

Operand

D e s c r i e r e Execut un sau logic (OR) ntre irurile de bii din registrii S i T i depune rezultatul n registrul R.

RST

Ex. 7 C B 4 are ca rezultat executarea unui sau logic ntre coninutul registrilor B i 4 i plasarea rezultatului n registrul C. Execut un i logic (AND) ntre irurile de bii din registrii S i T i

RST

depune rezultatul n registrul R. Ex. 8 0 4 5 are ca rezultat executarea unui i logic ntre

coninuturile registrilor 4 i 5 i plasarea rezultatului n registrul 0. Execut un sau exclusiv (XOR) ntre irurile de bii din registrii S 9 RST i T i depune rezultatul n registrul R. Ex. 9 5 F 3 are ca rezultat executarea unui sau exclusiv ntre coninutul registrilor F i 3 i plasarea rezultatului n registrul 5. Rotete (ROTATE) irul de bii din registrul R cu un bit la dreapta de X ori. La fiecare rotaie, bitul cel mai puin semnificativ este A ROX mutat pe poziia bitului cel mai semnificativ. Ex. A 4 0 3 are ca rezultat mutarea circular la dreapta a

coninutului registrului 4 de 3 ori. Salt (JUMP) la instruciunea plasat n celula de memorie cu adresa X Y dac coninutul registrului R este egal cu coninutul registrului 0. Altfel se continu execuia normal a secvenei de instruciuni. B RXY Ex. B 4 3 C se compar mai nti coninutul registrului 4 cu coninutul registrului 0. Dac cei doi registri sunt identici, secvena de execuie va fi modificat astfel nct urmtoarea instruciune care se va executa s fie cea aflat la adresa de memorie 3 C. Altfel, execuia progra-mului va continua n mod normal. C 000 Oprirea (HALT) execuiei. Ex. C 0 0 0 are ca rezultat oprirea execuiei programului.

72

TEST AUTOEVALUARE 2 (Manipularea datelor)

1. Precizati care este ordinea corecta a celor trei pasi in care se executa o instructiune : 1. extragere, decodificare, executie 2. decodificare, extragere, executie 3. extragere, executie, recodificare 2. Care din afirmatiile despre instructiunile de transfer de date este adevarata : 1. manipuleaza date 2. dirijeaza modul de executie a programelor 3. realizeaza operatii de intrare / iesire

3. Se da urmatoarea secventa de program (adunarea a doua valori stocate in memorie) Pasul 1 Se incarca un registru cu o valoare din memorie. Pasul 2 Se incarca alt registru cu o alta valoare din memorie. Pasul 3 Daca a doua valoare este zero salt la pasul 6 Pasul 4 Se imparte continutul primului registru la continutul celui de al doilea registru si se depune rezultatul in al treilea registru Pasul 5 Se stocheaza continutul celui de al treilea registru Pasul 6 Stop.

Precizati pentru fiecare pas, in coloana treia, categoria/tipul instructiunii implicate.

73

4. Care dintre urmtoarele afirmaii despre prelucrarea interactiv (interactive processing) este fals: 1. nu permite executarea programelor ce poart un dialog cu utilizatorul 2. prelucrarea interactiv permite prelucrarea n timp real (real time processing) 3. lucrrile stocate n vederea execuiei n memoria de mas sunt deservite dup principiul FIFO (primul intrat, primul ieit) 5. Care din afirmatiile despre instructiunile de transfer de date este falsa : 1. manipuleaza date 2. dirijeaza modul de executie a programelor 3. realizeaza operatii de intrare / iesire, respectiv in / din calculator

74

UNITATEA DE NVARE 3

3.

Sistemele de operare

3.1.

Evoluia sistemelor de operare

Sisteme cu un singur procesor Pentru primele sisteme de operare s-a acionat asupra simplificrii ncrcrii programelor i reducerea perioadei de tranziie dintre lucrri. A fost stabilit un singur operator care efectua toate operaiile cu calculatorul. Operatorul ncrca toate materialele pe suportul de stocare de mas al calculatorului, unde sistemul de operare avea acces la ele pentru a le executa. Acesta a fost nceputul prelucrrii pe loturi (batch procession) - executarea lucrrilor prin plasarea lor ntr-un grup unic i apoi reluarea lor fr o alt interaciune cu utilizatorul. n vederea execuiei, lucrrile stocate n memoria de mas erau plasate ntr-o coad de lucrri (job queue) (fig. 3.1).

Figura 3.1 - Prelucrare pe loturi

Coada reprezint o structur de stocare n care obiectele (lucr-rile) sunt organizate dup principiul primul intrat, primul ieit (FIFO First Input First Output).

75

Un dezavantaj al prelucrrii utiliznd administrator de sistem este acela c, dup ce lucrarea a fost transmis n coada de lucrri, utilizatorul nu mai poate interveni asupra programului. Pentru a rspunde la aceste cerine au fost dezvoltate noi sisteme de operare care permit prelucrarea interactiv (interactive processing) (fig. 3.2.).

Figura 3.2 - Prelucrarea interactiv

Aceste sisteme permit executarea unui program care poart un dialog cu utilizatorul prin intermediul terminalelor de control la distan sau al staiilor de lucru. Sistemele interactive au dat natere conceptului de prelucrare n timp real (real time processing). Dac sistemele interactive ar fi putut s se adreseze unui singur utilizator la un moment dat, prelucrarea n timp real n-ar fi pus nici o problem. Datorit preului ridicat al calculatoarelor este necesar ca fiecare main s deserveasc mai muli utilizatori. O soluie la aceast problem este proiectarea si realizarea sistemului de operare n aa fel nct s parcurg pe rnd diferitele activiti ce trebuie executate printr-un proces numit partajarea timpului. Mai exact, partajarea timpului (time sharing) se refer la tehnica de mprire a timpului n intervale, denumite felii de timp (time slices), cu restricia executrii unei activiti numai ntr-o felie timp la un moment dat. La sfritul fiecrei felii de timp, activitatea curent este trecut n repaus i o alt activitate primea dreptul de execuie n urmtoarea felie de timp. Prin baleierea rapid a activitatilor n acest mod se crea iluzia executrii simultane a mai multor

76

procese. n prezent partajarea timpului este utilizat att n sistemele cu un singur procesor, ct i n sistemele multiprocesor, dar n cazul primelor este denumit de obicei multitasking (iluzia c mai multe activiti sunt desfurate simultan). Sisteme multiprocesor Nevoia de a partaja informaiile i resursele ntre diferite calculatoare a condus la ideea conectrii calculatoarelor pentru schimbul de informaii. A aprut conceptul de structur de mai multe calculatoare mici, conectate ntr-o reea (net work), prin care utilizatorii partajeaz resursele. Software-ul pentru controlul unei reele de calculatoare poate fi privit ca un sistem de operare n reea.

3.2.

Arhitectura unui sistem de operare

Pentru a nelege un sistem de operare tipic, propunem o clasificare a categoriilor de componente.

Figura 3.3 Clasificarea software-ului

Exist dou categorii de software distincte : software de aplicaii (application software) i software de sistem (system software). Software-ul de aplicaii conine programele care efectueaz anumite activiti particulare specifice beneficiarului (end user-ului). Spre deosebire de software-ul de aplicaii, software-ul de sistem efectueaz acele activiti care sunt comune sistemelor de calcul n general. Clasa software-ului de sistem se mparte n dou categorii: sistemul de operare propriuzis i module software numite software utilitar. ntr-un anumit sens, software-ul utilitar const n

77

uniti de software care extind caracteristicile sistemului de operare (abilitatea de formatare a unui disc sau de copiere a unui fiier). Unii utilizatori de calculatoare includ n clasa de software utilitar orice software livrat odat cu sistemul de operare.

Interfaa Partea dintr-un sistem de operare care definete modul de interaciune dintre sistemul de operare i utilizatorii si poart numele de interfa (shell). Sarcina interfeei este aceea de a permite comunicarea cu utilizatorul (sau utilizatorii) calculatorului. Interfeele moderne realizeaz acest lucru folosind o interfea grafica cu utilizatorul (graphical user interface - G U I), n care obiectele manipulate (fiiere i programe) sunt reprezentate grafic pe ecran prin pictograme (incons). Astfel de sisteme permit utilizatorului s execute comenzi prin selectarea i deplasarea pictogramelor pe ecran cu un dispozitiv denumit "mouse". Vechile interfee comunicau cu utilizatorul numai prin mesaje de tip text (utiliznd tastatura i ecranul). Interfaa realizeaz legtura ntre un utilizator i "inima" sistemului de operare (vezi fig. 3.4).

Figura 3.4 - Interfaa dintre utilizatori i sistemul de operare

78

Nucleul Partea din interiorul unui sistem de operare este adesea denumit nucleu (kernel). Nucleul conine acele componente software care efectueaz operaiile primare necesare pentru funcionarea calculatorului. Una din aceste componente este administratorul de fiiere (file manager), avnd sarcina s coordoneze utilizarea facilitilor oferite de memoria mas a calculatorului. Pentru simplificarea utilizrii calculatorului, sistemele de administrare a fiierului permit gruparea lor n uniti denumite directoare (directory) sau dosare (folder). Astfel este posibil ca utilizatorul s-i organizeze fiierele conform scopului propus, permind ca directoarele s conin alte directoare, denumite subdirectoare, realizndu-se astfel o organizare ierarhizat a informaiilor. Secvena de directoare care indic drumul pn la un anumit subdirector sau fiier se numete cale (path). Orice acces la un fiier se obine prin intermediul administratorului de fiiere, care solicit deschiderea fiierului. Dac administratorul de fiiere accept cererea de acces, el furnizeaz informaiile necesare pentru gsirea i manipularea fiierului. Informaiile sunt stocate ntr-o zon din memoria principal care poart numele de descriptor de fiier (file descriptor). O alt component a nucleului const dintr-o colecie de "drivere" de dispozitiv (device drivers) - module software care comunic cu controlerele (sau uneori direct cu dispozitivele periferice) pentru efectuarea operaiilor de ctre periferice. Fiecare "driver" de dispozitiv este proiectat n mod individual pentru un anumit tip de controler sau dispozitiv (imprimant, disc, monitor...) i traduce cererile formulate n termeni generali ntr-o secven de instruciuni specifice controler-ului sau dispozitivului ataat acelui driver. Alt component a nucleului sistemului de operare este administratorul de memorie (memory manager), nsrcinat cu activitatea de coordonare a utilizrii memoriei principale a calculatorului. Aceast component este foarte utilizat n mediile multiutilizator sau multitasking. Sarcina administratorului de memorie se complic atunci cnd cantitatea total de memorie solicitat depete dimensiunea memoriei disponibile. n acest caz, administratorul de memorie poate crea iluzia unui spaiu suplimentar de memorie rotind programele i datele ntre
79

memoria principal i disc. Aceast memorie iluzorie este denumit memorie virtual (virtual memory).

Pornirea calculatorului Lansarea n execuie a sistemului de operare se realizeaz prin intermediul unei proceduri cunoscute sub numele de ncrcarea sistemului de operare (boot straping) ; ncrcare (booting). Zona de memorie n care se ateapt s se gseasc programul pentru execuie se numete memorie permanent (read-only memory R O M). Cea mai mare parte din

memoria intern a unui calculator de uz general este memoria volatil, coninutul memoriei pierzndu-se la oprirea calculatorului. n scopul ncrcrii sistemului de operare al unui calculator de uz general, memoria ROM conine un program de mici dimensiuni, denumit bootstrap. La pornirea calculatorului acest program se execut automat i n multe cazuri obiectul transferului (de pe suportul de stocare de mas n memoria principal a calculatorului - vezi fig. 3.5) este chiar sistemul de operare. Dup plasarea n memorie a sistemului de operare, programul bootstrap instruiete VC s sar la zona de memorie care-l conine. Din acest moment sistemul de operare devine activ i preia controlul calculatorului.

Figura 3.5.a - Procesul de ncrcare a sistemului de operare

80

(Pasul 1) Calculatorul execut programul de ncrcare aflat n memorie. Sistemul de operare se afl pe dispozitivul de stocare de mas.

Figura 3.5.b. - Procesul de ncrcare a sistemului de operare

(Pasul 2) Programul de ncrcare realizeaz transferul sistemului de operare n memoria principal i i cedeaz apoi controlul.

3.3.

Coordonarea activitilor desfurate de calculator

n continuare se va prezenta modul n care sistemul de operare coordoneaz execuia software-ului de aplicaie i utilitar, ct i pe cea a propriilor sale module.

Conceptul de proces Unul din cele mai importante concepte, n cadrul sistemelor de operare, este deosebirea dintre un program i aciunea de execuie a acestuia. Programul reprezint un set static de directive, iar execuia lui este o activitate dinamic, ale crei proprieti se modific n timp. Aceast activitate poart numele de proces. Procesul este caracterizat de starea procesului. Starea procesului reprezint un instantaneu al functionarii calculatorului la un moment dat. Un singur program poate fi asociat n acelai timp mai multor procese. (Ex.: Doi utilizatori pot edita simultan documente diferite, ntr-un sistem multiutilizator cu partajarea timpului, sistemul de operare utiliznd o singur copie a programului de editare).
81

Sarcina sistemului de operare este s coordoneze mai multe procese care concureaz pentru utilizarea feliilor de timp. Coordonarea implic alocarea resurselor necesare fiecrui proces (dispozitive periferice, spaiu n memoria principal, acces la date i acces la unitatea central de prelucrare), mpiedicarea interferenei proceselor independente i asigurarea schimbului de informaii intre procese care trebuie s realizeze acest lucru. Pentru aceast tip de comunicaie se folosete numele de comunicaie ntre procese (interprocess communication).

Administrarea proceselor Operaiile asociate coordonrii proceselor sunt efectuate de ctre secveniator (scheduler) i executor (dispatcher), din nucleul sistemului de operare. Secveniatorul memoreaz o nregistrare a proceselor prezente n sistemul de calcul, introduce noi procese i le elimin pe cele care s-au terminat. Pentru a putea urmri toate procesele, secveniatorul le nregistreaz intr-un bloc de informaii denumit tabel de procese (process table), n memoria principal. n acest tabel sunt memorate informaii, ca: zona de memorie alocat procesului, prioritatea procesului, dac procesul este n ateptare etc. Executorul este componenta nucleului care asigur execuia proceselor active, programate de secveniator. ntr-un sistem cu partajarea timpului, execuia programelor se realizeaz prin mpartirea timpului n intervale scurte, fiecare purtnd numele de felie de timp (time slice) i avnd o durat de cca 50 de milisecunde. Procedura de trecere de la un proces la altul poart numele de comutare ntre procese (process switch). La primirea unui semnal de ntrerupere, unitatea central de prelucrare completeaz ciclul curent de extragere-decodificare- execuie salveaz poziia din procesul curent i ncepe execuia unui program de tratare a ntreruperilor (interrupt handler), care este stocat la o locaie predeterminat din memoria principal. Programul de tratare a ntreruperilor este o component a executorului. Efectul semnalului de ntrerupere este de suspendare a procesului curent i de transfer a controlului ctre executor.

82

Figura 3.6 - Partajarea timpului ntre procesele A i B

n acest punct executorul permite secveniatorului s actualizeze tabelul de procese, apoi executorul selecteaz procesul care are cea mai mare prioritate dintre procesele gata de continuare din tabel i permite procesului selectat s-i nceap felia de timp. Abilitatea de oprire i de repornire ulterioar a unui proces este de importan vital pentru succesul unui sistem cu partajarea timpului. Calculatoarele proiectate pentru sisteme de operare cu partajarea timpului includ aciunea de salvare a valorii contorului de program, precum i coninutul regitrilor i al celulelor de memorie asociate, ca parte a reaciei unitii centrale de prelucrare la semnalul de ntrerupere. Ele dispun de obicei de instruciuni de limbaj main pentru rencrcarea unei stri salvate anterior.

Modelul client/server Modulele sistemului de operare (ntr-un sistem cu partajarea timpului) concureaz ntre ele sub controlul executorului pentru feliile (cuantele) de timp. Pentru a dobndi accesul la un fiier aflat pe un dispozitiv de stocare de mas, orice proces trebuie s obin mai nti informaiile necesare de la administratorul de fiiere. Pentru simplificarea comunicaiei ntre procese, componentele unui sistem de operare sunt adesea proiectate n conformitate cu modelul client/server:
83

Figura 3.7 - Modelul client/server

Figura 3.8 - Structuri de comunicaie ntre clieni i servere, care opereaz pe un calculator sau sunt distribuite pe mai multe calculatoare

Acest model definete cele dou roluri fundamentale pe care le pot juca diferitele componente: client (emite cereri ctre uniti, respectiv server (satisface cererile emise de clieni). Aplicarea modelului client/server n proiectarea software-ului conduce la uniformizarea tipurilor de comunicaii care au loc n sistem. Dac componentele unui sistem de operare sunt proiectat ca servere i clieni, comunicaia ntre componentele din cadrul aceluiai calculator sau ntre componente ale unor calculatoare aflate la mare distan unele de altele - figura 3.8., are aceeasi forma. Att timp ct o reea de calculatoare permite trimiterea de cereri i rspunsuri ntre calculatoare, mai muli clieni i mai multe servere se pot distribui n orice configuraie convenabil, pentru reeaua respectiv.

84

3.4.

Gestionarea proceselor concurente

Componentele nucleului unui sistem de operare se ocup, n principal, cu alocarea resurselor calculatorului ctre procesele ce se desfoar n sistem. Atribuim, n acest caz, termenului resurse att dispozitivele periferice ale calculatorului, ct i funciile de care dispune calculatorul. (Ex.: Administratorul de fiiere aloc att accesul la fiierele existente, ct i spaiul pe disc pentru crearea de noi fiiere). Deoarece un calculator nu gndete independent, ci doar execut instruciuni, pentru ca sistemul de operare s funcioneze fiabil, s-au dezvoltat algoritmi care s acopere orice problem identificat ca posibil.

Semafoare S lum n discuie un sistem de operare cu partajarea timpului i la care este conectat o singur imprimant. Dac un proces este n situaia de a-i tipri rezultatele, el trebuie s solicite sistemului de operare accesul la programul driver al imprimantei. n acest moment, sistemul de operare trebuie s decid dac satisface aceast cerere, verificnd dac imprimanta nu este cumva utilizat de alt proces. Dac imprimanta este liber, sistemul de operare trebuie s acorde permisiunea utilizrii ei i s permit procesului s continue. Dac dou procese ar cpta simultan acces la imprimant, rezultatul n-ar prezenta nici o utilitate pentru nici unul dintre ele. Soluia ar reprezenta-o utilizarea unui indicator (flag) un bit n memoria ale crui stri sunt: 1 (setat) i 0 (ters). Indicatorul ters arat c imprimanta este liber, iar setat indic faptul c imprimanta este deja alocat. Dei aceast soluie pare bun la prima vedere, exist totui o problem. Operaia de testare i eventual de setare a indicatorului necesit mai muli pai-main. Nu este exclus ca operaia s fie ntrerupt dup detectarea unui indicator nul, dar nainte ca indicatorul s fie setat, ceea ce face posibil apariia situaiei urmtoare: Presupunem c imprimanta este disponibil i un proces cere utilizarea sa. Indicatorul care corespunde imprimantei este verificat i gsit ca fiind ters, ceea ce indic c imprimanta este disponibil. Dar n acel moment procesul este ntrerupt i alt proces i ncepe felia de timp, i acest nou proces solicit utilizarea imprimantei. Indicatorul imprimantei este verificat din nou i gsit tot ters, deoarece procesul precedent a fost ntrerupt nainte de a-l putea seta. n consecin,

85

sistemul de operare permite celui de al doilea proces s nceap utilizarea imprimantei. Se ajunge deci la o situaie n care dou procese utilizeaz simultan aceeai imprimant. Problema este c operaia de testare i (eventual) de setare a indicatorului trebuie s fie terminat fr a fi ntrerupt prin utilizarea instruciunilor de invalidare i validare a ntreruperilor, disponibile n limbajele-main. O alt metod o reprezint utilizarea instruciunii de testare i setare (test-and-set), care este disponibil n multe limbaje-main. Unitii centrale de prelucrare i se cere s citeasc valoarea unui indicator, s o memoreze i apoi s seteze indicatorul, toate acestea printr-o singur instruciune-main. Avantajul acestei metode este c, de vreme ce unitatea central termin ntotdeauna de executat o instruciune nainte de a sesiza o ntrerupere, operaia de testare i setare a indicatorului, implementat cu o singur instruciune, nu poate fi ntrerupt. Un indicator implementat corect, ca mai sus, poart numele de semafor (semaphore). Prin similitudine o secven de instruciuni care trebuie executat fr ntreruperi corespunde unei poriuni de cale ferat pe care poate trece, la un moment dat, un singur tren. O asemenea secven de instruciuni poart numele de zon critic (critical region). nainte de a intra ntr-o zon critic, un proces trebuie s gseasc nul semaforul asociat ei i s-l seteze, apoi trebuie s tearg semaforul dup ieirea din zona critic.

Interblocarea O alt problem care poate aprea n timpul alocrii resurselor este interblocarea (deadlock) situaia n care desfurarea a dou sau mai multe procese este blocat, deoarece fiecare dintre ele ateapt acces la resursele alocate celuilalt. Un alt exemplu apare n situaia n care procesele creeaz noi procese pentru efectuarea unor operaii mai simple. Dac secveniatorul nu are destul spaiu n tabelul de procese i fiecare proces din sistem trebuie s creeze un proces suplimentar nainte de a-i termina treaba, atunci nici un proces nu va putea continua. La o analiz mai atent, constatm c poate s apar o interblocare numai dac sunt satisfcute simultan urmtoarele trei condiii: 1. Exist o competiie pentru resurse care nu pot fi partajate; 2. Resursele sunt solicitate n mod parial, ceea ce nseamn c, dispunnd resurse, un proces va reveni ulterior solicitnd mai multe;
86

de

anumite

3. O dat ce o resurs a fost alocat, nu se poate fora eliberarea sa. Concluzia care rezult este c eliminarea interblocrii se poate face prin eliminarea uneia dintre cele trei condiii de mai sus. Aa cum am vzut, pentru ca un calculator s poat ndeplini o anumit sarcin, trebuie si furnizm un algoritm care s-i spun exact ce are de fcut. n acest sens, n continuare vom prezenta cteva concepte fundamentale, ca: dezvoltarea i reprezentarea algoritmilor controlul iteractivitii i recursivitii algoritmilor. De asemenea vor fi descrii n continuare civa algoritmi foarte cunoscui de cutare i sortare.

87

TEST AUTOEVALUARE 3 (Sisteme de operare)


1. Un job queue poate fii definit ca: a. locul unde lucrrile sunt stocate n memoria de mas b. executarea lucrrilor prin plasarea lor ntr-un grup unic c. o coad de lucrri 2. O coad poate reprezenta: a. O structur de stocare b. O coad de lucrri (job queue) c. Primul intrat, primul ieit (FIFO) 3. Principiul dup care o coad poate funciona, este: a. First Input First Ouput (FIFO) b. Last Input First Ouput (LIFO) c. First Input Last Out (FILO) d. First Come First Served (FCFS) e. Garbage In Garbage Out (GIGO) 4. Partajarea timpului (time sharing) se refera la tehnica de: a. felii de timp (time slices) b. mparirea timpului n interval c. Executare a unei activiti ntr-o felie de timp la un moment dat 5. Partajarea timpului (time sharing) este utilizat n: a. Programarea algoritmilor i stabilirea gradului de complexitate b. Sistemele cu un singur procesor c. Sistemele multiprocesor 6. Arhitectura unui sistem de operare este compus din: a. Software b. Aplicaie c. Interfa d. Algoritmi

88

7. Software-ul de system se mparte n: a. Sistem de aplicaii pentru sistemul de operare b. Sistemul de operare propriu-zis c. Module software d. Software utilitar 8. Interfaa unui sistem de operare definete: a. Modul de interaciune dintre sistemul de operare i utilizatorii si b. Comunicarea cu procesele unui sistem de operare c. Comunicarea cu utilizatorul 9. Partea din interiorul unui sistem de operare poart numele de: a. Nucleu (kernel) b. Director (folder) c. Cale (path) 10. Secvena de directoare indic: a. Poziia unde m aflu pe hard-disk b. Drumul pn la un anumit subdirector sau fiier c. Operaiile primare necesare pentru funcionarea calculatorului 11. O component a nucleului sistemului de operare este: a. Administratorul de memorie (memorz manager) b. Administratorul de procese c. Driver 12. Memoria iluzorie a unui sistem de operare: a. Memorie fizic b. Memoria virtual c. Memoria RAM 13. Boot straping se refer la: a. Zona de memorie n care este ncrcat sistemul de operare b. Lansarea n execuie a sistemului de operare c. Memoria permanent

89

14. Memoria n care se gsete programul pentru execuie este: a. ROM (Read-only memory) b. RAM (Random Access Memory) c. HDD (Hard Disk Drive) 15. Un program reprezint: a. Un set static de directive b. O list de instruciuni c. O activitate dinamic 16. Sarcina unui sistem de operare este s coordoneze: a. Un proces sau mai multe procese b. Fiierele de pe hard disk c. Alocarea resurselor necesare 17. Coordonarea proceselor sunt efectuate de : a. Secveniator (scheduler) b. Executor (dispatcher) c. Interprocess communication 18. Secveniatorul memoreaz (scheduler) se refer la: a. Memorarea nregistrrii proceselor prezente n sistemul de calcul b. Eliminarea proceselor ce se afl n memorie c. Creearea de noi procese ce sunt memorate n managerul de procese al sistemului de operare 19. Procesele active sunt programate de: a. Secveniator b. Executor c. Managerul de task-uri 20. Executorul (dispatcher) se refer la: a. Execuia proceselor active b. Este component a nucleului c. Programarea secvenial a proceselor 21. Definii modelul client/server prin precizarea principalelor componente importante precum i rolul legturii dintre ele.
90

22. Modelul client/server se refer la: a. Proiectarea software-ului b. Proiectarea echipamentelor hardware necesare rulrii unui software c. Comunicaia dintre procesele unui sistem de operare n vederea rulrii unui software n parametrii optima 23. Termenul de resurse se refer la: a. Dispositive periferice b. Administratorul de fiiere c. Procesele calculatorului 24. Definii conceptul de semafor si exemplificai funcionarea acestuia printr-un exemplu. 25. Interblocarea poate aprea n condiiile: a. Exist o competiie pentru resurse care nu pot fi partajate b. O data ce o resurs a fost alocat, nu se poate fora eliberarea sa c. Resursele sunt solicitate n mod parial, ceea ce nseamn c, dispunnd de anumite resurse, un process va reveni ulterior

91

UNITATEA DE NVARE 4

4.

Algoritmii

4.1.

Conceptul de algoritm

Algoritmul este abstract i trebuie difereniat de reprezentarea sa. n acest context, al distinciei dintre algoritm i reprezentarea sa, se poate lmuri i diferena dintre dou concepte nrudite - program i proces. Programul este reprezentarea unui algoritm (reprezentarea formal a unui algoritm proiectat n vederea unei aplicaii informatice). Procesul este definit ca fiind activitatea de execuie a programului, dar putem defini procesul ca activitatea de execuie a unui algoritm. Deci, programele, procesele i algoritmii sunt entiti nrudite, dar distincte. Un algoritm const dintr-o mulime ordonat de pai executabili, descrii fr echivoc, care definesc un proces finit. Analiznd definiia algoritmului, ne vom opri asupra cerinei ca paii care descriu algoritmul s fie ordonai, deci trebuie s aibe o ordine clar n execuia pailor. Exist i algoritmi paraleli care conin mai multe secvene de pai, fiecare secven urmnd s fie executat de alt procesor n cadrul unei maini multiprocesor (deci nu este vorba numai de un fir de execuie). n continuare vom analiza cerina ca algoritmul s fie compus din pai executabili. Fie instruciunile: Pasul 1: Construii o list cu toate numelele ntregii pozitive. Pasul 2: Sortai lista n ordine descresctoare. Pasul 3: Extragei primul numar ntreg din lista rezultat. Aceste instruciuni nu descriu un algoritm, deoarece pasul 1 i 2 sunt imposibil de executat (nu se poate construi o list cu toi ntregii pozitivi i ntregii pozitivi nu pot fi aezai n ordine descresctoare. Alt cerin, descrierea fr echivoc a pailor algoritmului nseamn ca, n timpul execuiei programului, informaiile din fiecare stare a procesului trebuie s fie suficiente pentru a determina unic i complet aciunile n fiecare pas.
92

Execuia algoritmului nu necesit creativitate, ci doar capacitatea de a urma instruciunile. Descrierea algoritmului ca un proces finit nseamn c execuia algoritmului trebuie s aibe sfrit. Trebuie realizata o delimitatare ntre procesele care se termin cu un rspuns- rezultat i cele care se execut la infinit, fr a ajunge la vreun rezultat. Termenul de algoritm este folosit adesea ntr-o accepiune mai puin riguroas pentru a descrie procese care nu sunt neaprat finite. (Ex. Algoritmul de mprire fr rest a numerelor ntregi, mprirea lui 1 la 3).

4.2.

Reprezentarea algoritmilor

Primitive Reprezentarea unui algoritm nu se poate face n absena unui limbaj. n cazul oamenilor acest limbaj poate fi limbajul natural uzual sau limbajul imaginilor. Aceste canale naturale de comunicare duc la nenelegeri, termenii folosii pot avea mai multe sensuri. Informatica abordeaz aceste probleme stabilind o mulime bine definit de blocuri elementare care stau la baza reprezentrii algoritmilor. Aceste blocuri elementare poart numele de primitive. Definirea precis a primitivelor elimin ambiguitatea i permite un grad uniform de detaliere. O mulime de reguli care guverneaz modul n care aceste primitive pot fi combinate pentru reprezentarea ideilor mai complexe constituie un limbaj de programare. Fiecare

primitiv const din dou elemente: sintaxa i semantica. Sintaxa se refer la reprezentarea simbolic a primitivei, n timp ce semantica se refer la conceptul reprezentat (semnificaia primitivei respective). Pentru a reprezenta algoritmi destinai calculatorului utiliznd un ansamblu de primitive, se poate porni de la instruciunile pe care calculatorul tie s le execute. Detalierea algoritmilor la acest nivel este incomod, n mod normal se utilizeaz primitive de nivel mai nalt, construite pe baza primitivelor de nivel sczut oferite de limbajul-main. Rezult astfel un limbaj de programare formal, n care algoritmi pot fi exprimai ntr-o form conceptual mai nalt dect n limbajul-main.

93

Pseudocodul Vom prezenta n continuare un sistem de notare mai intuitiv, cunoscut sub numele de pseudocod. O metod de obinere a pseudocodului este de a relaxa pur i simplu regulile limbajului formal n care va fi exprimat varianta final a algoritmului. Ceea ce ne propunem este s discutm despre dezvoltarea i prezentarea algoritmilor fr s ne oprim asupra unui limbaj de programare. Ne propunem s reprezentm anumite structuri care pot deveni primitive. Printre structurile mai des ntlnite remarcm: 1. Selectarea ntre dou activiti n funcie de ndeplinirea unei condiii. Fiecare dintre aceste instruciuni poate fi rescris astfel nct s respecte structura: if (condiie) then (activitate) else (activitate) , unde am folosit cuvintele-cheie if (dac), then (atunci) elese (astfel) pentru a introduce substructurile din cadrul structurii principale i paranteze pentru delimitarea granielor dintre aceste substructuri. Adoptnd pentru pseudocod aceast structur sintactic, am obinut o metod uniform de exprimare a unei structuri semantice des ntlnite. n cazurile n care activitatea alternativ (else) lipsete, vom utiliza sintaxa mai scurt: if (condiie) then (activitate). 2. alt structur algoritmic [ntlnit] este executarea repetat a unei instruciuni sau a unei secvene de instruciuni atta timp ct o anumit condiie este adevrat. Modelul pseudocodului este: while (condiie) do (activitate). O astfel de instruciune nseamn verificarea condiiei, executarea activitii i revenirea la verificarea condiiei. Cnd condiia nu mai este ndeplinit, se trece la executarea instruciunii care urmeaz. Uneori ne referim la anumite valori prin intermediul unor nume sugestive. Pentru astfel de asocieri se utilizeaz: assign (nume) the value (expresie) , unde nume este un nume descriptiv, iar expresie indic valoarea care este asociat numelui respectiv. Lizibilitatea programului poate fi mbuntit prin identare (adic scriere poziionat pe condiii logice).
94

Exemplu: if (articolul este impozabil) then [if (pre > limit) then (pltete x) else (pltete y)] else (pltete z). Vom folosi pseudocodul pentru a descrie activiti care s fie utilizate ca instrumente abstracte n alte aplicaii, aceste uniti de program le vom numi n continuare procedur i vom folosi cuvntul procedure pentru atribuirea fiecrui modul de pseudocod un nume. procedure nume. Aceast instruciune introductiv va fi urmat de instruciunile care descriu aciunea modulului respectiv. n figura 4.1 este prezentat pseudocodul unei proceduri numit Salutri, care tiprete de trei ori mesajul Hello:

procedure Salutri assign Count the value 3 while Counct 0 do (tiprete mesajul Hello i assign Count the value Count 1).

Figura 4.1 - Procedura Salutri exprimat n pseudocod

Atunci cnd este nevoie de efectuarea procedurii altundeva n cadrul secvenei pseudocodului, procedura va fi apelat prin nume. Procedurile trebuie s fie ct mai generale posibil. Astfel o procedur care sorteaz orice list de nume, trebuie s fie scris n aa fel nct lista respectiv s nu fie specific procedurii, ci s fie desemnat n reprezentarea acesteia sub un nume generic. Vom adopta convenia de a scrie aceste nume generice ntre paranteze pe acelai rnd cu numele procedurii. (Ex.) procedure Sort (List).

Atunci cnd avem nevoie de serviciile procedurii Sort, va fi identificat lista are se substituie listei List. (Ex.): se aplic procedura Sort asupra listei cu membrii organizaiei;
95

se aplic procedura Sort asupra listei cu elevii clasei. Nu trebuie pierdut din vedere faptul c scopul n care folosim pseudocodul este s

creionm algoritmi, nu s scriem un program.

4.3.

Dezvoltarea algoritmilor

Dezvoltarea unui program const din dou activiti: dezvoltarea algoritmului; reprezentarea algoritmului ca program. Pn acum ne-a preocupat problema reprezentrii algoritmilor, dar stabilirea algoritmului constituie, n general, cea mai incitant etap a dezvoltrii software-ului.

Teoria rezolvrii problemelor Capacitatea de a rezolva diferite probleme rmne mai degrab un talent artistic care trebuie dezvoltat. Etapele pentru rezolvarea problemelor, definite n linii mari de matematicianul Polya (1945), rmn valabile i astzi ca principii de baz: Faza 1. nelegerea problemei; Faza 2. Conceperea unui plan de rezolvare a problemei; Faza 3. Punerea n practic a planului respectiv; Faza 4. Evaluarea soluiei din punctul de vedere al corectitudinii instrument pentru rezolvarea altor probleme. n contextul dezvoltrii programelor, aceste etape devin: Faza 1. nelegerea problemei; Faza 2. Conceperea unei metode de rezolvarea problemei prin procedur algoritmic; Faza 3. Formularea algoritmului i reprezentarea lui ca program; Faza 4. Evaluarea programului din punctul de vedere al corectitudinii si ca potenial instrument pentru rezolvarea altor probleme. i ca potenial

96

Importana primului pas Vom identifica pe scurt cteva metode de rezolvare a problemelor. Toate aceste metode au ceva n comun i anume: important este primul pas. Acest prim pas se poate realiza prin mai multe metode: 1. Una dintre aceste metode ar fi s procedm invers, anume: dac se dorete a se gsi o metod de a obine o anumit ieire pe baza unei intrri date, se pornete de la valoarea de ieire, ncercnd s se ajung la valoarea de intrare. 2. O alt metod este aceea de a se cuta o problem nrudit cu cea care trebuie rezolvat mai simplu sau care are deja o soluie. Se va ncerca aplicarea soluiei problemei nrudite i asupra problemei iniiale. Aceast metod este foarte util n contextul dezvoltrii programelor pentru care dificultatea const n gsirea algoritmului general care s permit rezolvarea tuturor cazurilor. 3. n final avem metoda rafinrii pas cu pas. Aceast tehnic pornete de la mprirea problemei n mai multe subprobleme. Metoda permite abordarea problemei generale n mai multe etape, n ideea c fiecare n parte este mai uor de rezolvat dect problema n ansamblul ei. n continuare subproblemele vor fi la rndul lor descompuse n mai multe etape, pn cnd se ajunge la o serie de subprobleme uor de rezolvat. Rafinarea pas cu pas este o metodologie descendent (top-down), care merge de la general ctre particular. Exist, de asemenea, i metodologia ascendent (bottom-up) care pornete de la cazurile particulare ctre cazul general. Soluiile obinute prin metoda rafinrii pas cu pas au n mod natural o structur modular, motiv pentru care aceast metod este apreciat. Un algoritm cu o structur modular poate fi uor adoptat la o reprezentare modular, ceea ce simplific mult gestionarea activitii de dezvoltare a programului propriu-zis. De asemenea, modulele rezultate din aplicarea metodei de rafinare pas cu pas sunt pe deplin compatibile cu ideea de lucru n echip, modul cel mai rspndit de dezvoltare a unui produs software. Dezvoltarea multor proiecte software pentru prelucrarea datelor presupune o dezvoltare a unei componente organizatorice. Problema nu presupune descoperirea unui algoritm uluitor, ci organizarea coerent a sarcinilor care trebuie duse la ndeplinire. n concluzie, dezvoltarea algoritmilor rmne mai degrab un talent care se dezvolt n timp, dect o tiin foarte exact cu metodologii bine stabilite.

97

4.4.

Structuri iterative

n cadrul structurilor iterative unele instruciuni se repet ciclic. Vom prezenta n continuare civa algoritmi celebri: cutarea secvenial si binar.

Algoritmul de cutare secvenial Scopul acestui algoritm este determinarea unei valori dac exist sau nu n cadrul unei liste. Presupunem c lista a fost sortat pe baza unei reguli oarecare, funcie de entitile componente (o list de nume respect ordinea alfabetic, o list de numere respect ordinea cresctoare/descresctoare). Pentru exemplificare, propunem urmtorul algoritm: cutm ntr-o list atta timp ct mai sunt nume i numele-int este mai mic dect numele curent. n pseudocod, acest proces se reprezint astfel: se selecteaz primul articol din list ca articol de test while (valoare-int > articol-test i mai sunt articole de luat n considerare) do ( selecteaz urmtorul articol din list ca articol de test). La ieirea din aceast structur, articolul de test va fi mai mare sau egal cu numele-int, fie va fi ultimul nume din list. n oricare din aceste cazuri putem determina dac procesul s-a ncheiat cu succes prin compararea valorii articolului de test cu valoarea-int. Pentru aceasta se adaug la valoarea rutinei n pseudocod (deja scris) urmtoarea instruciune: if (valoare-int = valoare articol-test) then (declar cutarea un succes) else (declar cutarea un eec). Am fcut ipoteza (presupunerea) c lista conine cel puin un articol. Totui vom plasa rutina pe ramura else a instruciunii: if (lista este goal) then (declar cutarea un eec) else (...).

98

n acest mod vom obine procedura din fig. 4.2.

procedure Search (list target value) if (lista este goal) then (declar cutarea un eec) else [(selecteaz primul articol din list ca articol de test) while(target value = articolul de test i mai sunt articole de luat n considerare) do (selecteaz urmtorul articol din list ca articol de test) if (target value = articolul de test) then (declar selectarea un succes) else (declar cutarea un eec)]

Figura 4.2 - Algoritm de cutare secvenial reprezentat n pseudocod (sequential search algoritm)

Acest algoritm este folosit pentru listele de mici dimensiuni sau cnd utilizarea lui este dictat de alte considerente.

Controlul ciclurilor Utilizarea repetat a unei instruciuni sau a unei secvene de instruciuni este unul din conceptele algoritmice cele mai importante. O metod de implementare a acestui concept este structura iterativ denumit ciclu/bucl (loop). n cadrul buclei o serie de instruciuni, numit corpul buclei, este executat n mod repetat sub supravegherea unui proces de control.

Ex. while (condiie) do (corpul ciclului).

Instruciunea while de mai sus reprezint o structur ciclic deoarece execuia ei conduce la parcurgerea ciclic a secvenei: testeaz condiia; execut corpul ciclului; testeaz condiia;
99

execut corpul ciclului, ... , testeaz condiia, pn cnd condiia este ndeplinit. S analizm mai ndeaproape i instruciunea de control. Controlul unui ciclu (bucle) const n trei activiti: iniializare, testare, modificare, aa cum se prezint i n fig. 4.3:

iniializare =

stabilete o stare iniial care poate fi modificat n vederea

atingerii condiiei de ncheiere testare = compar condiia curent cu condiia de ncheiere i, n caz de

egalitate, ncheie procesul de repetare modificare = schimb starea astfel nct aceasta s avanseze ctre condiia de incheiere

Figura 4.3 - Componentele controlului repetitiv

Figura 4.4 - Structura ciclului de tip while Exist dou structuri de tip bucl foarte rspndite i anume: while (condiie) do

(activitate) care se reprezint prin schema logic (flowchart) din fig. 4.4. n cazul structurii while testarea condiiei de ncheiere se face naintea executrii corpului ciclului.

100

Figura 4.5 - Structura ciclului de tip repeat

A doua structur tip bucl, reprezentat n fig 4.5., solicit s se execute mai nti corpul ciclului i dup aceea s se testeze condiia de ncheiere. Pentru reprezentarea schemei din fig. 4.5. n pseudocod se utilizeaz urmtoarea formulare : repeat (activitate) until (condiie). Ca exemplu suplimentar de utilizare a structurilor iteractive vom prezenta algoritmul de sortare prin inserare. Algoritmul de sortare prin inserare sorteaz o list extrgnd n mod repetat cte un articol i inserndu-l n poziia corespunztoare ordinii dorite. procedure Sort (lista) if (lista conine dou sau mai multe articole) then [(umbrete poriunea din lista de la al doilea pn la ultimul articol; repeat (elimin umbra din primul articol al poriunii umbrite din list i identific acest articol drept pivot; mut pivotul ntr-o locaie temporar lsnd n list un spaiu gol); while (exist un nume deasupra spaiului i acest nume este mai mare dect pivotul) do (mut numele de deasupra spaiului n spaiul gol, lsnd un spaiu deasupra numelui respectiv; mut pivotul n spaiul gol din list) until (orice umbr din list a fost eliminat).

Figura 4.6 - Sortarea prin inserare


101

4.5.

Structuri recursive

Structurile recursive reprezint o alternativ de realizare a proceselor repetitive fr a utiliza cicluri. Pentru a nelege aceast tehnic vom discuta algoritmul de cutare binar (binary search).

Algoritmul de cutare binar Vom relua problema cutrii unui articol ntr-o list sortat abordnd metoda pe care o folosim cnd cutm un cuvnt n dicionar. La cutarea ntr-un dicionar ncepem prin a deschide dicionarul la o pagin din zona n care credem c se afl articolul cutat. S-ar putea s gsim cuvntul chiar n pagina respectiv, dac nu, trebuie s continum cutarea. Numai c am restrns (deja) zona de cutare, putndu-ne rezuma fie la zona dinaintea poziiei curente, fie la cea de dup poziia curent. Fig. 4.7 este reprezentarea nucleului cutrii binare n pseudocod a acestui mod de cutare aplicat asupra unei liste generice. n aceast situaie nu avem avantajul de a ti cu aproximaie n ce zon se afl articolul cutat, aa c instruciunile din figur ne spun s ncepem prin a deschide lista la articolul din mijloc. n cazul cnd lista are un numr par de elemente, prin articol de mijloc vom nelege primul articol din cea de a doua jumtate a listei. Dac articolul astfel selectat nu este cel cutat, rutina ofer dou alternative, ambele oferind o cutare efectuat cu ajutorul unei proceduri numit search. Selecteaz mijlocul listei list ca articol de test; execut unul dintre urmtoarele blocuri de instruciuni, n funcie de situarea valorii-int Target/Value fa de articolul de test.

Figura 4.7 - Nucleul cutrii binare


102

Se observ c procedura permite i rezolvarea cazului cutrii ntr-o list goal dac va fi completat, obinndu-se pentru cautarea binara programul n pseudocod prezentat n fig. 4.8.
procedure search (lista, Target Value if (lista este goal) then (declar cutarea ncheiat cu eec) else [selecteaz mijlocul listei cu articol de test; execut una dintre urmtoarele blocuri de instruciuni, n funcie de situarea valorii-int Target Value fa de articolul de test Target Value = articolul de test; (declar cutarea ncheiat cu succes) Target Value < articolul de test (aplic procedura search pentru a vedea dac Target de deasupra articolului de test, i if (acea cutare este ncununat de succes) then (declar aceast cutare ncheiat cu succes) else (declar aceast cutare ncheiat cu eec)] Target Value > articolul de test [aplic procedura search pentru a vedea dac Target Value este n poriunea din lista de sub articolul de test i if (acea cutare este ncununat de succes) then (declar aceast cutare ncheiat cu succes) else (declar aceast cutare ncheiat cu eec)]. Value este n poriunea din lista

Figura 4.8 - Algoritmul cutrii binare reprezentat n pseudocod

4.6.

Eficien i corectitudine

Dou dintre subiectele legate de algoritmi sunt importante i vor fi abordate n continuare: eficiena i corectitudinea acestora.

103

Eficiena algoritmilor Dei calculatoarele actuale execut milioane de instruciuni pe secund, eficiena proiectrii algoritmilor rmne o preocupare important, deoarece adesea diferena dintre un algoritm eficient i unul ineficient constituie diferena ntre o soluie practic i una inaplicabil. S analizm o problem practic pentru a nelege mai bine eficiena algoritmilor. Problema const n regsirea nregistrrii unui student din mulimea nregistrrilor studenilor (cca 30.000 studeni) din cadrul unei universiti. Pentru nceput vom analiza modul de regsire folosind algoritmul de regsire secvenial. Acest algoritm parcurge lista de la nceput, comparnd fiecare articol cu numrul cutat. Necunoscnd valoarea-int, nu putem spune ct de departe va merge n list aceast cutare. Statistic ne ateptm ca media s fie pe la jumtatea listei. Prin urmare, n medie algoritmul secvenial va investiga cca 15.000 de nregistrri pentru fiecare cutare. Dac regsirea i verificarea unei nregistrri dureaz o milisecund, o astfel de cutare dureaz cca 15 secunde. O zi de lucru are 28.800 secunde; dac s-ar lucra continuu, algoritmul de cutare secvenial va permite s se efectueze cca 1.9002.000 de cutri pe zi. Deci regsirea celor 30.000 de studeni va dura cca. 15 zile. Acum a venit rndul s analizm cutarea binar. Aceast cutare ncepe prin a compara valoarea-int cu articolul situat n mijlocul listei. Este posibil s nu gseasc articolul cutat, dar se reduce aria cutrii la jumtate din lista iniial. Deci dup prima interogare, cutarea binar mai are de luat n calcul cel mult 15.000 de nregistrri. Dup a doua interogare rmn cel mult 7.500 i aa mai departe, pn la cea de a 15-a interogare cand se gsete articolul cutat. Dac o interogare dureaz o milisecund, atunci regsirea unei anumite nregistrri se va face n maximum 0,015 secunde. Aceasta nseamn c pentru a gsi nregistrrile corespunztoare ale celor 30.000 de studeni, este nevoie de cel mult 7,5 minute. Cele dou rezultate arat clar o mbuntire substanial a timpului de cutare folosind algoritmul de cutare binar.

Verificarea produselor software Verificarea software-ului este o sarcin dintre cele mai impor-tante, iar cutarea unor tehnici eficiente de verificare constituie unul dintre cele mai active domenii de cercetare.

104

Una din direciile de cercetare este ncercarea de a

demonstra corectitudinea

programelor prin aplicarea tehnicilor logicii formale. Deci, ideea de baz este reducerea verificrii la o procedur de logic formal care s nu fie afectat de concluziile care pot rezulta din aplicarea unor argumente intuitive. Pentru demonstrarea corectitudinii unui program vom porni de la presupunerea c la nceputul execuiei acestuia sunt ndeplinite un numr de condiii, numite precondiii. Pasul urmtor const n evaluarea modului n care consecinele acestor precondiii se propag prin program. Cercettorii au analizat diverse structuri de programe pentru a vedea cum este afectat execuia lor de o anumit afirmaie despre care se tie c este adevrat nainte de execuia structurii respective. Dac, de exemplu, se tie c afirmaia este adevrat nainte de execuia structurii if (condiie) then (instruciunea 1) else (instruciunea 2) , atunci imediat nainte de execuia instruciunii 1 putem spune c att afirmaia respectiv, ct i condiia de test sunt adevrate, n timp ce dac se execut instruciunea 2 tim c sunt adevrate afirmaia respectiv i negarea condiiei de test. S lum ca exemplu ciclul repeat din fig 4.9:

Figura 4.9 Aseriuni asociate cu o structura repeat


105

S presupunem c n urma precondiiilor din punctul A putem stabili c o anumit aseriune este adevrat de fiecare dat cnd n timpul procesului repetitiv este atins punctul B (o astfel de aseriune care apare n cadrul unui ciclu este cunoscut sub numele de invariant al buclei). La ncheierea procesului repetitiv, execuia ajunge n punctul C, unde putem spune c att invariantul, ct i condiia de ieire sunt adevrate. Invariantul este n continuare adevrat, deoarece testul de ncheiere a ciclului nu modific nici o valoare de program, iar condiia de ncheiere este adevrat, pentru c astfel ciclul nu s-ar terminat). Dac aceste aseriuni combinate implic obinerea rezultatului de ieire dorit, atunci pentru a demonstra c astfel ciclul nu s-ar fi terminat. Dac aseriunile de mai sus implic obinerea rezultatului de ieire dorit, pentru a demonstra c programul este corect trebuie s artm c cele dou componente ale controlului, iniializarea i modificarea, conduc la ndeplinirea condiiei de ncheiere. Tehnicile formate de verificare a programelor nu au atins un stadiu care s faciliteze aplicarea lor asupra sistemelor generale de prelucrare a datelor. n cele mai multe cazuri, programele sunt verificate prin aplicarea lor pe seturi de date de test, procedur care nu este foarte sigur. Alegerea datelor de test folosite pentru verificarea programelor ar trebui tratat cu aceeai atenie ca i obinerea unui eantion reprezentativ pentru o cercetare statistic.

106

TEST AUTOEVALUARE 4 (Algoritmii)


1. Definii noiunea de algoritm si prezentai principalele trsturi ce caracterizeaz un algoritm. 2. Programul este reprezentarea unui: a. Algoritm b. Pseudocod c. Liste de instruciuni 3. Care dintre urmtoarele exemple pot constitui probleme ce se pot rezolva prin intermediul unui algoritm: a. Construirea unei liste cu toate numerele ntregi i pozitive b. Sortarea unei liste n ordine descresctoare c. Extragerea primului numr ntreg din lista rezultat 4. Care dintre urmtoarele exemple nu pot constitui probleme ce se pot rezolva prin intermediul unui algoritm: a. Construirea unei liste cu toate numerele ntregi i pozitive b. Sortarea unei liste n ordine descresctoare 5. Un algoritm este alctuit din: a. Procese b. Instruciuni c. Liste 6. Definii noiunea de primitive i ilustrai-le printr-un exemplu. 7. O primitiv const din dou elemente. Ele sunt: a. Sintaxa i Semantic b. Procese i Semafoare c. Secveniator i Executor 8. Sintaxa se refer la: a. Reprezentarea simbolic a unei primitve b. Reprezentarea n pseudocod a unui algoritm c. Reprezentarea gradului de complexitate a unui algoritm

107

9. Semantica se refer la: a. Conceptul reprezentat (semnificaia primitivei respective) b. Procese i semafoare c. Reprezentarea simbolic a unei primitive 10. Definirea precis a primitivelor elimin: a. Ambiguitatea b. Claritatea c. Certitudinea 11. Definirea precis a unei primitive permite: a. Un grad uniform de detaliere b. Un grad uniform de amplificare c. Stabilirea de blocuri elementare care stau la baua reprezentrii algoritmilor 12. Un limbaj de programare este constituit din: a. Semafoare i procese b. Primitive ce pot fi combinate pentru reprezentarea ideilor mai complexe c. Instruciuni de ciclare 13. Un pseudocod este: a. Sistem de notare intuitiv b. Diagrame UML c. ablon de proiectare 14. Definii noiunea de pseudocod i ilustrai folosirea acestuia printr-un exemplu, maxim dou. 15. Funcia If poate fi reprezentat prin pseudocod? a. Adevrat b. Fals 16. Funcia If poate exista fr instruciunea else? a. Adevrat b. Fals 17. Funcia If poate fi definit ca: a. if (condiie) then (activitate) else(activitate)
108

b. if(condiie) then(activitate) c. if(condiie) do(activitate) 18. Selectarea ntre dou activiti n funcie de ndeplinirea unei condiii, poate fi reprezentat prin: a. Funcia If b. Funcia While c. Funcia Assign 19. Funcia While const n: a. Executarea repetat a unei instruciuni sau a unei secvene de instruciuni atta timp ct o anumit condiie este adevrat. b. Executarea unei instruciuni folosind un numr exact de pai c. Executarea unei instruciuni la infinit 20. Modelul pseudocod al instruciunii while este: a. while(condiie) do(actvitate) b. if(condiie) while(activitate) c. do(activitate) if(condiie) 21. Definii funcia while i ilustrai folosirea acesteia printr-un exemplu n pseudocod. 22. Definii pe scurt funcia assign i folosirea acesteia printr-un exemplu n pseudocod. 23. Modelul pseudocod pentru funcia assign este: a. assign(nume) the value(expresie) b. assign(instruciune) do(activitate) c. do(activitate) while(assign(instruciune)) 24. Definii noiunea de procedur i ilustrai folosirea acesteia printr-un exemplu 25. Identificai numele procedurii din urmtorul cod: procedure Salutri assign Count the value 3 while Counct 0 do (tiprete mesajul Hello i assign Count the value Count 1)

109

26. Procedurile trebuiesc s fie: a. Ct mai generale b. Ct mai lizibile c. Greu de neles pentru ali programatori cu excepia celui care a scris-o 27. Dezvoltarea unui program const din: a. Dezvoltarea algoritmului b. Reprezentarea algoritmului ca program c. Gradul de complexitate s fie ct mai mic 28. Definiia teoria rezolvrii problemelor i a programelor preciznd principalele faze i principii.

110

UNITATEA DE NVARE 5

5.

Limbaje de programare

5.1.

Perspective istorice

Primele generaii La nceput, programarea presupune o metod foarte laborioas, anume transpunerea algoritmilor respectivi n limbaj-main, suplimentar fa de proiectarea algoritmului. Dup localizarea i corectarea erorilor, se poate spune c programul este utilizabil. Prima simplificare a procesului de programare a fost s se renune la reprezentarea operaiilor i operatorilor sub form de cifre hexazecimale, atribuindu-se memoria pentru instruciunile limbajului-main. n cazul operanzilor s-au stabilit reguli pentru atribuirea unor nume descriptive (identificatori) pentru locaiile de mnemonice i utilizarea acestor nume n instruciuni. Iniial programatorii foloseau aceste notaii pentru dezvoltarea programului pe hrtie, ulterior translatndu-l ntr-o form utilizabil de calculator. Procesul de translatare este un tip de activitate care poate fi realizat direct de calculator. Utilizarea mnemonicelor s-a oficializat ca limbaj de asamblare, s-a creat asamblorul, care translateaz programele scrise n limbaj de asamblare ntr-o form compatibil cu calculatorul. Limbajele de asamblare au aprut ca un pas uria pe drumul ctre medii de programare mai eficiente. Limbajele de asamblare, ca limbaje de generaia a doua, prezentau multe avantaje fa de limbajele-main (prima generaie), dar nu constituiau un mediu de programare foarte propice. Orice limbaj de asamblare este dependent de main, deoarece instruciunile folosite se refer la caracteristicile unui anumit calculator. Alt dezavantaj al limbajelor de asamblare este acela c programul trebuie gndit la un nivel foarte cobort (instruciunile urmresc pas cu pas limbajul-main), n loc s se concentreze asupra unei soluii globale a problemei de rezolvat.

111

Pe baza acestor concepte s-au dezvoltat limbaje de programare, din a treia generaie, la care primitivele erau de nivel nalt i independente fa de main (calculator). Principala preocupare n dezvoltarea limbajelor de programare din generaia a treia a fost identificarea unui ansamblu de primitive de nivel nalt, similare pseudocodului despre care am discutat, care s permit dezvoltarea produselor software. Dup identificarea setului de primitive la nivel nalt, a fost scris un program, numit translator, care translateaz programele exprimate n primitive de nivel nalt n programe n limbaj-main. Aceste programe cunoscute sub denumirea de compilatoare. de translatare au ajuns s fie

Independena fa de main Un program scris ntr-un limbaj din generaia a treia poate fi utilizat la orice calculator, utiliznd pur i simplu asupra lui compilatorul corespunztor. O component a problemei portabilitii este faptul c n unele cazuri nu s-a ajuns la un acord cu privire la definiia corect (exact) a unui anumit limbaj. Pentru a elimina probleme de acest tip, American National Standards Institute (ANSI) i International Standars Organization (I S O) au adoptat i publicat standarde pentru multe din limbajele cele mai rspndite. Faptul c mainile pot acum s rspund la instruciuni de nivel nalt a permis specialitilor s vizeze medii de programare n care oamenii s poat s comunice cu maina direct prin intermediul unor concepte abstracte specifice gndirii umane, fr s mai fie necesar transpunerea ntr-o form compatibil mainii. De asemenea, exist preocupri pentru realizarea unor maini (calculatoare) care s participe nu numai la execuia algoritmilor, ci i la dezvoltarea algoritmilor. Rezultatul acestor preocupri a condus la apariia unei game de limbaje de programare n continu diversificare, care cu greutate pot fi clasificate n generaii. Ca regul general, termenul de limbaje de programare din generaia a patra se refer la pachetele software care permit utilizatorilor fr o pregtire de specialitate s poat adapta produsele propriilor lor necesiti. n aceast categorie se ncadreaz sistemele de calcul tabelar, sistemele de baze de date, pachete pentru grafic, procesoare de text, aceste pachete sunt adesea grupate ntr-un singur sistem integrat. Termenul de limbaje din generaia a cincea este folosit adesea cu referire la programarea declarativ i n special pentru ceea ce se numete programarea logic.
112

Paradigme de programare Dezvoltarea istoric a limbajelor de programare se poate reprezenta printr-o diagram cu mai multe piste, n care cile de dezvoltare (conform diferitelor paradigme) sunt reprezentate separat (fig. 5.1). Apar astfel patru piste care ilustreaz patru paradigme diferite: funcional, orientat spre obiecte, imperativ, declarativ, limbajele asociate fiecruia fiind nfiate ntr-un mod care s arate evoluia lor n timp, ceea ce nu nseamn c aceste limbaje au evoluat neaprat unele din altele.

Figura 5.1 - Evoluia paradigmelor de programare

Paradigma imperativ (procedural) reprezint modul clasic ce abordare a procesului de programare. Pe aceast paradigm se bazeaz ciclul parcurs de unitatea central: citirea instruciunii decodificare execuie. Prin aceast paradigm se definete procesul de programare ca o secven de comenzi care, urmate, conduc la rezultatul dorit. Paradigma declarativ propune dezvoltarea i implementarea unui algoritm general de rezolvare a problemelor. Pentru rezolvarea unei probleme nu va trebui dect ca ea s fie formulat ntr-o manier compatibil cu algoritmul i s i se aplice algoritmul respectiv.
113

Principalul obstacol n calea dezvoltrii unui limbaj de programare bazat pe paradigma declarativ este descoperirea algoritmului (general) de rezolvare a problemelor. Paradigma funcional prezint procesul de dezvoltare a programelor ca o construcie de cutii negre, fiecare acceptnd intrri i furniznd ieiri. Matematicieni desemneaz aceste cutii drept funcii, de unde denumirea de paradigm funcional. Primitivele unui limbaj de programare funcional constau din funcii elementare de baz cu care programatorul construiete funciile complexe necesare rezolvrii problemei respective.Paradigma de programare funcional ncurajeaz abordarea modular a programelor, deci programele sunt bine organizate n mod natural. Cu aceast metod se dezvolt de obicei pachete de software complexe. Paradigma orientat spre obiecte, aceast metod conduce la un proces de programare cunoscut sub numele de programare orientat spre obiecte (OOP object oriented

Programming). n aceast abordare datele sunt considerate a fi obiecte active, spre deosebire de rolul pasiv care le este atribuit n paradigma imperativ. n abordarea orientat pe obiecte lista e considerat a fi un obiect care se compune din lista propriu-zis, la care se adaug un ansamblu de rutine pentru gestionarea ei. Programul care lucreaz cu lista nu are nevoie de algoritmi pentru efectuarea acestor operaii, ci folosete rutinele oferite de obiect. Limbajele de programare orientate spre obiecte sunt Visual Basic (Microsoft Corporation), Delphi (Borland International) i Java.

5.2.

Conceptele programrii clasice

n principiu, instruciunile ntr-un limbaj de programare se mpart n: instruciuni declarative, instruciuni imperative i comentarii. Instruciunile declarative definesc terminologia specific utilizat n cadrul programului (ex. numele folosite pentru diferite date). Instruciunile imperative sunt cele care descriu paii algoritmului respectiv. Comentariile mbuntesc nelegerea algoritmului. Orice modul de program ncepe cu o parte declarativ (descrierea terminologiei), urmat de o parte procedural (instruciuni imperative pentru indicarea aciunilor). Comentarii sunt plasate n program ori de cte ori se consider necesar acest lucru.

114

Variabile, constante i literali Identificatori de tip nume descriptive a unor locaii de memorie sunt cunoscui sub numele de variabile. Prin modificarea valorii stocate n locaia respectiv n timpul execuiei programului se schimb valoarea asociat identificatorului. Uneori programul folosete valori predefinite care nu se modific. Aceast valoare se poate include ca un literal. Unele limbaje de programare permit atribuirea de nume descriptive i unor valori particulare care nu pot fi modificate. Aceste nume se numesc constante. Ex.: Pentru scrierea unui program referitor la un aeroport este necesar altitudinea acestuia. ntr-o linie de program ce utilizeaz literali aceasta se scrie astfel: assign Effective Alt the value (Altimeter 392)

, unde: Effective Alt, Altimeter sunt variabile, 392 este o valoare literal. ntr-o linie de program ce utilizeaz constante acelai lucru se scrie astfel: assign Effective Alt the value (Altimeter Airpor Alt) const Aieport Alt = 392 , (instruciunea declarativ const asociaz constanta AirporAlt cu valoarea 392, iar numele Airpot Alt poate fi folosit oriunde n program n locul valorii 392).

Categorii de date Instruciunile declarative identific i tipul datelor. Tipul datelor determin modul n care este interpretat irul respectiv de bii, ct i operaiile care pot fi efectuate cu data respectiv. Cele mai utilizate tipuri de date sunt: ntreg (integer), (character) i boolean. Tipul integer se refer la date numerice ntregi, reprezentate n complement fa de doi. Se pot efectua cu aceste numere operaii aritmetice clasice i comparaiile. Tipul real se refer la numere reale, stocate n general n virgul mobil. Activitile care trebuie executate pentru adunarea a dou numere reale sunt diferite de cele pentru adunarea doi ntregi. Tipul character se refer la date care constau din simboluri, codificate de obicei n ASCII. Asupra acestui tip de date se pot efectua: comparaii asupra poziionrii alfabetice a unui real (real), caracter

115

simbol fa de altul; testarea apariiei unui ir de simboluri n cadrul altui ir, concatenarea unui ir de simboluri la sfritul altuia pentru a forma un ir de mai lung. Tipul boolean se refer la acele date cu valori doar de adevrat sau fals, ce apar ca urmare a efecturii unor comparaii. Operaiile compatibile cu acest tip de date sunt verificrile dac o valoare este adevrat sau fals. n figura 5.2 sunt prezentate exemple de astfel de instruciuni declarative n Pascal, C, C++, Java i FORTRAN. n aceste exemple variabilele Length i Width sunt declarate de tip real, iar Price, Tax, Total de tip ntreg.

Declaraii de variabile n Pascal: Var Length, Width: real; Price, Tax, Total : integer.

Declaraii de variabile n C, C++ i Java: float Length, Width; int Price, Tax, Total.

Declaraii de variabile n FORTRAN: REAL Length, Width; INTEGER Price, Tax, Total.

Figura 5.2 - Declaraii de variabile n Pascal, C, C++, Java, FORTRAN

Structuri de date Un concept asociat instruciunilor declarative este acela de structur de date care se refer la forma conceptual a datelor. Datele pe lng tip, deja explicat n capitolul anterior, au i o lungime (mrime). Un ir de caractere este un caz particular al unei structuri generice de date care poart numele de vector omogen (homogeneous array). Pentru a declara un astfel de vector, majoritatea

116

limbajelor de programare utilizeaz o instruciune declarativ n care se precizeaz mrimea pentru fiecare dimensiune a vectorului. n fig. 5.3 se prezint instruciuni declarative n C i Pascal care declar Nume ca vector unidimensional de tip caracter i lungime opt, iar Scores ca vector bidimensional de tip ntreg, cu dou linii i nou coloane.

Vectori declarai n Pascal Var Name: packet array [1...8] of char; Scores: array [1...2, 1...9] of integer.

Vectori declarai a C char Name [8]; int Scores [2] . [9].

Structura conceptual a vectorilor Name:

Scores:

Figura 5.3 - Declararea unor vectori omogeni n Pascal i C

Exist i vectori neomogeni, din punct de vedere al tipului de date incluse, numii vectori heterogeni (heterogenous array). n fig. 5.4 se prezint modul de declarare a unui asemenea vector. Dup declararea vectorului se poate face referire la el n ntregime, prin nume, iar la fiecare component a sa prin poziia acesteia. n cazul vectorilor omogeni componentele sunt identificabile prin indici care specific linia, coloana etc.

117

Vectori declarai n Pascal Var Employe: record Name: packed array [1...8] of char; Age : integer; Skill Rating: real End

Vectori declarai n C Struct (char Name [8]; int Age ; float Still Rating; Employe.

Figura 5.4 - Declararea unor vectori heterogeni n Pascal i C

Instruciuni de atribuire Instruciunea de atribuire solicit ca unei variabile s i se atribuie o valoare. O astfel de instruciune are urmtoarea sintax: variabila urmat de un simbol care reprezint operaia de atribuire i d e o expresie care indic valoarea ce se atribuie. n limbajele C, C++ instruciunea Total = Price + Tax cere ca variabilei Total s-i fie atribuit valoarea sumei dintre Price i Tax.

118

n paradigmele imperativ i cea orientat pe obiecte instruciunea de atribuire este foarte utilizat, deoarece datele sunt manipulate n principal prin intermediul su.

Instruciuni de control Instruciunile de control sunt instruciuni imperative care modific ordinea de execuie a programului. Aceste instruciuni au strnit cele mai multe controverse, iar principalul vinovat este cea mai simpl dintre ele, go to. Aceast instruciune furnizeaz o metod de a continua programul din alt punct, care a fost identificat printr-o etichet (nume, numr). Includerea unei astfel de instruciuni ntr-un limbaj de nivel nalt conduce la scrierea unor secvene foarte nclcite. Pentru evitarea unor asemenea situaii, limbajele moderne de programare dispun de instruciuni de control mai elaborate (ex. if then else) care permit ramificarea programului prin intermediul unei singure structuri sintactice. n figura 5.5 sunt prezentate cteva din cele mai utilizate structuri de ramificare i instruciuni de control, precum i modul lor de reprezentare n diverse limbaje.

Figura 5.5 a - Structuri de control i reprezentarea lor n Pascal, C, C++, Java i Ada

119

Fig 5.5. b. Structuri de control i reprezentarea lor n Pascal, C, C++, Java i Ada O alt structur larg folosit este cea numit for. Ea este similar cu structura while utilizat n pseudocod, dar iniializarea, modificarea i ncheierea ciclului sunt ncorporate ntr-o singur instruciune.

Figura 5.6 - Structura for i reprezentarea ei n Pascal, C, C++ i Java


120

Comentarii Experiena arat c orict de bine ar fi proiectat un limbaj de programare i orict de bine ar fi folosit, informaiile suplimentare sunt utile ntotdeauna pentru orice doritor care ncearc s neleag un program de oarecare complexitate. n acest scop limbajele de programare furnizeaz o sintax pentru inserarea n program a unor instruciuni explicative numite comentarii. Documentarea constituit din aceste comentarii se numete documentaie intern Documentaia intern este ignorat de ctre translator. pentru a include comentariile n program, limbajele de programare furnizeaz dou metode de delimitare a acestora de restul programului. Fie se include comentariul ntre nite marcaje speciale, fie se marcheaz doar nceputul comentariului, acesta urmnd s ocupe tot rndul sau chiar mai multe rnduri (n acest caz se adaug i la nceputul rndurilor suplimentare semnul specific comentariului. Este recomandabil ca toate comentariile care se refer la un anumit modul de program s fie grupate ntr-un singur loc.

5.3.

Module de program

Limbajele bazate pe paradigma funcional mpart n mod natural programele n funcii, iar limbajele bazate pe paradigma orientat spre obiecte au ca rezultat module de program care reprezint obiectele. Ne vom concentra asupra tehnicilor prin care se poate obine o reprezentare modular a unui algoritm.

Proceduri Procedura este un modul de program scris indepndent de programul principal, dar legat de acesta printr-un proces de transfer/revenire conform fig.5.7. Cnd este nevoie de serviciile procedurii, controlul se transmite acesteia (instruciunea JUMP, limbajul-main), iar dup execuie controlul revine modulului principal. Ca regul general, variabilele declarate n interiorul procedurii sunt variabile locale (se utilizeaz numai n interiorul procedurii). Sunt totui cazuri n care unele date trebuie utilizate n comun de mai multe module. Variabilele utilizate ntr-o asemenea situaie se numesc variabile globale.

121

Figura 5.7 - Transferul controlului la apelarea unui subprogram

Parametrii Folosirea n comun a unor informaii prin utilizarea unor variabile globale nu este recomandat, deoarece acest mod de lucru mascheaz activitile modulelor de program care partajeaz datele respective. Se recomand identificarea datelor partajate de mai multe module de program, ceea ce se poate face prin includerea explicit a listei acestora n instruciunea prin care se solicit execuia procedurii. Astfel i antetul procedurii trebuie s conin o list a variabilelor crora li se atrib7uie valori la apelarea procedurii. Elementele care compun aceste dou liste se numesc parametri. La apelarea procedurii, lista de parametri din modulul apelant este asociat, element cu element, listei de parametri din antetul procedurii. Valorile parametrilor din modulul apelant sunt transferate efectiv parametrilor corespondeni din procedur. Dup aceea, procedura este executat, iar valorile (eventual modificate) sunt transferate napoi ctre modulul apelant. n alte situaii transferul poate avea loc ntr-un singur sens, fie ctre procedur, fie ctre modulul apelant. Un avantaj major al acestui sistem de substituire este acela c aceeai procedur poate fi apelat de mai multe ori, cu diferite seturi de date.

122

Funcii Termenul de funcie se refer la un modul de program asemntor unei proceduri, cu deosebirea c o valoare se transfer napoi ctre programul principal nu prin intermediul listei de parametri, ci ca valoare a funciei. Altfel spus, valoarea respectiv este asociat numelui funciei, aa cum se asociaz o valoare unei variabile. n cazul funciei, valoarea se obine prin executarea instruciunilor din cadrul funcie.

Instruciuni de intrare/ieire Procedurile i funciile sunt metode foarte bune de a extinde caracteristicile unui limbaj de programare. Dac limbajul nu furnizeaz o anumit operaie ca primitiv, se poate scrie o procedur sau o funcie care s efectueze acea operaie, iar apoi se va apela la modulul respectiv ori de cte ori este nevoie. n majoritatea limbajelor, operaiile de intrare/ieire sunt implementate n acest mod, cu diferena c procedurile i funciile apelate sunt de fapt rutine ale sistemului de operare. Pentru a citi o valoare de la tastatur i a o atribui variabilei Value, n Pascal se scrie: readln (Value), , iar pentru a afia valoarea respectiv pe ecran: writeln (Value). Limbajul C++, fiind un limbaj orientat pe obiecte, furnizeaz dou obiecte prefabricate, cin i cout, care reprezint dispozitivul standard de intrare i, respectiv, dispozitivul standard de ieire. Aceeai aciune de mai sus n limbajul C++ se va scrie astfel: cin >>Value; [citirea valorii de la tastatur] cout << Value; [afiarea variabilei Value pe ecran].

5.4.

Implementarea limbajelor

n continuare vom analiza procesul de convertire a unui program scris ntr-un limbaj de nivel nalt ntr-o form executabil de main.

123

Procesul de translatare Procesul de convertire a unui program dintr-un limbaj n altul se numete translatare. Programul n forma iniial este programul surs, iar versiunea translatat este programul obiect. Procesul de translatare const din trei activiti: analiza lexical, analiza sintactic (parsing) i generarea codului.

Figura 5.8 - Procesul de translatare

Analiza lexical este procesul prin care se identific irurile de simboluri din programul surs are reprezint entitile distincte. Pe msur ce analizorul lexical identific grupuri de simboluri care constituie entiti distincte, le clasific n funcie de ceea ce reprezint o valoare numeric, un cuvnt, un operator aritmetic, ... i genereaz un model de bii cunoscut sub numele de simbol (token), care arat clasa entitii respective. Analiza sintactic este un proces de identificare a structurii gramaticale a programului i de recunoatere a rolului fiecrei componente. Majoritatea limbajelor de programarea sunt limbaje cu format liber, ceea ce nseamn c locul instruciunilor n program nu are important. Pentru ca un calculator s poat analiza sintactic un program scris ntr-un limbaj cu format liber trebuie ca analizorul s-l identifice indiferent de spaiile utilizate n programul surs. n acest scop majoritatea limbajelor folosesc semnele de punctuaie, cum ar fi punct i virgul, pentru a marca sfritul unei instruciuni, precum i de cuvinte-cheie (cuvinte rezervate), cum ar fi if, then sau else pentru a marca nceputul unor propoziii distincte.

124

Procesul de analiz sintactic se bazeaz pe un set de reguli care definesc sintaxa limbajului de programare, reprezentare prin diagramele de sintax. n fig. 5.9 se prezint diagrama de sintax a instruciunii if then - else.

Figura 5.9 - Diagrama de sintax a instruciunii if then else din pseudocod

Procesul de analiz sintactic const, n esen, din construirea arborelui de analiz sintactic a programului surs. Din acest motiv, regulile de sintax care descriu structura gramatical a unui program nu trebuie s permit obinerea a doi arbori diferii pentru acelai ir analizat. Pentru exemplificare, regula din fig. 5.9 conine o eroare care permite ca, pentru instruciunea : if B1 if B2 then S1 else S2 s se obin doi arbori de analiz diferii, prezentai n fig. 5.10. Definiiile de sintax ale limbajelor formale de programare sunt proiectate astfel nct s evite asemenea ambiguiti, folosind parantezele. Pentru a distinge cele dou interpretri posibile vom scrie:

if B1 then (if B2 then S1) else S2 if B1 then (if B2 then S1 else S2)

125

Figura 5.10 - Arbori de analiz sintactica diferii pentru instruciunea ( if B1 then if B2 then S1 else S2 ) Informaiile extrase din instruciunile declarative sunt nregistrate ntr-o tabel numit tabela de simboluri, care conine date referitoare la variabilele care au fost declarate i la tipurile i structurile de date asociate. O alt activitate din cadrul translatrii unui program este generarea codului, reprezentnd procesul de construire a instruciunilor n limbajul-main care simuleaz instruciunile recunoscute de analizorul sintactic. Una din sarcinile importante ale generatorului de cod este optimizarea codului.

126

Analiza lexical, sintactic i generarea codului nu se realizeaz strict n aceast ordine, ci se mpletesc: analizorul lexical identific primul simbol i l transfer analizorului sintactic care ar trebui s urmeze i i cere urmtorul simbol. n momentul n care sunt recunoscute instruciuni sau propoziii complete, analizorul sintactic apeleaz generatorul de cod, care produce instruciunile main necesare.

Editarea de legturi i ncrcarea Programul obiect care rezult n urma procesului de translatare, dei exprimat n limbaj main, este arareori ntr-o form executabil. Majoritatea mediilor de programare permit dezvoltarea i translatarea individual a modulelor de program, la momente diferite, ceea ce permite construcia modular a produselor software. Chiar dac programul este dezvoltat i translatat sub forma unui singur modul, n cele mai multe cazuri programul obiect tot nu este pregtit pentru execuie, deoarece conine cereri de servicii software care sunt oferite direct de sistemul de operare sau pot fi obinute prin intermediul acestuia. Un program obiect este un program main cruia i lipsesc unele legturi care trebuie nnodate pentru a-l transforma ntr-un program executabil. nnodarea acestor legturi este efectuat de un program numit editor de legturi (linker). Sarcina acestui linker este de a lega ntre ele programele-obiect, rutinele sistemului de operare i alte utilitare software ntr-un program executabil (modul ncrcabil), memorat ca fiier n sistemul de stocare de mas al calculatorului. Pentru executarea unui program astfel translatat, el trebuie plasat n memorie de ctre programul de ncrcare (leader), parte a secveniatorului. Pe scurt, pregtirea unui program scris ntr-un limbaj de nivel nalt const dintr-o secven de trei pai: translatare, editare de legturi i ncrcare, aa cum se vede n fig.7.11. Dup translatare i editare de legturi, programul poate fi ncrcat i executat n mod repetat, fr a mai reveni la versiunea-surs. Dac sunt necesare modificri n program, acestea se fac n programe-surs, dup care sursa modificat este translatat i se face editarea de legturi, obinndu-se un nou model ncrcabil.

127

Figura 5.11 - Procesul complet de pregtire a programului

Pachete pentru dezvoltarea produselor software Tendina curent este aceea de a grupa translatorul i celelalte elemente software utilizate n procesul de dezvoltare a unui produs software ntr-un pachet care funcioneaz ca un sistem integral. Avantajele utilizrii unui astfel de sistem integrat sunt reprezentate de posibilitatea ca programatorul s poat trece cu uurin de la editor la instrumente de depanare modificnd i testnd imediat programul.

5.5.

Programarea declarativ

Logica formal furnizeaz un algoritm general de rezolvare a problemelor, n jurul cruia se poate construi un sistem de programare declarativ.

Deducia logic S presupunem c urmtoarea afirmaie este adevrat: Kermit fie este bolnav, fie se afl pe scen. n aceste condiii, dac ni se spune despre Kermit c nu este pe scen, tragem concluzia c este bolnav. Acesta este un exemplu de aplicare a principiului deductiv numit rezoluie. Ca s nelegem mai bine acest principiu, s ncepem prin a reprezenta propoziiile logice prin litere, iar negarea negaiile lor prin simbolul nsoit de o liter. n form general principiul rezoluiei precizeaz faptul c dac propoziiile: P OR Q i R OR Q

sunt adevrate, atunci i propoziia: P OR R este adevrat. Altfel spus, cele dou propoziii iniiale se rezolv prin a treia, numit rezolvent.

128

Se observ c rezoluia poate fi aplicat doar perechilor de propoziii cu forma clauzal (propoziii legate prin operatorul boolean OR). n fig. 5.12 este reprezentat grafic rezoluia a dou propoziii.

Figura 5.12 - Rezolvarea propoziiilor (P OR Q) i (R OR -Q) prin (P OR Q)

Se spune c o serie de propoziii este inconsistent dac este imposibil ca toate propoziiile s fie adevrate n acelai timp. n fig. 5.13 se demonstreaz faptul c setul de propoziii P OR Q; R OR Q; R; P este inconsistent.

Figura 5.13 - Rezolvarea propoziiilor (P OR Q) i (R OR Q), R i P

Procesul prin care, pentru a face posibil aplicarea principiului rezoluiei variabilelor, li se atribuie valori se numete unificare. Acest proces, de unificare, permite ca ntr-un sistem deductiv propoziiile generale s fie aplicate n cazuri particulare.

129

Limbajul PROLOG Limbajul Prolog (PROgramming in LOGic) este un limbaj de programare declarativ al crui algoritm de rezolvare a programelor are la baz rezoluia repetat. Un program Prolog const dintr-o serie de propoziii iniiale, pe care algoritmul i bazeaz toate deduciile. Componentele din care sunt construite aceste propoziii se numesc predicate. Un astfel de predicat se compune dintr-un identificator, urmat de o parantez cu lista argumentelor predicatului. Argumentele predicatului ncep ntotdeauna cu liter mic. Limbajul Prolog face distincia ntre constante (liter mic) i variabile (majuscule). Instruciunile ntr-un limbaj Prolog sunt fie afirmaii, fie reguli; ele se termin cu punct. O afirmaie const dintr-un singur predicat. Nu trebuie s v nchipuii c sistemul Prolog nelege semnificaia predicatelor din program; el le manipuleaz ntr-o manier absolut simbolic, aplicnd regulile de inferen ale rezoluiei. Programatorului i revine responsabilitatea de a descrie toate caracteristicile i predicatele sub forma unor afirmaii i reguli. Majoritatea implementrilor de Prolog sunt proiectate pentru utilizare interactiv. Atunci cnd sistemul Prolog primete o ntrebare, el i aplic principiul rezoluiei

ncercnd s confirme faptul c o afirmaie corespunztoare ntrebrii este o consecin a afirmaiilor iniiale. Astfel, pe baza seriei de instruciuni care descriu viteza relativ, pot fi confirmate toate ntrebrile urmtoare: faster (broasca, melc) faster (iepure, broasc) faster (iepure, melc). Primele dou sunt afirmaii care apar n setul iniial de instruciuni, iar cea de a treia poate fi dedus de ctre sistem. Dac furnizm sistemului ntrebri care au argumente variabile, nu constante, vom obine exemple mult mai interesante. De exemplu, pornind de la ntrebarea: faster (w, melc) vom obine ca rspuns:
130

faster (broasca, melc). Putem cere sistemului Prolog s gseasc animale care sunt mai lente dect iepurele punndu-i ntrebarea: faster (iepure, w). Astfel, utiliznd un singur program Prolog, vom putea s confirmm faptul c un animal este mai rapid dect altul, s gsim toate animalele care sunt mai rapide dect un animal dat sau s gsim toate relaiile dintre animale n ceea ce privete viteza. Aceast flexibilitate este unul dintre aspectele care a trezit interesul specialitilor pentru limbajul Prolog.

131

TEST AUTOEVALUARE 5 (Limbaje de programare)


1. Un program este utilizabil atunci cnd: a. Gradul de complexitate este mic b. Gradul de complexitate este mare c. Cnd localizarea i corectarea erorilor a fost nlturat 2. Asamblorul are rolul de: a. Scrierea algoritmilor sub form de pseudocd b. Translatare a programelor scrise n limbaj de asamblare c. Organizare a prioritilor proceselor folosind semafoare 3. Definii pe scurt limbajul de asamblare. 4. Descriei independea programelor fa de main. 5. ANSI se refer la: a. American National Standards Institute b. International Standards Organization c. International Electrotechnical Comission 6. Prezentai pe scurt clasificarea limbajelor de programare. 7. Translatorul are rolul de: a. Translatare a programelor exprimate n primitive de nivel nalt n limbaj-main b. Translatarea programelor n pseudocod c. Realizare a instruciunilor din cadrul unui program n semafoare i procese 8. Programele de translatare mai sunt cunoscute i sub numele de: a. Asamblatoare b. Compilatoare c. Translatoare 9. Descriei pe scurt paradigmele de programare. 10. Limbajul C++ este un limbaj bazat pe o paradigm de tip: a. Funcional b. Orientat pe obiect c. Procedurale
132

d. Declarativ 11. Limbajul Pascal este un limbaj bazat pe o paradigm de tip: a. Funcional b. Procedurale c. Declarativ 12. Limbajul Prolog este un limbaj bazat pe o paradigm de tip: a. Declarativ b. Orientat pe obiecte c. Funcional 13. Definii paradigma imperativ (procedural) i dai exemple de limbaje de
programare care se bazeaz pe aceast paradigm.

14. Definii paradigma declarativ i dai exemple de limbaje de programare care se


bazeaz pe aceast paradigm.

15. Definii paradigma funcional i dai exemple de limbaje de programare care se


bazeaz pe aceast paradigm.

16. Definii paradigma orientat spre obiecte i dai exemple de limbaje de programare
care se bazeaz pe aceast paradigm.

17. Definii conceptele programrii clasice. 18. Care sunt conceptele programrii clasice: a. Instruciuni declarative b. Procese c. Instruciuni imperative d. Translatoare e. Comentariile 19. Caracterizati pe scurt variabilele, constantele i literali. 20. O variabil poate fi definit ca: a. locaie de memorie b. o valoare oarecare c. valoare binar

133

21. Caracterizai pe scurt principalele categorii de date, furniznd cte un exemplu pentru
fiecare.

22. Tipul datelor determin: a. Modul n care este interpretat irul b. Valorile pe care le poate accepta o variabil c. Modul n care compilatorul aloc memorie pentru tipul dat 23. Tipul integer se refer la: a. Date de tip numere ntregi b. Date tip numere reale c. Date de tip caracter d. Date de tip adevrat sau fals 24. Cu ajutorul tipului integer se pot efectua operaii: a. Aritmetice b. Booleene c. De substituie 25. Tipul real se refer la numerele: a. Reale, stocate n virgul mobil b. Reale, stocate ca numere ntregi c. ntregi 26. Tipul character se refer la date care constau: a. Din simboluri, codificate ca ASCII b. n valori binare c. n valori hexazecimale 27. Tipul boolean se refer la date care constau: a. n valori adevrate (true) sau false (false) b. n valori octale c. n valori hexazecimale 28. Descriei pe scurt tipul de date integer.

134

29. Descriei pe scurt tipul de date real. 30. Descriei pe scurt tipul de date character. 31. Descriei pe scurt tipul de date boolean. 32. Definii i dai exemple de diferite variabile (integer, real, character, boolean) dnd
preciznd limbajul n care au fost definite.

33. Conceptul de structur de dat este asociat: a. Instruciunilor ciclice b. Instruciunilor declarative c. Instruciunilor de control 34. Conceptul de structur de date se refer la: a. Forma abstract a datelor b. Forma general a datelor c. Forma conceptual a datelor 35. Definii i caracterizai prin exemplu structura conceptual a vectorilor omogeni. 36. Numele unui ir de caractere este un caz particular al unei: a. Structuri generice de algoritmi b. Structuri generice de date c. Structuri ciclice i de control 37. Pentru a putea face referire la un vector n ntregime, el trebuie s fie mai nti: a. Declarat b. Iniializat c. Scris n pseudoco 38. Ne putem referi la un vector n ntregime: a. Prin nume b. Prin poziia componentei c. Prin tipul vectorului 39. Prin ce sunt identificabile componentele unui vector omogen: a. Indici b. Coloane c. Rnduri
135

40. Definii conceptul de instruciune de atribuire i dai exemple. 41. Ce se solicit unei variabile prin instruciunea de atribuire: a. Valoarea s fie incrementat cu 1 b. Valoarea s fie decrementat cu 2 c. S i se atribuie o valoare 42. Definii conceptul de instruciune de control i dai exemple. 43. Instruciunile de control sunt instruciuni: a. Imperative b. Prin Alegeri opionale c. Prin argumente justificabile 44. Comentariile ntr-un program sunt utile pentru: a. Comentarea anumitor instruciuni b. Furnizarea de informaii suplimentare pentru nelegerea programului c. Marcarea variabilelor aflate n memorie n timpul execuiei

45. Variabilele globale se definesc: a. La nceputul programului b. n afara funciilor c. n interiorul funciilor
136

46. Definiii conceptul de parametru i dai exemple. 47. Definii conceptul de funcie i dai exemple. 48. Definii conceptul de instruciuni de intrare/ieire. 49. Fie urmtorul proces de translatare. Definii i caracterizai fiecare component ce face
parte din acest proces (analizor lexical, analizor sintactic, generator de cod).

50. Analiza lexical este procesul prin care: a. Se identific irurile de simboluri din programul surs b. Se identific structura gramatical a programului c. Se ajunge de la program sursa la program obiect 51. Definiia analiza lexical. 52. Definii analiza sintactic i dai un exemplu. 53. Definii generatorul de coduri. 54. Informaiile extrase din instruciunile declarative sunt nregistrate ntr-o tabel numit: a. Tabel de rutare b. Tabel static c. Tabel de simboluri 55. Activitatea de generare a codului reprezint: a. Procesul de construire a instruciunilor n limbaj main b. Trecerea de la cod surs la cod main c. Trecerea de la hexazecimal la binar

137

56. Definii editarea de legturi i procesul complet de pregtire a programului. 57. nainte ca un program s fie executat, el trebuie plasat n: a. Memorie b. Pe un dispozitiv optic c. n memoria virtual 58. Logica formal st la baza: a. Unui sistem de programare declarativ b. Unui sistem de programare obiectul c. Unui sistem de programare procedural 59. Definii si argumentai deducia logic. 60. Procesul prin care este posibil aplicarea principiului rezoluiei variabilelor se numete: a. Unificare b. Potenare c. Divizare 61. Procesul de unificare permite ntr-un sistem deductiv ca propoziiile generale s fie
aplicate n cazuri:

a. Particulare b. Generale c. Specifice 62. Limbajul PROLOG (Programming in Logic) este un limbaj de: a. Programare declarativ b. Programare orientat pe obiect c. Programare procedural 63. ntr-un program PROLOG propoziiile din care este construit, se numesc: a. Verbe b. Adjective c. Predicate 64. Caracterizai limbajul PROLOG (Programming in Logic) dnd i exemple.

138

UNITATEA DE NVARE 6
6. 6.1. Structuri de date Vectori

Vectorii permit exprimarea unui algoritm ca i cum datele manipulate ar fi stocate ntr-un aranjament rectangular. n acest fel, ne putem referi la cel de al cincelea element al unui vector rectangular sau la elementul situate pe a treia linie i a asea coloan al unui vector bidimensional.

6.1.1. Vectori unidimensionali S presupunem necesitatea stocrii i prelucrrii unui ir de temperaturi msurate din or n or. Cea mai comod form de organizare a acestor date este un vector unidimensional. Acest vector unidimensional poate fi considerat o list numit. Citiri ale crei articole sunt specificate prin poziia lor n list. Prima valoare nregistrat va fi specificat cu Citiri(1), a doua cu Citiri(2) i asa mai departe. Organizarea fizic, n exemplul nostru, este evident datele vor fi stocate ntr-o secven de 24 de celule de memorie care au adrese consecutive. Cunoscnd adresa primei celule de memorie translatorul va putea s converteasc referirile de tipul Citiri(4) n adrese de memorie corespunzatoare.

Figura 6.1 - Vectorul Citiri stocat n memorie ncepand de la adresa 15

139

6.1.2. Vectori multidimensionali n cazul acestor vectori destinai organizrii datelor se poate sugera o form tabelar. S imaginm exemplul vnzrilor fcute de un numr de ageni comerciali pe o perioad de o sptamn. Forma de organizare tabelar este urmtoarea, n stnga apar pe vertical agenii, iar pe prima linie zilele sptmnii. Deci datele vor fi dispuse pe linii i coloane. Valoriile de pe o linie reprezint vnzrile efectuate de un agent, iar pe o coloan vnzrile efectuate ntr-o anumit zi. Extragerea informaiei din tabel presupune gsirea valorii care se afl la intersecia unei linii cu o coloan. Memoria calculatorului nu are o structur matricial, motiv pentru care structura tabelului va trebui simulat. Calculm pentru nceput spaiul de memorie necesar i rezervm un bloc continuu de celule de memorie de dimensiunea respectiv. Apoi se vor stoca datele n memorie linie cu linie n ordine astfel, valorile din prima linie, apoi valorile din linia doua, etc.

Figura 6.2 - Vector bidimensional stocat n ordinea liniilor

Acest sistem de stocare se numete n ordinea liniilor (row major order); existnd i posibilitatea stocrii n ordinea coloanelor (column major order). Cum putem localiza elementele vectorului atunci cnd este nevoie de ele? Notm cu C numrul de coloane ale vectorului (numarul elementelor de pe o linie). Pentru a gsi elementul

140

din linia I, coloana J va trebui s ne deplasm de la nceputul blocului cu C* (I-1)+J poziii. Aceast exprimare se numete polinom de adresa (address polynomial). Altfel spus, trebuie s depim I-1 linii, fiecare avd C articole, pentru a ajunge la linia I, apoi nca J elemente pentru a ajunge la elementul J, din linia curent. n fig. 2 acest calcul este urmatorul C=6, I=3, J=5; formula devine 6*(3-1)+5 = 17

6.2.

Liste

Exist i structuri vectoriale dinamice, cu forma i dimensiuni variabile. n anumite cazuri, pe lng localizarea elementelor n cadrul structurii ne vom confrunta i cu variaiile lungimii acesteia.

Pointeri Locaiile din memoria calculatorului sunt identificate prin adrese numerice. Prin adresa unei anumite date vom gsi elementul respectiv far nici o dificultate. Aa cum elementul propriu-zis poate fi nregistrat ntr-o celul de memorie i adresa lui poate fi stocat n alta celul. Ulterior dac accesm adresa gsim elementul respectiv prin intermediul respectivei adrese. Putem considera c celula de memorie care conine adresa indic (point) ctre elementul respective, de unde apare i numele de pointeri dat celulelor de memorie care conin adrese. Multe limbaje de programare permit declararea, alocarea i manipularea pointerilor. S exemplificm prin situaia unei biblioteci care ine evidena crtilor n ordine alfabetic, dup titlu. n respectiva organizare este dificil de gsit toate crile scrise de un anumit autor. Pentru a rezolva problema se rezerv n blocul care conine informaii referitoare la carte o celul supliment de tip pointer. n fiecare celul pointer se stochez adresa altui bloc care corespunde unei cri scrise de acelai autor. n acest fel, crile care au acelai autor vor fi legate ntr-un fel de bucl (fig.6.3).

141

Figura 6.3 Lista de cri dintr-o biliotec stocat dup titlu i nlanuit dup autor

n continuare vom discuta despre structurile dinamice analiznd modalitile de stocare a unei liste de nume n memoria calculatorului.

Liste contigue Una din tehnicile de stocare a unei liste de nume n memoria calculatorului este plasarea listei ntr-un bloc de celule cu adrese consecutive. Presupunem c numele respective nu depesc opt caractere. Vom mprii blocul n sub-blocuri de cte opt celule. n fiecare sub-bloc se va putea stoca un nume (nregistrnd n fiecare celul codul ASCII pentru o litera - fig.6.4). Dac

142

numele nu ocup toate celulele din blocul alocat, vom complete celulele libere cu codul ASCII pentru spaiu.

Figura 6.4 - Nume stocate n memorie ca list contigu

Acest mod de organizare se numete list contigu, n cadrul sistemului pentru stocarea listei. Exemplu. Instructiune Pascal Var List packed array (1 .. 8,1..10) of char , declar un vector bidimensional de 8 linii i 10 coloane. Problemele acestei structuri de stocare (structura contigua) apar la : a. tergerea unui nume din list - Dac numele ters nu este ultimul pentru a pstra ordinea de stocare (eventual alfabetic) trebuie s fie mutate toate numele care se afl n lista dupa numele ters. b. Adaugarea unui nume nou n list - O problem posibil, s nu mai fie loc n memorie pentru acest nou nume, deoarece folosim un bloc contiguu. O alt problem este poziionarea noului nume ntr-o list alfabetic, acolo unde-i este locul. Liste nlnuite Fiecare nume se nregistreaza ntr-un ir de nou celule, primele opt vor fi utilizate pentru stocarea numelui propriu-zis, iar ultima va fi folosit ca pointer ctre urmatorul nume din list. Astfel, lista poate fi fragmentat n mici blocuri, de cte nou celule, blocuri legate ntre ele prin pointeri. Acest mod de organizare se numeste list inlantuit (linked list). Pentru a ti de unde ncepe lista trebuie rezervat o celula de memorie n care se salveaz adresa primului articol din list pointer cap de list (head pointer). Citirea listei va ncepe de la locaia indicat de pointer-ul cap de list, unde se gsete primul nume din list i un pointer
143

ctre articolul urmator. n acelai fel se poate parcurge ntreaga list. Problema detectrii sfritului de list se rezolv prin utilizarea pointer-lui NIL (o combinaie special de bii nscris n celula de tip pointer a ultimului element din list). n figura 6.5 este prezentat structura unei liste nlnuite.

Figura 6.5 - Structura unei liste nlnuite

Revenind la problemele care apar la structura contigu, tergerea unui nume i adaugarea unui nume n list, ele au o soluionare mult simplificat n cadrul listei nlnuite. a. tergerea unui nume implic doar schimbarea unui pointer. Pointer-ul care arat iniial ctre numele pe care-l tergem va arta ctre urmatorul nume din list fig.6.6.

Figura 6.6 - Stergerea unui articol dintr-o list nlnuit


144

b. Pentru inserarea unui nou nume trebuie gsit mai inti un loc liber de nou celule n memorie, apoi se stocheaz noul nume n primele opt celule i se completeaz cea de a noua celul cu adresa numelui din lista care trebuie precedat n lista numelui inserat fig.6.7.

Figura 6.7 - Inserarea unui articol ntr-o list nlnuit

La tergerea i inserarea unui nume ntr-o list trebuie s se ina seama i de evidena blocurilor de celule eliminate din list (aceste blocuri pot fi refolosite pentru stocarea noilor articole inserate). Evidena blocurilor terse se poate ine prin construirea unei noi liste nlnuite.

Stive Stiva reprezint o list n care inserrile i tergerile se fac la un singur capt al structurii. Captul listei la care se efectuea aceste operaii se numete vrful stivei (top), iar cellalt capt se numete baza stivei. Pentru inserarea unui element n stiv se va folosi denumirea de operaie push, iar pentru tergerea unui element din stiv se folosete denumirea de operaie pop. Una dintre cele mai comune aplicaii prin care se poate explica modul de lucru ntr-o stiv este execuia unor module de program din categoria procedurilor din pseudocod.
145

La solicitarea execuiei unei proceduri, calculatorul acceseaz proceduri, iar ncheierea procedurii trebuie s se termine n punctul anterior i s continue execuia programului apelant, ca n figura 6.8.

Figura 6.8 - Procedurile i ncheie execuia n ordinea invers celei n care au fost apelate

Dup realizarea transferului iniial trebuie s existe i s funcioneze un mecanism de memorare a punctului n care trebuie s revin. Mecanismul de memorare trebuie s salveze punctele de revenire i s le regseasc n ordine corect. Conceptul de stiv este inerent proceselor care presupun ieirea dintr-un sistem urmndu-se drumul invers celui de intrare.

Implementarea stivei n mod obinuit se rezerv pentru stiv un bloc de memorie suficient de mare pentru a permite creterea dimensiunii ei. Dup rezervarea blocului de memorie, trebuie s stabilim captul care va servi ca baz stivei. Acesta este punctul n care vom include n stiv primul
146

element, articolele urmtoare fiind stocate n continuare, spre cealalt extremitate a blocului rezervat. Este nevoie de un instrument suplimentar: posibilitatea identificrii n orice moment a vrfului stivei. Aceast celul suplimentar poart numele de pointer al stivei (stack pointer). Sistemul astfel completat este prezentat n figura 6.9.

Figura 6.9 - Stocarea stivei n memorie

Modul de funcionare al sistemului: pentru adugarea unui element n stiv, se modific (mai nti) pointerul de stiv astfel nct s indice ctre primul loc gol de deasupra vrfului, apoi plasm respectivul element n locaia respectiv; pentru a terge (scoate) un element din stiv citim datele din locaia indicat de pointerul de stiv, apoi ajustm pointerul astfel nct s arate ctre urmtorul articol situat spre baza stivei. Dac nu putem rezerva un bloc fix de memorie suficient de mare pentru a se putea terge stiva, trebuie implementat stiva ca structur nlnuit.
147

Cozi Organizarea de tip coad este o form de list n care adugarea (inserarea) se face pe la un capt al listei, iar tergerea la cellalt capt. Astfel spus coada este un obiect de stocare de tip FIFO (primul venit, primul plecat). Capetele de la care sunt eliminate articolele se numesc cap (head), iar captul la care se adaug articole se numete coad (tail); pentru evitarea confuziilor vom folosi n acest scop termenii de nceput i sfrit.

Implementarea cozilor O metod este folosirea unui bloc continuu de celule de memorie. n cazul cozilor se efectueaz operaii la ambele extremiti ale structurii, deci se vor folosi doi pointeri: un pointer de nceput i un pointer de sfrit. Presupunem la nceput, coada goal deci ambii pointeri indic aceeai locaie de memorie, figura 6.10.

Figura 6.10 - La nceput coada este goal

La inserarea unui articol, acesta va fi stocat la locaia indicat de pointerul de sfrit dup care se va modifica pointerul de sfrit (va arta urmtoarea locaie neutilizat) - figura 6.11.

148

Figura 6.11 - Dup inserarea unui articol (A) n acelai fel se va realiza inserarea a nc un articol - figura 6.12.

Figura 6.12 - Dup inserarea nc unui articol

La eliminarea unui articol din coad, se va extrage obiectul care indic locaia indicat de pointerul de nceput, dup care se va ajusta acest pointer aa nct s arate ctre articolul care urmeaz dup cel eliminat - figura 6.13.

149

Figura 6.13 - Dup eliminarea articolului A

n cadrul acestui sistem de stocare, coada tinde s se deplaseze lent prin memorie, distrugnd n drumul ei alte date. Aceast sete de memorie este un efect colateral al procedurii de acces. O soluie la aceast problem este ca articolele rmase n coad vor nainta pe msur ce articolele de la nceputul cozii sunt eliminate. n aceast situaie, ar trebui gsit o metod de a ncadra coada ntr-o anumit zon de memorie, fr s fie nevoie de rearanjarea datelor. Faptic rezervm un bloc de memorie i plasm coada, pentru nceput, la una dintre marginile blocului i i permitem s migreze ctre cealalt margine. Cnd sfritul cozii atinge marginea blocului, vom ncepe s inserm elemente la cellalt capt al blocului, unde au aprut noi articole, care ateapt. Astfel coada se va nvrti n cadrul blocului rezervat (coad circular).

6.3.

Arbori

Spre exemplificarea acestei structuri ne vom inspira din diagrama de organizare a unei companii - figura 6.14.

150

Figura 6.14 - Un exemplu de diagram de organizare

Fiecare poziie din cadrul arborelui poart denumirea de nod. Nodul din vrful ierarhiei se numete nodul rdcin, nodurile de la cealalt extremitate a arborelui sunt denumite noduri terminale (sau frunze). Linia care unete dou noduri se numete are. Oricare componente a unui arbore poart numele de sub-arbore. Se vorbete de n cadrul acestei structuri de strmoi i de descendeni unui nod. Descendenii de la nivelul imediat inferior se numesc fii. Nodul superior este denumit nod printe; nodurile generate de acelai nod printe se numesc frai. Adncimea arborelui, reprezint numrul de noduri care formeaz cea mai lung cale de la nodul rdcin la un nod terminal; adncimea arborelui este egal cu numrul de straturi orizontale din componenta acestuia.

Implementarea arborilor Ne vom rezuma la cazul particular al arborilor binari arbori n care fiecare nod are cel mult doi descendeni. n cazul arborilor binari, fiecare artiol (nod) al arborelui conine trei componente: datele; un pointer ctre primul descendent (pointer ctre descendentul stng) un pointer ctre al doilea descendent (pointer ctre descendentul drept)

151

Fiecare nod al arborelui va fi reprezentat ntr-un bloc continuu de celule de memorie conform figurii 6.15.

Figura 6.15 - Structura unui nod dintr-un arbore binar

Stocarea arborelui n memorie presupune att identificarea unor blocuri disponibile n care s se nregistreze nodurile, ct i legarea acestor noduri pentru a se forma structura dorit. Fiecare pointer trebuie definit astfel nct s indice ctre descendentul stng/drept al nodului sau s i se atribuie valoarea NIL (dac nodul nu are descendeni n direcia respectiv). Evident pentru un nod terminal ambii pointeri sunt NIL. De asemenea trebuie s rezervm o locaie special pentru adresele nodului rdcin (pointer ctre rdcin). n figura 6.16 este prezentat structura conceptual a arborelui, iar n figura 6.17, modul de stocare a structurii n memorie.

Figura 6.16 - Organizarea conceptual a arborelui binar

Cu ajutorul sistemului de stocare deschis se va putea identifica nodul rdcin i se va putea urma orice turneu n cadrul arborelui mergnd din nod n nod, cu ajutorul pointerilor.

152

Figura 6.17 - Organizarea real a unui arbore binar

O metod alternativ de stocare a arborilor binari i propune rezervarea unui bloc de memorie continu, stocarea nodului rdcin n prima celul (fiecare nod ocup o singur celul), stocarea descendentului stng al nodului rdcin n a doua celul, stocarea descendentului drept al nodului rdcin n a treia rdcin (n general stocarea descendentului ,,stngrespectiv ,,drept al nodului din celula n n celulele 2n, respectiv 2n+1. Celule neutilizate pentru stocarea structurii arborescente vor avea o valoare particular, indicnd absena datelor figura 6.18.

Figura 6.18 - Stocarea arborelui din figura 6.16 fr pointeri

Aceast metod de stocare ofer un mod convenabil de regsire a prinilor sau frailor oricrui nod. Pentru a regsi prinii i fraii n cadrul structurii nlnuite, trebuie folosii pointeri suplimentari.

153

TEST AUTOEVALUARE 6 (Structuri de date)

1. In contextul structurilor de date, ce reprezinta un vector ? 2. Descrieti implementarea vectorului unidimensional avand in vedere modul de rezervare a blocului de memorie. 3. Descrieti implementarea vectorului multidimensional avand in vedere modul de rezervare a blocului de memorie. 4. In contextul structurilor de date, prin ce parametrii se poate caracteriza o lista ? 5. Explicati succint notiunea de pointer, care apare in cadrul unei liste. 6. Precizati si explicati succint doua dintre problemele care pot apare la actualizarea unei liste contigue. 7. Descrieti implementarea listei inlantuite avand in vedere modul de rezervare a blocului de memorie. 8. Descrieti modul de stergere a unui articol folosind structura de tip lista inlantuita. 9. Descrieti modul de inserare a unui articol folosind structura de tip lista inlantuita. 10. In contextul structurilor de date , ce reprezint o stiv? 11. Operaia de inserare ntr-o list poart denumirea de? a. Push b. Pop c. Insert 12. Descriei implementarea stivei avnd n vedere modul de funcionare al sistemului i rezervarea blocului de memorie. 13. Celula suplimentar ntr-o stiv poart denumirea de? a. Referin b. Pointer c. Definiie 14. In contextul structurilor de date ,ce reprezint o coad?

154

15. Ce tip de obiect de stocare este o coad? a. LIFO b. FIFO c. Depth-first search 16. Descriei implementarea cozilor. 17. In contextul structurilor de date , ce reprezint un arbore? 18. Poziia din cadrul unui arbore poart denumirea de? a. Frunz b. Nod c. Copil 19. Nodurile aflate la extremitile arborelui sunt denumite noduri? a. Frunz b. Printe c. Copil 20. Descriei implementarea arborilor. 21. Un nod are? a. Descendeni b. Ascendeni c. Copii 22. Ce reprezint adncimea unui arbore? 23. Stiva poate fi descris astfel: a. primul element introdus n stiv este ultimul care poate fi extras b. primul element introdus n stiv este primul care poate fi extras c. ultimul element introdus n stiv este primul care poate fi extras. 24. Eliminarea unui element din stiv se poate face astfel: a. se elimin elementul din vrf b. se elimin elementul de la baz c. se poate elimina orice element din stiv

155

25. Notm cu VARF poziia pe care se afl elementul din vrful stivei , i cu BAZA poziia celui de la captul opus; stiva este vid dac:

a. VARF = BAZA b. VARF = 0 c. VARF < BAZA 26. La o coad adugarea unui nou element se poate face: a. dup ultimul element b. n faa primului element c. ntr-o poziie intermediar 27. In contextul structurilor de date ,cnd o list este vid? 28. In contextul structurilor de date ,ce este o list circular? 29. Coada poate fi descris astfel: a. primul element introdus n coad este ultimul care poate fi extras b. primul element introdus n coad este primul care poate fi extras c. ultimul element introdus n coad este primul care poate fi extras

156

UNITATATEA DE NVARE 7
7. 7.1. Structuri de fiiere Fiierele secveniale

Noiuni de baz Organizarea secvenial este, desigur, una conceptual. Funcie de caracteristicile fizice ale dispozitivului periferic utilizat se poate stoca fiierul respectiv n alt format i s fie prezentat utilizatorului ca un fiier secvenial. Noiunea de organizare secvenial aici a nregistrrilor ntr-un fiier este legat de dispozitivul periferic i de suportul fizic utilizat (ex. banda magnetic este, prin natura sa, secvenial). Desigur, fiiere secveniale se pot stoca i pe suportul disc magnetic dispersnd nregistrrile n diferite locaii disponibile (care nu sunt una dup alta ca adresare). Sistemele de operare pstreaz evidena locaiilor (sectoarelor) ocupate de nregistrri i fiiere i a ordinii n care trebuie citite. Sfritul fiecrui fiier secvenial este indicat de un marcaj de sfrit de fiier EDF (end of file). n figura 7.1 este prezentat organizarea secvenial a fiierului.

Fig. 7.1. Fiier secvenial

Utilizatorul unui fiier secvenial poate s vad nregistrrile numai n ordine secvenial. Singurul mod de a gsi o nregistrare este acela de a ncepe cutarea de la nceputul fiierului i de a le gsi i extrage n ordinea n care se afl n fiier. Structura secvenial a unui fiier este convenabil pentru generarea unor rapoarte (ex. statele de salarii), dar aceeai structur secvenial este total nefavorabil la actualizarea nregistrrilor. (De exemplu, pentru actualizarea orelor lucrate de un angajat se citete cartela sa de pontaj i apoi se caut n tot fiierul nregistrarea angajatului respectiv pentru actualizare, iar pentru urmtorul angajat trebuie reluat procesul de la nceput. Procesul poate fi simplificat dac ordinea cartelelor de pontaj corespunde cu ordinea nregistrrilor din fiierul angajailor).

157

Din aceste motive fiierele secveniale sunt de regul stocate n ordine alfabetic sau numeric, n funcie de coninutul unui cmp, numit cmp-cheie (key field). Avnd n vedere avantajele oferite de o ordine bine stabilit n prelucrarea fiierelor secveniale, sortarea ocup un loc important. Pentru actualizarea unui fiier secvenial, noile informaii (n cazul nostru colecia de cartele de pontaj) sunt nregistrate sub forma unui fiier secvenial independent, cunoscut sub numele de fiier tranzacional. Acest fiier tranzacional este sortat n ordinea n care este sortat fiierul care trebuie actualizat i nregistrrile fiierului iniial sunt actualizate n ordinea lor de apariie.

Aspecte legate de programare n ceea ce privete manipularea fiierelor secveniale din punct de vedere al programatorului, tendina n cadrul limbajelor de nivel nalt este ca operaiile cu fiiere s se realizeze prin proceduri care sunt fie definite ca parte a limbajului formal, fie furnizate de extensii ale acestuia, sub form de biblioteci. n ambele situaii, parametrii procedurilor indic fiierul-int i zona de memorie principal n care se scrie sau din care se citesc nregistrrile manipulate. De exemplu, n Pascal se pot folosi instruciuni de forma: read (Lista potal, nregistrare potal) i write (List potal, nregistrare potal) pentru a citi, respectiv a scrie (salva) informaii dintr-un/ntr-un fiier secvenial identificat ca List potal. Alturi de identificatorul de fiier, n lista de parametri apare i numele nregistrare potal, utilizat n cadrul programului pentru identificarea blocului de date care se transfer. Observai c aceste instruciuni nu conin nici o informaie explicit cu privire la poziia pe care o au n fiier nregistrrile manipulate. Fiierul fiind secvenial, nregistrarea citit este cea care urmeaz poziiei curente n cadrul fiierului, iar nregistrarea care se scrie n fiier este plasat imediat dup poziia curent.

158

Pe lng subrutine care permit manipularea nregistrrilor dintr-un fiier secvenial, majoritatea limbajelor de nivel nalt furnizeaza i instrumente pentru detectarea marcajului de sfrit de fiier.

7.2.

Fiiere de text

Dac nregistrarea logic dintr-un fiier secvenial se rastrange la, un singur octet, se consider c avem un fiier de text (text file). Denumirea fiierului reflect faptul c aceste fiiere sunt utilizate de obicei pentru stocarea unor documente care conin text. Altfel spus, un fiier de text poate fi considerat compus din secvene de rnduri separate prin marcaje de sfrit de rnd.

Manipularea fiierelor de text Din motive legate de stocare, fiierele de text sunt mprite n secvene de octei care formeaz nregistrri fizice a cror dimensiune e compatibil cu sistemul de stocare utilizat. Manipularea acestor nregistrri fizice este realizat n mod transparent de program. n realitate, la solicitarea prelurii din fiier a primului octet/primul rnd de text, programul citete una sau mai multe nregistrri fizice i le memoreaz ntr-un buffer (zon de tampon) din memoria principal. Pe msur ce programul transfer coninutul buffer-ului ctre utilizator, n buffer sunt aduse noi nregistrri i aa mai departe, pn la atingerea sfritului de fiier. La scriere n fiier, programul colecteaz octeii ntr-un buffer, pn cnd se acumuleaz acolo o nregistrare fizic ntreag sau s-a ajuns la captul fiierului i apoi se trece la transferarea efectiv a nregistrrii fizice pe dispozitivul de stocare.

Aspecte legate de programare Manevrarea fiierelor de text se face cu ajutorul procedurilor predefinite, incluse n definiia formal a limbajului sau n biblioteci oferite ca extensii ale acestuia. Considerm Symbol o variabil de tip caracter implicat n instruciunea: read (Vechiul manuscris, Symbol).

159

Instruciunea de mai sus citete un octet din fiierul de text identificat ca Vechiul manuscris i atribuie acea valoare variabilei Symbol. Similar, instruciunea: write (Noul manuscris, Symbol) , plaseaz octetul atribuit variabilei Symbol la poziia curent n fiierul Noul manuscris.

7.3.

Fiiere indexate

Ideea de indexare este preluat din modul de lucru cu o carte, unde se utilizeaz un index care permite localizarea unui subiect mult mai repede dect prin parcurgerea secvenial a crii.

Noiuni de baz Indexul fiierului const dintr-o list a valorilor care apar n cmpurile-cheie ale fiierului, la care se adaug poziia nregistrrii respective n cadrul dispozitivului de stocare masiv a informaiilor. Acest mod de organizare presupune s cunoatem valoarea cmpuluicheie corespunztor nregistrrii cutate.

Organizarea indexului Pentru a cuta ceva n nregistrarea identificat prin index este necesar ca indexul s fie transferat n memoria principal i n acest sens dimensiunea lui trebuie s se ncadreze n limite rezonabile. O metod de rezolvare a problemei indecilor de mari dimensiuni este utilizarea unui index al indexului iniial. Astfel indexul general va lua o form stratificat sau arborescent.

Aspecte legate de programare Foarte puine dintre limbajele actuale de programare de nivel nalt conin comenzi specifice pentru manipularea fiierelor prin intermediul unui index. Sistemele de gestiunea bazelor de date furnizeaz instrumente care scutesc programatorul de sarcina de a-i ntreine propriile sisteme de fiiere indexate. Totui exist i la nivelul limbajelor de programare crmizile elementare pentru construirea unui fiier indexat.

160

De exemplu: ntr-un program scris n limbajul C se poate utiliza funcia fsetpos pentru a stabili poziia curent n cadrul unui fiier. Astfel, instruciunea: fsetpos (Personal, & Poziie) solicit ca poziia curent n cadrul fiierului Personal s fie stabilit la locaia identificat prin valoarea variabilei Poziie. Dac imediat dup aceast instruciune se scrie: fscanf (Personal, %s, Nume) , vom obine numele situat la respectiva poziie din fiier.

7.4.

Fiiere dispersate (hashed files)

Sistemul de stocare reprezentat prin fiiere dispersate permite doar accesul direct, fr a utiliza un mod de indexare. Ideea de baz este calcularea poziiei fiecrei nregistrri n memorie prin aplicarea unui algoritm (algoritmul de dispersie) asupra valorii cmpului-cheie. Altfel spus, fiind dat cmpul-cheie cutat, se poate determina rapid poziia nregistrrii respective, fr a utiliza o tabel special (cazul fiierelor indexate).

Exemplu de tehnic de dispersie Se mparte zona de memorie de mas alocat pentru fiierul respectiv n mai multe seciuni, pe care le vom numi containere. S presupunem c zona de stocare se mparte n 20 de containere. De asemenea, presupunem c nregistrrile din fiier vor fi cutate dup numrul de identificare i vom stabili acest cmp drept cmp-cheie. Obiectivul nostru urmtor este s convertim orice valoare a cmpului-cheie ntr-o valoare numeric. Acest lucru este oarecum simplu, deoarece vom putea scrie forma binar a fiecrei valori din cmpul-cheie. Apoi utiliznd aceast interpretare numeric, se va mpri aceast valoare binar a cmpului-cheie la numrul de containere, obinndu-se ctul i restul. Aceste resturi vor fi ntotdeauna un numr ntre 0 i 19.

161

Utiliznd acest sistem se poate converti orice valoare din cmpul cheie ntr-un ntreg care identific unul dintre containerele din memoria de mas, unde vom stoca nregistrarea respectiv. Rezolvarea situaiilor de depire superioar Un fiier dispersat trebuie implementat n ideea c se va ajunge la depirea capacitii containerelor. n acest sens trebuie gsit o metod de soluionare a situaiei. Metoda tipic de rezolvare a problemei este rezervarea unei zone suplimentare de memorie de mas, unde s fie nmagazinate nregistrrile care depesc capacitatea containerelor. Aceast zon suplimentar a memoriei de mas se numete zona de depire. n concluzie, dac numrul depirilor este foarte mare, eficiena acestui tip de fiier scade considerabil. Din acest motiv, proiectarea unui fiier dispersat presupune o atent alegere a algoritmului de dispersie, a numrului i a dimensiunilor containerelor, precum i a mrimii i structurii zonei de depire.

Aspecte legate de programare Limbajele procedurale de nivel nalt folosite n prezent nu ofer o implementare direct a fiierelor dispersate. Acest fapt se datoreaz att apariiei unor sisteme de gestiunea bazelor de date performante, ct i dependenei de aplicaie a detaliilor de proiectare (algoritmul de dispersie, numrul i dimensiunea containerelor). n limbajul C va fi nevoie doar s se memoreze poziiile de stocare ale containerelor i s se utilizeze funcia fsetpos pentru localizarea containerului indicat de funcia de dispersie. Tehnicile de dispersie sunt folosite cu mare succes si n distribuia datelor n zone ale memoriei interne principale.

7.5.

Rolul sistemului de operare

Mediul de lucru, n cazul limbajelor de nivel nalt, ofer rutine predefinite pentru manipularea fiierelor componente, care nu intr n sarcina programatorului. Pentru utilizarea operaiilor de regsire i inserare a nregistrrilor, rutinele comunic cu sistemul de operare, deci acestuia i revine sarcina manipulrii fiierelor. Sistemul de operare trebuie s cunoasc structura fiierului, cmpul-cheie i dac fiierul trebuie salvat.

162

Funcie de tipul fiierului se pot prelua: poziia curent n cadrul fiierului, nregistrarea fizic care se afl n buffer-ul din memoria principal. Pentru gestionarea acestor informaii, sistemul de operare folosete cte o tabel numit descriptor de fiier sau bloc de control pentru fiecare fiier utilizat. Dac un program lucreaz cu trei fiiere, sistemul de operare va trebui s construiasc trei descriptori de fiier care s permit gestionarea acestora. n limbajele de nivel nalt, construirea descriptorului de fiier se iniializeaz printr-o rutin numit Open. n FORTRAN, instruciunea tipic are urmtoarea form: OPEN (UNIT = 10, FILE = Test File, STATUS = OLD, ACCESS = SEQUENTIAL) i solicit sistemului de operare s construiasc un descriptor de fiier pentru fiierul cu numele Test File. Parametrii precizai specific c: fiierul va fi indicat ulterior n program ca unitatea logic numrul 10 (UNIT = 10); numele fiierului este Test File (File = Test File); sistemul de operare ar trebui s gseasc deja fiierul n memoria de mas (STATUS = OLD); structura fiierului este secvenial (ACCESS = SEQUENTIAL). Din exemplul furnizat se observ c un fiier poate fi desemnat ulterior n program prin alt nume dect numele lui propriu-zis. Aceast distincie care se face ntre numele extern al fiierului i identificatorul utilizat n program reflect diferena ntre regulile sintactice ale sistemului de operare i cele ale limbajului de programare. Aceast distincie ntre identificatorii externi i interni de fiier permite, de altfel, un grad mai mare de flexibilitate n sensul c o procedur proiectat s manipuleze fiierul prin intermediul identificatorului intern poate fi utilizat ca rutin generic pentru prelucrarea a diferite fiiere. Dup prelucrarea fiierului, multe limbaje de programare cer s fie apelat o rutin numit Close. Aceast rutin informeaz sistemul de operare c spaiul de memorie rezervat pentru descriptorul de fiier poate fi folosit n alte scopuri. Pentru anumite fiiere (ex. fiierele txt), rutina Close are i rolul de a comunica sistemului de operare necesitatea transferrii ultimei nregistrri fizice pe dispozitivul de stocare.

163

TEST AUTOEVALUARE 7 (Structuri de fiiere)


1. De cte tipuri pot fi structurile de fiiere? Enumerai-le. 2. Dai exemple de suporturi fizice specifice organizrii secveniale. 3. Cum se marcheaz sfritul fiecrui fiier secvenial? 4. Fiierele secveniale sunt stocate n ordine ...... sau ..., n funcie de coninutul unui cmp, numit . 5. Singurul mod de a gsi o nregistrare este acela de a: a) ncepe cutatea de la nceputul fiierului; b) folosi o cheie de cutare; c) cuta n arhiv, folosind un algoritm. 6. Ce este un fiier tranzacional? 7. Pentru a citi, respectiv a scrie (salva) informaii dintr-un/ntr-un fiier secvenial identificat ca List potal, n Pascal se pot folosi instruciuni de forma : a) read b) compare c) summ up d) write 8. Cum se numete parametrul utilizat n cadrul programului pentru identificarea blocului de date care se transfer: a) nregistrare potal; b) nregistrare fiscal; c) Separare numeric. 9. Ce este un fiier de text? 10. Fiierele de text sunt mprite n : a) secvene de octei ; b) secvene de rnduri separate ; c) secvene de uniti lingvistice.

164

11. Unde sunt memorate mai nti nregistrrile nregistrrile fizice, nainte de transferarea efectiv a acestora pe dispozitivul de stocare: a) ntr-un buffer; b) Pe un hard-disk extern; c) Pe o partiie separat. 12. Descriei aspectele legate de programarea fiierelor de text. 13. Ce este indexul fiierului? 14. Care este condiia necesar pentru ca un index s devin viabil: a) Dimensiunea lui trebuie s se ncadreze n limite rezonabile; b) Trebuie s rmn n memoria secundar a calculatorului; c) Trebuie s se regseasc pe ambele partiii. 15. Descriei etapele de aplicare a funciei fsetpos i rolul acesteia (limbajul C). 16. Calcularea poziiei fiierelor dispersate n memorie se realizaz prin aplicarea unui algoritm numit ......................................... asupra valorii ................................. 17. Descriei o tehnic de dispersie cunoscut. 18. Ce este o zon de depire? 19. Care este rolul sistemului de operare? 20. Cum se numete tableta folosit de sistemul de operare pentru gestionarea informaiilor?

165

UNITATEA DE INVATARE 8

8.

Structuri de Baze de date

8.1.

Consideraii generale

n general, nelegem prin baz de date orice ansamblu de date, dar termenul semnific de obicei un ansamblu de date stocate pe un dispozitiv magnetic de stocare de mas, avnd diferite forme de prezentare (organizare), n funcie de necesiti i disponibil ca surs de date pentru o gam larg de aplicaii. Din alt punct de vedere, o baz de date este rezultatul combinrii mai multor serii de date (proiectate i culese iniial pentru aplicaii diferite) ntr-un singur ansamblu unificat. Aceast abordare integrat a conceptului de baz de date i are originea n evoluia istoric a sistemelor automate de stocare i ntreinere a datelor. De exemplu, nevoia calculrii salariilor a condus la apariia unor fiiere secveniale, iar necesitatea regsirii interactive a datelor a avut ca rezultat realizarea unor fiiere cu acces direct. Dei fiecare din aceste sisteme de fiiere a reprezentat o mbuntire fa de procedurile manuale, datorit lipsei de comunicare ntre ele, totui permiteau numai o utilizare limitat i neeficient a resurselor. n aceste condiii, bazele de date au reprezentat soluia adecvat a organizrii informaiilor stocate i gestionate de instituii i organizaii. Dac se implementeaz o baz central de date referitoare la datele solicitate de mai multe compartimente, administrarea acesteia se poate executa dintr-o unic poziie cunoscut sub numele de administrator al bazei de date (DBA database administrator). Administratorul tie att ce date sunt disponibile n cadrul organizaiei, ct i care sunt datele necesare diferitelor compartimente, putnd lua hotrri referitoare la organizarea i accesul la date. Exist i dezavantaje care apar la organizarea datelor sub forma unor baze de date. Una din problemele delicate este controlul accesului la datele importante. Controlul asupra accesului la informaiile din baza de date este la fel de important ca i capacitatea lor de partajare.
166

Acordarea de drepturi distincte de acces la sistemele de baze de date se face innd seama de schema de descriere a ntregii structuri a bazei de date. n ultima vreme,

dimensiunile i aria de cuprindere a bazelor de date a cunoscut o cretere rapid, ceea ce a condus la apariia unor grupri foarte mari de date. Aceste grupri de date pot fi fr efort organizate, asamblate i interogate de la distan. Acest mod de manipulare genereaz propagarea cu uurin a informaiilor greite i apariia incidentelor legate de utilizarea neautorizat sau vicierea intenionat a informaiilor cum ar fi falsificarea creditelor, cazierelor judiciare sau accesul neautorizat la informaii personale.

8.2.

Implementarea stratificat a bazelor de date

Cel care utilizeaz o baz de date este numit utilizator (user), iar uneori utilizator final (end-user). Acest utilizator final poate fi n egal msur un funcionar al unei companii aviatice care efectueaz rezervri de locuri sau un director executiv al unei mari societi constructoare de automobile. n ambele cazuri, probabil c utilizatorul nu este specialist n calculatoare i nici nu trebuie s cunoasc n detaliu tehnologia i tehnicile utilizate n domeniu. Utilizatorul trebuie s se poat concentra asupra problemei pe care o are de rezolvat, iar sistemul de gestionare a bazei de date trebuie s i prezinte informaiile necesare ntr-o form specific aplicaiei respective, i nu ntr-un limbaj tehnic greu de neles. Pentru a rspunde la aceste cerine bazele de date sunt construite pe mai multe niveluri de abstractizare (fig. 8.1). Imaginea datelor oferit utilizatorului final este produs de un software de aplicaie, a crui comunicare cu utilizatorul se desfoar n mod interactiv i n termeni specifici programului. Proiectarea acestui software de aplicaie imprim personalitate sistemului de uz general. De exemplu, comunicarea cu utilizatorul se poate face printr-un sistem de ntrebri i rspunsuri sau prin formulare care trebuie completate.

167

Figura 8.1 - Stratificarea conceptual a bazelor de date

Indiferent de interfaa adoptat, aplicaia trebuie s comunice cu utilizatorul pentru a obine de la acesta informaiile necesare (inclusiv cerinele/solicitrile), pe care ulterior s le prezinte ntr-un format ct mai prietenos (friendly user interface). De manipularea datelor, n cadrul bazei de date, se ocup un pachet de programe numit sistem de gestiunea bazei de date SGBD (data base management system DBMS). Primul avantaj al utilizrii acestor sisteme de gestiunea bazei de date SGBD este simplificarea activitii programatorului aplicaiei n ceea ce privete manipularea efectiv a datelor solicitate de aplicaie. Aceast manipulare s-ar complica i mai mult din punct de vedere al rezolvrii problemei n contextul unei baze de date distribuite (o baz de date mprit pe mai multe calculatoare legate n reea). Alt avantaj al separrii aplicaiei de sistemul de gestiune a bazei de date este c o astfel de organizare permite controlul accesului la baza de date. Un alt avantaj important al utilizrii a dou pachete de programe, unul pentru interfaa cu utilizatorul, cellalt pentru manipularea efectiv a datelor este obinerea independenei datelor. Altfel spus, este posibil schimbarea organizrii bazei de date fr a fi necesar modificarea aplicaiilor. i un ultim avantaj al separrii ntre aplicaii i SGBD este acela c permite ca aplicaia s fie scris utilizndu-se un model simplificat conceptual, al bazei de date, fr a lua n considerare structura efectiv a acesteia.

168

Aplicaiile sunt scrise n limbaje de uz general, dispunnd de instrumente necesare exprimrii algoritmilor, dar nu i pentru operaii care s permit manipularea facil a bazei de date. Rutinele furnizate de SGBD extind facilitile limbajului utilizat, permind folosirea imaginii conceptuale a modelului bazei de date. Un astfel de limbaj de uz general care se adaug capacitilor SGBD-ului se numete limbaj de gazd. Cutarea unor model mai performante de baze de date este n plin desfurare, scopul fiind acela de a se gsi un model care s permit conceptualizarea unor sisteme complexe, s conduc la moduri ct mai concise de solicitare a informaiilor i s poat fi implementat eficient prin furnizarea de ctre SGBD a unor instrumente abstracte utilizabile n aplicaii.

8.3.

Modelul relaional

Popularitatea de care se bucur modelul relaional este motivat de simplitatea sa structural, modelul prezint datele ca fiind stocate n nite tabele numite relaii. Modelul relaional permite reprezentarea informaiilor referitoare la salariaii unei firme printr-o relaie ca cea din tabelul urmtor:

Figura 8.2 - Relaia care conine informaii despre angajaii unei firme

O linie din cadrul relaiei (tabelului) poart numele de tuplu. Coloanele relaiei se numesc atribute.

169

Proiectarea relaional Proiectarea unei baze de date utiliznd modelul relaional se concentreaz pe proiectarea relaiilor din componena sa. S presupunem c pe lng informaiile coninute n relaia din fig. 8.2, dorim s includem i alte informaii legate de un istoric al poziiilor deinute de un salariat n cadrul firmei cu urmtoarele atribute: denumirea postului (secretar, ef birou, ef compartiment), codul de identificare a postului (unic pentru fiecare post), codul referitor la pregtirea profesional necesar fiecrui post, compartimentul n cadrul cruia a fost deinut postul i perioada de ocupare a postului (data/nceput i data/sfrit activitate; n cazul unui post deinut n prezent se va nota acest atribut cu un asterisc). Un mod de rezolvare a noi probleme este extinderea relaiei din fig. 8.2, prin adugarea de noi coloane care s cuprind noile atribute conform fig. 8.3. La o examinare mai atent aceast relaie ridic o serie de probleme. Una dintre ele este ineficiena relaiei: nu mai conine cte un tuplu pentru fiecare salariat, fiind posibil ca un salariat s fi fost avansat n decursul timpului. Descriind legturile dintre atribute, ca mai sus, informaiile iniiale se vor repeta, fie: marca, numele, adresa, codul numeric, fie: departamentul, codul pregtire profesional. O alt problem apare la tergerea unor informaii nregistrate o singur dat n baza de date, cum ar fi codul funciei pentru poziia a treia din tabel (S8 director compartiment). Aceast situaie a aprut deoarece am combinat n aceeai relaie informaii care se refer la lucruri diferite. Modul de rezolvare a problemei este reproiectarea bazei de date folosind attea relaii cte subiecte am ales. n cazul nostru este vorba de trei subiecte identificare salariat, locul su de munc i perioada angajrii salariatului pentru fiecare loc de munc.

170

Figura 8.3 - Baz de date care conine trei relaii

Utiliznd aceast baz de date informaiile suplimentare sunt disponibile implicit prin combinarea informaiilor coninute n aceste relaii. Cte odat mprirea atributelor n relaii foarte simple duce la pierderea de informaii. Pornind de la proprietile relaiilor s-au putut construi ierarhii de clase de relaii numite prima form normal, a doua form normal, a

171

treia form normal, ..., fiecare din aceste forme normale (clase de relaii) fiind mai puin predispuse apariiei unor anomalii de funcionare dect cele din clasa precedent. Operaii relaionale Analizam in continuare operaiile efectuate asupra relaiilor. Pentru a regsi informaiile referitoare la un angajat se va selecta din relaia identificarea salariatului tuplul cu atributul de identificare dorit, iar pentru a obine lista posturilor dintr-un compartiment se vor selecta tuplurile din relaia identificarea locului de munc care pentru atributul compartiment au valoarea codului departamentului precizat. Realizarea seleciei tuplului i plasarea sa ntr-o nou relaie se poate exprima sintactic astfel:

NEW

SELECT from SALARIAT where Marca = 34A70 (din) (unde)

Astfel se creeaz o nou relaie numit NEW care conine tuplurile din relaia salariat, al cror atribut Marca este egal cu 34A70 (fig. 8.4.).

Figura 8.4 - Operaia SELECT


172

Operaia PROJECT extrage anumite coloane. Dac dorim s aflm titulaturile posturilor dintr-un compartiment, dup ce am efectuat o operaie SELECT pentru a extrage din relaia LOCURI de MUNC tuplurile care conin departamentul-int plasndu-le ntr-o relaie NEW, lista pe care o cutm este cea a valorilor din coloana Denumire compartiment a acestei noi relaii. Pentru a extrage aceast nou coloan i a plasa rezultatul ntr-o nou relaie, utilizm operaia PROJECT, care se va exprima sintactic astfel: MAIL PROJECT Nume, Adres from SALARIAT

i va realiza obinerea unei liste cu numele i adresele tuturor salariailor firmei. Lista se va gsi n noua relaie MAIL care are dou coloane (vezi fig. 8.5).

Figura 8.5 - Operaia PROJECT

173

Relaia JOIN aplicat asupra a dou relaii are ca rezultat obinerea unei noi relaii ale crei atribute sunt atributele relaiilor iniiale (fig. 8.6). Modul n care sunt concatenate tuplurile este determinat de condiia specificat pentru operaia JOIN.

JOIN A and B where A . W = B . X

n acest exemplu un tuplu din relaia A va fi concatenat cu unul din relaia B dac i numai dac atributele W i X ale celor dou tupluri sunt egale.

Figura 8.6 - Operaia JOIN

174

Se va exemplifica mai jos operaia JOIN asupra bazei de date din fig 8.3 pentru a obine o list a codurilor de identificare ale tuturor angajailor, mpreun cu departamentul n care lucreaz fiecare. Instruciunea necesar este :

PLACE 1

J OIN ANGAJARE SALARIAT AND LOC DE MUNC unde

ANGAJARE SALARIAT . Cod funcie = LOC DE MUNC .

Cod funcie, rezultatul este prezentat n fig. 8.7. Pentru a rezolva problema se selecteaz mai nti acele tupluri din relaia ANGAJARE SALARIAT Data sfrit, unde Data sfrit = * , iar dup aceea se proiecteaz atributele: ANGAJARE SALARIAT Marca salariatului i LOC DE MUNC Denumire departament. n concluzie, obinerea informaiilor se realizeaz prin executarea instruciunilor : PLACE 1 JOIN ANGAJARE SALARIAT AND LOC DE MUNC unde

ANGAJARE SALARIAT . Cod funcie = LOC DE MUNC .Cod funcie

PLACE 2

SELECT from PLACE 1 unde ANGAJARE SALARIAT Data sfrit = *

LIST

PROJECT ANGAJARE SALARIAT, Marca salariat LOC DE MUNC Denumire departament from PLACE 2.

175

Figura 8.7 - Exemplu de aplicare a operaiei JOIN


176

Sistemul de gestiune a bazei de date are rolul de a accepta comenzi exprimate n termenii modelului relaional i de a le transforma n aciuni ce in cont de structura efectiv de stocare. Un sistem de gestiune a bazei de date care utilizeaz un model relaional va include rutine pentru efectuarea operaiilor SELECT, PROJECT i JOIN, rutine care vor fi apelate din aplicaie printr-o structur sintactic compatibil cu limbajul-gazd. n realitate sistemele de gestiune a bazelor de date conin operaii care pot fi combinaii ale unor pai elementari ntr-o form prietenoas pentru utilizatori. Un astfel de limbaj este limbajul S Q L (Structured Query Language).

SQL Limbajul SQL este destinat interogrii bazelor de date. Acest limbaj permite ca printr-o singur instruciune SQL se poate exprima o interogare care presupune o secven de operaii SELECT, PROJECT i JOIN. De exemplu interogarea din ultimul exemplu (fig. 7.7) poate fi exprimat n SQL printr-o instruciune: select Marca salariat, Denumire departament from ANGAJARE SALARIAT, LOC DE MUNC unde ANGAJARE SALARIAT . Cod funcie = COD LOC DE MUNC . Cod funcie i ANGAJARE SALARIAT . Dat sfrit = * . Iat cteva exemple n SQL. Instruciunea: select Nume, Adres from IDENTIFICAREA SALARIATULUI genereaz o list care conine numele i adresele tuturor angajailor din relaia IDENTIFICAREA SALARIATULUI. (Aceast operaie este identic cu operaia PROJECT). Instruciunea : select IDENTIFICAREA SALARIATULUI Nume, ANGAJAREA SALARIATULUI . Dat debut from IDENTIFICAREA SALARIATULUI, ANGAJAREA SALARIATULUI where IDENTIFICAREA SALARIATULUI . Cod funcie = ANGAJAREA SALARIATULUI .
177

Cod funcie furnizeaz o list a tuturor angajailor cu informaii privind data angajrii. Pe lng interogri, limbajul SQL permite i definirea structurii unei relaii, crearea de noi relaii, ca i modificarea coninutului unor relaii existente. Baze date orientate spre [pe] obiecte Una dintre cele mai noi direcii de cercetare n domeniul bazelor de date o constituie aplicarea paradigmei orientate spre obiecte. Direcia este ncurajat de urmtoarele motive: independena datelor se poate obine prin ncapsulare; clasele i motenirea par concepute dedicat pentru descrierea schemei generale a bazei de date i a schemelor pariale; baze de date constituite din obiecte inteligente care pot rspunde direct la ntrebrile ce li se pun, fr s utilizeze un program supervizor de interogare; abordarea orientat pe obiecte elimin anumite restricii inerente altor metode de organizare a bazelor de date.

Meninerea integritii bazelor de date Sistemele de gestiune a bazelor de date (SGBD) de uz personal sunt n general ieftine i relativ simplu de manipulat. Instalarea lor nu-l implic de utilizator n detalii tehnice legate de implementare. Volumul acestor baze de date este de mrime mic sau medie, iar pierderea sau alterarea informaiilor coninute constituie o neplcere i nu un dezastru. n general problemele aprute nu afecteaz de obicei dect civa oameni, iar pierderile de ordin financiar sunt desul de mici. Desigur altfel stau lucrurile cu SGBD-urile de mari dimensiuni (ca volum de informaii nmagazinat i manipulat) utilizate n scop comercial. n astfel de sisteme unul din principalele roluri ale sistemului de gestiune este de a veghea la meninerea integritii bazei de date, evitnd operaiile efectuate parial sau acre, acionnd ntr-un mod neprevzut, care conduc la apariia de informaii eronate.

Protocolul Commit/Rollback Transferarea unei sume de bani dintr-un cont n altul presupune retragerea sumei din contul-surs i adugarea ei la contul-destinaie. n faza intermediar ntre dou etape de actualizare a bazei de date, informaiile din baza de date pot fi contradictorii. Astfel n scurta
178

perioad dintre retragerea (scoaterea) banilor dintr-un cont i depunerea lor n cellalt cont, suma respectiv dispare din evidene. n cazul bazelor de date de mari dimensiuni n care sunt n curs de execuie foarte multe tranzacii, probabilitatea ca la un moment ales aleator s fie n curs o tranzacie este foarte mare. n cazul unei defeciuni, SGBD nu las baza de date n stare de contradicie intern. Acest deziderat este dus la ndeplinire prin meninerea unui jurnal n care se nregistreaz toate activitile efectuate asupra unei tranzacii. Punctul n care s-au nregistrat toate etapele tranzaciei se numete punct de angajare (commit point). n acest fel SGBD-ul dispune de toate informaiile necesare pentru reconstruirea pe cont propriu a tranzaciei dac acest lucru este necesar. n cazul defectrii unui dispozitiv, SGBD-ul utilizeaz informaiile din jurnal pentru a reconstitui tranzaciile ncheiate de la efectuarea ultimei salvri. Dac apare o problem nainte ca o tranzacie s ating punctul de angajare, SGBD-ul se va gsi n situaia de a fi executat parial o tranzacie pe care nu o poate finaliza. n aceast situaie jurnalul poate fi utilizat pentru anularea (derulare napoi roll back) activitilor deja efectuate de tranzacia respectiv. Uneori derularea napoi a unei tranzacii

poate afecta elementele bazei de date care au fost utilizate ntre timp la alte tranzacii. Este posibil ca tranzacia anulat s fi actualizat un cont bancar, iar alt tranzacie efectuat ntre timp s fi utilizat noua valoare. Aceast situaie necesit anularea i a altor tranzacii, ceea ce va avea influen i asupra altora .a.m.d. Fenomenul se numete anulare n cascad (cascading rollback).

Blocarea Dac studiem problema unei tranzacii care se execut n timp ce baze de date se modific ca urmare a altei tranzacii uneori observm apariia unor interaciuni dorite ntre tranzacii care pot conduce la rezultate eronate. Atunci cnd o tranzacie efectueaz un transfer de fonduri dintr-un cont n altul, n timp ce alte tranzacii calculeaz valoarea total a depozitelor, poate apare problema cunoscut sub numele de nsumare incorect (incorrect summary problem).

179

Pentru nlturarea unei astfel de situaii, SGBD-ul poate obliga tranzaciile s se execute integral, una dup alta (serial), noile tranzacii plasndu-se ntr-o coad de ateptare pn la finalizarea celor precedente. Majoritatea sistemelor mari de gestiune a bazelor de date utilizeaz un modul de coordonare a partajrii timpului de calcul ntre tranzacii. Pentru evitarea unor anomalii din categoria precizat, modulele de coordonare recurg la un protocol de blocare (locking protocol), n care elementele bazei de date care sunt utilizate n mod curent ntr-o tranzacie sunt marcate ca fiind blocate. Se utilizeaz dou tipuri de blocare blocarea partajabil i blocarea exclusiv, corespunznd celor dou tipuri de acces partajabil i exclusiv. Dac o tranzacie nu modific datele, atunci are nevoie de acces partajabil (permite altor tranzacii s citeasc datele respective). Dac tranzacia are ca obiectiv modificarea datelor, atunci are nevoie de acces exclusiv (nu permite accesul altor tranzacii la articolul respectiv. Pentru tratarea cazurilor n care accesul solicitat de o tranzacie la un articol de date este refuzat, se pot utiliza mai muli algoritmi. Unul dintre acetia foreaz tranzacia respectiv s atepte pn cnd cererea poate fi aprobat, dar acest lucru poate conduce la apariia interblocrii. Pentru evitarea interblocrii SGBD-urile acord prioritate primei tranzacii. Acest protocol este cunoscut sub numele de protocol de ateptare (wound wait protocol) i asigur efectuarea tuturor tranzaciilor.

180

TEST AUTOEVALUARE 8 (Structura bazelor de date)


1. Definii conceptul de baz de date. 2. O baz de date este: a. Ansamblu de date b. O colectie de mai multe date c. Un fisier 3. Cine utilizeaz o baz de date? a. Utilizatorii b. Hackerii c. Crackerii d. Functionarii publici 4. Definiti comunicarea cu utilizatorul si stratificarea conceptuala a bazelor de date. 5. SGBD inseamna: a. Sistem de gestiune al fisierelor b. Sistem de gestiune a bazelor de date c. Data base management system d. Sistem de gestiune al bazelor directionale 6. O linie din cadru relatiei (tabelului) poart numele de: a. Cvintuplu b. Quadruplu c. Tuplu 7. Coloanele unei relatii se numesc: a. Propietati b. atribute c. Parametrii 8. Selectarea unui tuplu cu anumite caracteristici dintr-o relaie se face cu: a. NEW SELECT FROM NumeTabel WHERE camp = valoare b. SELECT from NumeTabel WHERE camp = valoare c. FROM NumeTabel (SELECT NumeColoana from NumeTabel2 WHERE camp=valoare)
181

9. Relaia JOIN este folosit pentru a: a. Extrage date dintr-un tabel b. Extrage date din doua tabele in functie de un criteriu de selectare c. Extrage date sub forma de produs cartezian din doua tabele 10. SQL nseamn: a. Structured Query Language b. Integrated Query Language c. Metadata Quert Language 11. SQL este un: a. Limbaj de interogare b. Limba de programare c. Comanda de batch 12. Definii conceptul de baz de date orientat pe obiect. 13. Definii protocolul Commit/Rollback. 14. Definii conceptul Commit i dai un exemplu. 15. Definii fenomenul de anulare n cascad (cascading rollback) 16. Definii conceptul de roll back. 17. Definii blocarea i tranzaciilor.

182

UNITATEA DE NVARE 9

9.

Sistem informatic i sistem informaional

9.1

Conceptul de informaie

Activitatea uman, n cele mai diverse forme ale sale, trebuie s respecte un anumit numr de legi i reguli i este caracterizat prin entiti faptice exprimate fie sub form de valori numerice, fie ca percepii sau observaii nenumerice. Aceste entiti faptice independente i neevaluate, exist n general n numr nelimitat i se numesc informaii. Obinerea materialului informaional presupune operaii de cutare, iar valorificarea lui, n scopul obinerii unor cunotine necesit un proces de prelucrare (evaluare, selectare, ordonare, transformare, stocare, transmitere). Este necesar a se face distincie ntre noiunea de informaie (reprezentnd cunotine despre o situaie, un individ sau un obiect) i noiunea de dat. Deosebirea dintre informaie i dat este echivalent cu deosebirea dintre obiect i modelul su. Informaia i data se pot utiliza ca sinonime numai n msura n care convenim s identificm un obiect prin modelul su. n general se identific urmtoarele niveluri la care poate fi considerat informaia: Nivelul sintactic se refer la un sistem de simboluri i reguli de grupare ale acestora pentru reprezentarea informaiei n procesul culegerii, transmiterii i prelucrrii acesteia. n sistemele informatice modul de reprezentare sintactic a informaiei este data creia trebuie s-i fie asociate noiunea de valoare mpreun cu un sistem de reguli pentru transformarea acesteia n scopul obinerii unor noi date. Nivelul semantic presupune semnificaia informaiei. Sensul informaiei la nivel semantic este corespondena dintre o dat i un obiect real sau situaia pe care o reprezint aceast dat. Nivelul pragmatic este concretizarea informaiei la necesitile receptorului, traduse n importana i utilitatea ei. Abordarea pragmatic include probleme legate de conducere, de necesarul de informaie i de eficiena sistemelor informaionale. Acest nivel reflect cel mai fidel procesul de cunoatere.
183

Criterii de clasificare a informaiilor 1. dup forma de exprimare a fenomenelor pe care le reflect: informaie analogic care caracterizeaz parametrii cu variaie continu din cadrul proceselor tehnologice; informaie cantitativ sau numeric exprimnd aspectul cantitativ al fenomenelor; informaie calitativ sau nenumeric prezentat ntr-o varietate de forme, concepte, etc. 2. dup situarea n timp fa de procesul sau fenomenul reprezentat: informaii active cu privire la procese sau fenomene n curs de desfurare; informaii pasive se refer la procese sau fenomene n curs de desfurare; informaii previzionale, sunt cele cuprinse n scenarii i fenomene care vor avea loc n viitor oferind modele cantitative i calitative ale activitilor care se vor desfura. 3. dup coninut: informaii elementare care definesc operaii i fenomene indivizibile; informaii complexe constituite din rezultatele agregrii rezultatelor elementare pentru a caracteriza un proces sau un fenomen; informaii sintetice rezultnd din adiionarea informaiilor elementare de acelai tip.

Gradul de utilizare al informaiilor Gradul de utilizare al informaiilor i eficacitatea utilizrii lor n diverse activiti sunt determinate de indici de calitate specifici: Exactitatea (precizia) reprezint cantitatea de informaie corect n raport cu ntregul volum de informaii produs ntr-o perioad de timp. O informaie eronat poate influena decisiv desfurarea proceselor, iar rectificarea erorii nseamn consum de timp i costuri suplimentare. Actualitatea (oportunitatea) exprim faptul c o informaie este util ntr-un anumit moment, legat de desfurarea n timp a unor fenomene. Informaia trebuie frecvent pus la zi. Utilitatea unei informaii poate face obiectul unui studiu de oportunitate. O informaie nu este prin ea nsi util sau inutil, ea este raportat la necesitile deciziei. n tehnica

184

de calcul multe informaii pot fi nregistrate n fiiere provizorii care vor putea deveni utile prin perfecionarea posibilitilor de prelucrare existente. Fiabilitatea presupune un control sistematic la nivelul informaiei de baz i a informaiei rezultate: 1. chei de control (liter, cifr sau grup de dou cifre asociate de exemplu la marca de identificare a unui individ, a unei ntreprinderi, la un cont bancar sau potal, la numrul de identificare al unui articol vndut); 2. control de verosimibilitate (verificarea unui principiu, de exemplu cel de egalitate ntre totalul debitului i totalul creditului); 3. control de feed back (de exemplu un mesaj primit este reemis spre expeditor, acesta putnd verifica corectitudinea recepionrii). Completitudinea necesitatea de a dispune de ct mai multe sau chiar de totalitatea informaiilor referitoare la un domeniu al activitii. Costurile informaiilor nu trebuie s fie superioare valorii informaiilor obinute (costuri de noncalitate).

9.2

Noiunea de sistem

Definiie Prin sistem se nelege orice seciune a realitii n care se identific un ansamblu de fenomene, obiecte, procese, concepte, fiine sau grupuri, interconectate printr-o mulime de relaii reciproce, precum i cu mediul nconjurtor i care acioneaz n comun n vederea realizrii unor obiective bine definite. La un sistem se disting: o mulime de elemente (e1, e2, ,en); relaii interne (endogene) ntre elemente; relaii exogene (intrri i ieiri din sistem); variabilitatea n timp (caracterul procesual, dinamic) a sistemelor i relaiilor; scopul sau finalitatea sistemului.

185

Mulimea relaiilor dintre componentele sistemului, precum i a relaiilor dintre componente i ansamblu, formeaz structura sistemului. Mulimea caracteristicilor unui sistem, la un moment dat, determin starea sistemului. Sistemele se pot clasifica dup mai multe criterii: a) dup natur: sisteme naturale i sisteme elaborate; b) dup comportament: sisteme deterministe i sisteme nedeterministe; c) dup modul de funcionare: sisteme deschide i sisteme nchise.

Sistem deschis Un sistem deschis este caracterizat de ieiri care rspund intrrilor din sistem, dar ieirile sunt izolate de intrri i nu au nici o influen asupra acestora. Rezultatele aciunilor trecute nu influeneaz aciunile viitoare.

Figura 9.1 Sistem deschis

Sistem nchis Un sistem nchis denumit i sistem cu conexiune invers, (cu reacie sau cu feed-back) este influenat de propriul comportament:

Figura 9.2 Sistem nchis

186

,unde: X este vectorul intrrilor; Y este vectorul ieirilor, Y = f(X) Dac se noteaz cu Z vectorul obiectivelor atunci Z=f(X +x). Valoarea x este vectorul de reglare.

Se deosebesc dou sisteme cu conexiune invers: Sistemele cu conexiune invers negativ au un obiectiv, iar evoluia lor este o consecin a neatingerii acestui obiectiv. Rolul conexiunii este de a limita anumite mrimi, limitnd cauzalitatea intrare + ieire. Sistemele cu conexiune invers pozitiv pentru care ieirea influeneaz intrarea n sensul accenturii cauzalitii intrare ieire. Aceasta genereaz procese de cretere, n care rezultatul unei aciuni produce o amplificare continu a aciunii (de exemplu beneficiile obinute sunt investite n dezvoltare, rezult un spor de producie, de beneficii, etc.) Dac un sistem poate fi descompus n minimum dou pri, n care se pot identifica intrri i ieiri, astfel nct ieirile unei pri s constituie intrri pentru cealalt parte, aceste pri se numesc subsisteme. De exemplu, un sistem de producie, ntr-o reprezentare simplificat poate fi descompus n dou subsisteme : producie i comercial.

Figura 9.3 - Sistem informaional


187

Definiie Sistemul informaional al unui organism economic reprezint ansamblul informaiilor, surselor i nivelurilor consumatoare, canalelor de circulaie, procedurilor i mijloacelor de tratare a informaiilor din cadrul respectivului organism. Sistemul informaional are rolul de sesizare i colectare a informaiei de intrare i de difuzare a informaiei rezultante. Sistemele informaionale, n afar de informaiile de origine extern sunt alimentate i de informaii interne (directivele sistemului de decizie, rezultatele aciunilor sistemului operant). Observaiile (de origine intern sau origine extern) sunt captate printr-un anumit numr de observatori:

Figura 9.4 Sistemul informaional au unei uniti economice

Sistemul informaional al unei uniti economice asigur culegerea, pstrarea, transmiterea i prelucrarea informaiilor necesare lurii deciziilor de ctre sistemul de conducere, cu scopul realizrii funciilor conducerii asupra nivelului condus. n structura oricrei uniti economice se pot identifica trei sisteme corelate ntre ele: sistemul de conducere (decizional) constnd din mulimea centrelor sau organismelor unde se analizeaz informaiile i se elaboreaz deciziile; sistemul condus (de execuie, operaional) n care deciziile sunt transpuse n aciuni;

188

sistemul informaional care asigur legtura n ambele sensuri ntre sistemul de conducere i cel condus, ntr-un sens transmindu-se decizii privind activitatea operaional, iar n cellalt sens informaii referitoare la desfurarea proceselor n sistemul condus.

Figura 9.4 Circulaia informaiilor n sistemul informaional

Legturile i circulaia informaiilor n sistemul informaional, care definesc fluxul informaional, sunt strns legate de structura celorlalte dou sisteme (sistemul de conducere i sistemul condus). Sistemul informaional al unei uniti economice poate fi perfecionat i raionalizat, avnd n vedere urmtoarele aspecte: sporirea calitii informaiei, astfel nct s rspund cerinelor enunate; circulaia raional a informaiei, prin continuitatea fluxurilor i asigurarea legturilor inverse n reglarea traiectoriei sistemului; circulaia economic a informaiei prin eliminarea paralelismelor de informare, a prelucrrii repetate; circulaia raional a suporturilor de date primare prin tipizare i standardizare; finalizarea informaiei prin decizie sau aciune; reducerea costului informaiei; adaptarea unor modele matematice pentru utilizarea optim a resurselor; asigurarea unitii sistemului informaional prin abordarea integrat a metodelor, tehnicilor i mijloacelor de tratare a datelor.

189

Principala modalitate de raionalizare a unui sistem informaional este realizarea unui sistem informatic.

9.3

Sistem informatic

Definiie Sistemul informatic este un ansamblu coerent structurat, format din echipamente electronice de calcul i comunicaie, procese, proceduri automate i manuale, inclusiv structurile organizatorice i salariaii, care folosesc calculatorul ca instrument de prelucrare automat a datelor n domeniul concret de activitate al agentului economic, cu scopulmaximizrii profitului realizat din activitatea economic. Un sistem informatic este componenta sistemului informaional n care operaiile de culegere, stocare, prelucrare i transmitere a datelor se realizeaz cu calculatorul electronic. Sistemul informatic este conceput s funcioneze la nivelul unui singur agent economic sau grup de societi comerciale, n vederea asigurrii informaiilor complexe, necesare aciunii manageriale i desfurrii eficiente a ntregii activiti, cu respectarea cadrului legislativ normativ n vigoare. Un sistem informatic cuprinde: Baza tehnic (hardware) constituit din ansamblul de echipamente pentru culegerea, transmiterea, prelucrarea i stocarea informaiilor.

Figura 9.5 Sistem informatic pentru o unitate economic

Sistemul de operare (software) cuprinde totalitatea programelor care asigur utilizarea optim a resurselor fizice.

190

Programele de aplicaii reprezint totalitatea programelor care realizeaz prelucrarea datelor pentru obinerea diferitelor rapoarte (situaii).

Baza de date constituie un ansamblu de date organizat n fiiere interconectate. Resursele umane i cadrul organizatoric cuprinde personalul de specialitate i cadrul necesar funcionrii sistemului informatic.

Obiectivele utilizrii sistemelor informatice Obiectivul principal al oricrui sistem informatic l constituie asigurarea selectiv i n timp a tuturor nivelelor de conducere cu informaiile necesare i reale, pentru fundamentarea i elaborarea operativ a deciziilor cu privire la desfurarea mai eficient a ntregii activiti din unitatea economic. Utilizarea i proiectarea sistemelor informatice trebuie s in cont de urmtoarele: Ciclul de via intervalul de timp de la nceputul lucrrilor de realizare a unui sistem informatic pn la introducerea unui nou sistem mai mare. Cantitatea de date prin care se ncearc realizarea unor sisteme integrate, care s poat rspunde la cele mai variate cerine ale conducerii. Numrul de utilizatori. Aparatul matematic folosit pentru cercetarea operaional, analiza factorial, teoria stocurilor, teoria ateptrii, teoria rennoirii, etc. Procedurile automate sau manuale utilizate. Posibilitile de modificare impuse de schimbrile frecvente legate de cerinele utilizatorilor. Costurile resurselor materiale, att n faza de proiectare ct i n exploatare.

Structurarea sistemelor informatice Structurarea sistemelor informatice pentru unitile economice se poate face pe subsisteme i n cadrul acestora pe aplicaii sau module:

191

Figura 9.6 Structurarea unui sistem informatics

La nivelul unei ntreprinderi, subsistemele corespunztoare pot apare astfel: A. Subsistemul cercetare dezvoltare. B. Subsistemul producie cu urmtoarele componente: a. planificarea tehnico material; b. pregtirea tehnic a fabricaiei; c. programarea, lansarea i urmrirea produciei; d. conducerea activitii de reparaii i ntreinere a utilajelor. C. Subsistemul comercial care cuprinde: a. aprovizionarea tehnico material; b. desfacerea produselor finite; c. gestiunea stocurilor; d. organizarea activitii de transport. D. Subsistemul financiar contabil. E. Subsistemul personal.

O alt posibilitate de structurare a sistemului informatic deriv din corelaia stabilit ntre sistemul informaional i sistemul de conducere, situaie n care se poate face i mprirea n raport cu nivelele de decizie existente n unitatea economic:

192

Subsistemul strategic pentru rezolvarea problemelor de perspectiv i generale (afecteaz ansamblul unitii economice).

Subsistemul tactic avnd ca scop rezolvarea problemelor pe o perioad mai scurt (sub un an) pe anumite domenii de activitate sau subactiviti.

Subsistemul operativ care deservete conducerea curent la nivel de decad, sptmn, zi, formaie de lucru, schimb, etc.

Clasificarea sistemelor informatice Clasificarea sistemelor informatice poate fi fcut n raport cu gradul de cuprindere al domeniului sistemului informaional: Sisteme informatice pariale pentru prelucrarea automat a datelor dintr-un sector de activitate, de regul cel mai important. Sisteme informatice totale care cuprind toate activitile informaionale pentru prelucrarea datelor cu ajutorul calculatorului. Aceste sisteme abordeaz sistemul ca fiind suma unor subsisteme considerate ca entiti distincte care deservesc anumite activiti, fr a evidenia legturile dintre ele (acestea nu sunt recomandabile, deoarece nu asigur cunoaterea relaiilor de cauzalitate dintre subsisteme i nu permit utilizarea mai eficient a capacitii de prelucrare a calculatorului). Sisteme informatice integrate care abordeaz procesul de prelucrare a datelor din cadrul sistemului informaional al unitii economice, reliefnd legturile de cauzalitate dintre subsistemele acestuia. Ele se bazeaz pe principiul prelucrrii, n toate modurile utile, a datelor primare introduse o singur dat n sistem.

Avantajele implementrii sistemelor informatice Datorit extinderii, n ultimii ani, ntr-o msur din ce n ce mai mare a tehnologiei informaiei, a progreselor rapide ale microelectronicii, infrastructura tehnologic a societii a suferit o schimbare important prin includerea unui domeniu numit uzual tehnologia informaiei n care se evideniaz, n mod decisiv informatica. Acest lucru marcheaz trecerea de la orientarea industrial, n care accentul se pune pe main i energie, la o noua orientare informaional, n care accentul este pus pe informaie.

193

Proiectarea sistemelor informatice la nivel micro i macroeconomic, pe baza unor modele matematice i pe o bun cunoatere a legilor economice, utiliznd tehnica bazelor de date, face posibil ca activitatea de analiz a fenomenelor economice s devin dintr-un instrument pasiv de constatare ntr-un instrument activ de previziune i control al acestora. Baza de date este sursa de la care vin i de la care pleac toate informaiile, de la proces spre punctele de decizie i invers, eliminnd redundana existent n cele mai multe sisteme informaionale. n practica dezvoltrii sistemelor informatice avnd ca scop informatizarea activitilor economico-sociale s-au produs importante transformri datorit unor schimbri i tendine cum ar fi: Informatizarea informaiei. Inovaiile introduse de informatic, de exemplu n domeniul comunicaiilor, induc o concepere nou a informaiei i a coninutului su. Pentru definirea elementelor noi apar, n mod firesc, neologisme cum ar fi: baz de date, banc de date, baz de cunotine, inteligen artificial, hypertext, hypermedia,

multimedia, legate de specificul informaticii i a suportului informatic. Scderea costurilor produselor informatice datorit, pe de o parte, reducerii costurilor hardware-lui, iar pe de alt parte, reducerii costurilor software-lui. Creterea gradului de generalitate i de adaptabilitate al aplicaiilor ceea ce ofer posibilitatea generalizrii implementrii sistemelor informatice n mai multe uniti economice, pe baza unei platforme comune de aplicaii, cu efecte imediate de reducere a costurilor pe unitatea de implementare. n acest sens aplicaiile implementate furnizeaz funcii software de baz i funcii specifice activitii companiei. Prin funciile software de baz se definesc i se rezolv problemele comune aplicaiei n proporie de circa 80-90%, iar prin soft-ul specific aplicaiei, se definesc proprietile comportamentale suplimentare companiei. De multe ori ns, gradul de generalitate al produselor informatice este prea mare, astfel nct adaptabilitatea lor la necesitile utilizatorului devine aproape imposibil, acesta recurgnd, n mod firesc, la realizarea propriului produs informatic. Dezvoltarea teleinformaticii prin apariia de noi produse cu un raport pre/performan din ce n ce mai avantajos care au fcut rentabil i necesar conectarea ntre ele a calculatoarelor n cadrul unor reele de calculatoare. Principalul obiectiv al constituirii reelelor de calculatoare este de a permite transmiterea datelor la distan dar i acela al partajrii (punerii n comun) unor resurse hardware i software. Sistemele teleinformatice au dimensiuni din ce n
194

ce mai mari, reelele de calculatoare se pot interconecta putnd conine i componente eterogene - calculatoare din familii diferite, platforme diferite i productori diferii. Introducerea standardelor internaionale, prin elaborarea de ctre ISO (International Standard Organization) a unor modele de referin pe baza conceptului de sistem deschis, care s permit asigurarea unei baze comune pentru coordonarea elaborrii de noi standarde (cum ar fi interconectarea sistemelor eterogene). Termenul de sistem deschis se refer doar la recunoaterea reciproc i aplicabilitatea acelorai standarde. Standardizarea asigur o cretere a gradului de portabilitate, de pe o platform de sistem la alta, att a datelor ct i a produselor software, astfel nct productorii se simt ncurajai s le implementeze, avnd n vedere larga circulaie a acestor standarde. Standardizarea n domeniul sistemelor de gestiune a bazelor de date sau n domeniul limbajelor de programare conform unor standarde precum CODASYL i ANSI au impus folosirea unor limbaje cum ar fi SQL i C datorit performanelor i facilitilor pe care le ofer. Extinderea bazelor de date clasice bazate pe text i valori numerice spre baze de date orientate obiect. Bazele de date clasice sau relaionale ofer prea puin suport teoretic i practic pentru tipurile neconvenionale de date. Bazele de date orientate obiect permit crearea de obiecte complexe din componente mai simple, fiecare avnd propriile atribute i propriul comportament, reuind s ofere noi soluii pentru rezolvarea problemelor i crearea unor aplicaii moderne. Orientarea spre multimedia. Transpunerea unei pri a informaiei pe un suport multimedia conjug interactivitatea cu atracia vizual, ofer un nou potenial n materie de informare i este de un interes evident n toate domeniile. n raport cu utilitile tradiionale de utilizare a informaiei, multimedia ofer urmtoarele avantaje: facilitatea de utilizare (interfaa utilizator, grafica, audio, video), independena de utilizator (parcurs personalizat, independena n raport cu un grup), interactivitatea (atractivitate, convivialitate).

195

TEST AUTOEVALUARE 9 (Sistem Informaional i Sistem Informatic de fiiere)


1. 2. Definii conceptul de informaie. Ce presupune obinerea materialului informaional? a. Operaii de adunare i scdere a informaiei b. Operaii de cutare c. Operaii de introducere a unei noi cantiti de informaie 3. 4. 5. 6. 7. Comentai nivelurile la care poate fi considerat informaia. Definii nivelul sintactic. Definii nivelul semnatic. Definii nivelul pragmatic. Nivelul sintactic se refer la un sistem? a. Eterogen b. Binar c. De simboluri 8. Modul de reprezentare sintactic a informaiei n sistemele informatice sunt? a. Date b. Numere c. Structuri de date 9. Nivelul semantic presupune? a. Semnificaia informaiei b. Semnificaia structurilor de informaii c. Structuri de arbori 10. Nivelul pragmatic reprezint? a. Concretizarea informaiei b. Diminuarea informaiei c. Blocarea informaiei 11. Definii noiunea de sistem. 12. Ce este un sistem deschis? 13. Ce este un sistem nchis?
196

14. Definii sistemul informaional. 15. Definii noiunea de sistem informatic. 16. Argumentai clasificarea sistemelor informatice. 17. Care sunt avantajele implementrii sistemelor informatice.

197

BIBLIOGRAFIE

1. Andrew Tanenbaum, Organizarea structurat a calculatoarelor, ISBN: 978-9-738669-918 (ISBN10: 9-738669-91-X). 2. Andrew Tanenbaum, Reele de calculatoare, ISBN: 978-9-730030-00-6 (ISBN10: 9730030-00-6). 3. Andrew Tanenbaum, Sisteme de operare moderne, ISBN: 978-9-738669-92-5 (ISBN10: 9-738669-92-8) 2004. 4. Thomas Cormen, Introducere n algorimi, ISBN: 978-9-739753-47-0 (ISBN10: 9739753-47-7) 2004. 5. Knuth D.E., Arta programrii calculatoarelor, Editura TEORA, ISBN: 1-59496-098-4

198