Arhitectura Calculatoarelor Si Sisteme de Operare

download Arhitectura Calculatoarelor Si Sisteme de Operare

of 70

Transcript of Arhitectura Calculatoarelor Si Sisteme de Operare

UNIVERSITATEA "AL. I. CUZA" IAIFacultatea de Informatic Departamentul de nvmnt la Distan

Vlad Rdulescu Henri Luchian Adrian Buburuzan

ARHITECTURA CALCULATOARELOR I SISTEME DE OPERARE

2005-2006

Adresa autorului:

Universitatea "Al. I. Cuza" Facultatea de Informatic Str. Berthelot nr. 16 700483 Iai Romnia e-mail: [email protected] web home page: http://www.infoiasi.ro/~rvlad

1. IntroducereDei 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 bazActivitatea 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=103. 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 2

practica nu 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 calculatoarePractic, 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.

4

1.3. ntrebri1. Ce este hardware-ul? Dar software-ul? 2. Definii noiunile de bit i de octet. 3. Enumerai multiplii utilizai n informatic i semnificaia lor. 4. Ce nseamn cuvntul unui procesor? 5. Ce este logica Boole? 6. Care sunt tipurile de calculatoare existente?

5

2. Arhitectura sistemelor de calculModelul 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 NeumannDup 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 6

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.

7

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 internentr-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:

8

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.

9

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 10

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).

2.3. ntrebri1. Care sunt componentele principale ale arhitecturii von Neumann? 2. Ce tipuri de informaii sunt utilizate n sistemele de calcul? 3. Ce este o adres de memorie? 4. Care sunt fazele execuiei unei instruciuni de ctre procesor? 5. Ce nseamn magistral (bus) i care sunt magistralele dintr-un sistem de calcul? 6. Enumerai tipurile de arhitecturi interne. 7. Ce este un sistem distribuit?

11

3. Arhitectura intern a microprocesoarelor Inteln 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 biincepnd 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). 12

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 13

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.

14

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 biiApariia 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 15

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.

16

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.

17

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.

18

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. 19

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. 20

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.

3.3. ntrebri1. Care sunt prile componente ale unui microprocesor Intel pe 16 bii? 2. Ce nseamn pipeline i ce avantaje prezint aceast tehnic? 3. Care sunt regitrii generali? 4. Enumerai regitrii de segment. 5. Ce nseamn adrese logice i adrese fizice? 6. Ce nseamn offset? 7. Cum se calculeaz adresa fizic din adresa logic la un microprocesor pe 16 bii? 8. Care sunt indicatorii de condiii ai unui microprocesor Intel? 9. Ce nseamn microprocesoare superpipeline? Dar superscalare? 10. Cum obine un microprocesor pe 32 bii adresa fizic din adresa virtual, dac se folosete segmentarea memoriei? 11. Dar dac se folosete paginarea memoriei? 12. Ce este un defect de pagin? 13. Ce restricii sunt impuse la alegerea dimensiunii paginii de memorie?

21

4. Microprocesoare: funcionare i adresarea datelor4.1. Funcionarea la nivel de magistralDup 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 IntelProgramul 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 22

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] 23

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. StivaO 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.

24

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.

25

4.4. Procesoare CISC i RISCProcesoarele 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.

4.5. ntrebri1. Care sunt ciclii main ai unui procesor? 2. Enumerai modurile de adresare ale microprocesoarelor Intel. 3. Ce este o stiv i cum funcioneaz ea? 4. Care sunt operaiile de baz n lucrul cu stiva? 5. Ce nseamn procesor CISC? Dar RISC?

26

5. Sistemul de ntreruperiUnul 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 softwareClasificarea 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 27

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 28

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

29

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 30

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.

5.2. ntrebri1. Cum arat clasificarea tipurilor de ntreruperi? 2. Care este rolul circuitului Intel 8259? 3. Ce este un octet type? 4. Ce rol joac tabela vectorilor de ntreruperi? 5. Ce aciuni efectueaz microprocesorul la apariia unei cereri de ntrerupere?

31

6. Memoria6.1. Tipuri de memorieDup 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 32

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 videoUna 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:

33

- 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