Sunteți pe pagina 1din 67

UNIVERSITATEA "AL. I.

CUZA" IAI
Facultatea de Informatic Cursuri Postuniversitare

ARHITECTURA CALCULATOARELOR

2005-2006

1. Introducere
Dei de-a lungul timpului au existat ncercri de a realiza dispozitive capabile s realizeze n mod automat operaii de calcul, abia ncepnd aproximativ cu perioada celui de-al doilea rzboi mondial se poate vorbi de un efort concertat i direcionat n acest sens. Calculatoarele, n forma n care se prezint astzi, i datoreaz n mare msur existena rezultatelor obinute n acea perioad de ctre John von Neumann, Alan Turing i Kurt Gdel. Odat stabilite principiile de baz, ultima jumtate de secol a cunoscut un efort continuu de perfecionare a tehnologiilor folosite n construcia calculatoarelor. Din fericire, dezvoltarea exploziv a domeniului electronicii a permis o cretere exponenial a puterii de calcul. Una dintre pesonalitile domeniului, Gordon Moore (cofondator al companiei Intel), a enunat n urm cu circa 3 decenii legea care-i poart numele i care prevede c puterea sistemelor de calcul se dubleaz la fiecare 18 luni. Dei este o lege empiric, bazat numai pe observaii practice i fr vreo fundamentare teoretic, experiena i-a confirmat valabilitatea pn n zilele noastre. Ca urmare a acestei rate deosebite a progresului, calculatoarele au invadat practic toate domeniile de activitate. Astzi nu mai exist vreo ocupaie care s nu beneficieze de pe urma utilizrii tehnicii de calcul. O meniune aparte trebuie fcut n legtur cu extinderea reelelor de calculatoare pn la apariia Internetului, care astzi permite accesul tuturor la un volum de informaie nemaintlnit n trecut. n spatele tuturor acestor realizri impresionante st munca depus de specialitii n domeniu. Un sistem de calcul are dou pri: hardware (circuitele fizice care l compun) i software (programele care ruleaz pe acel sistem). Pentru o funcionare la parametrii optimi a calculatorului este necesar o bun conlucrare a celor dou pri. Cel mai performant hardware este inutil n absena programelor care s realizeze activitile dorite. La rndul lor, programele au nevoie de hardware pe care s ruleze. Astfel, performanele obinute astzi sunt posibile numai ca urmare a activitii tuturor celor implicai n dezvoltarea echipamentelor i scrierea programelor.

1.1. Elemente de baz


Activitatea principal a calculatorului, dup cum o arat nsui numele su, este aceea de a efectua calcule. Cu toate acestea, orice persoan care a lucrat cel puin o dat cu un calculator nelege imediat c o asemenea caracterizare este cu totul insuficient pentru a descrie sarcinile ndeplinite de acesta. ntr-adevr, este greu de acceptat c semnificaia unui program de grafic, de exemplu, s-ar reduce la nite simple calcule, dei aceste calcule au un rol cu adevrat foarte important. ntr-o accepiune mai general, putem spune c funcionarea unui calculator are ca principal obiectiv prelucrarea informaiei. Pentru a nelege modul n care este tratat informaia, vom vedea mai nti cum este ea reprezentat ntr-un calculator. Cea mai mic unitate de informaie folosit este bitul. Fr a intra n detalii, putem spune c un bit reprezint o entitate, teoretic sau material, care are dou stri distincte posibile; evident, la un moment dat entitatea se poate afla ntr-una singur din cele dou stri. Observm deci c prin termenul de bit sunt desemnate att conceptul teoretic, ct i implementrile sale fizice. Au existat mai multe forme de implementare practic a biilor. Cele mai eficiente soluii s-au dovedit a fi cele bazate pe circulaia curentului electric, acestea prezentnd avantajul unei viteze de operare mult mai mare dect n cazul sistemelor 1

mecanice sau de alt natur. n circuitele electrice, cele dou stri care definesc un bit sunt uor de definit: putem asocia una dintre stri cu situaia n care curentul electric strbate o poriune de circuit, iar cealalt stare cu situaia n care curentul nu parcurge aceeai poriune de circuit. (n practic, electronitii prefer s discute despre cele dou stri n termenii nivelelor de tensiune din circuit, dar ideea este de fapt aceeai). n timp au fost folosite dispozitive tot mai sofisticate, pornind de la comutatoare, coutinund cu releele i diodele i ajungndu-se astzi la utilizarea tranzistorilor. Toate ns se bazeaz pe acelai principiu: permiterea trecerii curentului electric sau blocarea sa. ntruct, aa cum am vzut mai sus, obiectivul urmrit este de a obine circuite care s permit efectuarea de calcule, este necesar ca biii s primeasc o semnificaie numeric. Prin convenie, celor dou stri ale unui bit le sunt asociate valorile 0 i respectiv 1. n acest mod, putem considera c lucrm de fapt cu cifre n baza 2, iar calculele devin posibile. O prim consecin a acestei abordri o constituie necesitatea gruprii biilor. ntr-adevr, o singur cifr, mai ales n baza 2, conine prea puin informaie pentru a fi util. Deoarece n scrierea poziional numerele sunt iruri de cifre, apare imediat ideea de a reprezenta numerele prin iruri de bii. Dei pentru om lucrul n baza 2 pare mai dificil, datorit obinuinei de a lucra n baza 10, n realitate nu exist diferene conceptuale majore ntre diferitele baze de numeraie. (Putem rspunde aici unei ntrebri care apare natural: de ce se prefer utilizarea biilor, deci implicit a cifrelor n baza 2, dac omul prefer baza 10? Rspunsul este de natur tehnologic: nu exist o modalitate simpl de a realiza un dispozitiv cu 10 stri distincte, care s permit implementarea cifrelor n baza 10.) Pe de alt parte, ntr-un sistem de calcul trebuie s existe o standardizare a dimensiunii irurilor de bii prin care sunt reprezentate numerele. Creierul uman se poate adapta pentru a aduna, de exemplu, un numr de 3 cifre cu unul de 6 cifre, iar apoi poate trece imediat la adunarea unui numr de 8 cifre cu unul de 9 cifre; un calculator ns, fiind format din circuite fr inteligen, nu poate fi att de flexibil. Soluia este de a permite ca irurile de bii s aib numai anumite dimensiuni prestabilite. Astfel, circuitele din calculator se pot nelege ntre ele, deoarece lucreaz cu operanzi de aceeai dimensiune. Ajungem astfel la o alt unitate de informaie larg folosit, i anume octetul (n englez byte). Acesta reprezint un ir de 8 bii i se constituie ntr-un standard unanim respectat. Un octet poate avea 28 = 256 valori diferite, ceea ce este evident insuficient pentru unele tipuri de informaie vehiculate n calculator. Pentru a nu pierde avantajele standardizrii, se permite ca operanzii s aib i dimensiuni mai mari, dar numai multipli de dimensiunea octetului; mai mult, aceti multipli pot fi doar puteri ale lui 2. n funcie de stadiile pe care le-a parcurs tehnologia de-a lungul timpului, dimensiunea maxim a operanzilor a fost de 16, 32 sau 64 bii (respectiv 2, 4 sau 8 octei) i fr ndoial va continua s creasc. Aceast dimensiune poart denumirea de cuvnt. Dimensiunea unui circuit de memorie sau a unui disc hard este mult mai mare dect un octet. Pentru a putea exprima aceste dimensiuni s-au introdus denumiri pentru multipli, ntr-un mod similar celui din lumea tiinific. Reamintim c prefixul kilo- (reprezentat prin simbolul K) desemneaz un multiplu egal cu 1000=10 3. n informatic se prefer exprimarea multiplilor n baza 2, care este cea utilizat n toate situaiile. Astfel, prefixul kilo- are aici valoarea 210=1024, care este foarte apropiat de 1000. Un kilooctet (sau kilobyte) se noteaz deci Ko (sau KB). Analog se definesc i ceilali multipli: mega- (1Mo=220 octei), giga- (1Go=230 octei), tera- (1To=240 octei). Pot fi definii i multipli cu ordine de mrime superioare, dar pe moment practica nu 2

face necesar utilizarea lor. Dup cum era de ateptat, nu se definesc submultipli, care nu ar avea sens. Facem observaia c, spre deosebire de noiunea de bit, a crei definire are o solid baz teoretic, octetul este doar un standard impus de practic. Nu exist nici un motiv conceptual pentru a considera c dimensiunea de 8 bii este special. Pur i simplu, la un moment dat n trecut s-a considerat c aceast dimensiune corespundea necesitilor practice din acea vreme. O dat impus un standard pe scar larg, nlocuirea sa devine foarte dificil. n plus, n acest caz, dac dimensiunea 8 nu este neaprat mai "bun" dect alte variante, ea nu este nici mai "rea", deci o eventual schimbare a standardului nu ar aduce nici un ctig. Alegerea unuia dintre multiplii octetului ca standard nu ar reprezenta dect o soluie temporar, ntruct i noua dimensiune ar deveni curnd prea mic i ar fi necesar utilizarea de multipli. O problem important provine din modul de implementare al biilor. Dat fiind c valoarea unui bit este materializat n practic de o valoare de tensiune, devine clar c pn i operaiile aritmetice cele mai simple, cum ar fi adunarea sau scderea, nu au sens ntr-un circuit electric. Cu alte cuvinte, dei avem posibilitatea fizic de a reprezenta numerele, trebuie s putem realiza i operaiile dorite. Soluia a fost gsit n lucrrile matematicianului englez George Boole. n jurul anului 1850 (deci mult nainte de apariia calculatoarelor), acesta a realizat c probleme matematice complexe pot fi rezolvate prin reducere la o serie de rspunsuri de tipul "adevrat"/"fals". Astfel, el a elaborat o teorie, numit logica Boole (sau logica boolean), care lucreaz cu aceste dou valori. Se observ imediat analogia cu noiunea de bit, care permite tot dou valori. Dac, de exemplu, asociem valoarea "adevrat" din logica Boole cu cifra binar 1 i valoarea "fals" cu cifra 0 (de altfel se poate i invers), rezultatele logicii booleene pot fi folosite direct n sistemele de calcul. Logica Boole definete un set de operaii elementare (NOT, AND, OR etc.), cu ajutorul crora poate fi descris orice funcie. Din fericire, aceste operaii elementare ale logicii Boole pot fi uor implementate cu ajutorul tranzistorilor. Ca urmare, adunarea, scderea i celelalte operaii aritmetice, care sunt n fond nite funcii matematice ca oricare altele, pot fi la rndul lor realizate practic. n concluzie, dei obinuim s spunem c un calculator lucreaz doar cu numere, n realitate el lucreaz cu iruri de bii, asupra crora aplic o serie de prelucrri, pe care noi le numim adunare, nmulire etc.; pentru circuitele din calculator, aceste operaii nu au o semnificaie special, ci sunt nite funcii oarecare. Pe baza conceptelor prezentate mai sus sunt create circuite din ce n ce mai complexe, capabile s ndeplineasc sarcini tot mai dificile. Aceste circuite formeaz n cele din urm sistemul de calcul.

1.2. Tipuri de calculatoare


Practic, astzi nu mai exist domeniu al societii care s nu fac apel la calculatoare. Problemele pe care le putem aborda cu ajutorul unui sistem de calcul sunt att de variate, nct nu este de mirare c nu exist un singur tip de calculator, capabil s rezolve n mod optim toate aceste probleme. Caracteristici cum ar fi puterea de calcul, capacitatea de stocare i nu n ultimul rnd preul trebuie luate n considerare atunci cnd se intenioneaz achiziionarea unui calculator. Toate aceste caracteristici variaz ntr-o plaj foarte larg. Putem clasifica sistemele de calcul dup gradul de miniaturizare, parametru care d o imagine suficient de clar asupra performanelor. Pe msur ce coborm pe scara dimensiunilor fizice sistemelor, 3

constatm o reducere progresiv a puterii de calcul i a capacitii de stocare, dar i a preului. - Supercalculatoarele includ de obicei sute sau mii de procesoare care lucreaz n paralel. Rezult astfel o putere de calcul impresionant, datorat i faptului c se utilizeaz tehnologii aflate la limita posibilitilor actuale, n condiiile n care preul nu este factorul principal n construcia lor. O asemenea putere de calcul i gsete utilizare n rezolvarea unor probleme de foarte mare complexitate din cteva domenii de vrf ale tiinei, cum ar fi: elaborarea modelelor climatice, studiul cutremurelor, secvenierea genomului, interaciunile particulelor fundamentale, testarea teoriilor cosmologice. Preul unui supercalculator este ns pe msur, fiind exprimat n general n milioane de dolari. O abordare mai recent se axeaz pe utilizarea sistemelor distribuite (bazate pe reele de calculatoare) pentru a obine performane comparabile, dar la un pre cu un ordin de mrime mai mic. Asemenea supercalculatoare pot constitui n unele cazuri o alternativ viabil la cele clasice. - Mainframe reprezint un tip de calculator de asemenea de mare putere, dar nu la acelai nivel cu supercalculatoarele. Sunt utilizate cel mai adesea pentru gestiunea bazelor de date de dimensiuni foarte mari, precum i a altor aplicaii asemntoare, care necesit o capacitate de stocare foarte mare i o interaciune puternic cu un numr mare de utilizatori, concretizat printr-un volum foarte mare de comunicaii de date. De asemenea, se pot folosi i la efectuarea de calcule tiinifice de o complexitate mai redus dect n cazul supercalculatoarelor. - Serverul este un calculator care are rolul de a pune la dispoziia altor sisteme de calcul diverse resurse (capacitate de stocare, putere de calcul, informaii de un anumit tip), de obicei prin intermediul unei reele de calculatoare. Fiind destinat s serveasc de obicei un numr mare de cereri n paralel, serverul trebuie s aib la rndul su o putere de calcul considerabil. Un exemplu bine cunoscut (dar nu neaprat cel mai important) l constituie serverele Web. De altfel, serverele din gama de vrf au tendina de a nlocui sistemele de tip mainframe, profitnd i de progresul tehnologic, care permite obinerea unor performane superioare i de ctre calculatoarele de dimensiuni mai reduse. Dincolo de imaginea uzual pe care o are publicul, un server de vrf poate include un numr mare de procesoare, iar capacitatea de stocare poate fi foarte mare. - Staiile de lucru sunt destinate lucrului individual, dar sunt proiectate pentru a rula aplicaii profesionale, de complexitate mare, cum ar fi: grafic 3D, prelucrri audio i video, aplicaii de tip CAD sau GIS etc. - Sistemele desktop intr n categoria calculatoarelor personale, care pot fi folosite pentru aplicaii de birou (editare de texte, calcul tabelar, baze de date de dimensiuni reduse etc.) sau pentru jocuri. Sunt n principiu cele mai ieftine calculatoare i din acest motiv cele mai accesibile publicului larg. De asemenea, se adreseaz i utilizatorilor nespecialiti n informatic. - Laptop i notebook sunt termeni care desemneaz calculatoarele personale portabile. Acestea au la baz aceleai principii i tehnologii ca i sistemele desktop i sunt prin urmare comparabile din toate punctele de vedere (putere, pre etc.). Diferena const n accentul pus pe mobilitate. Un laptop are dimensiuni i greutate reduse i poate funciona un timp (cteva ore) cu ajutorul bateriilor, fr alimentare de la reeaua electric. inta principal a acestei categorii de sisteem o reprezint mediul de afaceri, pentru care mobilitatea este esenial.

2. Arhitectura sistemelor de calcul


Modelul de baz pentru arhitectura unui sistem de calcul a fost introdus de savantul american John von Neumann, ca rezultat al participrii sale la construcia calculatorului ENIAC, n anii 1944-1945. Acest model este cunoscut n literatura de specialitate ca arhitectura von Neumann.

2.1. Arhitectura generalizat von Neumann


Dup cum se observ n figura 2.1., un sistem de calcul este format din 3 uniti de baz, care sunt conectate ntre ele prin 3 ci separate de comunicaie, numite magistrale (mai des se folosete termenul englezesc - bus).

Fig. 2.1. Informaiile vehiculate n sistemul de calcul se mpart n 3 categorii: - date care trebuie prelucrate - instruciuni care indic prelucrrile ce trebuie efectuate asupra datelor (adunare, scdere, comparare etc.) - adrese care permit localizarea diferitelor date i instruciuni Simplist spus, sarcina unui sistem de calcul este de a executa instruciuni (grupate n secvene coerente, care urmresc un obiectiv bine stabilit, numite programe) asupra datelor; adresele joac un rol auxiliar, dar nu mai puin important. Privind din aceast perspectiv, vom analiza pe scurt scopul elementelor din figura 2.1. Unitatea de memorie are rolul de a stoca att instruciunile, ct i datele asupra crora vor opera instruciunile (operanzii). Instruciunile unui program trebuie aduse n memorie anterior nceperii execuiei programului respectiv. De asemenea, unele date se vor afla n memorie naintea pornirii prelucrrii, iar rezultatele prelucrrii se vor memora n timpul execuiei programului. Aceast memorie, realizat n diverse 5

tehnologii de-a lungul evoluiei calculatoarelor, constituie suportul fizic necesar desfurrii operaiilor executate de CPU. Structural, memoria este format dintr-un numr mare de celule independente (numite i locaii), fiecare celul putnd memora o valoare. Pentru organizarea i regsirea informaiilor n memorie se folosesc aanumitele adrese. O adres este de fapt un numr care identific n mod unic o locaie de memorie; cu alte cuvinte, fiecrei locaii i este asociat un numr unic (adresa sa), n aa fel nct s nu existe dou locaii diferite cu aceeai adres. Pentru accesarea unei informaii din memorie se furnizeaz adresa acelei informaii, iar circuitele de control al memoriei vor furniza coninutul locaiei care reprezint informaia cerut. Similar se petrec lucrurile i la scrierea n memorie. Tehnologic, unele dispozitive de memorie pot reine informaia numai cnd sunt alimentate electric (i avem de-a face cu aa-zisa memorie volatil), n timp ce altele pstreaz informaia i atunci cnd nu sunt alimentate electric, formnd memoria nevolatil. Aceasta din urm este folosit n mod special la stocarea programelor pentru iniializarea calculatorului i a sistemului de operare. Unitatea central de prelucrare (CPU) are rolul de a executa instruciunile. Din acest motiv, CPU reprezint componenta cea mai important a sistemului de calcul i poate controla activitatea celorlalte componente. Deoarece att instruciunile, ct i datele prelucrate de instruciuni se gsesc n memorie, execuia unei instruciuni presupune efectuarea de ctre CPU a urmtoarei secvene de aciuni: - Depunerea pe busul de adrese a unei informaii care localizeaz adresa de memorie ce conine cmpul de cod al instruciunii (faza de adresare). - Citirea codului instruciunii i depunerea acestuia ntr-un registru intern al decodificatorului de instruciuni. Aceast informaie este vehiculat pe busul de date (faza de citire). - Decodificarea codului instruciunii, n urma creia CPU va cunoate ce instruciune are de executat i ca urmare pregtete modulele ce vor participa la instruciunea respectiv (faza de decodificare). - Executarea efectiv a operaiei specificate de de instruciune - faza de execuie propriu-zis. Dup terminarea execuiei unei instruciuni, se continu cu extragerea instruciunii urmtoare i trecerea ei prin secvenele amintite .a.m.d. Dispozitivele de intrare/ieire (I/O - input/output), numite i dispozitive periferice, permit transferul informaiei ntre CPU, memorie i lumea extern. Funcional, aceste dispozitive de I/O pot fi adresate (apelate) de ctre CPU similar cu memoria, ele dispunnd de asemenea de cte un set de adrese. n mod clasic, schimbul de informaii cu exteriorul se face sub controlul CPU, dar exist tehnici, care vor fi amintite mai trziu, prin care accesul la memorie se poate face i cu o intervenie minim a CPU (aa-numitele transferuri DMA - Direct Memory Access). Cele mai utilizate periferice sunt: monitorul, tastatura, mouse-ul, discul dur, mediile de stocare portabile (dischet, CD, DVD etc.), imprimanta. Busul de date este acea cale care leag cele 3 blocuri funcionale (o parte a sa poate s ias i n exteriorul sistemului) i pe care se vehiculeaz datele propriu-zise (numere sau caractere) sau instruciunile programului. Busul de adrese este calea pe care sunt transmise de CPU adresele ctre memorie, cnd se face o operaie cu memoria (citire sau scriere), sau se vehiculeaz adresele dispozitivului de I/O n cazul unui transfer cu un periferic.

Busul de comenzi vehiculeaz semnalele de comand i control ntre toate aceste blocuri i astfel permite o sincronizare armonioas a funcionrii componentelor sistemului de calcul. n marea majoritate a cazurilor, semnalele de comand sunt emise de ctre CPU i servesc la controlul funcionrii celorlalte componente. Arhitectura de tipul von Neumann a fost o inovaie n logica mainilor de calcul, deosebindu-se de cele care se construiser pn atunci prin faptul c sistemul trebuia s aib o cantitate de memorie, similar creierului uman, n care s fie stocate att datele, ct i instruciunile de prelucrare (programul). Acest principiu al memoriei a reprezentat unul din fundamentele arhitecturale ale calculatoarelor. Diferena fundamental consta n stocarea n memorie nu numai a datelor, ci i a programelor. A nceput astfel s apar din ce n ce mai clar care este aplicabilitatea memoriei. Datele numerice puteau fi tratate ca i valori atribuite unor locaii specifice ale memoriei. Aceste locaii erau asemnate cu nite cutii potale care aveau aplicate etichete numerotate (de exemplu 1). O astfel de locaie putea conine o variabil sau o instruciune. A devenit posibil ca datele stocate la o anumit adres s se schimbe n decursul calculului, ca urmare a pailor anteriori. Astfel, numerele stocate n memorie au devenit simboluri ale cantitilor i nu neaprat valori numerice, n acelai mod n care algebra permite manipularea simbolurilor x i y fr a le specifica valorile. Cu alte cuvinte, se putea lucra cu entiti abstracte. Calculatoarele ulterioare i mai trziu microprocesoarele au implementat aceast arhitectur, care a devenit un standard. n ciuda vechimii sale, arhitectura von Neumann nu a putut fi nlocuit pn azi.

2.2. Clasificarea arhitecturilor interne


ntr-un efort continuu de mbuntire, arhitectura von Nuemann a fost dezvoltat n mai multe direcii, rezultnd sisteme de calcul cu posibiliti noi i adaptate noilor cerine cerute de societate. Pentru a vedea aceste noi direcii, ne vom folosi de o clasificare a sistemelor dup arhitectura intern, propus de Flynn: SISD (Single Instruction Single Data - o singur instruciune, o singur dat de prelucrat) Sunt sistemele uzuale cu un singur microprocesor. Aici se ncadreaz microprocesoarele clasice cu arhitectur von Neumann pe 8, 16, 32, 64 bii cu funcionare ciclic - preluare instruciune, execuie instruciune (rezult prelucrarea datelor) .a.m.d. Tot n aceast categorie trebuie incluse i aa-numitele procesoare de semnal DSP (Digital Signal Processors) folosite actualmente pe scar larg n plcile de sunet, telefonia mobil etc. SIMD (Single Instruction Multiple Data - o singur instruciune, mai multe date) Sunt sistemele cu microprocesoare matriceale, la care aceleai operaii aritmetice se execut n paralel pentru fiecare element al matricei, operaia necesitnd o singur instruciune (se mai numesc i sisteme de procesare vectorial). Privit ca o cutie neagr, o arhitectur SIMD arat ca n figura 2.2:

Fig. 2.2. Dac intrm n detalii arhitecturale, devine evident faptul c exist mai multe uniti de execuie, capabile s execute acelai tip de prelucrare n paralel pe date diferite, coordonate de o singur unitate de control. Deoarece datele prelucrate de o unitate de execuie sunt independente de datele celorlalte uniti, devine clar faptul c fiecare unitate de execuie are memoria sa proprie. Evident, trebuie s existe totui i o form de interconectare ntre uniti. Arhitectura SIMD are deci urmtoarea schem de principiu:

Fig. 2.3. Eficiena SIMD-urilor se dovedete a fi ridicat n cazul unor programe cu paralelism de date masiv, pus n eviden cel mai adesea de anumite bucle de programe. Exemplu: arhitectura de tablou sistolic construit n 1984 de General Electric, un tablou de 64 64 elemente, rezultnd o vitez de procesare de 1 miliard de operaii pe secund. MISD (Multiple Instruction Single Data - mai multe instruciuni, o singur dat) Sunt sistemele care folosesc microprocesoare de tip pipeline (conduct), metod folosit de ctre procesoarele recente (Pentium sau echivalente). La un astfel de microprocesor, de exemplu, n paralel se execut instruciunea n, se decodific instruciunea n+1 i se aduce n memorie instruciunea n+2. Aceast arhitectur a fost inspirat de banda de montaj a automobilelor. Celebrele supercomputere Cray din anii 1970 foloseau de asemenea arhitectura MISD. MIMD (Multiple Instruction Multiple Data - mai multe instruciuni, mai multe date) sunt acele sisteme n care se ncadreaz att supercalculatoarele cu procesoare dedicate, ct i sistemele multiprocesor (figura 2.4). Sunt cunoscute i sub denumirea de arhitecturi paralele.

Fig. 2.4. n cazul arhitecturilor MIMD, procesoarele pot avea fiecare propria sa memorie local, dar exist i o memorie global, accesat prin intermediul reelei de interconectare (figura 2.5). Complexitatea reelei de interconectare poate varia ntr-o plaj larg, mergnd de la simpla arhitectur de tip bus comun (n care un singur procesor poate avea acces la memoria global) i pn la reelele de tip crossbar (care permit accesul simultan al tuturor procesoarelor la memoria global, dar la module diferite pentru fiecare procesor).

Fig. 2.5. Acest tip de arhitecturi necesit existena unor sisteme de operare capabile s asigure rularea n paralel a diferitelor procese, altfel potenialul lor de performan ar rmne n mare parte neexploatat. Astfel, avem mai multe tipuri de sisteme de operare: - master-slave - la care funciile sistemului de operare sunt ataate unui procesor distinct (master), iar restul procesoarelor (numite slave) acceseaz aceste funcii indirect, prin intermediul procesorului master - divizat - nu exist un procesor evideniat, fiecare procesor avnd funciile de sistem plasate separat n memorie - flotant - cnd funciile sistemului de operare sunt plasate n memoria comun, putnd fi accesate de oricare microprocesor al sistemului; acest model de calcul poat denumirea de multiprocesare simetric (Symmetrical Multiprocessing - SMP) Tot n cadrul acestei ultime categorii trebuie amintite aa-numitele transputere, care sunt de fapt microcalculatoare integrate ntr-un singur circuit, cu memorie proprie i reea de conectare punct la punct cu alte transputere din aceeai categorie. Cu acestea se pot construi maini SIMD sau MIMD, folosindu-se limbaje de programare specifice proceselor paralele (de exemplu OCCAM), precum i algoritmi paraleli. Putem aminti aici, n afara clasificrii propuse de Flynn, i de sistemele distribuite. Un sistem distribuit este de fapt un grup de calculatoare legate n reea, care coopereaz ntr-un mod asemntor cu procesoarele ditnr-un sistem multiprocesor. Desigur, exist i diferene, legate n principal de eterogenitatea sistemului distribuit (este puin probabil c toate calculatoarele dintr-o reea sunt identice, putnd fi chiar foarte diferite) i de particularitile modului de comunicare 9

ntr-o reea de calculatoare. n mod paradoxal, n acest moment sistemele distribuite sunt n general mai eficiente economic dect sistemele multiprocesor. Evident, o reea de n calculatoare este aproape ntotdeauna mai scump dect un sistem cu n procesoare; eficiena vine ns din faptul c practic n orice instituie exist deja o baz instalat de calculatoare, cu care se poate realiza un sistem distribuit, n timp ce sistemele multiprocesor trebuie achiziionate. Din acest motiv sistemele distribuite cunosc o dezvoltare remarcabil (de altfel, ele nu apreau n clasificarea lui Flynn deoarece, la momentul cnd a fost propus aceast clasificare, nc nu existau sisteme distribuite).

10

3. Arhitectura intern a microprocesoarelor Intel


n general, cnd se vorbete despre un microprocesor se nelege c acesta reprezint CPU (Central Processing Unit) din arhitectura generalizat von Neumann. Dup ce s-au construit primele microprocesoare pe 8 bii, s-a cutat ca puterea de calcul a acestora s se mreasc prin creterea numrului de bii prelucrai, trecnduse la prelucrri pe 16 bii, apoi la 32 bii i, mai recent, la 64 bii. Totodat, s-au fcut n permanen inovaii n cadrul arhitecturii interne, care au dus la o cretere a vitezei de prelucrare.

3.1. Microprocesoare pe 16 bii


ncepnd cu microprocesoarele pe 16 bii (8086, 8088, 80286), unitatea de prelucrare nu mai urmeaz strict schema ciclic descris la arhitectura von Neumann, de extragere a instruciunii, decodificare, execuie .a.m.d. Noutatea a fost divizarea unitii de prelucrare n dou uniti (vezi figura 3.1): - unitatea de execuie (Execution Unit - EU) - unitatea de interfa cu magistrala (Bus Interface Unit - BIU)

Fig. 3.1. Dup cum se observ, cele dou uniti sunt legate ntre ele cu o conduct (pipeline) prin care sunt transferate instruciunile extrase din memoria program de ctre BIU spre EU; aceasta din urm are numai rolul de a executa instruciunile extrase de BIU, EU neavnd nici o legtur cu magistrala sistemului. n timp ce EU i ndeplinete sarcina, BIU extrage noi instruciuni pe care le organizeaz ntr-o coad de ateptare (queue). La terminarea execuiei unei instruciuni, EU are deja la dispoziie o nou instruciune din coada de ateptare meninut de BIU. Cele dou uniti, EU i BIU, lucreaz deci n paralel, existnd momente de sincronizare i ateptare ntre ele, atunci cnd coada de instruciuni este goal, ceea ce se ntmpl ns foarte rar. Funcionarea paralel a celor dou uniti (BIU i EU) este transparent utilizatorului. Aceast arhitectur se mai numete i arhitectur cu prelucrare secvenial - paralel pipeline. Unitatea de execuie EU conine o unitate logico-aritmetic (ALU) de 16 bii, registrul indicatorilor condiionali, registrul operatorilor i regitrii generali. BIU conine indicatorul de instruciuni IP (Instruction Pointer), registrele de segmente, un bloc de control al magistralei i de generare de adrese i o memorie organizat sub forma unei cozi, n care sunt depuse instruciunile extrase (Instruction Queue). 11

Vom detalia n continuare blocurile de regitri, artnd i rolul unora dintre acetia n cursul execuiei programului. Avem urmtoarele categorii de regitri pe 16 bii: - regitri generali - regitri de segment - registru pointer de instruciune - registrul indicatorilor de stare i control Regitrii generali sunt n numr de 8 i sunt mprii n dou seturi a cte 4 regitri (fig. 3.2): - regitrii de date AX, BX, CX, DX - regitrii de pointer i de index SP, BP, SI, DI AH AL AX BH BL BX CH CL CX DH DL DX SP BP SI DI Fig. 3.2. Fiecare registru de date este format din doi regitri de cte 8 bii, care pot fi adresai i individual. Regitrii pointer i index pot fi folosii numai pe 16 bii i pot participa la majoritatea operaiilor aritmetice i logice. De asemenea, regitrii pointer i index (ca i BX) sunt utilizai i la adresarea memoriei. Regitrii de segment, la rndul lor, sunt folosii exclusiv pentru adresarea locaiilor de memorie. Rolul lor n adresare este ns diferit de cel al regitrilor prezentai mai sus i se refer la mprirea memoriei n segmente. Un segment este o unitate logic de memorie care poate avea cel mult 64 Ko (locaii contigue), n timp ce cantitatea maxim de memorie acdresabil de un procesor Intel pe 16 bii este de 1 Mo . Fiecrui segment i se atribuie o adres de baz, care este adresa locaiei de nceput a segmentului. Valoarea acestei adrese se afl memorat ntr-un registru de segment. Exist 4 regitri segment (conform figurii 3.3) i ei se gsesc localizai n BIU. CS DS SS ES Fig. 3.3. n memorie pot exista, n funcie de poziia lor relativ, segmente adiacente, parial suprapuse sau suprapuse complet i disjuncte. Deci fiecare aplicaie (program aflat n memorie) are la dispoziie un spaiu de 64Ko pentru codul instruciunilor (segmentul de cod), 64 Ko pentru stiv (segment de stiv) i 128 Ko pentru date (segmentul de date i extra segmentul). Unele aplicaii pot ns gestiona un spaiu de memorie mult mai mare, fcnd gestionarea segmentelor dup propriile necesiti. mprirea memoriei n segmente de 64Ko provine din faptul c microprocesoarele pe 8 bii anterioare gestionau un spaiu de numai 64Ko. Proiectanii de la Intel au cutat ca i noile microprocesoare pe 16 bii s foloseasc eventual programe scrise pentru microprocesoarele anterioare, adoptnd aceast 12

soluie a segmentului, fcnd ns adresarea memoriei mai greu de neles i limitat ca funcionalitate. Generarea adresei fizice Fiecare locaie de memorie are dou tipuri de adres: - fizic - logic Adresa fizic este o valoare format din 20 bii care identific unic fiecare locaie din spaiul de adresare de 1 Mo. Adresa fizic se gseste n domeniul 00000hFFFFFh i se mai numete adres absolut. Pentru a nu depinde de locul unde se afl codul n memorie, se folosesc aazisele adrese logice, diferite de cele fizice. Adresa logic const dintr-o valoare de baz de segment i o valoare de deplasament (offset). Pentru orice locaie de memorie, valoarea de baz a segmentului este adresa primului octet al segmentului care conine locaia. Aceast adres este exprimat n paragrafe (paragraful fiind o unitate de 16 bii) iar deplasamentul (offset) este distana n octei de la nceputul segmentului pn la locaia respectiv. Adresa de baz i deplasamentul sunt valori pe 16 bii fr semn. Mai multe adrese logice pot corspunde aceeleiai locaii fizice dac se afl n segmente diferite, dup cum se observ din figura 3.4. BIU genereaz ntotdeauna o adres fizic dintr-o adres logic, dup mecanismul prezentat n figura 3.5.

Fig. 3.4.

Fig. 3.5. Se observ c, n principiu, calculul adresei fizice se face prin deplasarea bazei segmentului (coninut ntr-un registru segment) cu 4 poziii spre stnga (ceea ce echivaleaz cu o nmulire cu 16) i adunarea valorii deplasamentului. BIU obine n mod diferit adresa logic a unei locaii de memorie, n funcie de tipul de referire a memoriei. Instruciunile sunt ntotdeauna ncrcate din segmentul de cod curent, iar registrul IP conine deplasamentul instruciunii urmtoare fa de nceputul segmentului. Operaiile cu stiva lucreaz n segmentul de stiv curent, iar registrul SP conine deplasamentul fa de vrful stivei. Variabilele se gsesc de obicei n segmentul de date, iar deplasamentul este dat dup modul de adresare specificat n instruciune. Rezultatul este aa-numita adres efectiv, despre care vom mai vorbi la prezentarea modurilor de adresare. Acestea sunt atribuiile segmentelor n mod implicit. Unele din aceste atribuii pot fi schimbate. 13

Faptul c memoria microprocesorului 8086 sau 8088 este segmentat face posibil scrierea de programe care sunt independente de poziia lor n memorie, adic sunt relocabile dinamic. Aceste programe trebuie ns s ndeplineasc o sum de condiii. Dac aceste condiii sunt ndeplinite, programul poate fi mutat oriunde n memorie. Un astfel de program poate fi fcut s ocupe o zon contigu de memorie, lsnd spaiu nefragmentat i pentru alte aplicaii. De asemenea, acest fapt este important atunci cnd programul este inactiv n memorie i sistemul de operare mut programul pe disc; atunci cnd se dorete ca programul s fie adus din nou n memorie, pentru a se relua execuia sa, zona n care s-a aflat prima dat este ocupat de un alt program. Prin simpla schimbare a valorilor registrelor de segment, programul poate rula din alt zon de memorie. Pointerul de instruciuni (IP) este un registru pe 16 bii actualizat de BIU i conine deplasamentul (offsetul) instruciunii urmtoare fa de nceputul segmentului de cod curent. Programele nu au acces direct la el, dar exist instruciuni care l modific i l ncarc sau l descarc de pe stiv. Registrul de stare i control (Flags register) conine 6 indicatori de stare i 3 indicatori de control, notai conform figurii 3.6.

Fig. 3.6. EU poziioneaz cei 6 indicatori de stare pentru a reflecta anumite stri ale unei operaii aritmetice sau logice. Un anumit set de instruciuni permit modificarea execuiei unui program n funcie de starea acestor indicatori - cum ar fi instruciunile de salt condiionat. Indicatorii de stare reflect urmtoarele condiii: - C (Carry) indic transportul n exterior al bitului cel mai semnificativ al rezultatului operaiilor aritmetice - P (Parity) este poziionat dac rezultatul are paritate par (conine un numr par de bii cu valoarea 1) - A (Auxiliar Carry) este poziionat dac a avut loc un transfer de la semioctetul inferior la semioctetul superior al rezultatului i este folosit n aritmetica zecimal - Z (Zero) poziionat dac rezultatul operaiei a fost zero - S (Sign) este poziionat dac cel mai semnificativ bit al rezultatului este 1 (prin convenie, 0 indic un numr pozitiv, iar 1 - un numr negativ) - O (Overflow) - poziionat cnd dimensiunea rezultatului depete capacitatea locaiei de destinaie i a fost pierdut un bit Pentru controlul unor operaii ale procesorului, pot fi modificai (prin program) trei indicatori de control: - D (Direction) stabilete dac operaiile pe iruri lucreaz prin incrementare (cnd are valoarea 0) sau prin decrementare (valoarea 0) - I (Interrupt) este poziionat pe 1 pentru a permite CPU s recunoasc cererile de ntrerupere externe mascabile - T (trap) - cnd este poziionat pe 1, trece CPU n execuia de pas cu pas, n scopul depanrii programului instruciune cu instruciune

3.2. Microprocesoare pe 32 bii


Apariia microprocesorului 80386 a reprezentat un salt major n familia Intel. Pe lng creterea dimensiunii operanzilor de la 16 la 32 bii, au fost introduse o serie de 14

noi caracteristici care au mbuntit substanial performanele i funcionalitatea. Linia inovativ a fost continuat i de procesoarele care au urmat (80486, Pentium, Pentium Pro, Pentium II, Pentium III, Pentium IV), astfel nct astzi familia procesoarelor Intel pe 32 bii are n urm o istorie bogat. n cele ce urmeaz vom creiona noutile aduse de procesoarele pe 32 bii. Dimensiunea datelor i adreselor Magistrala de adrese, la fel ca i cea de date, are 32 bii, deci cantitatea maxim de memorie care poate fi accesat este de 4 Go. Dei au aprut deja aplicaii al cror necesar de memorie depete i aceast valoare, saltul de la 1 Mo este mai mult dect semnificativ. Ca dovad, au trecut aproximativ dou decenii de la lansarea microprocesorului 80386 i marea majoritate a programelor nc nu au probleme cu limita de memorie. Corespunztor, dimensiunea regitrilor a crescut i ea la 32 bii. De fapt, pentru a se pstra compatibilitatea cu procesoarele pe 16 bii, regitrii acestora exist n continuare, exact n forma n care au fost prezentai mai sus. n plus, au fost introdui o serie de regitri noi, pe 32 bii, care i includ pe cei deja existeni (figura 3.7). EAX AH AL AX EBX BH BL BX ECX CH CL CX EDX DH DL DX ESP SP EBP BP ESI SI EDI DI Fig. 3.7. Fiecare registru pe 32 bii include, la partea mai puin semnificativ, unul dintre regitrii pe 16 bii, iar numele su este format din numele registrului vechi, adugndu-i-se n fa litera E (extended). Astfel, noii regitri generali ai procesorului sunt EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI. Denumirile de regitri de date, index i pointer i pierd practic semnificaia, deoarece noii regitri sunt complet interschimbabili, adic nu mai exist diferene ntre ei cu privire la operaiile la care pot fi folosii. Registrul IP (pointerul de instruciuni al procesoarelor pe 16 bii) este inclus ntr-un registru de 32 bii, numit desigur EIP. Acesta din urm ndeplinete acum rolul de pointer de instruciuni. n plus, registrul indicatorilor de condiii (FLAGS) este la rndul su extins la un registru de 32 bii (EFLAGS). Nu vom intra ns n detalii privitoare la indicatorii de condiii suplimentari. Exist i o excepie de la regula extinderii. Regitrii de segment rmn la dimensiunea de 16 bii, fr a fi creai regitri noi. n schimb sunt adugai doi regitri de segment noi, tot pe 16 bii, numii FS i GS (figura 3.8). Acetia nu au un rol anume, ci pot fi folosii pentru accesarea datelor, la fel ca DS sau ES. CS DS SS ES FS GS Fig. 3.8.

15

n final, facem observaia c noii regitri nu sunt ntotdeauna disponibili. Orice microprocesor Intel pe 32 bii are dou moduri diferite de funcionare: - modul real, n care funcioneaz la fel ca un procesor pe 16 bii - modul protejat, n care se poate lucra cu regitrii de 32 bii Modul real a fost pstrat pentru compatibilitatea cu aplicaiile mai vechi. Trecerea microprocesorului dintr-un mod de funcionare n altul poate fi controlat prin software. Coprocesorul matematic ncepnd cu microprocesorul 80486, coprocesorul matematic a fost inclus n unitatea central de procesare, nemaifiind un circuit separat. Aceasta reprezint o consecin logic a evoluiei tehnologiei, care a permis o cretere a numrului de tranzistoare pe o pastil de siliciu (prin scderea dimensiunii acestora), dar i o recunoatere a importanei calculelor n virgul mobil n cadrul aplicaiilor. Prin integrarea coprocesorului matematic n acelai circuit cu microprocesorul s-a obinut un spor de performan datorat scrutrii cilor de semnal i simplificrii comunicrii ntre componente. Pipeline O alt mbuntire important este dat de perfecionarea structurii de tip pipeline. Aa cum am vzut mai sus, la procesoarele pe 16 bii unitatea de prelucrare este mprit n unitatea de interfa cu magistrala (BIU), care se ocup de aducerea n avans a instruciunilor din memorie i depunerea lor ntr-o coad, i unitatea de execuie (EU), care preia instruciunile din coad i le execut. Aceast mprire permite lucrul n paralel al celor dou uniti, ceea ce se traduce printr-o funcionare mai rapid. La procesoarele pe 32 bii ideea a fost dus i mai departe. Dup cum ne amintim, fiecare instruciune const din 4 faze (adresare, citire, decodificare, execuie). Mai mult, fiecare din aceste faze (mai ales cea de execuie, care este cea mai complex) poate consta la rndul su din mai multe operaii mai simple. Ideea este c fiecare din aceste operaii lucreaz n principiu cu alte resurse, deci toate operaiile se pot executa n paralel. Astfel, execuia unei instruciuni poate fi mprit ntr-un numr mare de aciuni elementare, numite stagii ale pipeline-ului. Deci, la un moment dat se pot afla n execuie n procesor mai multe instruciuni, n diferite faze; n cazul cel mai fericit exist cte o instruciune tratat n fiecare stagiu al pipelineului. Dei execuia unei instruciuni de la nceput pn la sfrit necesit un numr mare de aciuni, o instruciune poate ncepe s fie executat imediat ce instruciunea anterioar a trecut de primul stagiu. De ce este att de eficient aceast structur? Activitatea procesorului este coordonat cu ajutorul semnalului de ceas al sistemului. Trecerea execuiei unei instruciuni de la un stagiu la altul se poate face numai atunci cnd "bate" ceasul, deci la intervale regulate de timp. Pe de alt parte, fiecare aciune elementar (stagiu) se execut ntr-o anumit durat finit de timp. Dac semnalul de ceas este prea rapid, aciunile nu se mai pot realiza pe durata dintre dou "bti" ale ceasului, ceea ce ar duce la pierderea controlului asupra execuiei instruciunilor. Ca urmare, frecvena ceasului nu poate fi crescut orict de mult, ci este limitat de duratele de execuie ale stagiilor. Dac aciunile elementare sunt mai simple (ceea ce implic o descompunere mai fin a instruciunilor i deci un numr de stagii mai mare), ele vor consuma mai puin timp; implicit, frecvena ceasului va putea fi crescut. Dac analizm funcionarea unui pipeline, observm c, n cazul cel mai fericit, la fiecare "btaie" a ceasului se poate termina de executat cte o instruciune, deci performana procesorului depinde direct de creterea frecvenei semnalului de ceas.

16

Procesoarele Intel au evoluat n sensul creterii continue a numrului de stagii a pipeline-ului. La ultimele microprocesoare Pentium IV s-a ajuns la un pipeline cu 32 stagii, ceea ce este mult mai mult dect oricare variant anterioar. Cu alte cuvinte, execuia unei instruciuni a microprocesorului este mprit n 32 operaii elementare. Pentru microprocesoarele cu numr foarte mare de stagii se folosete i denumirea de uniti superpipeline. Totui, structura de tip pipeline are i dezavantaje. Ideea sa de pornire este c fiecare stagiu lucreaz cu alte resurse ale procesorului dect restul stagiilor. Aceast cerin nu poate fi niciodat satisfcut n totalitate. Ca un exemplu simplu, o operaie de adunare necesit folosirea unitii aritmetico-logice (ALU) pentru efectuarea calculului propriu-zis. n acelai timp, n faza de adresare a unei instruciuni, valoarea registrului indicator de instruciuni (IP la procesoarele pe 16 bii) este incrementat, pentru a putea aduce codul urmtoarei instruciuni. Deoarece incrementarea este tot o operaie de adunare, va fi nevoie tot de ALU. Astfel, o instruciune de adunare aflat n faza de execuie i o alt instruciune aflat n faza de adresare vor concura pentru aceeai resurs (ALU). Asemenea situaii apar de fapt mult mai des, deoarece ntre instruciuni exist relaii de dependen rezultate din nsi logica programului. Se ntmpl foarte des ca o instruciune s aib nevoie de rezultatul unei instruciuni anterioare, care nc nu l-a calculat. Din acest motiv, de multe ori o instruciune (i implicit cele care urmeaz dup ea) trebuie s atepte pn cnd devine disponibil o resurs de care are nevoie, dar care este momentan folosit de alt instruciune. Dup cum am vzut, o asemenea resurs poate fi fie o component hardware a procesorului, fie rezultatul altei instruciuni. Ca urmare, n practic se ntmpl rareori ca procesorul s termine de executat cte o instruciune la fiecare "btaie" a ceasului, deci ctigul de performan nu este att de mare ct sperm. O concluzie important care se desprinde de aici este c simpla lungime a pipeline-ului (adic numrul de stagii) nu este singurul factor care influeneaz performana procesorului. mprirea corect a instruciunilor n operaii elementare poate fi la fel de important. Din pcate, aceast alegere nu poate fi fcut ca urmare a unor consideraii teoretice sau a unor criterii clare, fiind n mare msur o problem de inspiraie. n practic se poate vedea cum microprocesoarele AMD, care sunt compatibile cu cele Intel la nivel de limbaj, dar au o implementare diferit pentru pipeline (care este mult mai scurt), reuesc s obin performane asemntoare, dei lucreaz la frecvene mult mai mici. O soluie deja folosit de procesoarele actuale (att Intel, ct i AMD) este existena a dou sau mai multe pipeline-uri; astfel se pot executa mai multe instruciuni n paralel, atunci cnd dependenele dintre instruciuni nu introduc perioade de ateptare. Procesoarele care utilizeaz mai multe pipeline-uri se numesc superscalare. Lucrul cu segmente de memorie n condiiile n care spaiul de memorie accesibil microprocesorului a crescut pn la 4 Go, segmentele de 64 Ko, cu care lucrau procesoarele pe 16 bii, sunt evident anacronice. Procesoarele pe 32 bii au pstrat conceptul de segment de memorie, dar ntr-un mod adaptat necesitilor. Sistemele actuale permit executarea simultan a mai multor programe. O consecin imediat este c mai multe programe se pot afla simultan n memorie, de unde apare i riscul ca dou sau mai multe asemenea programe s ncerce s utilizeze (n scopuri diferite) aceeai adres de memorie. Evident, asemenea situaii sunt de natur s duc la interferene nedorite ntre programe, cu efecte dintre cele mai grave, de aceea trebuie evitate prin orice mijloace.

17

Soluia de principiu const n a introduce o separare ntre adresele pe care un program crede c le acceseaz i adresele utilizate n realitate. Altfel spus, atunci cnd un proces ncearc s acceseze o locaie aflat la o anumit adres, accesul n memoria principal se produce la alt adres. n continuare, adresele pe care un proces crede c le acceseaz vor fi numite adrese virtuale, iar adresele accesate n realitate adrese fizice. Astfel, fiecare proces are la dispoziie un spaiu de adrese (virtuale) propriu, independent de spaiile de adrese ale celorlalte procese. La prima vedere nu se ntrevede nici un ctig, ci dimpotriv. Totui, printr-o gestionare atent a corespondenelor ntre adresele virtuale ale fiecrui proces i adresele fizice accesate n realitate, se poate obine efectul dorit: mai multe programe acceseaz acelai adrese (virtuale), fr a se produce suprapuneri n memoria fizic. Avantajul obinut astfel este c o aplicaie nu mai trebuie s in cont de problema interferenelor, ci se poate executa ca i cum toat memoria ar fi la dispoziia sa. S vedem cum se poate folosi lucrul cu segmente pentru a gestiona adresele virtuale i fizice. Dup cum am artat, adresa unui octet dintr-un segment se compune din dou pri independente: adresa de nceput (de baz) a segmentului i deplasamentul octetului n interiorul segmentului (numit i offset). Deci, orice adres poate fi scris printr-o pereche de forma: (adresa_baza_segment, deplasament). Aceast pereche este de fapt o adres virtual, deoarece este transformat de procesor ntr-o adres fizic. S analizm ce se ntmpl n momentul n care dou programe diferite ncearc s acceseze aceeai adres virtual. Adresa de baz a unui segmentului este precizat prin intermediul unui registru de segment. Deci, pentru a evita suprapunerea, este suficient ca valoarea registrului de segment s fie diferit pentru cele dou programe. Desigur, gestiunea valorilor regitrilor de segment nu cade n seama programelor, ci este realizat de sistemul de operare, singurul care are o vedere de ansamblu asupra tuturor aplicaiilor ce ruleaz pe calculator. n acest mod, programele nu trebuie s opereze nici o modificare pentru arezolva problema. Totui, problema nu este nc rezolvat complet, ntruct este necesar stocarea informaiilor referitoare la valorile regitrilor de segment pentru fiecare program. n plus, pot aprea i erori de alt natur. De exemplu, orice segment are o anumit dimensiune. Procesoarele pe 32 bii permit ca fiecare segment s ocupe pn la 4 Go, dar n practic fiecare segment va avea o dimensiune impus de cantitatea de informaie (date, instruciuni) pe care o conine. Este deci posibil ca deplasamentul s fie prea mare, astfel nct adresa fizic rezultat s fie n afara segmentului. Mai mult, fiecare segment poate fi folosit n general de un singur program; trebuie deci evitat ca alt program s acceseze respectivul segment. Toate aceste situaii trebuie detectate, iar programele care ncearc s realizeze un acces incorect trebuie oprite. Pentru aceasta, fiecrui segment existent n memorie i se asociaz o structur de date numit descriptor de segment. Principalele informaii coninute de acesta sunt urmtoarele: - adresa de nceput a segmentului - dimensiunea segmentului - drepturi de acces la segment Toi descriptorii de segment sunt grupai ntr-un tabel, astfel nct pentru a putea identifica un segment este suficient s fie cunoscut indicele descriptorului su n tabel. n acest moment, adresele devin perechi de forma: (indice_descriptor, deplasament). Cu alte cuvinte, registrul de segment nu va mai conine adresa de baz a segmentului, ci indicele acestuia n tabloul descriptorilor. Acesta este motivul pentru care regitrii de segment au rmas la dimensiunea de 16 bii, n timp ce adresele sunt pe 32 bii. 18

Concret, n momentul n care un program ncearc s acceseze o adres de memorie (dat n forma de mai sus), au loc urmtoarele aciuni: - se verific n descriptorul segmentului drepturile de acces, pentru a se decide dac programul are dreptul de a accesa adresa dorit - se verific dac deplasamentul nu depete dimensiunea segmentului - dac se produce o eroare la unul din paii anteriori, accesul programului la adresa de memorie solicitat este oprit - dac nu s-a produs nici o eroare, se calculeaz adresa fizic i se realizeaz accesul propriu-zis Desigur, toate aceste verificri i calcule nu sunt realizate prin software, ci direct n hardware de ctre microprocesor. Este vorba de o activitate complex, astfel nct procesorul a fost dotat cu o component specializat, numit unitate de management al memoriei (Memory Management Unit - MMU). Paginarea memoriei Utilizarea segmentrii nu este lipsit de probleme. Deoarece un segment ocup ntotdeauna o zon continu n memoria fizic, atunci cnd este creat acesta trebuie plasat ntr-o zon liber suficient de mare. La un moment dat, datorit diverselor alocri i eliberri de segmente, memoria arat ca un ir de zone ocupate i libere, de diferite dimensiuni. Experiena arat c n timp se ajunge la apariia unui numr mare de zone libere de dimensiuni foarte mici, practic inutilizabile. Procesul de formare a acestor zone libere, care nu pot fi folosite din cauza dimensiunilor prea reduse, poart numele de fragmentare extern. Este posibil n acest fel ca un segment s nu mai poat fi plasat n memorie, dei dimensiunea total a zonelor libere este mai mare dect dimensiunea segmentului respectiv. O abordare alternativ, n general mai eficient, poart numele de paginare a memoriei. Ideea este de a stabili o coresponden mai direct ntre adresele virtuale i adresele fizice dect n cazul segmentrii. Astfel, spaiul de adrese virtuale ale unui program este mprit n zone de dimensiuni egale (uzual 4-8 Ko), numite pagini (pages). Similar, memoria fizic este mprit n zone de aceeai lungime, numite cadre de pagin (page frames). Sistemul de operare construiete n memorie, pentru fiecare proces, un tabel, numit tabel de paginare, care va conine paginile aparinnd procesului i cadrele de pagin corespunztoare n memoria fizic. n cazul paginrii, adresele virtuale sunt valori pe 32 bii, exact ca adresele fizice. Practic, lucrurile se desfoar astfel: - De fiecare dat cnd programul ncearc un acces la o adres virtual, MMU determin pagina din care face parte respectiva adres i o caut n tabelul de paginare. - Dac pagina se afl n tabelul de paginare, se determin cadrul de pagin corespunztor i se calculeaz adresa fizic. Abia n acest moment se realizeaz accesul propriu-zis la locaia de memorie dorit. - Dac pagina nu se gsete n tabelul de paginare, avem o ncercare de acces ilegal la memorie, eroare numit uzual defect de pagin (page fault). La fel ca la segmentare, n cazul detectrii unei erori, accesul la memorie nu se mai realizeaz. S lum ca exemplu un tabel de paginare avnd urmtoarea structur: Adrese virtuale 0 1 2 4 5 Adrese fizice 0 2 3 1 6 Considerm pentru simplitate c dimensiunea unei pagini este de 100 octei. n acest caz, pagina 0 va conine adresele virtuale 0-99, pagina 1 adresele 100-199, pagina 2 adresele 200-299 etc. Similar este relaia dintre cadrele de pagin i adresele fizice. 19

Presupunem c programul ncearc s acceseze adresa 124. Aceasta face parte din pagina 1, creia i corespunde n tabel cadrul de pagin 2. Astfel, n realitate va fi accesata adresa fizic 224. Dac programul ncearca s acceseze adresa 367, MMU observ c pagina 3, din care face parte acea adres, nu apare n tabelul de paginare, deci este un acces ilegal. Deoarece o zon de memorie orict de mare poate fi mprit n pagini de dimensiune fix, ce pot fi rspndite n memorie n orice mod, nu apare fenomenul de fragmentare extern. n schimb se ntlnete fragmentarea intern: deoarece dimensiunea paginilor este fix, iar zonele de memorie cu care lucreaz procesele pot avea orice dimensiune, n general la sfritul unei pagini rmne o zon nefolosit. Din acest motiv, dimensiunea paginilor de memorie este stabilit ca un compromis ntre dou cerine contradictorii: - o dimensiune prea mare a paginii provoac o fragmentare intern puternic - o dimensiune prea mic a paginii duce la ocuparea unui spaiu prea mare de ctre tabelele de paginare, micornd memoria care poate fi folosit de aplicaii Dac dimensiunea paginii este bine aleas, fragmentarea intern este n general mai redus dect cea extern (aprut n cazul segmentrii). Exist i posibilitatea de a folosi simultan segmentarea i paginarea memoriei. Este ns vorba de o tehnic rar folosit n practic, din cauza complexitii sale, astfel nct nu vom insista asupra ei.

20

4. Microprocesoare: funcionare i adresarea datelor


4.1. Funcionarea la nivel de magistral
Dup cum s-a vzut, pe placa de baz a calculatorului PC exist un circuit de ceas (clock) care genereaz un semnal de o anumit frecven - 14,3 Mhz la PC original i peste 3 GHz la calculatoarele actuale -, folosit pentru execuia sincronizat a operaiilor din interiorul micriprocesorului i efectuarea transferurilor ntre diferite blocuri la nivelul magistralei externe. n timpul funcionrii, activitatea microprocesorului poate fi descompus n secvene de microoperaii, care formeaz aa-numiii cicli main. n funcie de natura operaiei care se execut, putem avea 5 tipuri de cicli main: 1. Citire (read) - atunci cnd se citesc date din memorie sau de la dispozitivele de I/O 2. Scriere (write) - cnd datele se inscriu in locaii de memorie sau intr-un dispozitiv de I/O 3. Recunoatere ntrerupere - n cazul generrii unei cereri de ntrerupere pe care P o identific 4. Oprire (halt) - atunci cnd microprocesorul este oprit pn la primirea unei cereri de ntrerupere 5. Arbitrare magistral - cnd sistemul de calcul este prevzut cu mai multe microprocesoare care pot avea acces la o magistral comun Toate aceste operaii sunt descrise cu lux de amnunte n foile de catalog ale firmelor ce produc microprocesoare. Fr a le detalia aici, artm doar care este semnificaia unei diagrame de semnal.

Fig. 4.1. Dup cum se observ n figura 4.1, semnalul reprezentat are valoarea "0" logic la t=0, la t=2 ncepe s creasc spre 1 logic, la t=3 deja este "1" logic, se menine 2 ns i apoi "cade" napoi la "0" logic. Acest mod de reprezentare a semnalelor se numete diagram de semnal. n figura 4.1 este prezentat diagrama semnalului de ceas (clock). n practic exist un mare numr de semnale care intervin n desfurarea ciclilor main. Pentru fiecare tip de ciclu exist cte o diagram de semnal, iar distribuia n timp a semnalelor este specific fiecrui tip de ciclu.

4.2. Moduri de adresare la microprocesoarele Intel


Programul care se execut se gsete memorat in segmentul de cod. Dup cum am vzut ntr-un capitol anterior, cnd se ncarc o instruciune din memorie adresa acestuia este furnizat de regitrii CS (ca adres de baz) i respectiv IP sau EIP (ca deplasament). n mod normal, coninutul registrului (E)IP este incrementat pe msur ce instruciunile se execut, astfel ca totdeauna s fie deja selectat instruciunea care 21

urmeaz. Instruciunile de salt necondiionat sau apel de procedur pot ns modifica valorile regitrilor (E)IP i eventual CS, modificndu-se astfel ordinea secvenial de execuie a instruciunilor. 4.2.1. Adresarea datelor Datele din memorie care formeaz operanzii instruciunilor pot fi adresate n mai multe moduri. Aceti operanzi pot fi coninui n regitri, n memorie, n instruciuni sau porturi de I/O. Operaiile care implic date numai din regitri sunt cele mai rapide, nefiind nevoie de utilizarea magistralei pentru acces la memorie. Regitrii folosii i modul de adresare (memorie sau registru) sunt codificai n interiorul instruciunii. n practic exist urmtoarele tipuri de adresare: 1. Adresare imediat n acest caz operandul apare chiar n instruciune. mov ax,5 mov eax,5 Aceast instruciune va iniializa registrul (E)AX cu valoarea 5. Evident, a doua instruciune poate fi folosit numai la microprocesoarele pe 32 bii, care conin registrul EAX. 2. Adresare direct Deplasament n interiorul segmentului curent (de obicei n interiorul segmentului de date) este furnizat de ctre instruciune. add bx,[200] Aceast instruciune adun la registrul (E)BX coninutul locaiei de la adresa efectiv 200 din segmentul de date. 3. Adresare indirect (prin regitri) La procesoarele pe 16 bii, offsetul este furnizat de unul dintre regitrii BX, SI sau DI, iar registrul implicit este bineneles DS. n cazul procesoarelor pe 32 bii, pentru offset poate fi folosit oricare registru general pe 32 bii. mov al,[bx] mov al,[ebx] Coninutul adresei de memorie de la adresa dat de (E)BX este transferat n AL. Observm c procesoarele pe 32 bii pot lucra i cu regitri de 16 sau 8 bii pentru date, dar nu i pentru adrese (care au ntotdeauna 32 bii). 4. Adresare bazat sau indexat Offsetul se obine adunnd la unul din regitrii de baz (BX sau BP) sau index (SI sau DI) un deplasament constant. Din nou, la procesoarele pe 32 bii se poate folosi suma a oricare 2 regitri generali. mov ax,[bx+5] mov ax,[ebx+5] La coninutul adresei din (E)BX se adun deplasamentul 5 i se obine offsetul operandului. Aceste tipuri de adresare se pot folosi cnd avem structuri de date de tip tablou, care pot fi localizate n diferite locuri din memorie. Constanta va conine offsetul la care ncepe structura de date, iar deplasamentul va furniza poziia elementelor n cadrul structurii. 5. Adresare bazat i indexat Este cea mai complex form de adresare, care combin variantele anterioare, permind adresarea cu 2 indeci (coninuturile regitrilor de baz i indeci la procesoarele pe 16 bii, oricare 2 regitri generali la procesoarele pe 32 bii). mov ax,[bx+si+7] mov eax,[ebx+ecx+9] 22

Procesoarele pe 32 bii permit i o form extins a ultimelor dou tipuri de adresare. Mai exact, registrul folosit pentru offset (pentru adresarea bazat sau indexat), respectiv unul din cei 2 regitri (pentru adresarea bazat i indexat), poate fi nmulit cu 2, 4, sau 8. n acest mod pot fi accesate mai uor tablourile cu elemente avnd dimensiunea de 2, 4, sau 8 octei (cum sunt tipurile standard). mov ax,[ebx*4+5] mov eax,[ebx+ecx*2+9] n cele artate anterior, de obicei registrul segment implicit este cel de date, presupunnd c se adreseaz operanzi de calcul obinuii. Excepia este dat de cazul cnd se folosete BP, atunci registrul de segment implicit fiind SS. Dac se dorete folosirea altui registru de segment dect cel implicit, n instruciune se va preciza explicit despre care registru de segment este vorba, cum ar fi n instruciunea urmtoare: mov bx,es:[bp+7] Dac nu precizam ES, implicit se folosea SS, deoarece registrul de baz este BP.

4.3. Stiva
O zon special de memorie este folosit de programe atunci cnd se execut subprograme sau se transmit parametrii de la un program la altul. Aceast zon poart numele de stiv (n englez stack), fiindc funcionarea ei este asemntoare cu cea a unei stive fizice de obiecte. Modul de funionare al stivei este numit LIFO (Last Input - First Output). ntr-o stiv, datele au voie s fie depuse numai prin partea superioar, astfel nct informaia depus ultima dat (Last Input) va fi disponibil, fiind deasupra stivei, i va putea fi scoas prima (First Output). Stiva este folosit implicit n mecanismul de apel al procedurilor.

Fig. 4.2. 23

Figura 4.2 ilustreaz un astfel de caz. Atunci cnd s-a ajuns cu pointerul de instruciuni (E)IP la adresa 1000, se execut un apel la procedura PROC care se gsete n memorie la adresa 3000. Atunci cnd se termin de executat procedura, trebuie s ne ntoarcem la prima instruciune de dup instruciunea de apel procedur (1001 n cazul nostru). Deci, adresa 1001 trebuie s fie memorat undeva pentru ca la revenirea din procedur s relum programul din acel loc. Stiva se folosete pentru a memora aceast adres de revenire. Microprocesorul este proiectat astfel nct, la execuia unui apel de procedur (CALL), s salveze automat n stiv adresa de memorie care conine instruciunea urmtoare din secven (de fapt coninutul registrului IP). Cnd se ntlnete n procedur instruciunea RETURN (revenire din procedur), tot automat microprocesorul ia din vrful stivei adresa memorat anterior i o ncarc n registrul (E)IP, executnd apoi instruciunea gsit la aceast adres (adic instruciunea de la adresa 1001). Putem defini stiva ca un concept abstract de structur de date, asupra crora opereaz instruciuni special proiectate n acest scop. O zon de stiv este caracterizat de o adres curent, numit adresa vrfului stivei, care la microprocesoarele Intel este adresat prin registrul (E)SP (stack pointer - indicator de stiv). Operaiile de baz cu stiva sunt PUSH (depune un cuvnt n stiv) i respectiv POP (extrage un cuvnt din stiv). La microprocesoarele pe 16 bii, cuvintele transferate n stiv sunt de 16 bii (2 octei), deci adresa curent a vrfului stivei se va incrementa sau decrementa cu 2 la fiecare operaie. Similar, la microprocesoarele pe 32 bii se poate lucra cu operanzi avnd fie 16, fie 32 bii, n al doilea caz vrful stivei fiind incrementat sau decrementat cu 4 la fiecare operaie. Figura 4.3 prezint modul de aciune al unei operaii PUSH.

Fig. 4.3. Se observ c stiva "crete" n jos pe msur ce se depun date n ea. La fel ca n cazul oricrui segment, mrimea sa maxim este de 64 Ko la microprocesoarele pe 16 bii i 4 Go la cele pe 32 bii. Pot exista mai multe stive definite la un moment dat, dar numai una este activ. Stiva este folosit explicit la salvri i refaceri de date, transmiterea parametrilor ctre proceduri etc. Implicit se folosete n cazul apelurilor de procedur. De asemenea, programele care permit definirea i folosirea funciilor recursive folosesc stiva pentru memorarea valorilor intermediare ale parametrilor i valorilor funciilor.

24

4.4. Procesoare CISC i RISC


Procesoarele Intel din seria x86 fac parte din categoria procesoarelor numite CISC (Complex Instruction Set Computer - calculator cu set complex de instruciuni). Acestea sunt procesoare la care setul de instruciuni cuprinde un numr mare de operaii implementate. Totodat, acestea pot lucra cu mai multe tipuri de operanzi; pentru unele asemenea tipuri, adresa operanzilor este calculat ntr-un timp relativ lung i abia dup aceea se poate executa instruciunea propriu-zis. S-a vzut ncepnd chiar de la calculatoarele mari (mainframe) ale anilor 1950 c execuia operaiilor simple cu operanzi n regitri consum mai puin timp de calcul. n plus, o dat cu dezvoltarea software-ului de aplicaii i prin studii statistice efectuate de companii ca IBM s-a demonstrat c instruciunile complexe din procesoarele CISC sunt rareori folosite, preferndu-se folosirea a ctorva instruciuni simple n locul uneia mai complexe. Astfel, 10% din setul de instruciuni al unui procesor CISC st la baza a peste 90% din totalul codului generat de un compilator ca PASCAL. Cercetrile s-au ndreptat ctre proiectarea unor procesoare cu instruciuni mai puine, cu muli regitri i memorie imediat (cache) n care s fie reinute datele temporare, toate acestea conducnd la o vitez mai mare. Astfel au aprut procesoarele RISC (Reduced Instruction Set Computer - calculator cu set redus de instruciuni). Acestea s-au dezvoltat imediat ce tehnologia a permis obinerea de memorie ieftin. Simplitatea setului de instruciuni, modul de adresare mai simplu care necesit un singur acces la memoria principal ntr-un singur impuls de ceas, precum i execuia instruciunilor n structuri de tip pipeline au permis proiectarea unor uniti de execuie superscalare, care permit execuia mai multor instruciuni simultan. Aceasta au dus la succesul structurilor de tip RISC, care s-au impus alturi de cele mai vechi de tip CISC. n ultimii 15 ani nu s-au mai proiectat noi structuri CISC. Datorit simplitii structurale, necesarul de siliciu este mai mic i astfel a aprut posibilitatea de integrare pe cip a unor memorii i uniti de execuie multiple. Toate acestea au fcut ca procesoarele RISC s fie mai performante dect cele de tip CISC. Procesoarele noi din seria x86 folosesc n structura lor tehnici RISC, pstrnd ns vechea structur CISC. Acest set de instruciuni complex face ca software-ul mai vechi s poat rula i pe procesoarele actuale. Procesoare reprezentative de tip RISC sunt SPARC, MIP i ALPHA, care ns nu au reuit s ating succesul familiei x86.

25

5. Sistemul de ntreruperi
Unul din marile avantaje ale unui calculator fa de orice alt main creat de om este capacitatea sa de a rspunde la un numr mare de sarcini imprevizibile. Cheia acestor posibiliti o constituie ceea ce numim ntreruperi. Cu ajutorul acestora, calculatorul poate s opreasc temporar o sarcin pe care o execut i s comute pe o alta, ca rspuns la ntreruperea intervenit (cum ar fi de exemplu apsarea unei taste sau primirea unor date pe place de reea). Acest mecanism face ca sistemul de calcul s fie foarte flexibil, permind rspunsul imediat la un eveniment extern, a crui tratare poate fi foarte urgent, prin ntreruperea sarcinii curente i reluarea acestei sarcini dup ce s-au rezolvat cerinele impuse de ntrerupere. Noiunea de ntrerupere presupune suspendarea programului n curs de execuie i transferul controlului ctre o anumit specializat, numit rutin de tratare a ntreruperii. Mecanismul dup care se face acest transfer este n esen de tip apel de procedur, ceea ce nseamn c se revine n programul ntrerupt, din locul n care acesta a rmas, dup ce s-a terminat rutina de tratare a ntreruperii.

5.1. ntreruperi hardware i software


Clasificarea ntreruperilor se poate face dup mai multe criterii. O posibil clasificare este dat n figura 5.1.

Fig. 5.1. ntreruperile software apar n urma execuiei de ctre microprocesor a unor instruciuni cum ar fi INT, DIV, IDIV, fiind deci cauzate de ctre software. ntreruperile hardware interne apar ca urmare a unor situaii speciale n care se poate afla procesorul (cum ar fi execuia pas cu pas n cazul depanrii programelor). ntreruperile hardware externe sunt provocate de semnale electrice, care n ultim instan sunt aplicate de ctre dispozitivele periferice pe intrrile INT i NMI ale microprocesorului. ntreruperile externe dezactivabile se aplic pe intrarea INT i sunt luate n considerare numai dac bistabilul IF (Interrupt Flag) din registrul indicatorilor de condiii are valoarea 1. ntreruperile externe nedezactivabile au loc la aplicarea unui semnal corespunztor pe intrarea NMI (Non Maskable Interrupt) i sunt luate n considerare ntotdeauna. Un exemplu pentru folosirea intrrii NMI este semnalizarea cderii tensiunii de alimentare. 5.1.1. ntreruperi hardware dezactivabile Aceste ntreruperi sunt controlate de unul (la PC original) sau mai multe circuite specializate (la AT i celelalte calculatoare), numite controlere de ntreruperi, de tipul Intel 8259. Acest circuit are menirea de a culege cereri de ntrerupere de la mai multe dispozitive, de a stabili o prioritate a cererilor (n cazul n care exist mai multe cereri 26

de ntrerupere simultane) i n final de a transmite un semnal de ntrerupere pe pinul INT al microprocesorului i un semnal de identificare al dispozitivului periferic care a fcut cererea. Figura 5.2 ilustreaz schema de ntreruperi a microprocesorului 80386 folosit n calculatoarele AT i urmtoarele. Observm modul de legare n cascad a controlerelor de ntreruperi. La microprocesoarele anterioare (8086, 8088) era prezent un singur circuit 8259.

Fig. 5.2. Dac la una din liniile IRQ0-IRQ15 (IRQ = Interrupt Request) se primete o cerere de ntrerupere de la un dispozitiv periferic (s-a apsat o tast, trebuie s se fac un ciclu de refresh al memoriei etc.), acest semnal este analizat de controlerul 8259 i n final acesta va genera o ntrerupere pe linia INT ctre microprocesor. Dac n microprocesor bistabilul IF are valoarea 1 (adic ntreruperile hardware externe sunt activate), microprocesorul va trimite napoi controlerului un semnal INTA (Interrupt Acknowlege - recunoatere ntrerupere), prin care l anun c ntreruperea este recunoscut i acceptat. n continuare, controlerul de ntrerupere va depune pe magistrala de date un octet special, numit octet type, care va identifica tipul (nivelul) ntreruperii. Controlerul de ntrerupere 8259 avnd 8 intrri pentru ntreruperi de la echipamente, va putea s trimit 8 valori diferite, fiecare indentificnd n mod unic una din cele 8 intrri. Se mai spune c acest controler poate furniza 8 vectori de ntrerupere, identificai prin octetul type, iar sistemul de ntreruperi la microprocesoarele Intel este un sistem vectorizat. Cum cu un octet (8 bii) se pot efectua 256 combinaii diferite, vor putea exista 256 valori diferite ale octetului type. Deci ntr-un sistem pot exista maximum 256 nivele de ntrerupere diferite. Pentru fiecare nivel (valoare a octetului type) se poate asocia o procedur (rutin sau subprogram) de deservire a ntreruperii respective. Deci putem avea maximum 256 proceduri. Adresele acestor rutine sunt trecute ntr-o aa-numit tabel a vectorilor de ntreruperi, care se afl n primii 1024 octei ai memoriei RAM (primul Ko). Datorit faptului c fiecare rutin de ntrerupere se poate afla n alt segment, pentru a identifica adresa unei rutine trebuie s-i furnizm adresa de segment (2 octei) i adresa offsetului (nc 2 octei), deci o adres va ocupa 4 octei. Cum sunt 256 ntreruperi 27

posibile, spaiul de memorie ocupat de tabel este 256 4 = 1024 = 1Ko. Se observ c modul n care sunt memorate adresele (cu 2 octei pentru offset) corespunde microprocesoarelor pe 16 bii, respectiv modului real al microprocesoarelor pe 32 bii. De altfel, orice microprocesor pe 32 bii intr n modul real la pornire (adic la punerea sub tensiune). Astfel, sistemul de ntreruperi funcioneaz n acelai mod indiferent de tipul procesorului. n figura 5.3 se d o reprezentare a modului n care este ocupat memoria sistemului cu tabela vectorilor de ntreruperi. Amplasarea se realizeaz n funcie de octetul type, care d nivelul de ntrerupere. Adrese Octet type 0-3 0 4-7 1 ... ... 1020-1023 255 Fig. 5.3. Am vzut c acest octet poate lua 256 valori diferite. Valoarea octetului type nmulit cu 4 va furniza adresa din memorie unde se gsete vectorul de ntrerupere (adresa rutinei de ntrerupere) pentru nivelul furnizat de octetul type. Recapitulnd, la apariia unei ntreruperi n microprocesor au loc urmtoarele aciuni: - se salveaz n stiv regitrii (E)FLAGS, CS i (E)IP, n aceast ordine - se terg bistabilii IF i TF (adic se blocheaz execuia altei ntreruperi n timpul execuiei programului pentru ntreruperea n curs, iar TF blocheaz execuia pas cu pas a rutinei de ntrerupere) - se furnizeaz microprocesorului un octet (8 bii n gama 0-255), numit i octet type, care identific nivelul asociat ntreruperii - se execut un salt la adresa de nceput a rutinei de tratare a ntreruperii (folosind tabela vectorilor de ntrerupere), de unde se ncepe execuia rutinei corespunztoare de tratare a ntreruperii Fiecare component a calculatorului care poate s aib nevoie de microprocesor la un moment dat are propriul su nivel de ntrerupere. Tastatura, ceasul intern, unitile de disc, imprimantele, placa de reea etc., toate acestea au fiecare un nivel de ntrerupere rezervat. La apsarea unei taste se genereaz ntreruperea de tastatur, la fiecare 55 milisecunde se genereaz ntreruperea de ceas, a crei rutin de tratare actualizeaz ceasul intern, discul trimite o ntrerupere cnd este terminat un transfer iar imprimanta cnd nu are hrtie, placa de reea cnd primete un pachet de date adresat ei .a.m.d. Deci observm c activitatea microprocesorului se desfoar ntr-o permanent posibilitate de a fi "ntrerupt" de altcineva, care are mai mare nevoie de microprocesor dect aplicaia ce ruleaz. Interesant este c ntreruperile nu au fcut parte din conceptul primelor calculatoare. La nceput calculatoarele au fost folosite fr acest mecanism. Astzi este greu de imaginat un calculator fr sistem de ntreruperi implementat n cadrul su hardware i software. Conceptul de ntrerupere s-a dovedit att de eficient i util, nct a fost adaptat la o mare varietate de alte necesiti ale calculatorului. Pe lng ntreruperile hardware, despre care tocmai am vorbit, exist i ntreruperi care sunt generate chiar n interiorul CPU, ca urmare a faptului c s-a ntmplat ceva ce nu are sens - de exemplu s-a

28

ncercat o mprire la zero. n acest caz se genereaz o ntrerupere intern, numit i excepie. 5.1.2. ntreruperi software Aceast categorie de ntreruperi nu apare pe neateptate, precum cele hardware descrise anterior. Ideea care st la baza ntreruperilor a fost extins astfel nct acestea (ntreruperile) s fie utilizate i de ctre programe, pentru a solicita servicii executate de alte programe din calculator. ntreruperile de acest tip se numesc ntreruperi software. Dup cum am vzut, atunci cnd se construiete un calculator exist un set de programe interne integrate ntr-o memorie ROM (Read Only Memory), care formeaz aa-numitul BIOS. Dac programele de aplicaii au nevoie de funcii oferite de BIOS, modul de apelare a acestora l constituie ntreruperile software. Serviciile BIOS sunt puse la dispoziia programului de aplicaie prin execuia unei instruciuni de ntrerupere software de tipul INT n, unde n reprezint nivelul de ntrerupere solicitat. ntreruperile software funcioneaz la fel ca i celelalte tipuri de ntrerupere, cu o singur diferen: ele nu sunt declanate de un eveniment neateptat sau aleatoriu, ci sunt produse intenionat de ctre program cu un anumit scop. Sistemele de operare folosesc de asemenea ntreruperi software pentru apelul unor funcii necesare derulrii programelor de aplicaie sub controlul su direct. Aceste funcii ale BIOS sau ale sistemului de operare, apelate prin intermediul ntreruperilor, sunt tratate de ctre procesor ca subprograme care, dup ce se termin, redau controlul programului apelant. Programul care face apel la o asemenea funcie nu are nevoie s cunoasc adresa de memorie a rutinei corespunztoare, ci este suficient s indice numrul ntreruperii alocate acelei funcii i eventual parametrii auxiliari, necesari funciei. Aceste ntreruperi sunt standardizate de ctre BIOS i respectiv de ctre sistemul de operare. Vom mai face cteva observaii asupra modului de funcionare a ntreruperilor ntr-un calculator. Ultima instruciune dintr-o rutin de ntreruperi este instruciunea IRET (Interrupt Return) care are rolul de a restaura n ordine invers ceea ce a fost salvat n stiv, adic (E)IP, CS i registrul (E)Flags, rednd controlul programului principal. Dac rutina de ntreruperi lucreaz cu regitrii procesorului i distruge valorile coninute n acestea, revine n grija programatorului ca aceste valori s fie salvate explicit n stiv, prin instruciuni de tip PUSH, la inceputul rutinei de tratare a ntreruperii, iar la sfrit, nainte de terminare, s fie refcui aceti regitri prin instruciuni POP corespunztoare. Astfel, programul care a fost ntrerupt i reia lucrul cu valorile care erau n regitrii procesorului la momentul ntreruperii sale. Dup cum am vzut, imediat ce s-a declanat o ntrerupere indicatorul IF este trecut pe 0, ceea ce nseamn c ntreruperile hard care pot surveni din acel moment sunt dezactivate. De aceea este indicat s se utilizeze ct mai repede posibil o instruciune de tip STI (Set Interrupt) care activeaz din nou sistemul de ntreruperi bineneles, dac programul rutinei de ntrerupere nu execut o poriune n care nu are voie s fie ntrerupt. Tabela vectorilor de ntreruperi, dup cum am vzut, este plasat n memoria RAM (deci cea n care se poate terge i nscrie alt valoare). Aceasta face ca adresele rezervate n tabel pentru desemnarea rutinelor de tratare a ntreruperilor s poat fi schimbate chiar de unele programe i eventual utilizatorii s-i scrie propriile programe pentru tratarea unor ntreruperi. Aceast poart de intrare n sistemul de operare prin intermediul ntreruperilor este folosit i de unele programe ruvoitoare cum ar fi viruii, caii troieni etc. De obicei aceste programe "fur" o ntrerupere, adic 29

i introduc n tabela de ntrerupere, n locul adresei normale de pn atunci, propria lor adres de nceput. La declanarea normal a ntreruperii respective se lanseaz acest program "pirat", care poate realiza diverse aciuni distructive - ceea ce poate avea un efect catastrofal asupra integritii datelor n calculator. Pe ct de puternic este sistemul de ntreruperi n activitatea unui pocesor, pe att de mare poate fi pericolul folosirii necorespunztoare a acestuia de ctre programe ru intenionate. Sistemele de operare mai noi (Windows, Linux, OS/2) limiteaz accesul la partea de hardware tocmai din aceast cauz. Programele de aplicaie nu mai pot accesa hardware-ul n mod direct, ci numai prin intremediul sistemului de operare, care blocheaz astfel un eventual apel ru intenionat, asigurnd astfel un mai mare grad de siguran.

30

6. Memoria
6.1. Tipuri de memorie
Dup cum am vzut la prezentarea arhitecturii von Neumann, memoria constituie unul din elementele de baz ale structurii unui sistem de calcul, rolul su fiind acela de a reine n primul rnd programul i datele care se prelucreaz. La nceput, calculatoarele dispuneau de puin memorie i era nevoie de mult inventivitate din partea programatorilor pentru ca aceasta s ajung pentru programe, care tindeau s devin tot mai lungi. Odat ce tehnologia a oferit posibilitatea ca memoria s poat fi obinut la un pre acceptabil, ea s-a diversificat ncontinuu, aprnd mai multe tipuri de memorie ntr-un calculator, fiecare din acestea avnd locul i rolul su bine stabilit. Tehnologic exist dou tipuri principale de memorie: - memorie RAM - memorie ROM A. Memoria RAM Numele acesteia provine de la denumirea ei n englez: Random Access Memory. Informaia care se gsete stocat n ea la diferite adrese (instruciuni sau date) poate fi citit sau nscris cu o nou valoare. Se spune c suport att operaii de citire (read), ct i operaii de scriere (write). Informaia elementar care se memoreaz este o informaie binar, putnd deci lua valoarea 0 sau 1, iar circuitul fizic elementar care poate memora aceast informaie se numete bistabil (are dou stri stabile: 0 sau 1). O prim form de implementare fizic este memoria RAM de tip static sau SRAM (Static RAM), numit astfel deoarece informaia odat nscris se pstreaz nealterat pn eventual la oprirea calculatorului, cnd se pierde. Bistabilii de tip SRAM sunt alctuii din doi tranzistori. Folosind o tehnologie diferit, s-a reuit ca pentru o celul de memorie s se foloseasc un singur tranzistor (deci densitatea de informaie memorat va fi dubl fa de cea anterioar), obinndu-se un tip de memorie numit dinamic sau DRAM (Dynamic RAM). Aceti tranzistori pot s-i piard sarcina electric pe care o nmagazineaz (deci informaia memorat n ultim instan) i atunci este nevoie de o operaie de remprosptare periodic (refresh), care se realizeaz cu ajutorul unor circuite concepute n acest scop (n general la fiecare 2 ms). Memoria de tip DRAM este considerabil mai lent dect cea SRAM, dar are o densitate de integrare mai mare (acelai numr de celule de memorie ocup mai puin spaiu) i este mai ieftin, motiv pentru care este folosit pe scar larg n sistemele de calcul. Blocurile de memorie RAM au n general o organizare matriceal. Dac la nceput aveau forma unor circuite integrate distincte, o dat cu evoluia tehnologiei aceste cipuri au fost plasate pe plcue de memorie cu 30, 72, 162... picioare, iar capacitatea lor a crescut n timp de la 256Ko, 1Mo, 2Mo, ... pn la 256Mo, 512Mo sau 1Go i chiar mai mult. B. Memoria ROM Aceast memorie nu suport dect citirea datelor din ea (ROM = Read Only Memory - memorie numai pentru citire). La fel ca i n cazul memoriei RAM, capacitatea ei a crescut o dat cu evoluia tehnologiei, de la circuite de 1Ko sau 2Ko la 64Ko, 128Ko etc. Iniial, informaia era nscris ntr-un modul ROM la fabricarea acestuia i nu mai putea fi schimbat. Avansul tehnologiei a permis realizarea unor circuite n care informaia se poate terge i rescrie (desigur, nu de ctre procesor, ci cu ajutorul unor 31

dispozitive dedicate, care nu se gsesc n calculator). Spunem c aceste circuite sunt de tip ROM programabil sau PROM. Cel mai des folosite sunt circuitele EPROM, la care scrierea informaiei se realizeaz pe cale electric. Dac tergerea se face cu lumin ultraviolet printr-o fereastr de cuar plasat deasupra cipului, avem circuite de tip UVEPROM. Dac tergerea se face electric, avem EEPROM. O variant mai nou a tehnologiei EEPROM este memoria de tip Flash, care este larg utilizat n diverse dispozitive de stocare. Un mare avantaj al acesteia din urm l reprezint posibilitatea de a terge sau nscrie doar o parte a informaiei memorate. Numrul de tergeri i renscrieri care pot fi aplicate asupra unui asemenea circuit, indiferent de tehnologia folosit, este limitat (n majoritatea cazurilor n jurul a 50-100). Excepie face memoria Flash, care permite pn la 100000 de tergeri i renscrieri. Oricum, limitarea nu este deranjant, deoarece memoria ROM se folosete n calculator pentru memorarea programelor BIOS. Operaia de actualizare a BIOSului poate fi necesar n unele situaii, dar foarte rar; dincolo de acest caz particular, este chiar de dorit ca BIOS-ul s nu poat fi modificat de programe.

6.2. Memoria video


Una din cele mai importante interfee dintre utilizator i calculator o constituie monitorul. Dac la nceput ecranul putea afia numai caractere i doar n mod monocrom, o dat cu dezvoltarea tehnologiei i sistemul video care asigur afiarea a trecut prin transformri majore, fiind capabil ca pe lng caractere s apar i grafice, eventual n culori. De altfel, majoritatea sistemelor de operare actuale fac din aceast interfa grafic modul principal de existen. Elementele principale ale sistemului de afiare sunt echipamentul de afiare (monitorul), adaptorul (controlerul) video i memoria video. Putem s definim ca memorie video zona de memorie accesat simultan de procesor i de controlerul video, care la ieire este capabil s produc o secven serial sincron de informaii capabile s comande un dispozitiv de tip CRT sau LCD. Aceast memorie poate fi vzut ntr-o prim aproximaie ca un registru uria de deplasare ce conine n el imaginea. Un punct de pe ecran se numete pixel. Acest punct poate avea anumite caracteristici (atribute) cum ar fi culoarea, strlucirea etc. Imaginea care trebuie afiat este stocat ntr-un ecran virtual din memoria video. Controlerul video genereaz o imagine micnd fascicolul de electroni de la stnga la dreapta i de sus n jos pe ecran, similar cu cititul unei pagini. La sfritul unei linii orizontale fascicolul este stins i mutat la nceputul liniei urmtoare, baleind linia, .a.m.d. Aceast baleiere poart numele de rastru. Prentru fiecare poziie a unui pixel din rastru, datele de afiat sunt citite din ecranul virtual aflat n memoria video. Aceste date sunt aplicate la intrrile unor circuite DAC (Digital-Analog Convertor), care le convertesc n nivele de tensiune pentru cele trei culori primare RGB (Red, Green, Blue) folosite n televiziunea color. Dup terminarea unui cadru, fascicolul se ntoarce n stnga sus i ncepe un nou cadru .a.m.d. Un astfel de tip de afiaj se mai numete i afiaj APA (All Points Addressable). Pentru ca imaginea s nu aib efect de plpire, care poate fi deranjant i chiar vtmtor pentru ochi, se impune ca frecvena de remprosptare a ecranului (numrul de cadre pe secund) s fie mai mare de 70 Hz. Au existat mai multe tipuri de controlere video:

32

- MDA (Monochrome Dispozitiv Adaptor), construit de IBM n 1981, o dat cu primul PC. Nu avea posibiliti grafice, putnd afia numai caractere ASCII standard. - Hercules, care a rezolvat problema mbinrii textului cu grafica pe acelai ecran. Placa monocrom HGC (Hercules Graphic Card) putea afia 720 348 puncte monocolor pe ecran. - CGA (Color Graphic Adaptor), produs de IBM, care putea ajunge la 640 200 puncte cu 16 culori. - EGA (Enhanced Graphic Adaptor), cu rezoluie de 640 350 puncte. - VGA (Video Graphic Array), cu 640 480 puncte i 256 culori. - SVGA (Super Video Graphic Array), cu 1024 768 puncte afiabile. Toate plcile dintr-o serie pot n general lucra cu programe scrise pentru seriile anterioare. Mai sus am prezentat caracteristicile modului de funcionare grafic al acestor plci, dar exist i un mod de funcionare caracter. n acest mod se consider c memoria conine coduri de caractere ASCII i nu puncte direct afiabile, iar un circuit special numit generator de caractere livreaz pixeli din codul ASCII citit. Vom mai reveni la placa de tip APA, insistnd puin i asupra afiajului de culoare al punctelor. Un monitor color poate afia peste 16 milioane de culori, dar adaptorul video limiteaz aceast cifr. Dac utilizm pentru fiecare pixel cte un octet pentru a memora caracteristicile sale de culoare, putem avea 256 (28) culori. Dac extindem memoria folosit pentru un pixel la 2 octei, atunci sunt posibile 65536 de culori, iar dac pentru fiecare culoare fundamental (RGB) se rezerv un octet (deci 3 octei pe pixel) depim 16 milioane. n terminologia calculatoarelor, modul de afiare cu 1 octet rezervat pentru un pixel se numete pseudo-color, cu 2 octei high color, iar cu 3 octei true color. Pentru ca din informaia numeric s se obin un nivel de tensiune analogic corespunztor, n adaptoarele video se utilizeaz convertoarele numeric-analogice (DAC). Acestea sunt de obicei pe 8 bii i cte unul pentru fiecare culoare fundamental. Deci am fi n stare s afim peste 16 milioane de culori, dar de obicei informaia de culoare pentru aplicaii grafice nepretenioase este cuprins pe un octet deci numai 256 culori la un moment dat din cele 16 milioane posibile. Cele 256 culori alese pentru afiare din domeniul de 16 milioane formeaz aa-numita palet de culori, iar conversia de la 8 bii la 24 bii se face n adaptorul video printr-o memorie numit CLUT (Color Look-Up Table - tabel de selecie a culorii). Valoarea pe 8 bii a octetului este considerat o adres n tabela CLUT, care va seleca cuvntul de 3 octei corespunztor ce va genera culoarea. Dac se dorete schimbarea paletei, se vor memora alte valori n tabela CLUT pentru aceeai adres. n final, trebuie s amintim c plcile grafice actuale pot avea o memorie video mai mare dect cea alocat n harta memoriei, dar numai o singur pagin se afieaz la un moment dat. Pagina afiat este selectat cu un registru intern. De asemenea, plcile cu accelerare video, care domin actualmente piaa, sunt folosite att pentru grafica n 2 dimensiuni (2D), ct i pentru cea n 3 dimensiuni (3D). Controlerele video au integrate uniti cu instruciuni grafice speciale pentru prelucrarea i sinteza imaginilor, n timp ce procesorului i revine numai sarcina de a apela aceste funcii integrate n controler. Ctigul de vitez este impresionant, deoarece aceste circuite specializate realizeaz prelucrrile grafice mult mai rapid dect o poate face procesorul; n plus, sunt eliminate ntrzierile legate de comunicarea ntre procesor i controlerul video. Plcile video pot folosi o parte din memoria sistemului sau pot fi dotate cu memorie proprie, care ajunge n unele cazuri pn la 256 Mo. Dac inem cont de faptul c sunt rare calculatoarele care au 1 Go de memorie principal, este evident ct 33

de mare este necesarul de memorie al unor aplicaii (n special jocuri). Plcile fr memorie proprie sunt mai ieftine, dar diferena de performan este mai mult dect semnificativ. Totui, este bine de reinut c nici mcar aceste cantiti impresionante de memorie proprie nu sunt suficiente pentru unele aplicaii, astfel nct pn i plcile cele mai avansate folosesc i o parte din memoria sistemului.

6.3. Memoria cache


Microprocesorul 80386 a fost primul care a depit viteza memoriei RAM. Cu alte cuvinte, dac pn atunci circuitele de memorie puteau servi cererile procesorului cu o vitez mai mare dect putea acesta s formuleze cererile de acces, ncepnd cu 80386 situaia s-a inversat: microprocesorul putea executa instruciunile mai rapid dect putea memoria s-i furnizeze datele ceute. Astfel, procesorul trebuia efectiv s atepte sosirea datelor din memorie, neputnd trece mai departe. Decalajul s-a adncit n timp, astfel nct un microprocesor din zilele noastre este de peste 10 ori mai rapid dect memoria. Urmarea imediat este o penalizare major de perfoman, deoarece procesorul nu-i poate folosi integral capacitatea de calcul i este chiar foarte departe de aceast situaie. ntr-adevr, un microprocesor care funcioneaz la nici o zecime din viteza sa nu este foarte util. Totui, lucrurile nu stau n ntregime astfel. Tehnologia actual permite realizarea unor circuite de memorie mai rapide, care pot face nc fa cerinelor impuse de procesoare. Reamintim c, n afar de circuitele DRAM, utilizate n sistemele de calcul, exist i memoriile de tip SRAM, care sunt mult mai rapide. De fapt, tehnologia utilizat la fabricarea circuitelor SRAM este n mare msur aceeai care se folosete i pentru procesoare. Din pcate, tehnologia SRAM are dou mari dezavantaje: o densitate de integrare redus (ceea ce nseamn circuite de dimensiuni mari) i un pre prea ridicat, care o face nerentabil. Dei circuitele SRAM nu pot fi folosite n locul celor DRAM din motivele artate, avem posibilitatea de a le utiliza pe scar mai mic, obinnd totui o cretere de performan notabil. Se pornete de la dou legi determinate empiric, dar a cror valabilitate este permanent confirmat de practic, i anume principiile (legile) localitii: - localitate temporal: dac o locaie de memorie este accesat la un moment dat, este probabil c va fi accesat din nou n viitorul apropiat - localitate spaial: dac la un moment dat este accesat o locaie de memorie, este probabil c n viitorul apropiat vor fi accesate locaiile din apropierea sa Facem observaia c principiile localitii se aplic att pentru accesul la date (o variabil este de obicei accesat de mai multe ori n instruciuni consecutive, tablourile sunt de obicei parcurse secvenial), ct i n ceea ce privete instruciunile executate (programele constnd n principal din bucle). S-a ajuns astfel la ideea de a reine coninutul ultimelor locaii accesate ntr-un circuit de memorie separat, foarte mic, numit memorie intermediar sau cache; atunci cnd se realizeaz un acces la memorie, mai nti se caut locaia respectiv n cache i abia apoi, dac este cazul, n memoria principal. Datorit dimensiunii sale reduse, este posibil ca memoria cache s fie de tip SRAM, fr a afecta n mod semnificativ preul total. n acest fel, viteza cache-ului este mult mai mare decat a memoriei principale. Se observ c microprocesorul i calculatorul pot funciona i n absena cacheului. Folosirea memoriei cache nu aduce nimic n plus din punct de vedere al funcionalitii, ci doar un spor de performan. 34

Pentru a da o exprimare cantitativ principiilor localitii, vom prezenta mai nti terminologia folosit. Atunci cnd microprocesorul face un acces la memorie, caut mai nti dac nu cumva adresa dorit se gsete n memoria cache. Dac gsete informaia, nu se mai face apel la memoria RAM i se trece mai departe. Spunem n acest caz c s-a realizat un "hit". Dac informaia nu exist n cache, se face un apel la memoria principal (am avut un rateu - "miss"). Introducem o mrime numit rata de succes a cache-ului (hit ratio), notat H. Aceasta exprim procentajul (din numrul total de accese la memorie efectuate n unitatea de timp) de cazuri n care informaia cutat a fost gsit n cache. Evident, valoarea H nu este o constant, ci se determin prin msurtori n cazuri practice i depinde de comportarea programelor care se execut. Similar se definete rata de insucces M (miss ratio); cele dou marimi se afl n relaia: M=1-H Notm cu Tc timpul de acces la cache (altfel spus, timpul total de acces n cazul cand valoarea cutat se afl n cache) i cu Tm timpul necesar pentru a accesa locaia cutat n cazul n care aceasta nu se afl n cache. Cu aceste notaii, timpul mediu de acces la memorie este: T = Tc H + Tm M Utilizarea cache-ului este eficient dac acest timp mediu este mai mic dect timpul de acces la memoria principal n cazul n care nu exist memorie cache (pe care l notm Tp). Trebuie observat c, n cazul n care locaia cutat nu se afl n cache, se fac n total doua accese: nti la cache (acces euat), apoi la memoria principal. Astfel, Tm este mai mare dect Tp. n aceste condiii, este posibil ca T > Tp, ceea ce ar nsemna ca de fapt cache-ul sa frneze accesul la memorie, n loc de a-l accelera. n practic ns acest risc nu exist. Deoarece n general Tc este mult mai mic dect Tp, Tm este doar puin mai mare dect Tp, iar H 90%, ctigul de vitez adus de cache este n general considerabil. Pentru exemplificare, considerm un sistem cu urmtoarele caracteristici: H = 90%, Tc = 2ns, Tm = 21 ns, Tp = 20 ns. Aplicnd formula de mai sus obinem: T = Tc H + Tm M = 2ns 90% + 21ns 10% = 1,8ns + 2,1ns = 3,9ns Tp / Tc 5,13 Timpul mediu de acces la memorie este deci de peste 5 ori mai mic dect n cazul n care nu ar fi existat cache n sistem. n realitate situaia este i mai favorabil deoarece, dac relaiile ntre diferiii timpi de acces sunt aproximativ aceleai ca n exemplul de mai sus, rata de succes a cache-ului ajunge adesea pn la 98% i chiar mai mult. S intrm puin n detaliile proiectrii unui cache. n primul rnd, atunci cnd o locaie din memoria principal este cerut de procesor i nu exist deja n cache, este adus. Dei procesorul nu are nevoie pe moment dect de locaia respectiv, n cache este adus un bloc de date de dimensiune mai mare (uzual 16, 32 sau 64 octei), format din locaii aflate la adrese consecutive n memoria principal, n jurul locaiei solicitate de procesor. Un asemenea bloc memorat n cache poart denumirea de linie de cache. Motivul pentru care se procedeaz astfel este evident: n acest mod se ine cont i de localitatea spaial, nu doar de cea temporal. n cache se pot afla simultan date care n memoria principal se gsesc la adrese complet diferite. Din acest motiv, este necesar ca n cache s fie reinute nu doar valorile locaiilor, ci i adresele la care acestea se afl n memoria principal. Acest aspect este esenial, deoarece cutarea datelor n cache nu se face ca ntr-o memorie obinuit, ci dup adresele ocupate n memoria principal. Modul n care sunt 35

memorate aceste adrese are o influen foarte puternic asupra vitezei de regsire a datelor cutate, deci a timpului de acces la cache. Strns legat de problema de mai sus este politica de nlocuire. Datorit capacitii incomparabil a cache-ului fa de memoria principal, n mod inevitabil se ajunge la ocuparea total a cache-ului. Atunci cnd un nou bloc de date trebuie adus n cache, va trebui deci eliminat un bloc deja existent. Alegerea blocului care va fi nlocuit este o problem dificil, deoarece trebuie evitat nlocuirea unui bloc de care ar putea fi nevoie n viitorul apropiat, altfel performana global este afectat. Exist n prezent trei tipuri principale de cache, difereniate prin metoda de memorare a adreselor din memoria principal: a. Cache cu adresare direct (direct mapped cache) n acest caz exist o relaie direct ntre adresa din memoria principal unde se afl o valoare i adresa din cache n care aceasta este memorat. Mai exact, biii cei mai puin semnificativi ai adresei din memoria principal formeaz adresa din cache. Ca un exemplu concret, considerm un sistem al crui procesor lucreaz cu adrese (n memoria principal) de 32 bii, iar cache-ul are o capacitate de 2048 linii, fiecare linie avnd 32 octei. Se observ c att numrul de linii, ct i dimensiunea unei linii de cache sunt puteri ale lui 2, ceea ce uureaz operaiile executate de ctre hardware. O adres de 32 bii din memoria principal este mprit n 3 componente: - cei mai semnificativi 16 bii formeaz o etichet, care este memorat ca atare n cache, mpreun cu datele propriu-zise aduse din memoria principal - urmtorii 11 bii indic adresa liniei din cache care memoreaz datele, din cele 2048 linii existente - ultimii 5 bii identific octetul n cadrul liniei de cache Se observ c o anumit adres din memoria principal poate fi memorat ntr-o singur adres din cache. Coninutul unei linii de cache este urmtorul: - un bit care indic dac linia conine date valide - cmpul etichet, descris mai sus - datele propriu-zise aduse din memoria principal Datorit modului de calcul, linia cu adresa N din cache poate memora date provenite de la orice adres din memoria principal ai crei bii de pe poziiile 5-15 formeaz valoarea N. Din acest motiv, pentru a putea determina n orice moment adresa corespunztoare din memoria principal, n linia respectiv este memorat i cmpul etichet. Cache-ul cu adresare direct permite un acces extrem de rapid, deoarece conversia ntre cele dou tipuri de adrese (din memoria principal i din cache) este foarte simpl i poate fi implementat direct n hardware. n schimb, algoritmul are dezavantajul lipsei de flexibilitate. Pentru exemplul de mai sus, dac un program acceseaz foarte des mai multe variabile aflate n memoria principal la adrese care difer printr-un multiplu de 65536 (avnd deci ultimii 16 bii identici), aceste variabile vor fi memorate la aceeai adres n cache; ca rezultat, se vor nregistra multe ratri n cache, ceea ce implic multe accese la memoria principal, deci scderea vitezei. b. Cache asociativ (fully associative cache) Se bazeaz pe utilizarea unor circuite hardware speciale, numite memorii asociative. Spre deosebire de memoria obinuit, care permite doar citirea sau scrierea unei valori ntr-o locaie identificat prin adresa sa, memoria asociativ permite n plus regsirea unei locaii dup coninutul su. Intr-un cache asociativ, fiecare linie reine, pe lng datele propriu-zise, adresa de nceput a acestora n memoria principal. Regsirea se va face pe baza acestei 36

adrese. ntruct memoriile asociative sunt relativ lente, accesul la cache este mai puin rapid dect n cazul cache-ului cu adresare direct. Pe de alt parte, avantajul este c o locaie din memoria principal poate fi memorat la orice adres din cache, eliminndu-se problemele de genul celei prezentate mai sus. c. Cache parial asociativ (set-associative cache) n ciuda numelui su, este mai apropiat ca structur de cache-ul cu adresare direct. Principalul dezavantaj al acestuia, aa cum s-a vzut, l constituie faptul c mai multe adrese din memoria principal concureaz pentru aceeai adres din cache. Soluia propus este urmtoarea: fiecare adres din cache conine mai multe linii (uzual 4, 8 sau 16), fiecare cu propriile date, propriul bit de validare i propriul cmp etichet. Astfel, un cache asociativ cu n ci (linii) permite memorarea simultan a n locaii din memoria principal care n cazul cache-ului cu adresare direct ar fi concurat pentru aceeai adres n cache. Apare o cretere a timpului de acces, deoarece att la scriere, ct i la citire trebuie verificate toate cele n ci. n schimb, utilizarea unui numr relativ redus de ci elimin practic total riscul apariiei conflictelor. Vom ridica acum o ultim problem. Pn acum s-a discutat n mod implicit mai mult de citirea datelor din memorie. La modificarea unei valori care se afl deja n cache trebuie s decidem n care din cele dou memorii (principal i cache) se va realiza scrierea. Avem de ales ntre dou politici posibile: - write-back - datele sunt scrise numai n cache; evident, ele vor ajunge i n memoria principal, dar numai la eliminarea lor din cache - write-through - datele sunt scrise att n memoria principal, ct i n cache Ambele politici sunt larg utilizate, fiecare avnd avantaje i dezavantaje. Politica write-back este mai rapid, n schimb pune probleme majore n sistemele multiprocesor, deoarece o modificare fcut n cache-ul unui procesor nu ar putea fi cunoscut de celelalte procesoare. n acest caz sunt necesare protocoale hardware complexe, prin care fiecare cache "ascult" n permanen magistrala comun, pentru a detecta modificrile fcute de celelalte procesoare. Analiznd funcionarea memoriei cache putem formula un principiu mai general: ntotdeauna cnd avem de accesat o surs de date cu dimensiuni mari i vitez de acces redus, putem obine un spor semnificativ de perfoman dac interpunem ntre sursa de date i "beneficiar" (cel care acceseaz datele) o form de stocare mai mic, dar mai rapid, care s rein ultimele date aduse de la surs. Principiul este ntr-adevr folosit pe scar larg i n alte situaii, nu doar n cazul procesorului. n continuare vom prezenta cteva asemenea exemple de materializare a conceptului de cache, implementate hardware sau software, luate din activitatea curent a unui utilizator de PC. Cache-ul de disc. Deoarece memoria principal este mult mai rapid dect discul, toate sistemele de operare folosesc o zon de memorie drept cache pentru operaiile cu sistemul de fiiere. Evident, principiile localitii opereaz la fel de frecvent i n cazul operaiilor cu discul. Exist o singur diferen notabil: deoarece scopul memorrii pe disc este n primul rnd de a face datele persistente, coninutul cache-ului este scris n mod periodic pe disc (n general la fiecare 30 de secunde). n acest fel se evit riscul pierderii informaiilor n cazul eventualelor cderi de tensiune sau blocri ale sistemului. DNS. Sistemul DNS (Domain Name System) de pe reeaua Internet este format dintr-o serie de cache-uri software, rspndite pe anumite servere, care rein corespondene ntre adrese literale i IP, pentru creterea vitezei de cutare a unor siteuri. 37

Browserele web. Clienii WWW, cum ar fi Internet Explorer, memoreaz ntrun cache software adresele vizitate i pe unde s-a trecut i paginile ncrcate, pentru ca la o nou ncercare de accesare a acestora s se ia informaia citit din cache n locul unui apel ctre serverul aflat la distan.

6.4. Memoria virtual


Existena mai multor programe simultan n memorie (pentru a permite execuia lor n paralel) provoac o cretere foarte mare a necesarului de memorie. Un prim pas n mbuntirea situaiei a fost fcut, aa cum s-a vzut deja, prin asigurarea independenei spaiilor de adrese virtuale ale programelor; n acest fel, n cazul procesoarelor actuale, fiecare program are la dispoziie adrese virtuale pe 32 de bii, ceea ce este permite un spaiu de adrese de 4 Go, suficient pentru aplicaiile actuale. n schimb este posibil ca memoria fizic s fie insuficient pentru necesarul tuturor programelor care se execut n paralel. Pentru a relaxa ct mai mult aceast limitare, se pornete de la urmtoarele constatri: - nu toate paginile de memorie sunt necesare la un moment dat - discul hard are n general o capacitate mult mai mare dect memoria fizic disponibil, deci poate fi utilizat pentru a reine temporar coninutul unora dintre paginile de memorie Discuia care urmeaza este valabil n egal msur att pentru segmentarea memoriei, ct i pentru paginare. Vom considera cazul paginrii, care este mult mai larg utilizat de sistemele de operare actuale. Modul de lucru ar fi deci urmtorul: n orice moment, n memoria fizic se afl o parte dintre paginile virtuale ale programelor aflate n execuie; paginile care nu au loc n memoria fizic sunt memorate pe disc ntr-un fiier special, numit fiier de paginare. Se utilizeaz tot mecanismul de paginare descris anterior, dar uor modificat: - Dac pagina din care face parte adresa cutat se gsete n memoria fizic (adic apare n tabelul de paginare), totul se desfoar n modul descris la prezentarea paginrii. - Dac pagina virtual respectiv nu se afl n memoria fizic, se caut pagina dorit n fiierul de paginare. Bineneles, acest fiier conine i informaiile necesare pentru a putea fi regsite paginile pe care le stocheaz. - Dac pagina nu se gsete nici n fiierul de paginare, atunci avem o eroare de adresare i accesul la memorie este oprit. - Dac pagina cutat se afl n fiierul de paginare, va fi adus n memoria fizic. n general memoria fizic este complet ocupat, de aceea o alt pagin aflat n memoria fizic va fi evacuat i memorat n fiierul de paginare. Abia cnd pagina dorit a fost adus n memoria fizic i tabelul de paginare al programului a fost modificat corespunztor, se poate realiza accesul propriu-zis. n acest mod se pot executa n paralel programe al cror necesar total depete memoria existent n sistem. Exist n continuare limitarea impus de dimensiunea discului, dar aceasta este mai puin sever. Totui, soluia nu are numai pri bune. Accesul la disc este incomparabil mai lent dect cel la memorie, astfel c pierderea de performan este de multe ori vizibil chiar pe calculatoarele cele mai puternice. Din acest motiv se caut s se reduc la minimum accesele la fiierul de paginare. n primul rand, o pagin virtual nu va fi scris pe disc dect dac nu mai este loc n memoria fizic. Altfel spus, acest

38

mecanism nu este utilizat dect dac este neaprat necesar, ceea ce i-a adus denumirea de paginare la cerere (demand paging). Ca o optimizare suplimentar, dac o pagin care trebuie evacuat din memorie nu a fost modificat de cnd a fost adus ultima dat n memorie, atunci copia sa din fiierul de paginare este identic, deci scrierea napoi pe disc nu mai este necesar. Evident, n acest caz este necesar un sprijin suplimentar din partea hardware-ului, astfel nct n tabelul de paginare, pentru fiecare pagin, s fie memorat i actualizat n permanen un bit suplimentar care s arate dac pagina a fost modificat de cnd se afl n memorie. Aceast optimizare este n mod special eficient pentru paginile de cod, deoarece instruciunile nu sunt n general modificate pe durata execuiei programelor. n al doilea rnd, atunci cnd o pagin trebuie adus n memoria fizic i nu mai este loc, pagina care va fi evacuat nu trebuie aleas la ntmplare. Algoritmul utilizat pentru a selecta pagina care va fi evacuat pe disc trebuie s respecte o cerin clar: s minimizeze riscul ca pagina aleas s fie accesat foarte curnd n viitor, deci s trebuiasc s fie rencrcat n memoria fizic. Deoarece nu se poate prevedea care pagini vor fi accesate n viitor, exist diveri algoritmi care ncearc s prezic aceasta pe baza comportrii programelor n trecutul apropiat.

6.5. Ierarhia de memorii


Dac analizm organizarea unui calculator, vedem c "inima" acestuia este o unitate de prelucrare a informaiilor (localizat n procesor), nconjurat de o serie de circuite al cror rol este, n ultim instan, de a memora informaiile n diverse forme. Aceste circuite de memorare sunt organizate pe mai multe nivele, ntr-o structur ierarhic, n funcie de distana fa de unitatea de prelucrare. Pe msur ce se deprteaz de procesor, nivelele de memorie au o capacitate mai mare, dar i o vitez mai mic. Putem distinge, n principiu, patru nivele ale ierarhiei de memorii: - Nivelul regitrilor procesorului. Acetia au, n mod evident, cel mai mic timp de acces, aflndu-se e acelai circuit cu unitatea de prelucrare. Este deci de preferat ca aplicaiile s utilizeze ct mai mult posibil regitrii, pentru a mri performana. Totui, numrul acestora este redus, astfel nct este practic imposibil ca o aplicaie s se poat executa exclusiv cu ajutorul regitrilor, fr a face deloc apel la nivelele urmtoare de memorare. Mai mult, codurile instruciunilor nu pot fi reinute n regitri. - Nivelul memoriei cache (numit i memorie imediat). Este singurul nivel care poate lipsi, fr ca aceasta s implice o schimbare n programele care ruleaz. Att lucrul cu regitrii procesorului, ct i accesarea nivelelor urmtoare necesit o form de gestiune prin software; nu este i cazul memoriei cache. La rndul su, memoria cache poate fi mprit pe nivele: poate exista un modul cache chiar n interiorul procesorului (numit cache L1), foarte mic i care funcioneaz practic la viteza procesorului, i un altul pe placa de baz (cache L2), fabricat tot n tehnologie SRAM, care este puin mai mare dect cache-ul L1 i puin mai lent. Unele implementri pot lucra chiar cu 3 nivele de cache, dintre care 2 sunt integrate n procesor. - Nivelul memoriei principale. Dei aici poate fi inclus i memoria ROM, n practic se are n vedere doar memoria RAM, deoarece prelucrarea informaiei nseamn implicit modificarea acesteia. - Nivelul memoriei secundare. Acest nivel are caracteristica de stocare persistent. Spre deosebire de nivelele anterioare, care sunt volatile, la acest nivel informaiile se pstreaz i dup ntreruperea alimentrii calculatorului. Tot la nivelul 39

memoriei secundare se gsete memoria virtual. Formele de implementare a memoriei secundare sunt: discul dur (cel mai folosit), discheta, mediile optice (CD, DVD), banda magnetic etc.

40

7. Sistemul I/O
Teoretic, un sistem format numai din procesor i memorie poate funciona singur la infinit. Memoria conine instruciunile programului de executat i datele care trebuie prelucrate, iar procesorul prelucreaz datele pe baza instruciunilor citite din memorie. Motivul pentru care nu va exista niciodat un calculator cu aceast structur minimal este simplu: activitile realizate de un asemenea sistem ar fi inutile, pentru c nimeni nu ar beneficia de rezultatele lor. Comunicarea cu exteriorul (i n principal cu utilizatorul) nu este deci o simpl opiune; n absena acesteia, existena calculatorului nu ar avea sens. Echipamentele care realizeaz, n diferite forme, aceast comuincare se numesc dispozitive de intrare/ieire (I/O) sau periferice. Diversitatea remarcabil a acestor dispozitive reflect de fapt varietatea sarcinilor pe care le poate ndeplini un calculator.

7.1. Porturi
Comunicarea ntre procesor i dispozitivele periferice ridic problema conectrii fizice. Perifericele fiind n numr att de mare i att de diferite ntre ele, este necesar s existe o standardizare a modului de conectare la procesor, implicit i a modului de comunicare. n practic, toate componentele calculatorului (procesorul, memoria, perifericele) sunt conectate ntre ele prin intermediul plcii de baz. De modul n care este realizat placa de baz depind tipurile de conexiune disponibile. Un periferic se conecteaz la placa de baz (i indirect la procesor) prin intermediul unor conectori specializai, numii porturi. Fiecare port respect un anumit standard de conectare. Exist mai multe asemenea standarde, plcile de baz putndu-le implementa pe toate sau numai o parte dintre ele. Principalele standarde de conectare sunt: Interfa paralel Permite transmiterea ctre periferic a cte unui octet de date ntr-o operaie de transfer. Semnalele definite de acest standard sunt de 3 tipuri: - liniile de date, care permit transmiterea octetului de date de la procesor ctre periferic - liniile de control, prin care procesorul transmite anumite comenzi ctre periferic, permind desfurarea n bune condiii a transferului - liniile de stare, prin care perifericul transmite procesorului informaii despre starea sa curent Modul de lucrul decsris mai sus, numit SPP (Standard Parallel Port), a fost conceput pentru comunicarea cu imprimantele. n momentul n care a aprut cerina conectrii i a altor tipuri de dispozitive, standardul nu a mai corespuns, n principal deoarece nu permitea transferul de date dect ntr-un singur sens. Ca urmare, a fost propus standardul EPP (Enhanced Parallel Port), care reprezint o extindere a SPP; n afar de creterea vitezei de transfer, principala sa mbuntire a fost, cum era de ateptat, posibilitatea ca i perifericul s transmit date ctre procesor. Standardul EPP permite astfel conectarea unei game largi de periferice, cum ar fi scanerele, discurile hard i unitile CD externe etc. Pentru perifericele mai performante a fost elaborat i un standard cu carcateristici superioare EPP, numit ECP (Extended Capabilities Port); totui, conceptual nu exist diferene majore ntre EPP i ECP. Astzi, imprimantele folosesc i ele facilitle oferite de modurile EPP i ECP, nemaifiind compatibile cu mai vechiul SPP. Interfaa serial 41

Spre deosebire de portul paralel, n cazul portului serial exist o singur linie de date, deci se poate transmite un singur bit la un moment dat. Din acest motiv i datorit modului mai sofisticat de gestiune a comunicaiei, viteza interfeei seriale este sensibil mai mic dect cea a interfeei paralele. n schimb, portul serial a fost proiectat de la nceput pentru comunicaii bidirecionale. Portul serial este folosit n general pentru conectarea unor periferice cum ar fi mouse-ul, modemul, precum i alte periferice relativ lente. n ultimii ani, tendina este de nlocuire a porturilor seriale cu standardul USB, care este mult mai flexibil i performant. USB Standardul USB folosete tot comunicaia serial, dar a fost proiectat s exploateze avantajele tehnologiei moderne. Dei iniial a fost destinat perifericelor lente, o dat cu apariia versiunii 2.0 a standardului viteza de transfer a crescut sensibil, depind cu mult performanele interfeelor serial i paralel. Practic, astzi nu exist periferice care s nu aib i variante cu conectare pe portul USB (de multe ori acesta este singurul standard acceptat). FireWire (IEEE 1394) Este o interfa destinat perifericelor de foarte mare vitez, pentru care performanele standardului nu sunt suficiente. Cel mai adesea este ntlnit la camere video digitale, care au de transferat volume mari de date ctre calculator. Interfaa FireWire nu este foarte rspndit, datorit preului mai mare i faptului c standardul USB ofer suficient performan pentru majoritatea perifericelor. ATA Este o interfa de tip paralel pentru conectarea discurilor hard i a unitilor optice (CD, DVD). Originea sa este standardul IDE, elaborat n anii '80. De-a lungul timpului caracteristicile sale au evoluat, rata de transfer crescnd spectaculos. n ultima vreme, dei majoritatea plcilor de baz nc mai sunt prevzute cu porturi ATA, pierde teren n faa standardului SATA. SATA Este un standard derivat din ATA (i destinat aceluiai tip de periferice), dar cu o interfa de tip serial. Rata de transfer a interfeei este mai mare dect cea a standardului ATA i va continua s creasc n versiunile viitoare. n plus, standardul ATA ofer facilitatea numit bus mastering, prin care controlerul de disc s comande magistrala, degrevnd procesorul de sarcina gestiunii transferului i mrind astfel performanele. SCSI Este cel mai vechi standard pentru discurile hard (dei permite n principiu conectarea oricrui tip de periferic). Versiunile sale succesive au dus la creterea continu a performanei, fie prin mrirea limii de band (volumul de date care poate fi transferat printr-o singur operaie), fie prin creterea frecvenei de lucru. Controlerele SCSI au folosit dintotdeauna bus mastering, iar tehnologia permite obinerea unor rate de transfer net superioare standardelor concurente. ns, datorit preului mare, interfaa SCSI nu este destinat calculatoarelor personale, ci staiilor de lucru i serverelor. PCI Reprezint un standard de conectare destinat plcilor de extensie. A nlocuit standardul mai vechi ISA, care a fost abandonat de productori dup dou decenii de utilizare. Frecvena de operare a crescut n timp, ajungnd pn la 133 MHz, la fel i limea de band. Principalele tipuri de periferice care utilizeaz interfaa PCI sunt plcile video, plcile de sunet, modemurile interne etc. n ultima vreme, performanele 42

oferite de PCI ncep s fie considerate insuficiente, mai ales pentru plcile grafice. Un standard derivat din PCI, numit PCI Express, a nceput s fie folosit de plcile de baz de vrf, dar nlocuirea complet a interfeei PCI nu se ntrevede n viitorul apropiat. AGP Este un standard conceput special pentru deservirea plcilor grafice. Deoarece ntr-un calculator exist mai multe sloturi PCI, perifericele care ocup aceste sloturi trebuie s mpart ntre ele aceeai cale de comunicare cu procesorul. Plcile grafice fiind mari consumatoare de resurse, interfaa AGP le ofer o cale de comunicare privilegiat cu procesorul, pe care nu o mpart cu alte periferice. Dei, la fel ca n cezul celorlalte standarde, performanele au crescut cu fieare versiune, AGP este depit de noul standard PCI Express, astfel nct viitorul su este nesigur. PCMCIA A fost conceput special pentru sistemele portabile. Datorit miniaturizrii, ntrun laptop nu exist suficient spaiu pentru a dispune de sloturi PCI i, n general, nici o form de a conecta periferice interne. Standardul PCMCIA permite conectarea de periferice externe de orice tip, avnd dimensiuni mici. Ca atare, sloturile PCMCIA reprezint practic singura posibilitate de a extinde funcionalitatea unui laptop.

43

8. Multimedia
Fenomenul de "multimedia PC" poate s aib mai multe interpretri. Aici vom conveni s numim prin acest termen un set de tehnologii care fac posibil existena aplicaiilor de tip multimedia, cum ar fi: grafic PC, imagini i animaie 2D i 3D, video, redare direct sau a imaginilor nregistrate i comprimate, precum i aplicaiile legate de sunet (nregistrarea i redarea sunetului, precum i sinteza vorbirii). Alturi de acestea trebuie s amintim i o serie de tehnologii suport pentru multimedia, cum ar fi CD-ROM i DVD, reele locale i tehnologii de comprimare/decomprimare a datelor. Acest domeniu s-a dezvoltat o dat cu creterea performanelor microprocesoarelor, care sunt acum capabile de a prelucra n timp real fluxul de date dintr-o astfel de aplicaie. Vom cuta s explicm aceste noiuni fcnd apel la cteva aplicaii multimedia importante, principiile enunate putnd fi extinse i la celelalte, netrecute n revist aici. Unele din cele mai folosite aplicaii multimedia folosite pe calculator sunt jocurile care solicit animaie, grafic 3D n timp real, redare video, intrri de date din partea juctorilor i redarea de sunet nregistrat sau sintetizat. Educaia i instruirea sunt alte aplicaii multimedia care pot solicita aceleai mijloace ca i jocurile. Prezentrile fcute pe calculator i gsesc utilizarea din ce n ce mai mult n ultimul timp. Videoconferinele folosesc metode cuprinse n acest capitol. Simulrile, realitatea virtual i comanda calculatorului cu ajutorul vocii completeaz multitudinea de aplicaii legate de aceast tehnologie.

8.1. Tehnologia multimedia audio


8.1.1. Elemente de baz ale sunetului digital Dup cum se tie, sunetul reprezint o oscilaie care variaz continuu n amplitudine (ceea ce determin nivelul sonor) i/sau n frecven (ceea ce va determina tonul sunetului). n sistemele analogice, acest sunet este amplificat n circuite electronice, cu tuburi sau tranzistoare, rezultnd o tensiune sau un curent variabil, care n final se aplic unui difuzor cu rolul de a-l transforma din nou ntr-un sunet perceput de ureche. Transformrile pe care le suferea sunetul de-a lungul acestui lan erau cele aplicate acestor oscilaii electrice. Dac dorim ca sunetul s fie prelucrat ntr-un calculator, acesta va trebui s transforme mai nti informaia analogic (variaia unei tensiuni) n informaie digital (iruri de numere care reprezint variaia tensiunii iniiale). Aceast transformare se face cu ajutorul unui dispozitiv numit convertor analogic-digital (ADC). Dup ce sunetul se va prezenta ca o secven digital, calculatorul va putea s prelucreze aceast informaie dup algoritmul cerut, iar rezultatul obinut va fi semnalul digital care va fi reconvertit n sunet de un convertor digital-analogic (DAC). Dispozitivul numit de noi ADC va transforma semnalul analogic n semnal digital prin eantionarea valorii semnalului cu o anumit frecven. Totul apare ca i cum s-ar realiza nite instantanee digitale ("fotografii") ale semnalului analogic cu o frecven foarte mare. Cu ct vor fi mai multe eantioane ntr-o secund i acestea vor fi mai precis aproximate, cu att semnalul digital rezultat va reproduce mai fidel semnalul analogic original.

44

Urechea uman poate sesiza semnale audio n domeniul 20-20000kHz. O teorem din teoria analizei semnalelor arat c frecvena de eantionare trebuie s fie mai mare dect dublul frecvenei cele mai mari (deci 40000 Hz n cazul nostru).O alt problem este pe ci bii reprezentm dimensiunea eantionului. Dac folosim un octet, adic 256 valori (28 = 256 - cum am folosit la placa grafic pentru a reprezenta maximum 256 culori pe ecran), vom avea maximum 256 nivele de amplitudine. La redare se va pierde mult din sunetul original. Dac pentru reprezentarea amplitudinii unui eantion vom folosi 2 octei (216 = 65536 valori), acest numr mare de nivele va aproxima cu fidelitate acceptabil semnalul original. Avnd aceste noiuni despre semnalul digital, putem spune c, de exemplu, semnalul telefonic digital are o frecven de eantionare de 8000 Hz i folosete un octet (8 bii) pentru reprezentarea amplitudinii lui, urmrindu-se n primul rnd nelegerea mesajului i nu chestiuni legate de fidelitatea sa. La nregistrarea digital a sunetului pe CD se folosesc o frecven de 44100 Hz i 2 octei (16 bii) pentru fiecare eantion. Dac se nregistreaz semnal stereo, se vor folosi nc 2 octei pentru al doilea canal. Cunoscnd aceste date se poate calcula rata de date pe minut pentru fiecare semnal digital prezentat. Dac la semnalul telefonic se ajunge la aproximaia 1 Mo/minut, la cel pentru CD se obin peste 10 Mo/minut. Dac funciile blocurilor ADC i DAC sunt combinate ntr-un singur circuit, acesta se va numi codec (Codare-DECodare). Pe lng funcia de conversie, aceste circuite mai pot i comprima sau decomprima date audio digitale. n concluzie, sunetele n calculator sunt reprezentate n final ca fiiere i deci se bucur de toate proprietile i posibilitile de prelucrare specifice acestora: comprimare, decomprimare, prelucrare numeric etc. Dac extindem noiunile la domeniul video, unde informaia vizual apare tot ca un semnal electric oscilant, tot aceea ce s-a spus la sunet rmne valabil, dar cu alte rate de eantionare 8.1.2. Prelucrri ale sunetului digital. Plci de sunet Odat ce sunetul a fost convertit n form digital, el poate fi prelucrat pentru a se crea tot felul de efecte ca reverberaii, ecouri, distorsiuni controlate etc. Calculele necesare acestora sunt fcute n procesoare specializate numite DSP (Digital Signal Processor). Tot acestea pot asigura i sinteza sunetului sau a muzicii, precum i funciile de comprimare i decomprimare. Cercetrile ntreprinse n domeniul sintezei sunetelor au permis generarea acestora din nsumarea mai multor semnale sinusoidale cu frecvene diferite. Un capitol special din matematic se ocup cu analiza armonic a semnalelor; folosind rezultatele acestor analize s-a reuit sinteza sunetului prin modularea n frecven (FM). Toate acestea au dus la apariia plcilor de sunet, care reprezint un element important al posibilitilor multimedia legate de sunet. Placa de sunet a devenit o prezen curent n calculatoarele actuale. Prima plac de sunet a fost creat de firma Creative Labs i poart denumirea de Sound Blaster. Aceste plci se cupleaz normal pe un conector de extensie al magistralei ISA sau PCI i cuprind unele blocuri deja amintite. n plus, observm un bloc mixer, care poate accepta intrri analogice de la, microfon, linie audio sau difuzor PC, pe care le poate controla individual. De asemenea, blocul MIDI (Musical Instrument Digital Interface) primete comenzi pentru selectarea unor instrumente sau efecte audio.

45

8.2. Prelucrri digitale video


Dup cum am amintit deja, prelucrarea semnalelor video preluate de camerele digitale sau semnalul TV urmeaz aceleai principii ca i cele de sunet, dar la o alt scar. Semnalul video transformat n semnal digital poate fi comprimat pentru a ocupa un spaiu mai mic la stocare sau n procesul de transmitere. La redare se desfoar procesele inverse. n plus, aici apar unele elemente noi. Astfel, s-au imaginat metode specifice de comprimare, care in cont de faptul c n realitate coninutul imaginii de la un cadru la altul se schimb foarte puin, transmindu-se eventual numai schimbrile survenite i pstrnd ca baz un cadru iniial. Este ceea ce fac metodele cunoscute sub numele de MPEG. Pentru imagini statice sunt cunoscute fiierele cu extensia *.JPG, ce provin din folosirea metodei JPEG de comprimare a imaginilor. Sateliii de comunicaii destinai transmisiilor TV digitale folosesc de asmenea aceste tehnici proprii semnalelor digitale.

8.3. Consideraii finale


n general, tehnologia multimedia lucreaz cu un volum mare de date. Ca mediu ideal de stocare de la nceput n acest domeniu s-a impus CD-ROM, cu capacitatea sa de peste 600 Mo. n urrma evoluiei tehnologiilor n domeniul stocrii optice a informaiilor, au aprut standarde noi cum ar fi videodiscurile (DVD) cu capaciti de 4,7 Go sau 9,4 Go, dar standardele nc nu sunt unitare i acceptate de toi productorii. De asemenea, s-a pus problema transmisiilor digitale pentru utilizatorii obinuii. Acestea se reaizeaz n mod curent cu ajutorul echipamentelor numite modem-uri (Modulation-DEModulation), care folosesc din plin tehnica digital pentru transmiterea datelor. Datorit faptului c reelele telefonice curente (numite i reele comutate) limiteaz viteza de transfer a datelor la valori care nu fac posibile transmisii multimedia de calitate, atenia s-a ndreptat spre echipamentele cu fibre optice, satelii sau reele locale rapide, care permit un flux crescut de date. Cei care dispun o legtur direct la Internet se pot bucura de existena unor posturi de radio digitale care transmit n reeaua Internet. Se sper c viitorul va aparine aa-numitelor autostrzi multimedia, pe care vor fi vehiculate filme sau muzic la cerere.

46

9. Sistemul de operare
Pn acum am discutat numai despre implementarea fizic a componentelor unui calculator. Desigur, buna funcionare a acestora este indispensabil. Programele nu pot rula pe un calculator ale crui componente nu funcioneaz corect. n acest sens, prima problem care poate aprea este posibilitatea defectrii unor circuite, caz n care acestea trebuiesc reparate sau (cel mai adesea) nlocuite. Totui, nu este suficient ca toate componentele s fie n stare fizic bun pentru ca sistemul de calcul n ansamblul su s funcioneze corespunztor. Trebuie inut cont i de faptul c fiecare dispozitiv are propriile specificaii, propriile sarcini pe care le poate ndeplini, propriul mod de comunicare cu alte dispozitive .a.m.d. Deoarece calculatorul este format dintr-un numr mare de circuite, n general complexe i foarte diferite ntre ele, este necesar s existe un control unic asupra tuturor acestora, pentru a le face s conlucreze n modul dorit de utilizator. Din punct de vedere hardware, toate componentele calculatorului sunt controlate de ctre procesor. La rndul su, procesorul realizeaz aciunile specificate prin programele pe care le execut. Dar, tocmai datorit structurii extrem de complicate a unui calculator, sarcina gestionrii tuturor componentelor sale nu poate fi lsat n seama programelor de aplicaii. Pe de o parte, programatorul ar trebui s se concentreze mai mult asupra acestei gestiuni i mai puin asupra problemei propriuzise pe care i propune s-o rezolve. Pe de alt parte, programele ar deveni astfel mult mai voluminoase i, implicit, mai expuse la apariia erorilor. Ca urmare, s-a ajuns la introducerea unui program intermediar ntre nivelul hardware i programele de aplicaii, care s asigure buna funcionare a sistemului de calcul. Acest program, numit sistem de operare, deine controlul asupra resurselor calculatorului i intervine atunci cnd apar situaii nedorite sau neprevzute. Ca o prim consecin, dei reprezint o component software, sistemul de operare este strns legat de hardware, deoarece se ocup n principal de gestiunea acestuia. Putem privi din mai multe unghiuri funciile pe care trebuie s le ndeplineasc sistemul de operare. Din punct de vedere al utilizatorului, rolul su este exclusiv de a asigura rularea n bune condiii a programelor de aplicaii. Se desprinde de aici ideea c sistemul de operare nu este un scop n sine, ci un mijloc pentru atingerea altor scopuri. Pentru programatorul de aplicaii, sistemul de operare este n principal un furnizor de servicii la care poate apela pentru rezolvarea problemelor ntlnite. Practic, sistemul de operare pune la dispoziia aplicaiilor un set de funcii predefinite, care fie sunt dificil de scris (i de aceea nu este eficient s fie implementate de fiecare program n parte), fie pur i simplu nu pot fi lsate n seama aplicaiilor din motive de siguran n funcionare a sistemului n ansamblul su. Aplicaiile pot folosi aceste servicii, conformndu-se regulilor impuse de sistemul de operare. Pentru a ndeplini aceste cerine, proiectantul unui sistem de operare trebuie s aib n vedere urmtoarele obiective: - s asigure buna funcionare a componentelor hardware, precum i comunicarea i cooperarea ntre acestea - s previn interferenele nedorite ntre diferitele programe de aplicaii, inclusiv s mpiedice, n msura posibilului, propagarea efectelor erorilor unui program asupra celorlalte programe

47

9.2. Clasificarea sistemelor de operare


Putem clasifica sistemele de operare dup mai multe criterii. Primul dintre acestea reiese din discuia anterioar; dup numrul de programe care pot rula simultan, sistemele de operare pot fi: - single-tasking - permit rularea uni singur program la un moment dat; singurul sistem din aceast clas care mai este folosit astzi (dar din ce n ce mai puin) este DOS - multitasking - Unix, Windows 9x/NT, OS/2 etc. O alt clasificare se refer la numrul de utilizatori care pot lucra simultan pe un calculator: - sisteme monoutilizator (single-user) - sisteme multiutilizator (multiuser) n mod evident, un sistem multiuser este i multitasking. Cele mai cunoscute sisteme de operare multiuser sunt cele din familia Unix, n timp ce sistemele Windows nu au aceast facilitate. Trebuie reinut c a da posibilitatea mai multor utilizatori s lucreze simultan pe acelai calculator nu este att o problema de hardware, ct mai ales una specific sistemului de operare.

9.3. Nucleul sistemului de operare


Datorit multitudinii i diversitii sarcinilor pe care le are de ndeplinit, sistemul de operare nu poate fi conceput sub forma unui program unitar. Practic, sistemul de operare const dintr-o mulime de secvene de program, fiecare ndeplinind o anumit sarcin. Un argument n favoarea unei asemenea abordri, n afara considerentelor de fiabilitate i uurin n dezvoltare, l constituie evoluia continu a tehnologiilor utilizate, n special n ceea ce privete dispozitivele periferice. Dac la un moment dat se pune problema nlocuirii ntr-un calculator a unui asemenea periferic (de exemplu mouse) cu unul mai nou, va trebui schimbat secvena de program care se ocup de gestionarea sa. n cazul n care sistemul de operare ar fi un program unic, acesta ar trebui nlocuit n intregime, ceea ce este inacceptabil n practic. Asupra acestui aspect vom reveni ulterior. Pe de alt parte, exist o serie de operaiuni fundamentale, care trebuie realizate ntotdeauna n acelai mod, independent de particularitile hardware-ului. Prile de program care ndeplinesc aceste sarcini fundamentale formeaz nucleul sistemului de operare, care dirijeaz i controleaz funcionarea sistemului de calcul n ansamblul su. n continuare, noiunile de sistem de operare i de nucleu al sistemului de operare se vor confunda n mare msur, deoarece celelalte componente ale sistemului de operare sunt utilizate de ctre nucleu pentru a-i ndeplini sarcinile. Nu exist ntotdeauna o delimitare clar ntre nucleu i celelalte componente. Concepiile diverilor productori de sisteme de operare difer n ceea ce privete locul unora dintre funcii - n nucleu sau n afara sa. Totui, practic toate sistemele de operare existente includ n nucleu urmtoarele componente: - gestiunea proceselor - gestiunea memoriei - sistemele de fiiere Majoritatea activitilor pe care le desfoar sistemul de operare nu pot fi realizate exclusiv prin software. Este necesar un sprijin, uneori substanial, din partea

48

componentelor hardware i n special din partea procesorului. Natura exact a acestui sprijin va fi discutat n continuare. Principala facilitate oferit de ctre procesor o constituie sistemul de ntreruperi, care a fost deja prezentat. n general, programele aflate n execuie ruleaz n majoritatea timpului fr a ine cont de existena sistemului de operare; totui, acesta din urm trebuie s poat interveni n anumite situaii bine definite, cum ar fi: - o cerere de ntrerupere venit din partea unui dispozitiv periferic, care poate s nu aib legatur cu programul aflat n execuie, dar care trebuie tratat imediat (altfel datele se pot pierde) - o operaie executat de procesor care s-a terminat anormal (de exemplu o operaie de mprire la 0), ceea ce indic ncercarea unui program de a efectua o aciune nepermis - o cerere explicit adresat de programul de aplicaie, privind efectuarea unui anumit serviciu de ctre sistemul de operare, serviciu pe care aplicaia nu-l poate efectua singur Sistemul de operare va lsa deci orice program s se execute fr interferene pn la apariia uneia din situaiile descrise mai sus, dar n acest moment trebuie s preia imediat controlul. Soluia este, aa cum am precizat deja, de natur hardware i este reprezentat de sistemul de ntreruperi. Concret, acesta ofer tocmai posibilitatea ntreruperii execuiei programului curent n anumite condiii. Fiecreia din situaiile prezentate mai sus i corespunde unul tipurile de ntrerupere cunoscute: - ntreruperi hardware (externe) - excepii (ntreruperi hardware interne) - ntreruperi software Dac ntreruperile hardware externe, care se ocup de comunicarea cu dispozitivele periferice, au fost descrise pe larg, utilitatea excepiilor rmne s fie explicat. Pentru aceasta ne vom ntoarce la mecanismele de gestiune a memoriei ale microprocesoarelor pe 32 bii, prezentate anterior. Reamintim c, indiferent dac se utilizeaz segmentarea sau paginarea, pentru fiecare acces la memorie al unui program, procesorul realizeaz o serie de verificri, cu scopul de a determina dac accesul este corect sau nu. n cazul n care este detectat o eroare (lipsa drepturilor de acces la segment, depirea dimensiunii segmentului, acces la o pagin virtual inexistent etc.), am artat c ncercarea de acces la memorie este oprit. n realitate, procesorul nu are prea multe posibiliti de a opri execuia unui program. Ceea ce se ntmpl n practic este c unitatea de management a memoriei (MMU), care a detectat eroarea, genereaz o excepie, iar rutina de tratare care se apeleaz prin mecanismul de ntreruperi va trebui s rezolve problema. Exist mai multe moduri n care rutina de tratare poate restabili situaia; n majoritatea cazurilor ns, un program care a realizat un acces ilegal la memorie este terminat forat, deoarece acest tip de eroare este considerat foarte grav. Subliniem c ntreruperea generat n acest caz este ntr-adevr de tip excepie, deoarece MMU este o parte component a procesorului. Excepiile sunt larg utilizate de ctre sistemul de operare, deoarece multe erori sunt detectate direct de ctre procesor. Evident, rutinele care trateaz situaiile generatoare de ntreruperi fac parte din sistemul de operare, care poate astfel rezolva problemele aprute. 9.3.1. Apeluri sistem Una din sursele ntreruperilor, prezentate mai sus, o constituie solicitrile formulate n mod explicit de programele de aplicaii ctre sistemul de operare, pentru efectuarea anumitor servicii. De ce este ns necesar ca aceste servicii s fie 49

implementate de ctre sistemul de operare i nu pot fi lsate n seama programelor? n primul rnd, unele operaii uzuale (afiarea, cutarea pe disc etc.) se desfoar ntotdeauna n acelai mod; deci, n loc de a scrie practic aceeai rutin n fiecare program, este mai economic de a o scrie o singur dat ca parte a sistemului de operare, astfel ca toate aplicaiile s o poat utiliza. De altfel, apelul ctre un asemenea serviciu oferit de sistem nu se deosebete prea mult de apelul ctre o procedur sau funcie din acelai program. Pe de alt parte, o serie de aciuni, n special accesele la dispozitivele periferice, prezint riscuri considerabile pentru ntregul sistem de calcul n cazul n care nu sunt realizate corect. Nu este deci convenabil de a permite programelor de aplicaii s realizeze singure aciunile din aceast categorie; se prefer ca activitile de acest tip s fie ndeplinite numai prin intermediul unor rutine incluse n sistemul de operare. Pentru a pune n practic o asemenea abordare, trebuie s se poat interzice pur i simplu realizarea anumitor operaii de ctre programele de aplicaii. Din nou este necesar un suport hardware. Practic toate procesoarele existente astzi pot funciona n dou moduri distincte: - modul utilizator (user mode), n care exist anumite restricii pentru procesor, n principal nu se pot executa instruciunile de acces la periferice (ncercarea de a executa o asemenea instruciune duce la generarea unei excepii) - modul supervizor sau nucleu (kernel mode), n care procesorul nu are nici o limitare (Facem observaia c, n cazul microprocesoarelor Intel, acest mprire este valabil doar cnd procesorul se afl n modul protejat. Modul real, destinat pstrrii compatibilitii cu aplicaiile mai vechi, nu beneficiaz de facilitile hardware necesare pentru discuia de fa.) n mod uzual, programele de aplicaii se execut n mod utilizator, iar sistemul de operare ruleaz n mod nucleu. Se asigur astfel controlul sistemului de operare asupra operaiilor critice. Dei aplicaiile pierd din performan prin limitrile impuse de modul utilizator, creterea stabilitii i siguranei n funcionare justific din plin aceast abordare. n acest moment putem studia ce se ntmpl atunci cnd un program cere sistemului de operare furnizarea unui anumit serviciu. O asemenea cerere poart numele de apel sistem (system call) i const din urmtorii pai: - programul, care ruleaz n modul utilizator al procesorului, depune parametrii apelului sistem pe care l solicit ntr-o anumit zon de memorie; practic, mecanismul este similar apelurilor de proceduri - se genereaz o ntrerupere software, care trece procesorul n modul nucleu - se identific serviciul cerut i se apeleaz rutina de tratare corespunztoare - rutina respectiv preia parametrii apelului din zona n care au fost depui, i verifica i, dac nu sunt erori, realizeaz aciunea cerut; n caz contrar, apelul eueaz - la terminarea rutinei, rezultatele obinute sunt la rndul lor depuse ntr-o zon de memorie cunoscut i accesibil programului de aplicaie - procesorul revine n modul utilizator i se reia execuia programului din punctul n care a fost ntrerupt (utiliznd informaiile memorate n acest scop la apariia ntreruperii); programul poate prelua rezultatele apelului din zona n care au fost depuse Se poate observa c execuia unui apel sistem este mare consumatoare de timp. Din fericire, puterea de calcul a procesoarelor moderne este suficient de mare nct s reduc n limite acceptabile pierderea de performan datorat apelurilor sistem, iar

50

creterea fiabilitii sistemului de calcul n ansamblul su reprezint un ctig mult mai important.

51

Anexa A. Reprezentarea datelor n sistemele de calcul


A.1. Reprezentri numerice
Am vzut anterior c numerele sunt reprezentate n calculator sub forma unor iruri de bii (corespunztori unor cifre n baza 2). n cele ce urmeaz vom prezenta n detaliu modurile de reprezentare a informaiei folosite n sistemele de calcul. A.1.2. Scrierea poziional Scrierea poziional a reprezentat la apariia sa un mare pas nainte n matematic. Ca o exemplificare a acestei afirmaii, putem considera adunarea a dou numere naturale oarecare. Dac numerele sunt reprezentate n scriere roman (care nu este poziional), se observ imediat c operaia este foarte dificil de realizat. n schimb, adunarea acelorai numere reprezentate n baza 10 (care este o scriere poziional) este banal. Acest exemplu simplu arat marele avantaj al scrierii poziionale, i anume c permite descrierea algoritmic a operaiilor aritmetice, ceea ce o face indispensabil pentru sistemele de calcul. Un concept fundamental n scrierea poziional l constituie baza de numeraie. Spunem c lucrm n baza de numeraie d, care este un numr natural supraunitar, dac avem la dispoziie d simboluri (cifre), avnd asociate respectiv valorile 0, 1, ..., d-1. Un numr este reprezentat ntr-o baz oarecare d ca un ir de cifre, fiecare poziie i din ir avnd ataat un factor implicit egal cu di. Concret, un numr natural N va avea i 1 ca reprezentare n baza d irul de cifre an-1an-2...a1a0, ai{0,1,...,d-1}, =0, n , cu
i proprietatea c N = ai d . Se demonstreaz c fiecare numr are o reprezentare i =0 n 1

unic pentru o baz de numeraie dat. S lum ca exemplu numrul 309. (De fapt, corect ar fi fost s spunem "numrul care are reprezentarea 309 n baza 10", deoarece i atunci cnd scriem un numr, de fapt folosim o reprezentare a sa. Cum ns un numr este o abstraciune, iar reprezentarea n baza 10 este cea folosit dintotdeauna de oameni pentru a desemna numerele, vom folosi n continuare aceeai convenie). Reprezentarea sa n baza 10 este evident, deoarece 309 = 3 102 + 0 101 + 9 100. S considerm acum reprezentarea aceluiai numr n baza 2. Deoarece 309 = 1 28 + 0 27 + 0 26 + 1 25 + 1 24 + 0 23 + 1 22 + 0 21 + 1 20, reprezentarea sa n baza 2 este 100110101. Pentru a specifica baza de numeraie n care este scris o reprezentare, se folosete o notaie ca n exemplul de mai jos: 309(10) = 100110101(2) Deoarece baza 2 este folosit de calculatoare, iar baza 10 este preferat de oameni, conversia (n ambele sensuri) ntre aceste dou baze este adesea necesar. O reprezentare n baza 2 este uor de convertit n baza 10, pur i simplu prin aplicarea
i formulei N (10 ) = ai 2 , unde ai sunt biii care formeaz reprezentarea n baza 2. i =0 n 1

De exemplu, 1101001(2) = 1 26 + 1 25 + 0 24 + 1 23 + 0 22 + 0 21 + 1 20 = 105(10). Mai dificil este conversia n sens invers, care se realizeaz dup urmtorul algoritm: Se mparte numrul la 2 i se reine restul. Ctul se mparte la rndul su la 2, iar procesul de repet pn cnd se obine ctul 0. Reprezentarea n baza 2 este irul resturilor obinute, luate n ordine invers.

52

Pentru exemplificare considerm din nou numrul 309. Aplicnd algoritmul de mai sus, avem (pe coloana din dreapta se gsete irul resturilor):

Dac se inverseaz irul resturilor se obine 100110101, adic exact reprezentarea calculat mai sus. S considerm acum cazul concret al utilizrii scrierii poziionale n sistemele de calcul. Reamintim c ntr-un calculator operanzii au dimensiuni standardizate, mai precis octei sau multipli de octet. O consecin imediat este finitudinea reprezentrii; cu alte cuvinte, nu putem reprezenta n calculator numere orict de mari, deoarece numrul de bii disponibil pentru reprezentri este finit. n aceste condiii, este important s determinm domeniul reprezentabil cu ajutorul operanzilor disponibili, altfel spus, intervalul n care se nscriu numerele cu care putem lucra. n mod evident, numrul minim reprezentabil este ntotdeauna 0, indiferent de dimensiunea operanzilor. De asemenea, domeniul numerelor reprezentabile nu prezint "goluri", ci formeaz un interval: fiind date dou numere naturale x i y care pot fi reprezentate, orice numr natural aflat ntre x i y va putea fi la rndul su reprezentat. Mai rmne deci s determinm valoarea maxim a domeniului, valoarea care depinde de numrul de bii alocat unei reprezentri. Pentru operanzi de 8 bii, valoarea maxim care poate fi reprezentat este 1 27 + 1 26 + 1 25 + 1 24 + 1 23 + 1 22 + 1 21 + 1 20 = 255. Mai general, dac operanzii au n bii, valoarea maxim care poate fi reprezentat este 1 2n-1 + 1 2n-2 + ... + 1 21 + 1 20 = 2n-1. Domeniul reprezentabil pe n bii, folosind scrierea poziional, este deci 0 2n-1. Revenind la exemplul de mai sus, observmc numrul 309 nu poate fi reprezentat pe 8 bii, n timp ce pe 16 bii are reprezentarea 0000000100110101 (valorile de 0 de la stnga fiind, bineneles, nesemnificative). A.1.3. Reprezentri cu semn Scrierea poziional nu rezolv toate problemele legate de reprezentarea numerelor n calculator. De exemplu, dac dorim s lucrm cu numere ntregi, deci cu semn, scrierea poziional singur nu mai este suficient. Motivul este foarte simplu: n acest caz, pe lng cifrele bazei de numeraie mai este nevoie i de un simbol suplimentar (semnul); deoarece biii nu au dect dou valori posibile, asociate cifrelor bazei 2, nu avem la dispoziie nici un alt simbol. Este deci necesar s se defineasc o nou reprezentare care, folosind n continuare iruri de bii, s permit lucrul cu numere cu semn. n acelai timp, dorim s pstrm avantajele scrierii poziionale, motiv pentru care vom ncerca s derivm noua reprezentare din scrierea poziional. n primul rnd, deoarece nu avem la dispoziie un simbol suplimentar, pentru reprezentarea semnului va fi folosit unul dintre bii, care nu va mai avea semnificaia obinuit unei cifre din scrierea poziional. Concret, bitul cel mai semnificativ (cel cu 53

indicele n-1) va indica semnul numrului i va fi numit bit de semn. Prin convenie, valoarea 1 a bitului de semn indic un numr negativ, iar valoarea 0 un numr pozitiv. Desigur, s-ar fi putut alege i convenia invers; motivul pentru care se prefer forma aleas are ns avantajul c, n cazul numerelor pozitive, reprezentarea este aceeai ca n cazul scrierii poziionale (bitul de semn fiind n acest caz un 0 nesemnificativ). Cea mai natural idee pentru reprezentarea numerelor cu semn este ca bitul cel mai semnificativ s indice exclusiv semnul, iar ceilali bii s reprezinte modulul numrului n scriere poziional. Formal, reprezentarea unui numr ntreg N este irul
a de bii an-1an-2...a1a0, cu proprietatea c N = ( 1)
n 1

a
i =0

n 2

2i .

Dei intuitiv, varianta de mai sus, numit reprezentare modul-semn, are unele dezavantaje. Pe de o parte, reprezentarea modul-semn a unui numr este unic, dar cu excepia numrului 0: se observ imediat c n acest caz, dac biii care formeaz modulul au toi valoarea 0, n schimb bitul de semn poate fi att 0, ct i 1. Desigur, aceast redundan poate crea proleme, n special la compararea numerelor. Mai important, adunarea numerelor reprezentate cu modul i semn nu mai urmeaz algoritmul clasic, specific scrierii poziionale. Dac pentru numere cu acelai semn situaia rmne neschimbat, n cazul numerelor cu semne diferite apar probleme. Considerm ca exemplu numerele 3 i -5. Reprezentrile modul-semn, cu n=8, ale acestor numere sunt respectiv 00000011 i 10000101. Dac adunm reprezentrile dup algoritmul clasic obinem:

Rezultatul corespunde valorii -8, ceea ce este evident incorect. Desigur, se poate gsi un algoritm mai complex, care s realizeze adunarea n mod corect, dar s-ar pierde din performan, claritate i simplitate. Problema este cu att mai serioas cu ct adunarea st la baza celoralte operaii aritmetice (scdere, nmulire, mprire), deci algoritmul prin care este implementat va influena i implementrile acestor operaii. O variant propus pentru rezolvarea acestei deficiene este urmtoarea: - numerele pozitive se reprezint n continuare la fel ca n scrierea poziional, cu bitul de semn avnd valoarea 0 - pentru un numr negativ se pornete de la reprezentarea modulului su, apoi fiecare bit este complementat (0 se nlocuiete cu 1 i reciproc), inclusiv bitul de semn Se obine astfel reprezentarea numit n complement fa de 1. Nu vom insista asupra acestei reprezentri, care are nc unele puncte slabe. Vom meniona doar c ea constituie un pas nainte, iar algoritmul de adunare n acest caz este apropiat de cel clasic. n final ajungem la soluia care este folosit n sistemele de calcul actuale, numit reprezentare n complement fa de 2, care preia ideile valoroase de la variantele anterioare. Formal, reprezentarea n complement fa de 2 a unui numr ntreg N este irul de bii an-1an-2...a1a0, cu proprietatea c:

n2 i pentru an 1 = 0 ( N 0) ai 2 i=0 N= n2 2n 1 + ai 2i pentru an 1 = 1 ( N < 0) i=0


54

Dei este mai complicat dect predecesoarele sale, reprezentarea n complement fa de 2 elimin dezavantajele acestora. Astfel, numrul 0 are o reprezentare unic (toi biii cu valoarea 0), iar adunarea se face dup acelai algoritm ca la scrierea poziional, indiferent de semnul operanzilor. Ultima proprietate a fost ndeplinit prin faptul c, pentru orice numr x, dac adunm dup algoritmul clasic reprezentrile numerelor x i -x, obinem ntotdeauna 0. Pentru exemplificare, considerm din nou numerele 3 i -5 i n=8. Reprezentarea n cod complementar fa de 2 a numrului 3 este tot 00000011 (fiind pozitiv, este la fel ca la scrierea poziional), n schimb pentru numrul -5 obinem 11111011. Adunm cele dou reprezentri dup algoritmul clasic i obinem:

Rezultatul este reprezentarea numrului -2, deci suma a fost calculat corect. Un aspect interesant, nu lipsit de important practic, este modul de obinere al reprezentrii numrului -x pornind de la reprezentarea numrului x. Algoritmul este urmtorul: - se parcurge irul de bii de la dreapta la stnga - ct timp biii au valoarea 0, sunt lsai nemodificai - primul bit ntlnit cu valoarea 1 este de asemenea lsat nemodificat - dup acest prim bit cu valoarea 1, toi biii care urmeaz (indiferent de valoarea lor) sunt inversai Algoritmul funcioneaz la fel, indiferent de semnul lui x. De exemplu, pentru numrul -5, folosit mai sus, pornim de la reprezentarea numrului 5, care este evident 00000101. Deoarece nu avem nici un bit cu valoarea 0 la extremitatea dreapt, primul bit este singurul nemodificat; toi ceilali bii sunt inversai, deci se obine 11111011. Este uor de verificat faptul c, pornind de la reprezentarea lui -5, se obine n acelai mod reprezentarea numrului 5. Revenim la problema domeniului reprezentabil pe un numr finit de bii. Reamintim c, n cazul scrierii poziionale, intervalul numerelor reprezentabile pe n bii este 0 2n-1, constnd deci din 2n valori diferite consecutive. Dac folosim reprezentarea n complement fa de 2 (sau oricare alta), intervalul nu poate crete n dimensiune, din simplul motiv c pe n bii se pot reprezenta maximum 2n valori diferite (sunt posibile 2n configuraii diferite ale irului de bii). Astfel, intervalul valorilor reprezentabile este deplasat, incluznd att numere negative, ct i numere pozitive. Dac analizm reprezentarea n complement fa de 2, observm c numrul cel mai mic reprezentabil pe n bii corespunde irului 100...00, avnd deci valoarea -2n-1. n acelai timp, cel mai mare numr reprezentabil corespunde irului de bii 011...11, avnd valoarea 2n-1-1. Rezumnd, dac folosim operanzi pe n bii i reprezentarea n complement fa de 2, putem lucra cu numere n intervalul -2 n-1 2n1 -1. De exemplu, pentru n=8 (operanzi pe un octet), putem lucra cu numere cuprinse ntre -128 i 127. A.1.4. Reprezentri zecimale n mod evident, majoritatea aplicaiilor implic efectuarea de calcule cu numere reale. Pentru aceste aplicaii, reprezentrile discutate pn acum, a cror aplicabilitate este restrns la numerele naturale sau cel mult ntregi, nu mai sunt suficiente. n continuare vom aborda reprezentarea numerelor cu zecimale. ncepem prin a face o observaie important. Datorit caracterului finit al oricrei reprezentri, nu vom putea lucra cu adevrat cu numere reale, ci doar cu 55

numere raionale (reamintim c numerele iraionale necesit un numr infinit de zecimale, indiferent de baza de numeraie folosit); mai mult, nu vom avea la dispoziie nici mcar toate numerele raionale dintr-un anumit interval, ci doar o parte dintre acestea. Vom vedea de altfel c una dintre caracteristicile importante ale acestor reprezentri este distana dintre dou numere reprezentabile succesive (care n cazul numerelor ntregi este, desigur, 1). Totui, n practic vom numi "reale" numerele reprezentate n acest mod. Ideea de pornire este una natural: din numrul total de bii disponibil pentru o reprezentare, unii vor fi folosii pentru partea ntreag, iar restul pentru partea zecimal. ntlnim astfel aceeai problem ca i la reprezentarea numerelor cu semn: avem nevoie de un simbol suplimentar (virgula), pe lng cele pentru cifre, simbol de care ns nu dispunem. Rezolvarea este totui diferit, aa cum vom vedea n continuare. ntruct toate reprezentrile se bazeaz, n ultim instan, pe scrierea poziional, relum problema conversiei ntre bazele 2 i 10, de data aceasta pentru numere zecimale. Din nou, conversia din baza 2 n baza 10 este imediat. Fie de exemplu numrul 1010010,1011(2). La fel ca n cazul numerelor naturale, avem: 1010010,1011(2) = 1 26 + 0 25 + 1 24 + 0 23 + 0 22 + 1 21 + 0 20 + 1 2-1 + 0 2-2 + 1 2-3 + 1 2-4 = 82,6875(10) La conversia din baza 10 n baza 2, partea ntreag i partea zecimal trebuie calculate separat. Algoritmul pentru calculul prii ntregi a fost deja prezentat. Pentru partea zecimal se procedeaz astfel: Se nmulete partea zecimal cu 2 i se reine cifra de la partea ntreag (nu poate fi dect o singur cifr semnificativ, cu valoarea 0 sau 1). Noua parte zecimal se nmulete la rndul su cu 2, iar procesul se repet pn cnd partea zecimal devine 0. irul cifrelor obinute la partea ntreag din fiecare nmulire formeaz rezultatul cutat. De exemplu, fie numrul 309,3125(10). Partea ntreag, aa cum s-a vzut deja, se scrie n baza 2 sub forma 100110101. Aplicnd algoritmul prezentat mai sus pentru partea zecimal, obinem (n stnga este partea ntreag, iar n dreapta partea zecimal):

irul cifrelor obinute la partea ntreag este 0101, deci 0,3125(10) = 0,0101(2). Ca urmare, 309,3125(10) = 100110101,0101(2). O problem care apare n acest caz este posibilitatea ca unui numr finit de zecimale n baza 10 s-i corespund un numr infinit de zecimale n baza 2 (invers nu este posibil). ntr-un asemenea caz este evident imposibil s obinem o reprezentare exact a numrului. Soluia este s calculm attea zecimale n baza 2 cte ncap n reprezentare, obinnd astfel cea mai bun aproximare pe care o putem memora. De exemplu, fie numrul 0,3(10). Vom aplica din nou algoritmul de mai sus:

56

Este uor de observat c partea zecimal nu va ajunge niciodat la valoarea 0, deci numrul de cifre n baza 2 necesar pentru reprezentare este infinit. Dac ne propunem s reprezentm numrul cu 4 bii la partea zecimal, vom obine aproximarea 0,0100(2); dac folosim 6 bii, obinem 0,010011(2) etc. Exist dou forme diferite de reprezentare a numerelor zecimale, care vor fi prezentate n continuare. A.1.5. Reprezentri n virgul fix O prim soluie este ca separarea ntre partea ntreag i partea zecimal a reprezentrii s se fac ntotdeauna la fel. Cu alte cuvinte, vom avea ntotdeauna n bii pentru partea ntreag i m bii pentru partea zecimal, valorile pentru n i m rmnnd n permanen constante. Desigur, numrul de bii alocat unei reprezentri este n+m. Aceast abordare poart denumirea de reprezentare n virgul fix, deoarece poziia virgulei n cadrul numrului nu se modific. Principala consecin este c virgula nu mai trebuie reprezentat n mod explicit, deoarece poziia sa, fiind mereu aceeai, este oricum cunoscut. Ca urmare, dispare necesitatea unui simbol suplimentar pentru virgul, deci reprezentarea pe iruri de bii este posibil. Este uor de vzut c reprezentarea n virgul fix poate fi considerat o generalizare a reprezentrilor pentru numere ntregi, discutate anterior. n practic se pornete de la reprezentarea n complement fa de 2, care este cea mai complet, i se decide ca un numr de bii s fie rezervai prii ntregi. Astfel, reprezentarea unui numr N pe n+m bii este irul de bii an-1an-2...a1a0a-1a-2...a-m, cu proprietatea:

n 2 i pentru an 1 = 0 ( N 0) ai 2 i = m N= n 2 2n 1 + ai 2i pentru an 1 = 1 ( N < 0) i=m


Pentru a determina intervalul numerelor reprezentabile n virgul fix pe n+m bii, ne folosim de faptul c toate proprietile reprezentrii n complement fa de 2 rmn valabile. Relund raionamentul de mai sus, cel mai mic numr reprezentabil corespunde irului 100...00, avnd tot valoarea -2n-1. Pe de alt parte, cel mai mare numr reprezentabil corespunde irului de bii 011...11, care acum are valoarea 2n-1-2m . Intervalul numerelor reprezentabile n virgul fix pe n+m bii este deci [ -2n-1 , 2n-12-m ]. Reamintim faptul c nu este vorba cu adevrat de un interval n sensul matematic al termenului, ci doar de o parte dintre numerele raionale din acel interval. Un alt aspect important, aa cum s-a vzut mai sus, este distana dintre dou numere reprezentabile succesive. n acest caz, trecerea de la un numr reprezentabil la urmtorul (cel imediat superior) se face ntotdeauna prin adunarea reprezentrii 00...001, care corespunde numrului 2-m (cel mai mic numr strict pozitiv care poate fi

57

reprezentat). n concluzie, distana (numit uneori i pas) dintre dou numere reprezentabile succesive este constant i are valoarea 2-m. A.1.6. Reprezentri n virgul mobil Reprezentarea n virgul fix are dezavantajul lipsei de flexibilitate. ntr-adevr, odat fixate valorile pentru n i m, s-au stabilit n mod definitiv att ordinul de mrime al numerelor reprezentabile (dat de n), ct i precizia reprezentrii (dat de numrul de zecimale, adic m). Totui, pentru aceeai dimensiune total a unui operand, putem prefera, de exemplu, ca n unele cazuri s lucrm cu numere mai mici, dar cu o precizie mai bun; aceasta s-ar putea realiza scznd n i crescnd m, astfel nct suma lor s rmn aceeai. Din pcate, reprezentarea n virgul fix nu permite asemenea adaptri, deoarece valorile n i m nu pot fi modificate. Reprezentarea n virgul mobil vine s corecteze acest neajuns. Ideea de pornire provine din calculul tiinific, unde se folosete notaia cu exponent. Mai concret, un numr ca 243,59 poate fi scris sub forma 2,4359 102. Observm c n scrierea tiinific intervin trei elemente: - mantisa (n cazul de fa 2,4359), care poate fi privit ca fiind "corpul" numrului - baza de numeraie (10) - exponentul (2) la care este ridicat baza de numeraie Putem deci reprezenta numrul ca o triplet (mantis, baz, exponent). n practic ns, baza de numeraie este mereu aceeai, astfel nct pentru reprezentarea numrului sunt suficiente mantisa i exponentul. Evident, pentru aceeai baz de numeraie pot exista mai multe perechi mantisexponent care s reprezinte acelai numr. De exemplu, numrul 243,59 poate fi scris i sub forma 24,359 101. De fapt, se folosete ntodeauna perechea n care mantisa are exact o cifr semnificativ nainte de virgul; se spune n acest caz c mantisa este normalizat. Avantajul acestei notaii este c nu mai apar probleme privind numrul de bii alocat prii ntregi i respectiv prii zecimale a numrului. Orice variaie n ce privete ordinul de mrime al numrului sau precizia sa se rezolv exclusiv prin ajustarea exponentului. Structura general a unei reprezentri n virgul mobil este urmtoarea (figura A.1): - Bitul cel mai semnificativ indic semnul numrului, dup convenia deja cunoscut (1 - negativ, 0 - pozitiv). Urmtoarele cmpuri determin modulul numrului. - Urmtorii bii rein exponentul ntr-o form modificat, numit caracteristic. - Restul de bii formeaz mantisa.

Fig. A.1. Pentru simplitate, n continuare vom nota bitul de semn cu S, exponentul cu E, caracteristica cu C, iar mantisa cu M. Deoarece numrul poate fi supraunitar sau subunitar, rezult c exponentul poate fi pozitiv sau negativ. Ca atare, pentru exponentului trebuie folosit o reprezentare cu semn (separat de bitul de semn al numrului). Totui, reprezentarea n 58

complement fa de 2, care pare a fi prima alegere, are un dezavantaj: comparaia ntre numere este relativ greoaie, deoarece se realizeaz n mod diferit n funcie de semnele celor dou numere. Dei n general aceasta nu constituie o problem, n lucrul cu numere n virgul mobil, comparaia ntre exponeni este o operaie executat foarte des. Din acest motiv s-a apelat la o reprezentare mai rar folosit, numit reprezentare n exces. Concret, dac avem n bii pentru exponent, atunci exponentul poate lua valori ntre -2n-1 + 1 i 2n-1. Apoi, din exponent se obine caracteristica prin formula C = E + (2n-1 - 1), unde 2n-1 - 1 este o constant numit exces. Se observ imediat c ntodeauna C 0, deci pentru caracteristic se poate folosi scrierea poziional, ceea ce permite implementarea uoar a operaiei de comparare. n privina mantisei, reamintim c aceasta trebuie s fie normalizat, adic s aib exact o cifr semnificativ la partea ntreag. n baza 2, singura cifr semnificativ este 1, deci mantisa este de forma 1,...; deoarece partea ntreag a mantisei este ntotdeauna la fel, ea nu mai trebuie memorat. Ca urmare, cmpul M va memora numai biii corespunztori prii zecimale a mantisei. Exist dou implementri practice ale reprezentrii n virgul mobil, ambele bazate pe structura prezentat mai sus, definite n standardul IEEE 754: a) Reprezentarea n simpl precizie, care ocup 32 bii (4 octei), repartizai astfel: - bitul de semn - 8 bii pentru caracteristic - 23 bii pentru mantis b) Reprezentarea n dubl precizie, care ocup 64 bii (8 octei): - bitul de semn - 12 bii pentru caracteristic - 51 bii pentru mantis Cele dou variante sunt similare, diferind doar prin numrul de bii alocai diferitelor componente. Pentru a nelege mai bine toate aceste elemente, vom considera numrul 2157,375(10) i vom vedea care sunt paii care trebuie parcuri pentru a obine reprezentarea sa n virgul mobil, simpl precizie. - n primul rnd, scriem numrul poziional n baza 2. Aplicnd algoritmii descrii anterior pentru conversia n baza 2 a prii ntregi i respectiv a prii zecimale, obinem: 2157,375(10) = 100001101101,011(2) - Urmeaz scrierea sub form de mantis i exponent, cu mantisa normalizat: 100001101101,011 = 1,00001101101011 211 - Cmpul M rezult imediat, fiind format din partea zecimal a mantisei. Deoarece mantisa are numai 14 bii semnificativi, iar cmpul M are 23 bii, ultimii 9 bii din M primesc valoarea 0 (sunt nesemnificativi): M = 00001101101011000000000 - Caracteristica se calculeaz din exponent: E = 11 C = E + (27 - 1) = 11 + 127 = 138 Scris n baza 2, pe 8 bii: C = 10001010 - Bitul de semn are valoarea S = 0, deoarece numrul este pozitiv. Concatennd irurile de bii corespunztoare celor 3 cmpuri, obinem reprezentarea n simpl precizie. Deoarece numrul de bii este mare i deci dificil de controlat, n practic se prefer scrierea n baza 16, mai concis: 01000101000001101101011000000000(2) = 4506D600(16) 59

Cteva caracteristici ale reprezentrilor n virgul mobil: a) simpl precizie - cel mai mic numr nenul reprezentabil (n modul): 1,175494351 1038 - cel mai mare numr reprezentabil (n modul): 3,402823466 1038 b) dubl precizie - cel mai mic numr nenul reprezentabil (n modul): 2,2250738585072014 10308

- cel mai mare numr reprezentabil (n modul): 1,7976931348623158 10308 O proprietate a reprezentrilor n virgul mobil de care trebuie inut cont este faptul c distana dintre dou numere reprezentabile succesive nu mai este constant, ci depinde de valoarea exponentului. Dat fiind un numr oarecare, numrul reprezentabil imediat superior se obine adunnd la mantis valoarea minim posibil, adic 00...001; n simpl precizie aceasta corespunde valorii 2-23, iar n dubl precizie valorii 2-51. Dac vom considera, de exemplu, reprezentarea n simpl precizie, observm c diferena ntre cele dou numere succesive este E 2-23, n timp ce pentru dubl precizie este E 2-51. Rezult de aici nu numai c nu putem reprezenta toate numerele iraionale din domeniu, dar i c, pentru valori mari ale exponentului, exist chiar i numere ntregi care nu pot fi reprezentate exact. adunare, nmulire

A.2. Reprezentri alfanumerice


Informaiile prelucrate de calculator nu se rezum la numere. Textele sunt de asemenea larg folosite, poate chiar ntr-o msur mai mare, dac privim din punctul de vedere al unui utilizator obinuit. Este deci natural s se defineasc un mod de reprezentare pentru caractere. O reprezentare alfanumeric asociaz fiecrui caracter o valoare unic. Aa cum am vzut, calculatorul lucreaz cu iruri de bii, organizate n octei; dat fiind c literele alfabetului latin (mari i mici), mpreun cu cifrele, semnele de punctuaie i cele matematice, totalizeaz mai puin de 100 de simboluri diferite, este suficient s se aloce fiecrui caracter o valoare pe un octet. Pentru simplitate, aceste valori ale octeilor sunt desemnate tot sub form numeric, aceasta fiind mai accesibil i mai uor de reinut. De exemplu, nu vom spune c unui caracter i este asociat octetul 01101000, ci numrul (codul) 104. O prim ncercare de standardizare a reprezentrilor alfanumerice a dus la elaborarea codului EBCDIC (Extended Binary Coded Decimal Interchange Code). Deoarece ns nu au fost urmate nite principii clare n proiectare, codul EBCDIC nu s-a impus. n principal nu s-a inut cont de faptul c, dac lucrul cu caractere nu implic operaii aritmetice sau logice, exist totui unele prelucrri care se aplic asupra acestora, cum ar fi comparaia, conversii ntre litere mari i mici, conversii ntre iruri de caractere i tipuri numerice etc. Mult mai bine definit este codul ASCII (American Standard Code for Information Interchange), care s-a impus ca standard, fiind folosit pn astzi. n proiectarea sa au fost avute n vedere cteva aspecte care uureaz prelucrarea caracterelor: - Literele mici au coduri consecutive, n conformitate cu ordinea alfabetic. La fel s-a procedat i n cazul literelor mari. Astfel sunt facilitate att implementarea comparaiei ntre dou caractere, care se reduce la comparaia ntre dou numere naturale, ct i operaiile de testare (de exemplu, dac un caracter este liter mare sau nu). 60

- Cifrele au de asemenea coduri consecutive. Mai mult, ultimii 4 bii ai codului unei cifre dau exact valoarea cifrei respective, ceea ce uureaz conversia ntre iruri de caractere i tipuri numerice. Iniial, codul ASCII prevedea 128 caractere. Aceast prim versiune, care conine informaiile fundamentale necesare unei reprezentri alfanumerice, este prezentat n tabelul A.1. Se observ c primele 32 coduri sunt alocate unor caractere speciale. Acestea nu apar explicit n text, dar influeneaz modul de prezentare (dispunere n pagin) al acestuia, fiind folosite n special de ctre editoarele de texte. De exemplu, codul 9 corespunde caracterului "tab", care este folosit pentru alinierea unor pri din text. Deoarece oricum se folosea un octet pentru memorarea unui caracter, codul ASCII a fost extins, ajungnd la 256 caractere. Simbolurile nou introduse sunt n general cele folosite n limbile unor ri europene, dar care nu se regsesc n alfabetul englez (de exemplu "", "", "" etc.). Evident, nici dup aceast extindere codul ASCII nu putea cuprinde simbolurile tuturor scrierilor folosite n lume. Pentru a rezolva problema a fost elaborat un standard nou, numit Unicode. Acesta folosete coduri de 2 octei pentru caractere, ceea ce ridic numrul simbolurilor disponibile la 65536. Bineneles, sunt incluse i codurile ASCII. Deocamdat Unicode nu s-a impus pe scar larg, fiind folosit mai ales n aplicaiile care au versiuni ntr-un numr mare de limbi.

61

Cod 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Caracter NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

Cod 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Caracter Cod spaiu 64 ! 65 " 66 # 67 $ 68 % 69 & 70 ' 71 ( 72 ) 73 * 74 + 75 , 76 77 . 78 / 79 0 80 1 81 2 82 3 83 4 84 5 85 6 86 7 87 8 88 9 89 : 90 ; 91 < 92 = 93 > 94 ? 95 Tabelul A.1.

Caracter @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _

Cod 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

Caracter ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 

62

Bibliografie
J. L. Henessy, D. A. Patterson, Computer Architecture - A Quantitative Approach, Morgan Kaufmann Publishers, 1990. D. A. Patterson, J. L. Henessy, Organizarea i proiectarea calculatoarelor. Interfaa hardware/software, Ed. All, 2002. A. Tanenbaum, Organizarea structurat a calculatoarelor, Ed. Agora, 1999. A. Tanenbaum, Modern Operating Systems, Prentice Hall, 2001.

63

Cuprins
1. Introducere................................................................................................................1 1.1. Elemente de baz...........................................................................................1 1.2. Tipuri de calculatoare....................................................................................3 2. Arhitectura sistemelor de calcul.............................................................................5 2.1. Arhitectura generalizat von Neumann.........................................................5 2.2. Clasificarea arhitecturilor interne..................................................................7 3. Arhitectura intern a microprocesoarelor Intel..................................................11 3.1. Microprocesoare pe 16 bii..........................................................................11 3.2. Microprocesoare pe 32 bii..........................................................................14 4. Microprocesoare: funcionare i adresarea datelor............................................21 4.1. Funcionarea la nivel de magistral.............................................................21 4.2. Moduri de adresare la microprocesoarele Intel............................................21 4.2.1. Adresarea datelor.............................................................................22 4.3. Stiva.............................................................................................................23 4.4. Procesoare CISC i RISC.............................................................................25 5. Sistemul de ntreruperi..........................................................................................26 5.1. ntreruperi hardware i software..................................................................26 5.1.1. ntreruperi hardware dezactivabile..................................................26 5.1.2. ntreruperi software.........................................................................29 6. Memoria..................................................................................................................31 6.1. Tipuri de memorie........................................................................................31 6.2. Memoria video.............................................................................................32 6.3. Memoria cache.............................................................................................34 6.4. Memoria virtual..........................................................................................38 6.5. Ierarhia de memorii......................................................................................39 7. Sistemul I/O.............................................................................................................41 7.1. Porturi..........................................................................................................41 8. Multimedia..............................................................................................................44 8.1. Tehnologia multimedia audio......................................................................44 8.1.1. Elemente de baz ale sunetului digital............................................44 8.1.2. Prelucrri ale sunetului digital. Plci de sunet.................................45 8.2. Prelucrri digitale video...............................................................................46 8.3. Consideraii finale........................................................................................46 9. Sistemul de operare................................................................................................47 9.2. Clasificarea sistemelor de operare...............................................................48 9.3. Nucleul sistemului de operare......................................................................48 9.3.1. Apeluri sistem..................................................................................49 Anexa A. Reprezentarea datelor n sistemele de calcul..........................................52 A.1. Reprezentri numerice................................................................................52 A.1.2. Scrierea poziional........................................................................52 A.1.3. Reprezentri cu semn......................................................................53 A.1.4. Reprezentri zecimale.....................................................................55 A.1.5. Reprezentri n virgul fix............................................................57 64

A.1.6. Reprezentri n virgul mobil.......................................................58 A.2. Reprezentri alfanumerice..........................................................................60 Bibliografie..................................................................................................................63

65