CATEGORII DOCUMENTE |
MANIPULAREA DATELOR
1. Unitatea centrala de prelucrare
Circuitele care realizeaza diferite operatii asupra datelor nu sunt conectate direct la celulele memoriei principale. Aceste circuite sunt grupate in unitatea centrala de prelucrare (central processing unit ¾ CPU). Unitatea centrala de prelucrare (CPU) se compune din:
unitatea aritmetico-logica (aritmetic/logic unit) contine
circuitele care realizeaza manipularea datelor ;
unitatea de comanda (control unit) contine circuitele
utilizate pentru coordonarea activitatii calculatorului.
registri (registrele)
In figura de mai jos este prezentata organizarea unui calculator [simplu] construit in jurul unei magistrale.
Unitatea Centrala de Prelucrare (UCP/CPU - Control Processing Unit), "creierul" calculatorului, are rolul de a executa programele pastrate in memoria principala prin extragerea instructiunilor componente ale unui program, examinarea lor si executia lor secventiala (una dupa alta).
Componentele sunt conectate printr-o magistrala (bus), formata dintr-o multime de cai paralele prin care sunt transmise adrese, date si semnale de control. Magistralele se pot afla atat in exteriorul UCP, conectand-o cu memoria si dispozitivele de intrare/iesire, cat si in interiorul UCP.
. . . . . .
Unitatea aritmetica si logica Unitatea de control
R e g i s t r i
Dispozitive de I/E
Memoria principala |
D i s c |
Imprimata |
magistrala Fig. 1 - Organizarea unui calculator simplu
UCP este alcatuita din mai multe componente :
Ø Unitatea de control care raspunde de extragerea instructiunilor din memoria principala si de determinarea tipului [lor] fiecaruia.
Ø Unitatea aritmetica si logica executa operatii necesare pentru indeplinirea instructiunilor (SI logic, SAU logic, .).
UCP contine de asemenea si o memorie speciala foarte rapida, folosita pentru depozitarea rezultatelor temporare, precum si a unor informatii de control. Aceasta memorie este formata dintr-un numar de registre, fiecare cu o anumita dimensiune si o anumita functiune.
Principalele registre sunt:
contorul de program (PC - Program Computer) - el indica urmatoarea instructiune care va fi extrasa pentru executie;
registrul de instructiuni (Instruction Register - IR), in care se pastreaza instructiunea in executie.
Interfata C P U / Memorie
Transferarea cuvintelor binare intre unitatea centrala a unui calculator si memoria principala se realizeaza prin conectarea acestora printr-un grup de fire denumite magistrala Unitatea centrala de prelucrare Memoria principala
Magistrala
Registri
Fig. 1.1. Arhitectura unitate centrala de prelucrare/memorie principala
Prin intermediul magistralei, unitatea centrala poate sa extraga (sa citeasca)/sa plaseze (sa scrie) date din/in memoria principala, furnizand adresa celulei de memorie dorite, impreuna cu un semnal de citire. Analizand acest mecanism, observam ca presupune atat implicarea unitatii de comanda cat si a unitatii aritmetico-logice.
Organizarea CPU-ului Von Neumann (tipica)
Aceasta parte se numeste calea de date (data path) si include pana la 32 de registre, Unitatea aritmetica si logica (UAL) si mai multe magistrale de legatura.
Registrele trimit datele in cele doua registre de intrare ale UAL, notate cu A si B, care le pastreaza in timp ce UAL face calculele.
B B
Registre
A A + B Unitatea aritmetica si logica
Registre de intrare UAL Registru de iesire UAL Fig. 2 - Calea
de date a unei masini Von Neumann (adunarea)
Dupa ce UAL executa cu datele de intrare, adunari, scaderi si alte operatii simple, transmite rezultatul in registrul de iesire.
Majoritatea instructiunilor executate de UAP sunt de tip: registru-memorie, registru-registru. Instructiunile registru-memorie permit cuvintelor din memorie sa fie incarcate in registre, de unde sunt folosite ca date de intrare pentru UAL in instructiunile urmatoare.
Instructiunile registru-registru extrag doi operanzi din registre, ii aduc in registrele de intrare UAL, executa o operatie oarecare asupra lor (adunare, SI logic, .) si depun rezultatul inapoi intr-unul din registre.
Acest ultim proces se numeste ciclul caii de date (Data path cycle) si reprezinta "inima" celor mai multe UCP-uri. Cu cat acest ciclu este mai rapid, cu atat masina merge mai repede.
Executia instructiunilor
UCP executa fiecare instructiune printr-o serie de pasi mici, dupa cum urmeaza :
a. transformarea instructiunii urmatoare din memorie in registrul de instructiuni;
b. schimbarea contorului de program, pentru a indica instructiunea urmatoare;
c. determinarea tipului instructiunii proaspat extrase;
d. daca instructiunea are nevoie de un cuvant din [spatiul] de memorie, determinarea locului unde se gaseste acesta;
e. extragerea cuvantului intr-unul din registrele UCP, daca este cazul;
f. executarea instructiunii;
g. reluarea pasului a pentru a incepe executia instructiunii urmatoare.
Aceasta secventa [de pasi] se mai numeste ciclul extragere-decodificare-executie (fetch-decode-execute).
In fig. 1.2 este prezentat in detaliu procesul adunarii a doua valori stocate in memorie.
Instructiuni in cod masina
Instructiunile prezentate in fig. 1.2 reprezinta instructiuni executabile de catre unitatea centrala de prelucrare si poarta denumirea instructiunii in cod masina (machine instructions).
Cand ne referim la instructiunile cunoscute de un calculator, observam ca ele pot fi clasificate in trei categorii (grupe): instructiuni de transfer de date, instructiuni aritmetico-logice, instructiuni de control.
Pasul 1. Se citeste din memorie una din valorile care trebuie
adunate si se plaseaza intr-un registru.
Pasul Se citeste din memorie cealalta valoare care trebuie
adunata si se plaseaza intr-un alt registru.
Pasul 3. Se activeaza circuitul de adunare, avand ca intrari
registrii utilizati in pasii 2 si
Pasul 4. Se stocheaza rezultatul in memorie.
Pasul 5. Stop.
Fig. 1. Adunarea unor valori stocate in memorie
Instructiuni de transfer de date
Instructiuni care realizeaza deplasarea datelor dintr-un loc in altul, dar fara disparitia lor din pozitia initiala. Pasii 1, 2 si 4 din fig. 1.2 intra in aceasta categorie. Termenii transfer sau mutare sunt mai putin adecvati; mai exacti ar fi copiere sau clonare.
Cererea de incarcare a unui registru de uz general cu continutul unei celule de memorie este desemnata de o instructiune LOAD, iar transferul continutului unui registru intr-o celula de memorie se face prin intermediul unei instructiuni STORE.
In fig. 1.2 pasii 1 si 2 reprezinta instructiuni LOAD, iar pasul 4 este o instructiune STORE.
O parte importanta a instructiunilor de transfer se refera la operatii (comenzi) intre dispozitive in afara CPU si memoria interna. Aceste instructiuni se ocupa de operatiile de intrare/iesire (input/ output - I/O) din calculator si uneori plasate intr-un grup distinct de instructiuni.
Instructiuni aritmetice si logice
Instructiunile care indica unitati de comanda sa solicite unitatii aritmetico-logice efectuarea unei anumite operatii. Pasul 3 din fig. 1.2 face parte din aceasta categorie de instructiuni.
Operatiile logice posibile de efectuat sunt: AND, OR si XOR. Operatii care realizeaza deplasarea la dreapta sau la stanga a continutului registrilor: SHIFT, ROTATE.
Instructiuni de control
Instructiuni care nu manipuleaza date, ci dirijeaza modul de executie al programelor. Pasul 5 din fig. 1.2 face parte din aceasta categorie ca un caz elementar.
Aceasta familie de instructiuni contine si instructiunile de salt (JUMP, BRANCH) care realizeaza actiune ca unitatea de comanda sa execute alta instructiune decat cea care urmeaza. Exista doua variante de instructiuni de salt: salt neconditionat si salt conditionat. Ca exemplu, pentru saltul conditionat prezentam secventa urmatoare:
Pasul 1. Se incarca (LOAD) un registru cu o valoare din memorie.
Pasul Se incarca (LOAD) alt registru cu alta valoare din memorie.
Pasul 3. Daca a doua valoare este zero salt (JUMP) la pasul 6.
Pasul 4. Se imparte continutul primului registru la continutul celui
de-al doilea registru si se depune rezultatul in al treilea registru.
Pasul 5. Se stocheaza (STORE) continutul celui de-al doilea registru
in memorie.
Pasul 6. Stop.
Fig. 1.3. Impartirea a doua valori stocate in memorie
Saltul conditionat se utilizeaza cand se doreste indeplinirea unei anumite conditii.
Primele calculatoare erau foarte putin flexibile, deoarece programul executat de fiecare dispozitiv era cablat in unitatea de comanda, ca o parte a sistemului.
Una din solutiile utilizate in primele calculatoare electronice pentru a dobandi mai multa flexibilitate a constituit-o proiectarea unitatilor de control, astfel incat diversele blocuri sa poata fi reconectate dupa nevoie. Acest lucru se poate realiza utilizand o placa de conexiuni realizate pe principiul placilor de comutare (utilizate in centralele telefonice).
Stocarea programelor
Instructiunile ca siruri de biti
Un pas inainte s-a facut odata cu intelegerea faptului ca, in mod similar datelor, programele pot fi codificate si stocate in memoria principala a calculatorului.
Programul unui calculator poate fi schimbat prin modificarea continutului memoriei, in loc sa se reconecteze blocurile unitatii de comanda a calculatorului.
Conceptul de program stocat in memoria calculatorului a devenit in prezent situatia-standard de lucru. Pentru a-l putea aplica, calculatorul e proiectat astfel incat sa recunoasca anumite modele de biti ca reprezentand diferite instructiuni. Aceasta colectie de instructiuni, impreuna cu sistemul de codificare, poarta numele de limbaj-masina (machine language) si defineste modul de comunicare al algoritmului pe care calculatorul trebuie sa-l execute.
O instructiune-masina, din punctul de vedere al codificarii, consta, de obicei, din doua parti: campul codului de operatie (operation code - op.code) si campul operandului (operand code). Sirul de biti care apare in campul 'op-code'-ului specifica operatia elementara (STORE, SHIFT, XOR, JUMP) a carei executie e solicitata de instructiune. Modelul de biti pentru codul operandului ofera detalii asupra operatiei respective (Ex.: pentru operatia de tip STORE, informatia din campul operandului precizeaza registrul care contine datele ce trebuie stocate precum si precizarea celulei de memorie in care se vor stoca ele).
Un limbaj tipic masina
In continuare vom preciza cum ar trebui codificate instructiunile unui calculator obisnuit. Pentru aceasta propunem un calculator prezentat schematic mai jos.
Unitatea centrala de prelucrare Memoria principala
Adresa Celula de memorie 00 : 01 : 02 : 03 : . . FF : Unitatea | Unitatea de comanda aritmetico- | logica |Registri 0| | 1| | 2| | . | . 8|
Magistrala 1.4. Arhitectura calculatorului model
Calculatorul are 16 registri de uz general, numerotati de la 0 la F in hexazecimal, iar memoria sa contine 256 celule. Fiecare celula de memorie este desemnata individual (identificata) printr-un numar intreg intre 0 si 255.
Vom considera ca atat registrii cat si celulele de memorie au marimea de opt biti.
Coduri de operatie
Fiecare instructiune este codificata pe un numar de 16 biti, reprezentati cu ajutorul a patru cifre hexazecimale (vezi figura urmatoare).
Patru cifre hexazecimale (doi octeti)
| | | | |
Campul operanzilor (furnizeaza
detalii despre operatie)
Campul codului de operatii
(specifica operatia care trebuie efectuata)
Fig. 1.5. Formatul unei instructiuni masina pentru limbajul restrans
Codul de operatie al fiecarei instructiuni este reprezentat de primii patru biti sau de prima cifra hexazecimala.
In anexa 1.2 la acest capitol (Limbajul masina) este prezentata lista completa a instructiunilor (un subset de doisprezece instructiuni). Astfel, orice cod de instructiune care incepe cu cifra hexazecimala 3 (0011) se refera la o instructiune de stocare (STORE) si asa mai departe.
Calculatorul dispune de doua instructiuni de adunare ADD: una pentru adunarea reprezentarilor in complement fata de doi si una pentru adunarea reprezentarilor in virgula mobila. Tratarea este diferita datorita faptului ca adunarea cuvintelor binare care reprezinta valori codificate cu notatia in complement fata de doi necesita executarea unor actiuni diferite fata de cele de la adunarea valorilor reprezentate in virgula mobila.
O p e r a n z i
Operandul consta din trei cifre hexazecimale (12 biti) si in fiecare caz clarifica instructiune generala furnizata de campul codului de operatie (exceptie face instructiunea HALT).
Ex. Daca prima cifra hexazecimala a unei instructiuni este 1 (opcodul pentru incarcarea datelor din memorie), urmatoarea cifra hexazecimala a instructiunii va preciza in care registru trebuie incarcata valoarea, iar ultimile doua cifre hexazecimale vor indica din care celula de memorie este preluata valoarea.
¾ Instructiunea 1347 (hexazecimal) este decodificata astfel :
LOAD in registrul 3, continutul celulei de memorie de la adresa 47.
¾ Instructiunea 70C5 (hexazecimal) este decodificata astfel:
Se executa OR cu continutul registrului C si al registrului 5 si se pune rezultatul in registrul 0.
In cazul instructiunii JUMP (cod hexazecimal B), prima cifra hexazecimala indica registrul care trebuie comparat cu registrul 0. Daca acest registru are acelasi continut ca si registrul 0, se sare la instructiunea de la adresa indicata de ultimele doua cifre hexazecimale din campul operandului. Altfel se continua executia normala a programului. In acest mod se executa un salt conditionat.
Daca prima cifra hexazecimala din campul operandului este 0, instructiunea cere ca registrul 0 sa fie comparat cu el insusi, saltul va fi intotdeauna efectuat.
In consecinta orice instructiune al carei cod incepe cu cifra hexazecimala B0 va fi interpretata ca un salt neconditionat.
Exemplu de program
Vom prezenta in continuare un program codificat cu instructiunile precizate in Anexa 1. pentru fig. 1.2 din acest capitol.
Pasul 1 156C
Pasul 2 166D
Pasul 3 5056
Pasul 4 306E
Pasul 5 C000
3.- Executia programelor
Un program este 'urmarit' de calculator prin copierea instruc-tiunilor din memorie, in unitatea de comanda, pe masura ce are nevoie de ele.
Fiecare instructiune ajunsa in unitatea de comanda este decodificata si executata.
Ordinea de extragere a instructiunilor din memorie corespunde ordinii in care sunt stocate, cu exceptia cand o instructiune de salt (JUMP) specifica altfel.
Pentru intelegerea executarii unui program trebuie studiata amanuntit unitatea de comanda din interiorul CPU. Aceasta (UC) contine doi registri cu destinatie speciala: contorul programului (program counter) si registrul de instructiuni (instruction register), conform fig. 1.4. Registrul contorului programului contine adresa urmatoarei instructiuni care trebuie executata, permitand calculatorului sa urmareasca locul in care se afla in program. Registrul de instructiuni este utilizat pentru stocarea instructiunilor in curs de executie.
Unitatea de comanda isi realizeaza sarcinile repetand continuu un algoritm, denumit ciclul masinii (machinecycle), care consta in 3 pasi: extragere (fetch), decodificare si executie (vezi fig. 1.6).
(1) Extrage urmatoarea (2) Decodifica sirul de instructiune din biti din registrul de
memorie (conform instructiuni
contorului
si apoi incrementeaza ((
(3) Efectueaza operatia ceruta de instructiunea
stocata in registrul de instructiuni
Fig. 1.6. Ciclul masina
In timpul pasului de extragere, unitatea de comanda solicita memoriei principale sa-i furnizeze urmatoarea instructiune care va fi executata. Unitatea stie unde se afla urmatoarea instructiune in memorie, deoarece adresa acesteia se afla in registrul contorului programului. Unitatea de comanda plaseaza instructiunea receptionata din memorie in registrul sau de instructiuni si incrementeaza apoi contorul programului astfel incat acesta sa contina adresa urmatoarei instructiuni.
Avand astfel instructiunea in registrul de instructiuni, unitatea de comanda incepe faza de decodificare din ciclul masinii. In acest moment, ea analizeaza campurile codului de operatie si operanzilor pentru determinarea actiunilor ce trebuie efectuate.
Dupa decodificarea instructiunii, unitatea de comanda intra in faza de executie. De exemplu, daca instructiunea se refera la incarcarea datelor din memorie, unitatea de comanda realizeaza (efectueaza) operatia de incarcare; daca instructiunea se refera la o operatie aritmetico-logica, unitatea de comanda activeaza unitatea aritmetico-logica, avand ca intrari registrii corespunzatori.
Dupa executia oricarei instructiuni, unitatea de comanda incepe un nou ciclu al masinii cu faza de extragere. Deoarece contorul programului a fost incrementat la sfarsitul fazei precedente de extragere, el furnizeaza din nou unitatii de comanda adresa corecta a instructiunii.
Exemplu de executie a unui program
Sa studiem ciclul masinii utilizat pentru programul codificat la sfarsitul cap. 1.
Mai intai trebuie sa stocam programul in memorie. Vom presupune ca programul este stocat la adrese succesive de memorie
incepand cu adresa A0 in hexazecimal.
In fig. 1.7 este prezentat continutul zonei de memorie.
Adresa Continut
A 0 15
A 1 6C
A 2 16
A 3 6D
A 4 50
A 5 56
A 6 30
A 7 6E
A 8 C0
A 9 00
Fig. 1.7. Stocarea in memorie a programului de
'adunare', incepand de la adresa A 0
Avand programul astfel memorat, putem provoca executia lui plasand adresa primei instructiuni (A0) in registrul contorului programului si pornind calculatorul.
Unitatea de comanda incepe faza de extragere incarcand instructiunea de la adresa A0 (156C), plasand-o in registrul sau de instructiuni.
Instructiunile utilizate de calculatorul propus in exercitiu au lungimea de l6 biti (2 octeti).
Din acest motiv, instructiunea care trebuie extrasa ocupa celulele de memorie de la adresele A0 si A1. Se incarca astfel continutul ambelor celule de memorie si se plaseaza datele in registrul de instructiuni.
Apoi unitatea de comanda creste cu 2 valoarea din contorul programului, incat registrul va contine acum adresa urmatoarei instructiuni.
La sfarsitul fazei de extragere din primul ciclu al masinii, registrul contorului programului si registrul de instructiuni contin urmatoarele:
¾ contorul programului : A2
¾ registrul de instructiuni : 156C.
Unitatea de comanda, analizand instructiunea din registrul (sau) de instructiuni, trebuie sa incarce in registrul 5 continutul celulei de memorie de la adresa 6C. Aceasta activitate de incarcare este efectuata in timpul fazei de executie, dupa care unitatea de comanda revine la faza de extragere din urmatorul ciclu al masinii.
In timpul acestei faze de extragere, unitatea de comanda obtine instructiunea 166D din cele doua celule succesive de memorie de la adresa A2, plaseaza aceasta instructiune in registrul sau de instructiuni si incrementeaza apoi contorul programului la valoarea A4. Valorile din registrul contor al programului si din registrul de instructiuni devin urmatoarele:
¾ contorul programului : A4
¾ registrul de instructiuni : 166D.
Unitatea de comanda decodifica instructiunea 166D si afla ca trebuie sa incarce in registrul 6 continutul celulei de memorie de la adresa 6D. In faza de executie in registrul 6 este incarcata valoarea ceruta.
Deoarece contorul programului contine acum valoarea A4, unitatea de comanda extrage urmatoarea instructiune care incepe la aceasta adresa. In registrul de instructiuni este plasat codul 5056, iar contorul programului este incrementat la valoarea A6. Unitatea de comanda decodifica acum continutul registrului de instructiuni si intra in faza de executie, realizand adunarea in complement fata de doi, avand ca intrari registrii 5 si 6.
In faza de executie, unitatea aritmetico-logica efectueaza operatia de adunare ceruta, lasa rezultatul in registrul 0 (dupa care cere unitatea de comanda) si raporteaza unitatii de comanda terminarea operatiei.
Dupa aceasta unitate de comanda incepe alta faza de extractie dintr-un ciclu al masinii. Extrage, cu ajutorul contorului de programe, urmatoarea instructiune (306E) din cele 2 celule de memorie succesive, incepand de la adresa A6 si incrementeaza contorul programului la A8.
Instructiunea este decodificata si executata in timpul urmatoarelor faze. Rezultatul adunarii este plasat in celula de memorie de la adresa 6E.
Este extrasa urmatoarea instructiune care incepe de la adresa de memorie A8 si contorul programului este incrementat la valoarea AA. Continutul registrului de instructiuni (C000) este decodificat, el fiind instructiunea de oprire.
In consecinta, programul se termina si calculatorul se opreste in timpul urmatoarei faze de executie.
O asemenea lista de instructiuni poate executa si omul. Diferenta esentiala dintre oameni si calculatoare, in ceea ce priveste executia unor asemenea liste, este data de acuratete si viteza de executie.
Programe si date
Mai multe programe pot fi stocate simultan in memoria principala a unui calculator, atat timp cat ocupa zone de memorie diferite, iar prin setarea adecvata a contorului programului se poate determina care program se va executa la pornirea calculatorului.
Deoarece datele sunt stocate de asemenea in memorie si sunt codificate tot cu cifre binare (0 si 1), calculatorul nu poate face distinctia intre date si programe.
Existenta unui aspect comun pentru programe si date permite unui program sa manipuleze alte programe (sau chiar pe el insusi) ca pe niste date.
4.- Alte instructiuni
Pentru a avea o perspectiva mai larga, sa studiem alte alternative la arhitectura de calculator prezentata.
Arhitecturi CISC si RISC
Proiectarea unui limbaj-masina implica luarea multor decizii, una dintre ele fiind sa construim:
o structura complexa ¾ care sa poata decodifica si executa o larga varietate de instructiuni;
o masina mai simpla care sa dispuna de un set limitat de instructiuni.
Prima structura se numeste calculator cu set complex de instructiuni (complex instruction set computer - CISC), iar a doua optiune conduce la realizarea unui calculator cu set restrans de instructiuni (reduced instruction set computer - RISC).
Cu cat structura procesorului este mai complexa cu atat mai simpla este programarea, in timp ce in cazul calculatorului mai simplu aceeasi operatie ar necesita o secventa de mai multe instructiuni. Pe de alta parte, structurile complexe sunt mai greu si mai scump de realizat, utilizarea lor fiind mai costisitoare.
In prezent pe piata exista atat procesoare CISC cat si RISC. Procesul Pentium (Intel Corporation) reprezinta un exemplu de arhitectura CISC; seriile de procesoare Power PC (dezvoltate de Apple Computer IBM si Motorola) urmeaza arhitectura RISC.
RISC vs. CISC
In anii '70, proiectantii de calculatoare au incercat acoperirea "spatiului semantic" dintre posibilitatile calculatoarelor si necesitatile limbajelor de programare de nivel inalt.
Cu greu s-ar fi gandit atunci cineva sa proiecteze masini mai simple.
In 1980 s-a inceput proiectarea cip-urilor. VLSI pentru UCP fara interpretator, aparand termenul de RISC pentru cip-ul de unitate centrala.
Aceste noi procesoare erau mult mai diferite decat procesoarele de pana atunci, in sensul ca aceste noi UCP-uri nu trebuiau sa pastreze compatibilitatea cu produsele existente.
In aceasta situatie, proiectantii erau liberi sa aleaga noi seturi de instructiuni care maximizau performantele globale ale masinii. Conta mai putin cat dura o instructiune, dar conta numarul de instructiuni care puteau fi lansate in executie intr-o secunda. Caracteristica pregnanta a acestor procesoare a fost numarul relativ mic de instructiuni disponibile (cca. 50) comparativ cu numarul mult mai mare de instructiuni ale altor procesoare de calculatoare ale firmelor IBM, DBC (cca. 250-300).
Acronimul folosit pentru procesoarele calculatoarelor cu set redus de instructiuni este RISC (Calculator cu Set Redus de Instructiuni - Reduced Instruction Set Computer).
S-ar putea crede ca datorita unor avantaje oferite de tehnologia RISC, masinile RISC ar fi trebuit sa detroneze masinile CISC, dar nu s-a intamplat asa.
Care au fost motivele care au generat aceasta situatie:
compatibilitatea cu modelele anterioare;
dezvoltarea unor componente software dedicate gamei de procesoare Intel;
procesoarele Intel au incorporat instructiuni RISC (un nucleu RISC) intr-o arhitectura CISC. Chiar daca aceasta abordare hibrida nu este la fel de rapida ca si cea RISC "pura", le permite obtinerea unei performante globale competitive si rularea vechiului software nemodificat.
Principii de proiectare pentru calculatoarele actuale (principiile proiectarii RISC - RISC design principles) :
1) Toate instructiunile sunt executate direct de catre hardware
Instructiunile uzuale nu sunt interpretate prin microinstructiuni. Eliminarea unui nivel de interpretare conduce la cresterea majoritatii instructiunilor. pentru seturile de instructiuni CISC, instructiunile mai complicate pot fi "sparte" in parti separate, actiune care incetineste masina, dar pentru instructiuni care apar mai rar.
2) Maximizeaza rata de lansare in executie a instructiunilor
In calculatoarele moderne, lansarea in executie a cat mai multe instructiuni
pe secunda este problema principala. Procesorul MIPS (Millions of Instructions per Second) realizeaza paralelismul executiei instructiunilor, ceea ce conduce la imbunatatirea performantelor.
3) Instructiunile trebuie sa fie usor de decodificat
Decodificarea instructiunilor individuale, pentru a determina resursele de care au nevoie, este un factor critic care limiteaza rata de lansare a instructiunilor. Cu cat se folosesc mai putine formate diferite pentru instructiuni, acestea sunt mai eficiente. de asemenea, numarul mic de campuri cu dimensiune prestabilita este o alta componenta care poate eficientiza executia instructiunii.
4) Numai instructiunile LOAD si STORE trebuie sa acceseze memoria
Unul din modurile simple de a descompune operatiile in pasi separati este impunerea conditiei ca operanzii majoritatii instructiunilor sa fie transferati in/din registre.
Deoarece accesul la memorie poate dura mult, cel mai bine ar fi sa se suprapuna executia acestor instructiuni cu a altora, daca ele nu fac altceva decat sa mute operanzi intre registre si memorie.
5) Furnizeaza registre suficiente
Datorita accesului la memorie relativ lent, sunt necesare multe registre (cel putin 32).
Trebuie evitat sa se intre in criza de registre si sa fim obligati sa le salvam in memorie.
Prelucrare simultana
Exista o limita in ceea ce priveste dezvoltarea calculatoarelor foarte rapide, semnalele electrice se propaga prin circuite cu maximum viteza luminii. Chiar si viitoarele 'calculatoare optice' sunt afectate de aceasta limitare.
Deoarece lumina (unda electromagnetica) parcurge o distanta de aproximativ 30 de cm. intr-o nanosecunda (o miliardime de secunda), rezulta ca sporirea vitezei de executie (lucru) a unui calculator devine in ultima instanta o problema de miniaturizare. Intr-un efort de rezolvare a acestei probleme, cercetarea si-a indreptat atentia asupra conceptului de capacitate de transfer (throughput).
Capacitatea de transfer se refera la cantitatea totala de operatii pe care le poate efectua calculatorul intr-un anumit timp.
Imbunatatirea capacitatii de transfer a unui calculator (fara cresterea vitezei de executie) este tangibila prin tehnica de prelucrare simultana (pipelining). Aceasta metoda se refera la posibilitatea ca in orice moment, in conducta (pipe) sa se afle mai multe instructiuni 'in lucru'. O instructiune este executata, alta este decodificata si inca o alta este extrasa din memorie.
Datorita 'prelucrarii' in acelasi timp a 3 instructiuni, capacitatea de transfer a calculatorului creste de 3 ori.
Calculatoare -multiprocesor
Alte solutii pentru cresterea capacitatii de transfer face parte din categoria prelucrarii paralele (parallel processing), in care se utilizeaza mai multe procesoare pentru executarea operatiei curente. Argumentul in favoarea acestei abordari il reprezinta creierul uman.
Sustinatorii prelucrarii paralele se pronunta in favoarea calculatoarelor-multiprocesor, care contin, in opinia lor, configuratii cu un factor de utilizare mult mai ridicat.
5.- Instructiuni aritmetice si logice
Grupul operatiile aritmetice si logice contine instructiuni care solicita operatii aritmetice, logice si de deplasare.
Operatii logice
Operatiile logice AND (SI), OR (SAU), XOR (SAU echivalent) se pot extinde la operatii care combina doua siruri de biti pentru a produce o iesire de forma unui sir de biti, aplicand operatia elementara bit cu bit.
Exemplu 1 0 0 1 1 0 1 0
AND 1 1 0 0 1 0 0 1
1 0 0 0 1 0 0 0
1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0
OR 1 1 0 0 1 0 0 1 XOR 1 1 0 0 1 0 0 1
Operatia AND este utilizata la mascare (masscing).
Exemplu 0 0 0 0 1 1 1 1 operand masca (mask)
AND 1 0 1 0 1 0 1 0
In acest caz operandul denumit masca (mask) determina care parte a celuilalt operand va afecta rezultatul.
Deci operatia AND permite copierea unei parti a unui sir de biti, plasandu-se 0 in partea neduplicata.
Operatia OR poate fi utilizata si ea pentru a copia o parte a unui sir de biti, plasandu-se insa pe pozitiile neduplicate.
Una din utilizarile principale ale operatiei XOR o reprezinta compunerea complementului unui sir de biti, astfel:
1 1 1 1 1 1 1 1
XOR 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
Operatii de rotire si deplasare la nivel de bit
Operatiile de rotire si deplasare furnizeaza posibilitatea de deplasare a bitilor dintr-un registru si sunt folosite la rezolvarea proble- melor de aliniere. Aceste operatii sunt clasificate dupa directia de miscare (stanga/dreapta), tinandu-se cont si daca procesul este circular.
Daca se face deplasarea catre un capat al sirului de biti, bitul de la capatul spre care se face deplasarea dispare, iar la celalalt capat al sirului apare un spatiu liber.
Operatiunile de deplasare se diferentiaza tocmai prin ceea ce se intampla cu acest bit suplimentar in urma deplasarii.
Una din tehnicile de deplasare este sa se plaseze bitul suplimentar in spatiul liber de la celalalt capat. Rezultatul este o deplasare circulara, denumita rotatie.
Alta tehnica de deplasare elimina bitul de la capatul sirului spre care se face deplasarea si completeaza cu 0 spatiul liber aparut la celalalt capat, adica realizeaza o deplasare logica (logical shift).
Se intalnesc adesea deplasari la dreapta care completeaza intotdeauna spatiul liber, cu valoarea bitului de semn; acestea se numesc deplasari aritmetice (arithmetic shift).
Operatii aritmetice (precizari suplimentare)
Aceste operatii pot fi adesea efectuate utilizand doar operatia de adunare, alaturi de negarea logica.
In cazul adunarii:
daca valorile care trebuie adunate sunt stocate utilizandu-se notatia in complement fata de doi, operatia de adunare trebuie realizata ca o operatie de adunare in binar ;
daca operanzii sunt stocati utilizandu-se notatia in virgula mobila pentru adunare, trebuie mai intai efectuata extragerea mantiselor operanzilor, deplasarea acestora la stanga sau la dreapta in functie de valoarea campurilor exponentilor, verificarea bitilor de semn, adunarea propriu-zisa si apoi convertirea rezultatului in virgula mobila.
In cazul celor 2 operatii de adunare, din punctul de vedere al calculatorului intre ele nu exista nici o similitudine.
C o n t r o l e r e
Comunicatia dintre unitatea centrala de prelucrare a unui calculator si un dispozitiv periferic este controlata de un dispozitiv intermediar, denumit controler (controller). Fiecare controler gestioneaza comunicatia cu un anumit tip de dispozitiv periferic. Un controler corespunde fizic unei placi cu circuite electrice.
Controler-ul converteste mesajele si datele la forme compatibile cu caracteristicile interne ale calculatorului respectiv la cele ale dispozitivelor periferice atasate controlerului.
Controlerele sunt atasate la aceeasi magistrala care conecteaza unitatea centrala la memoria principala (vezi fig. 1.8).
Memoria principala
C P U
Magistrala
Controler
Fig. 1.8. Conectarea controlerelor la magistrala unui calculator
Fiecare controler monitorizeaza semnalele transmise de unitatea centrala de prelucrare si raspundere atunci cand ii este adresat un semnal. Abilitatea (facilitatea) unui controler de a accede la memoria principala a calculatorului poarta numele de acces direct la memorie (direct memory access - D M A). Unitatea centrala poate trimite controlerului cereri codificate prin care sa-i ceara sa citeasca un anumit sector de pe disc si sa plaseze aceste date intr-o anumita zona de memorie precizata.
Apoi CPU poate continua executia altor operatii in timp ce controlerul efectueaza cererea solicitata. Dupa terminarea sarcinii atribuite, controlerul transmite prin magistrala calculatorului un anumit semnal catre CPU (astfel de semnale iau forma de intreruperi si vor fi studiate in cap. Sistemul de operare).
Un bloc de memorie utilizat pentru transferul datelor spre si dinspre dispozitivele periferice poarta numele de zona-tampon (buffer). Atasarea controlerelor in magistrala unui calculator mareste semnificativ complexitatea operatiilor de control al comunicatiei de-a lungul acestei cai principale de comunicatie.
Chiar in cazul unei proiectari foarte bune, magistrala principala poate deveni un punct critic, cunoscut sub numele de gatuirea von Neumann (von Neumann bottleneck), se datoreaza concurentei pentru accesul la magistrala intre unitatea centrala de prelucrare si controlere.
Comunicatia intre unitatea centrala si controlere
Comunicatia intre unitatea centrala de prelucrare si un controler este controlata la fel ca si comunicatia dintre CPU si memoria principala.
Faptic, controlerul este reprezentat de un bloc de celule din memoria principala. Atunci cand CPU scrie un sir de biti intr-o celula de memorie din cadrul blocului de memorie (ex. instructiunea STORE), sablonul e transferat de fapt controlerului si nu memoriei. Similar, atunci cand CPU incearca sa citeasca date dintr-una din celulele de memorie (instructiune LOAD), ea primeste un sir de biti de la controler. Acest sistem de comunicatie, denumit mapare in memorie a operatiilor de intrare/iesire (memory mapped I/O) este reprezentata de fig. 1.9.
Memorie principala
C P U
Magistrala
Dispozitiv periferic |
Controler
Fig. 1.9. Reprezentarea principala a maparii in memorie
a operatiilor de I / O
Blocul de adrese asociate unui controler este denumit port, el reprezinta 'poarta' prin care informatiile intra sau ies din calculator.
Intre controler si dispozitivul periferic pe care-l controleaza are loc o comunicare in ambele sensuri. Daca n-ar exista o cale de comunicatie in ambele sensuri intre calculator si imprimanta (de exemplu), imprimanta ar ramane foarte repede in urma.
Comunicatia seriala si paralela
Comunicatia dintre diferite parti ale unui sistem de calcul se efectueaza intr-una dintre cele doua forme elementare paralela sau periala. Este vorba de modul de transfer al sirurilor de biti.
In cazul comunicatiei paralele (parallel communication), toti bitii dintr-un sir sunt transferati simultan, fiecare pe o linie separata. In acest mod se realizeaza transferul rapid al datelor, dar este necesara o linie de comunicatie cu un numar mare de cabluri electrice.
Comunicatia seriala (serial communication) se bazeaza pe transmiterea sirului bit cu bit. Aceasta metoda este mai lenta, dar linia de comunicatie este mai simpla.
Un exemplu obisnuit il reprezinta liniile telefonice, informatiile digitale fiind convertite in semnale audio cu ajutorul unui dispozitiv numit modem (modulator-demulator). Datorita limitarilor impuse de caracteristicile sistemului telefonic existent, o astfel de comunicatie nu se poate realiza prin tehnicile de comunicatie paralela.
Viteza comunicatiei seriale se masoara in biti pe secunda (bps), iar domeniul de variatie se situeaza intre cateva sute de biti pe secunda si milioane de biti pe secunda.
O alta unitate uzitata este rata band (band rate); ea se refera la viteza cu care se schimba starea liniei pe care are loc comunicatia.
O alta metoda de crestere a eficientei transferurilor de date (inclusiv stocarea datelor) este compresia de date (data compression), adica reducerea numarului de biti necesar pentru reprezentarea informatiilor.
In cazul reprezentarii unor siruri de caractere se poate recurge la un cod Huffman (cod dependent de frecventa). In cadrul acestui cod, lungimea unui sir de biti care reprezinta un caracter sa fie invers proportionala cu frecventa de utilizare a caracterului.
In acest fel se obtine o reprezentare mai scurta a textului decat daca am utiliza un cod de lungime uniforma (codul ASCII).
Eforturile de standardizare a tehnicilor de compresie a datelor au dus la includerea acestora in multe din modemurile existente in prezent pe piata. Atunci cand 2 modemuri care utilizeaza scheme de compresie compatibile comunica intre ele, modemul emitator comprima datele inainte de a efectua transmisia, iar modemul receptor decomprima datele dupa receptionarea lor.
Folosind asemenea solutii, modemurile pot obtine rate de transfer echivalente cu 56700 bps, chiar daca de fapt sunt transmisi numai 14400 biti pe secunda, la o rata band de 1200.
Anexa 1.
L i m b a j u l - m a s i n a
Fiecare instructiune/masina are o lungime de doi octeti. Primii patru biti alcatuiesc campul codului de operatie, iar urmatorii doisprezece biti formeaza campul operandului.
In tabelul urmator sunt prezentate instructiunile/masina, in notatie hexazecimala, insotite de o scurta descriere
. Literele R, S si T sunt utilizate in locul cifrelor hexazecimale pentru a reprezenta identificatorul de registri. Literele X si Y sunt utilizate in locul cifrelor hexazecimale in diferite campuri care nu reprezinta registrii.
C o d operatie |
Operand |
D e s c r i e r e |
R X Y |
Incarca (LOAD) registrul R cu valoarea gasita in celula de memorie a carei adresa este X Y. Ex. 1 4 A 3 va avea ca rezultat plasarea continutului celulei de memorie cu adresa A 3 in registrul 4. |
|
R X Y |
Incarca (LOAD) registrul R cu valoarea reprezentata de sirul de biti X Y. Ex. 2 0 A 3 va avea ca rezultat inscrierea valorii A 3 in registrul 0. |
|
R X Y |
Stocheaza (STORE) valoarea registrului R in celula de memorie a carei adresa este X Y. Ex. 3 5 B 1 va avea ca rezultat plasarea continutului registrului 5 in celula de memorie cu adresa B 1. |
|
O R S |
Muta (MOVE) continutul registrului R in registrul S. Ex. 4 0 A 4 va avea ca rezultat copierea continutului registrului A in registrul 4. |
|
R S T |
Aduna (ADD) sirurile de biti din registrii S si T, ca si cum ar fi reprezentari in complement fata de doi, si depune rezultatul in registrul R. Ex. 5 7 2 6 are ca rezultat adunarea valorilor din registrii 2 si 6 si plasarea rezultatului in registrul 7. |
|
R S T |
Aduna (ADD) sirurile de biti din registrii S si T ca si cum ar fi reprezentati in virgula mobila si depune rezultatul in registrul R. Ex. 6 3 4 E are ca rezultat adunarea valorilor din registrii 4 si E ca valori reprezentate in virgula mobila si plasarea rezultatului in registrul 3. |
C o d operatie |
Operand |
D e s c r i e r e |
R S T |
Executa un sau logic (OR) intre sirurile de biti din registrii S si T si depune rezultatul in registrul R. Ex. C B 4 are ca rezultat executarea unui sau logic intre continutul registrilor B si 4 si plasarea rezultatului in registrul C. |
|
R S T |
Executa un si logic (AND) intre sirurile de biti din registrii S si T si depune rezultatul in registrul R. Ex. 8 0 4 5 are ca rezultat executarea unui si logic intre continuturile registrilor 4 si 5 si plasarea rezultatului in registrul 0. |
|
R S T |
Executa un sau exclusiv (XOR) intre sirurile de biti din registrii S si T si depune rezultatul in registrul R. Ex. 9 5 F 3 are ca rezultat executarea unui sau exclusiv intre continutul registrilor F si 3 si plasarea rezultatului in registrul 5. |
|
A |
R O X |
Roteste (ROTATE) sirul de biti din registrul R cu un bit la dreapta de X ori. La fiecare rotatie, bitul cel mai putin semnificativ este mutat pe pozitia bitului cel mai semnificativ. Ex. A 4 0 3 are ca rezultat mutarea circulara la dreapta a continutului registrului 4 de 3 ori. |
B |
R X Y |
Salt (JUMP) la instructiunea plasata in celula de memorie cu adresa X Y daca continutul registrului R este egal cu continutul registrului 0. Altfel se continua executia normala a secventei de instructiuni. Ex. B 4 3 C se compara mai intai continutul registrului 4 cu continutul registrului 0. Daca cei doi registri sunt identici, secventa de executie va fi modificata astfel incat urmatoarea instructiune care se va executa sa fie cea aflata la adresa de memorie 3 C. Altfel, executia progra-mului va continua in mod normal. |
C |
Oprirea (HALT) executiei. Ex. C 0 0 0 are ca rezultat oprirea executiei programului. |
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1372
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved