|
Structura de baza a computerelor
Un computer este o masina de calcul electronica rapida care accepta informatie digitala ca si intrari (input) pe care o proceseaza cu ajutorul unui program ce se afla stocat in memorie si produce o informatie rezultat de iesire (output).
1.1 Unitatile functionale ale unui computer.
Cuvantul computer cuprinde o larga varietate de masini, mult diferite in dimensiune, viteza, si pret. Se obisnuieste sa se foloseasca unele denumiri specifice pentru a desemna unele subclase de computere. Masinile mai mici sunt de obicei numite minicomputere, ceea ce este o reflectie a pretului lor scazut, a dimensiunilor mici, cat si a puterii lor de calcul reduse. Exemple de minicalculatoare : PDP11, Independent, etc. La inceputul anilor 70 a aparut un nou termen, acela de microcalculatoare, care se referea la un computer foarte mic, ieftin, si care continea doar cateva capsule de circuite integrate pe scara larga (VLSI). Exemple de microcomputere : Spectrum, Tim-S, IBM-PC, etc.
Computerele mari, numite si mainframes, sunt foarte diferite de cele din familiile de minicomputere si microcomputere atat ca dimensiune , ca putere de calcul, pret cat si ca complexitate si proiectare. Exemplu de mainframe : IBM S370/3031.
Cu toate aceste diferente care exista intre diversele categorii de computere, conceptele de baza sunt in esenta aceleasi pentru toate tipurile de computere, deoarece toate se bazeaza pe cateva idei bine definite si care sunt exemplificate in continuare.
In cea mai simpla forma a sa, un computer consta din cinci parti principale independente functional : intrare, memoria, aritmetica si logica, iesirea si unitatile de control, asa cum se arata in figura 1.1. Unitatea de intrare accepta informatia codificata de la operatorii umani, de la dispozitive electromagnetice, sau de la alte computere conectate la ea prin linii de comunicatie digitale. Informatia este stocata in memorie pentru a fi referita ulterior sau este tratata imediat de catre unitatea aritmetica si logica realizand operatia dorita. Pasii de procesare sunt determinati de un program ce se afla stocat in memorie. In final rezultatele sunt trimise inapoi in lumea exterioara cu ajutorul unitatii de iesire. Toate aceste actiuni sunt coordonate de catre unitatea de control. Diagrama din figura 1.1 nu contine si legaturile dintre diversele unitati functionale.
Aceste conexiuni exista, dar ele se pot realiza in mai multe moduri care se vor prezenta de-a lungul acestui curs. De asemenea se vor face referiri la un singur computer cand se vor prezenta principiile de baza, desi multe din sistemele moderne de calcul existente presupun un anumit numar de computere interconectate printr-o retea de comunicatie. Termenul folosit pentru un astfel de sistem este cel de calcul distribuit.
In mod traditional vom denumi unitatea de aritmetica si logica impreuna cu circuitele de control ca unitatea centrala de procesare (central processing unit CPU), sau simplu procesor. Cuvantul centrala este folosit pentru a indica faptul ca majoritatea functiilor dintr-un computer sunt centralizate intr-o singura unitate. Sistemele moderne contin mai multe procesoare, fiecare dintre ele avand sarcina realizarii unei functii particulare. Echipamentul de intrare si iesire este de obicei combinat sub numele de unitatea de intare/iesire (I/O). Aceasta a rezultat in urma faptului ca exista anumite echipamente care realizeaza ambele functii, numite terminale si care constau dintr-un monitor ca si iesire si o tastatura ca intrare, legatura cu computerul realizandu-se printr-un singur cablu. Trebuie sa subliniat faptul ca functiile de intrare/iesire sunt separate in interiorul terminalului, in asa fel incat computerul vede doua dispozitive distincte, chiar daca utilizatorul uman le vede ca facand parte din aceeasi cutie constructiva
Informatia introdusa intr-un computer este impartita de obicei in doua tipuri : date si instructiuni. Instructiunile sunt comenzi explicite care :
guverneaza transferul de informatie intr-un computer, cat si transferul dintre computer si dispozitivele de intrare/iesire.
specifica operatiile aritmetice si logice care trebuie realizate.
Un set de instructiuni care realizeaza un anumit scop se numeste program. Principalul mod de rulare a unui program este stocarea acestuia (sau a mai multor programe ) in memorie, dupa care procesorul citeste instructiunile din cadrul programului din memorie si executa operatiile adecvate fiecarei instructiuni. Instructiunile se executa in mod secvential in ordinea in care sunt stocate in memorie, desi pot sa existe deviatii de la aceasta ordine. In acest mod, comportamentul unui computer este sub controlul complet al programului memorat, cu exceptia posibilitatii unei intreruperi de catre utilizator cu ajutorul dispozitivelor digitale conectate la computer.
Datele sunt numere si caractere codificate care sunt folosite ca si operanzi de catre instructiuni. Notiunea de data se foloseste pentru a simboliza orice informatie digitala, de exemplu un intreg program ( adica un set de instructiuni ) poate fi considerat ca si date pentru a fi procesate de catre un alt program. Un astfel de exemplu este procedura de compilare cand unui program numit compilator i se furnizeaza ca si date sursele scrise in limbaj de nivel inalt ale unui alt program pentru a le converti in date si limbaj masina.
Informatiile pe care un computer poate sa le trateze trebuie sa fie codificate intr-un anumit format. Datorita limitarilor tehnologice, hardware-ul existent fiind realizat cu circuite electronice digitale ce pot avea doar doua stari ,0 si 1, se foloseste codificarea binara. Astfel, fiecare numar, caracter, text, sau instructiune este codificat intr-un sir de numere binare numiti biti, fiecare bit avand una din cele doua valori posibile :0 sau 1. Numerele sunt de obicei reprezentate de corespondentul lor binar, dar pot fi codificate intr-o reprezentare numita zecimal codificat binar (BCD) unde fiecare cifra zecimala este codificata pe 4 biti. Caracterele alfanumerice pot fi exprimate in mai multe coduri binare. Doua dintre cele mai utilizate astfel de coduri binare sunt ASCII (American Standard Code for Information Interchange) unde fiecare caracter este reprezentat pe un cod de 7 biti, respectiv EBCDIC (Extended Binary-Coded Decimal Interchange Code) in care se folosesc 8 biti pentru a reprezenta un caracter.
Unitatea de intrare. Computerele accepta informatii codificate prin intermediul unitatilor de intrare, care constau din dispozitive capabile de a citi astfel de date. Cel mai simplu astfel de dispozitiv este tastatura. O tastatura este astfel conceputa incat in momentul in care o tasta este eliberata, litera sau cifra corespunzatoare este automat tradusa in codul adecvat, care dupa aceea va fi trimis direct ori memoriei ori procesorului. Exista o gama larga de alte dispozitive de intrare cum ar fi : creioane optice, joystic-uri, mouse-uri, sau trackball-uri. Acestea sunt de obicei dispozitive de intrare grafice in timp ce tastaturile sunt dispozitive de intrare text.
Unitatea de memorie. Unica functie a memoriei este de a stoca programe si date. Aceasta functie de memorare poate fi realizata de o larga varietate de dispozitive. De obicei memoria se imparte in doua mari clase ce contin memoria principala si cea secundara
Memoria principala, este o memorie rapida capabila sa opereze la viteze electronice, in care programele si datele sunt stocate pe timpul executiei lor. Memoria principala contine un mare numar de celule semiconductoare de stocare, fiecare capabila sa memoreze un singur bit de informatie. Aceste celule sunt rareori scrise sau citite ca si celule individuale. Ele sunt de obicei organizate in grupuri de dimensiune fixa numite cuvinte (words). Memoria principala este astfel organizata incat continutul unui cuvant, ce contine n biti, poate fi citit sau scris printr-o singura operatie de baza. Pentru a permite un acces usor catre oricare din cuvintele din memoria principala, este necesar sa se asocieze un nume distinct fiecarei locatii de cuvant din memorie. Aceste nume sunt numere care identifica locatii succesive, si care sunt cunoscute sub numele de adrese. Un anumit cuvant este accesat specificandu-i adresa si generand comanda necesara care sa inceapa citirea sau scrierea lui.
Numarul de biti din fiecare cuvant reprezinta lungimea cuvantului unui computer dat. Calculatoarele mari au cuvinte de 64 sau mai multi biti, in timp ce microcomputerele sau minicomputerele au cuvinte intre 8 si 64 de biti. Datele sunt de obicei manipulate in cuvinte, multiplii de cuvinte sau submultipli de cuvinte. Un acces tipic la memorie consta in citirea unei date de lungimea unui cuvant sau din scrierea ei. Instructiunile si datele pot fi scrise si citite din memorie sub controlul procesorului. Este foarte important sa se poata accesa orice locatie de cuvant din memorie cat mai repede posibil. Memoriile in care orice locatie poate fi accesata prin specificarea unei adrese sunt numite memorii cu acces aleator sau RAM (random access memories). Timpul necesar pentru accesarea unui cuvant este numit timp de acces. Acesta este un timp fix, de obicei are valoarea intre 60-70 ns pentru majoritatea computerelor moderne. Desi memoria principala este esentiala, ea este insa volatila si scumpa, astfel ca pentru stocari mari de informatii permanente sau temporare se folosesc memorii secundare. Din aceasta categorie fac parte discurile magnetice, benzile magnetice, discurile optice etc.
Unitatea aritmetica si logica. Executia majoritatii operatiilor dintr-un computer are loc in cadrul unitatii aritmetice si logice (ALU). Sa consideram un exemplu tipic de adunare a doua numere ce se afla in memoria principala. Aceste numere sunt aduse in unitatea aritmetica unde adunarea va avea fizic loc dupa care suma poate fi stocata in memorie.
In mod similar, oricare alta operatie aritmetica sau logica (de exemplu inmultirea, impartirea sau compararea numerelor) este realizata prin aducerea operanzilor necesari in ALU, unde operatia necesara va avea loc. Trebuie subliniat faptul ca nu toti operanzii necesari unei operatii se afla obligatoriu in memoria principala, deoarece procesoarele contin in mod normal un anumit numar de elemente de memorare ultra rapide numite registri, care pot fi folositi pentru stocare temporara a operanzilor folositi foarte des. Fiecare astfel de registru poate stoca un singur cuvant de date. Timpul de acces la registri este de obicei de 5-10 ori mai mare decat cel la memoria principala.
Unitatile aritmetice si logice sunt mult mai rapide decat alte dispozitive conectate la sistem. Ca urmare este posibil sa se proiecteze structuri relativ complicate de computere care sa contina un numar de dispozitive externe controlate de un singur procesor. Aceste dispozitive pot fi placi grafice, discuri magnetice, senzori, tastaturi, monitoare, placi multimedia etc.
Unitatea de iesire. Aceasta unitate este inversul unitatii de intrare. Functia ei este de a returna rezultatele in lumea exterioara. Cele mai utilizate dispozitive de iesire sunt monitoarele, imprimantele si plotterele.
Unitatea de control. Unitatile descrise pana acum asigura functiile necesare pentru stocarea si procesarea informatiei. Operatiile realizate de acestea trebuie coordonate intr-un mod organizat, iar acest coordonator este unitatea de control.
O imprimanta va tiparii un anumit caracter doar daca i se comanda special acest lucru. Aceasta este de obicei rezultatul unei instructiuni Out executata de catre procesor. Procesarea acestei instructiuni consta in trimiterea de semnale de sincronizare catre si de la imprimanta, functie pe care o indeplineste unitatea de control.
Se poate spune, in general, ca transferurile de tip I/O sunt controlate de instructiuni software care identifica dispozitivele implicate si tipul transferului. Cu toate acestea, semnalele de sincronizare care guverneaza transferul pe timpul executiei sunt generate de circuitele de control. Transferurile de date intre procesor si memorie sunt controlate intr-o maniera similara de catre unitatea de control.
In mod teoretic ne vom imagina unitatea de control ca pe o unitate distincta din punct de vedere fizic care interactioneaza intr-un anume fel cu restul sistemul. In practica insa majoritatea circuitelor de control sunt fizic distribuite peste tot in sistem. Exista un numar foarte mare de linii (trasee) care transmit semnale utilizate in sincronizarea diferitelor evenimente din cadrul tuturor unitatilor.
Ca si concluzie, operatiile pe care le efectueaza un computer pot fi rezumate la urmatoarele:
Primeste informatiile (programe sau date) printr-o unitate de intrare si le transfera in memorie.
Informatia stocata in memorie este procesata, sub controlul unui program, intr-un procesor.
Informatia procesata paraseste computerul prin unitatea de iesire.
Toate activitatile din interiorul computerului sunt dirijate de catre unitatea de control.
1.2 Concepte operationale de baza.
In subcapitolul precedent s-a subliniat faptul ca activitatea din cadrul unui computer este guvernata cu ajutorul instructiunilor. Pentru a realiza o anumita sarcina, un program ce consta dintr-un set de instructiuni, special conceput in acest scop, este stocat in memorie. Instructiunile sunt aduse una cate una din memorie in procesor, care le executa. Impreuna cu instructiunile este necesar sa se foloseasca date si operanzi, care sunt de asemenea stocate in memorie. O instructiune tipica poate sa fie de forma
Add LOC,R0
care aduna operandul de la locatia de memorie LOC cu operandul aflat in registrul de procesor R0, si pune suma rezultata in registrul R0. Aceasta instructiune necesita mai multi pasi pentru a fi executata. In primul rand instructiunea este transferata din memorie in procesor. Dupa aceea, operandul de la adresa LOC trebuie incarcat si el in procesor. Acest operand este adunat la continutul lui R0 si in final, suma rezultata este stocata in registrul R0.
Transferul dintre memorie si procesor incepe prin trimiterea adresei locatiei de memorie ce va trebui accesata unitatii de memorie si transmiterea semnalelor de control adecvate. Dupa aceasta datele se transfera din sau catre memorie. Figura 1.2 prezinta cum pot fi realizate conexiunile dintre procesor si memorie. Pe langa aceste legaturi se mai prezinta in figura cateva detalii ale procesorului care nu au fost discutate inca, dar care sunt esentiale din punct de vedere al operatiei. Interconectarile dintre acestea nu sunt prezentate explicit pentru ca in acest punct nu ne intereseaza decat caracteristicile lor functionale.
Procesorul contine circuitele aritmetice si logice ca si circuitele principale de procesare. Pe langa acestea el mai contine si un anumit numar de registri folositi pentru stocarea temporara a unor date. Doua dintre registre sunt de interes pentru noi in acest punct: registrul instructiunii (IR) care contine instructiunea care se executa si contorul programului (PC) care tine minte pozitia curenta in cadrul executiei programului. Iesirea primului este la dispozitia circuitelor de control, care decodifica instructiunea si genereaza semnalele de sincronizare pentru controlul circuitelor necesare executarii ei. Cel de-al doilea contine adresa de memorie a instructiuni curente care se executa. In timpul executiei instructiunii curente, continutul PC-ului este modificat in asa fel incat el sa corespunda adresei instructiunii urmatoare.
Pe langa IR si PC mai exista un numar de alti registri, numiti registri de uz general. Mai exista inca doi registri care faciliteaza lucrul cu memoria principala. Acestia sunt registri MAR si MDR. Primul contine adresa locatiei de memorie cu care va avea loc transferul de date, iar cel de-al doilea va contine data care s-a citit sau care se va scrie la acea adresa.
Se vor considera in continuare cativa pasi de operare tipici. Programele se afla in memoria principala si au ajuns acolo prin unitatea de intrare. Executia unui program incepe stocand in registrul PC adresa primei instructiuni a programului. Continutul PC-ului este transferat in registrul MAR si un semnal de control de citire este trimis memoriei. Dupa un anumit timp specific accesului la memorie, cuvantul adresat (in acest caz prima instructiune a programului nostru) este citit din memorie si incarcat in MDR. Dupa aceasta operatie continutul lui MDR este transferat in IR, moment in care instructiunea este gata pentru a fi decodata si executata.
Daca mai departe instructiunea implica o operatie care sa fie executata de catre ALU, va fi necesar sa se obtina si operanzii necesari. Daca un operand se afla in memorie (el poate fi si intr-un registru general al procesorului), el va trebui adus din memorie trimitandu-i adresa in MAR si initiind un ciclu de citire. Dupa ce operandul este citit din memorie in MDR, el poate fi transferat din MDR in ALU. Citind cativa astfel de operanzi din memorie, ALU poate executa operatia dorita. Daca rezultatul acestei operatii trebuie stocat in memorie, el trebuie trimis in MDR. Adresa locatiei de memorie unde trebuie stocat rezultatul este trimisa in MAR si este initiat un ciclu de scriere. Intre timp, continutul lui PC este incrementat ca sa indice spre instructiunea urmatoare care trebuie executata. Astfel, in momentul in care executia instructiunii curente este terminata, o noua citire de instructiune poate fi comandata. Pe langa transferurile de date intre memorie si procesor, mai este necesar ca un procesor sa poata accepta date de la dispozitive de intrare cat si sa poata trimite date catre dispozitive de iesire. Astfel, trebuie sa existe anumite instructiuni care sa permita acest transfer cu dispozitivele I/O.
Executia normala a unui program poate fi intrerupta uneori. Aceasta se intampla de obicei in momentul in care anumite dispozitive necesita tratarea lor urgenta. De exemplu, daca un dispozitiv de monitorizare din cadrul unui proces industrial controlat de un computer a detectat o conditie de lucru periculoasa. Pentru a putea trata astfel de cazuri suficient de repede, desfasurarea normala a programului care se executa in momentul respectiv de catre procesor trebuie intrerupta. Pentru a realiza acest lucru dispozitivul va activa un semnal de intrerupere. O intrerupere este o cerere din partea unui dispozitiv I/O pentru a se executa o anumita rutina de tratare a intreruperii de catre procesor. Deoarece astfel de diversiuni modifica starea interna a procesorului, este necesar ca starea lui interna sa fie salvata in memoria principala inainte ca tratarea intreruperii sa aiba loc. Aceasta presupune de obicei salvarea continutului PC-ului, a registrilor generali, si a unor informatii de control. Dupa terminare rutinei de tratare a intreruperii , starea procesorului este restaurata, astfel incat, executia programului intrerupt poate fi reluata.
1.3 Structuri de magistrale.
Pana acum s-au discutat doar caracteristicile functionale ale partilor individuale care constituie un computer. Pentru a forma un sistem operational aceste parti trebuie conectate impreuna intr-un ansamblu bine organizat. Exista nenumarate astfel de moduri de conectare dintre care se vor prezenta in continuare trei dintre cele mai des folosite.
Pentru ca un computer sa obtina o viteza de operare rezonabila, el trebuie organizat in mod paralel. Aceasta inseamna ca toate unitatile pot trata un cuvant intreg de date la un anumit timp si faptul ca transferurile de date dintre unitati sunt realizate in mod paralel, ceea ce inseamna ca un numar foarte mare de linii sunt necesare pentru a realiza conexiunile necesare. O grupare de astfel de linii, care au ceva in comun, este numita magistrala. Pe langa liniile care transporta date, este esential sa existe si cateva linii pentru adresare si control.
In figura 1.3 este prezentata cea mai simpla forma de computer structurat pe doua magistrale. Procesorul interactioneaza cu memoria prin magistrala de memorie. Functiile de I/O sunt tratate prin magistrala de I/O astfel ca datele trec prin procesor pentru a ajunge la memorie. In astfel de configuratii transferurile I/O se desfasoara sub directul control al procesorului, care initiaza transferul si monitorizeaza intreaga desfasurare.
O versiune putin modificata a unei structuri cu doua magistrale este prezentata in figura 1.4. Pozitiile relative ale procesorului si memoriei sunt schimbate. Si de aceasta data exista o magistrala de memorie intre cele doua.
La aceasta noua structura transferurile de I/O sunt efectuate direct in sau din memorie (DMA). Deoarece memoria nu are circuitele necesare pentru a controla un astfel de transfer va trebui sa se realizeze un alt mecanism de control. O tehnica standard este aceea de-a introduce canale de I/O ca parte componenta a echipamentului de I/O. Un astfel de canal de I/O este capabil sa controleze un astfel de transfer. De fapt el este un procesor specializat numit si procesor periferic. O procedura tipica de transfer pe astfel de structuri este initiata de catre procesor care transfera informatia necesara canalului de I/O, care va prelua apoi controlul pentru efectuarea transferului.
S-a mentionat deja faptul ca o magistrala consta dintr-o grupare de linii, care servesc mai multor scopuri. Exista trei seturi mari de linii: date, adrese si control. Liniile de date transporta asa cum le spune si numele date, si in consecinta numarul lor este egal cu numarul de biti dintr-un cuvant. Pentru a accesa date din memorie liniile de adresa indica locatia acelei date. Liniile de control sunt utilizate pentru a indica directia transferului de date si pentru a coordona sincronizarea evenimentelor in timpul transferului.
Majoritatea calculatoare au cateva magistrale distincte, putand fi numite sisteme multi-magistrala, totusi, si functionarea acestora este similara cu una dintre cele doua structuri cu doua magistrale prezentate, deoarece magistralele introduse in plus au rol doar pentru cresterea vitezei datorata unui paralelism mai evoluat.
O structura mult diferita de cele prezentate pana acum este aceea cu o singura magistrala, prezentata in figura 1.5.
Toate unitatile fiind conectate la aceasta magistrala, si deoarece nu se poate realiza decat un transfer la un moment dat, rezulta ca doar doua unitati pot sa foloseasca magistrala simultan. Liniile de control ale magistralei sunt folosite pentru arbitrarea cererilor de utilizare a magistralei. Marile avantaje ale structurii cu o singura magistrala sunt pretul de cost redus si flexibilitatea in atasarea dispozitivelor periferice iar dezavantajul este viteza de lucru redusa.
Diferentele de tip de structura de magistrale au efect pronuntat asupra performantelor computerelor dar, totusi, din punct de vedere conceptual (cel putin la acest nivel de detaliu) aceste diferente nu sunt esentiale in descrierea functionarii calculatorului.
Transferul informatiei pe magistrala nu poate fi realizat, in general, la o viteza comparabila cu a tuturor dispozitivelor conectate la o magistrala, deoarece unele dispozitive electromagnetice sunt relativ lente, de exemplu imprimantele, altele sunt mai rapide, cum ar fi discurile magnetice, dar nici acestea nu se compara cu viteza memoriei si a procesoarelor care sunt cele mai rapide componente ale unui computer. Deoarece toate aceste dispozitive trebuie sa comunice intre ele prin magistrala, este necesar sa se asigure un mecanism eficient de transfer care sa nu fie constrans de dispozitivele lente si care sa elimine aceste diferente.
O abordare curenta a acestei probleme este introducerea de bufere in dispozitive pentru a memora informatia pe timpul transferului. Pentru a exemplifica aceasta tehnica, se considera transferul unui caracter codificat de la procesor la o imprimanta pentru a fi tiparit. Procesorul realizeaza transferul trimitand caracterul pe magistrala catre buferul imprimantei. Deoarece buferul este un registru electronic, acest transfer necesita foarte putin timp. Odata ce buferul a fost incarcat, imprimanta poate sa tipareasca caracterul fara interventia ulterioara a procesorului. In acest timp magistrala si procesorul sunt libere si pot fi utilizate pentru alte aplicatii. Imprimanta, atata timp cat tipareste caracterul nu este disponibila pentru un alt transfer. Ca si concluzie, rezulta ca buferele previn blocarea procesoarelor rapide pe timpul transferurilor de date de tip I/O, permitandu-le acestora sa gestioneze si alte dispozitive si procese in acest timp.