Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Procesoare. Organizarea CPU. Executarea instructiunilor.

Procesoare. Organizarea CPU. Executarea instructiunilor.

1 Organizarea CPU

Organizarea unei structuri de calcul simple, bazata pe o magistrala, este prezentata in figura  CPU - ul (Unitatea Centrala de Procesare) este "creierul" calculatorului.

Functiunea sa este de a executa programele stocate in memoria principala prin extragerea instructiunilor, decodificarea lor si apoi executarea lor una dupa alta. Componentele sunt conectate printr-o magistrala (bus), care este, din punct de vedere fizic, o colectie de trasee electrice pentru transmiterea adreselor, datelor si a semnalelor de control. Magistrala poate fi externa CPUului, conectand dispozitivele de I/ O si memoria, sau poate fi interna CPU- ului.



CPU este compus din mai multe parti distincte. CU (Unitatea de control) este responsabila pentru extragerea instructiunilor din memoria principala si determinarea tipului lor. ALU(Unitatea Aritmetica - Logica) executa operatii aritmetice si logice, cum ar fi adunarea sau AND logic, care sunt necesare pentru a realizarea instructiunilor.

CPU contine deasemenea o memorie mica de inalta viteza folosita pentru a stoca rezultate temporare si anumite informatii de control. Memoria este alcatuita dintr-un numar de registri, din care fiecare are o anumita marime si functiune. Deobicei, toti registrii au aceeasi marime (lungime). Fiecare registru poate contine un numar, pana la un maximum determinat de marimea registrului. Registrii pot fi cititi si scrisi cu o mare viteza pentru ca sunt interni CPUului.

Registrul cel mai important este PC (Numaratorul de program), care indica adresa

urmatoarei instructiuni care urmeaza sa fie executata. Numele "Numarator de program" este intr-un fel gresit deoarece acest registru nu are nimic de a face cu numararea, dar termenul este foarte folosit. Deasemenea important este IR (Registrul de instructiune), care memoreaza codul instructiunii curente care se executa. Majoritatea calculatoarelor au numeroase alte registre, unele de uz general ca si altele pentru scopuri specifice.

Un exemplu de organizare tipica von Neumann pentru CPU este prezentata in Figura 3.2.

Aceasta structura este numita cale de date (data path) si este alcatuita din registri (tipic de la1 la 32), ALU si mai multe magistrale conectand componentele. Registrii sunt conectati la doi registri de intrare ai ALU, etichetati A si B in figura  Acesti registri memoreaza intrarea ALU in timp ce ALU calculeaza. Calea de date este foarte importanta in toate sistemele de calcul si vom reveni asupra acestui subiect.

Chiar ALU realizeaza adunarea, scaderea, si alte operatii asupra intrarilor sale si oferarezultatul in registrul de iesire. Acest registru de iesire poate fi stocat inapoi intr-un registru.

Mai tarziu, registrul poate fi scris (adica stocat) in memorie, daca se doreste. Nu toate tructurile de calcul au A, B, si registru de iesire. In exemplu este presupusa o operatie de adunare.



Majoritatea instructiunilor pot fi impartite in doua categorii: registru - memorie sau registru -registru. Unele instructiuni registru - memorie permit aducerea cuvintelor de memorie inregistri, unde ele pot fi folosite ca intrari ALU pentru instructiunile corespunzatoare.

Cuvintele (word) sunt unitati de date care se muta intre memorie si registrii. Un cuvant poate fi si un intreg. Alte instructiuni registru - memorie permit ca registrele sa fie stocate inapoi inmemorie.

Celalalt tip de instructiune este registru - registru. O instructiune registru - registru tipica aduce cei doi operanzi din registre, ii depune in registrii de intrare ALU, realizeaza unele operatii cu ele (de exemplu, adunarea sau AND logic) si stocheaza rezultatul intr-unul dintre registri. Procesul trecerii a doi operanzii prin ALU si stocarea rezultatului este numit ciclu caii de date si este partea cea mai importanta a majoritatii CPU - urilor. Prin extensie, el defineste ceea ce poate face masina. Cu cat ciclul caii de date este mai rapid cu atat masina respectiva este mai rapida.

2 Executarea instructiunilor

CPU executa fiecare instructiune intr- o secventa de pasi. In linii mari pasii sunt urmatorii:

1. Extrage instructiunea urmatoare din memorie in registrul de intrare,

2. Schimba numaratorul de programe pentru a indica instructiunea urmatoare,

3. Determina tipul instructiunii care tocmai a fost incarcata,

4. Daca instructiunea foloseste un cuvant din memorie determina unde este el,

5. Daca este necesar, aduce cuvantul intr- un registru CPU,

6. Executa instructiunea,

7. Reia de la pasul 1 pentru a incepe executarea urmatoarei instructiuni.

Aceasta succesiune de pasi este frecvent referita drept ciclul extragere (fetch) - decodificare- executie. Ea este activitatea centrala pentru CPU in toate calculatoarele.

Aceasta descriere a modului cum lucreaza CPU - urile seamana foarte mult cu un program scris in limbaj natural. In figura 3.3 se prezinta un astfel de program rescris intr-o maniera procedurala (Java) si numit interpretor.

Masina care este interpretata are doi registri vizibili din punctul de vedere al utilizatorului:􀂾 numarator de programe (PC), pentru memorarea suitei de adrese ale urmatoareiinstructiuni care trebuie extrase si  acumulatorul (AC), pentru memorarea rezultateor aritmetice.



Ea are deasemenea registri interni pentru memorarea:

􀂾 instructiunii curente (instr),

􀂾 tipului instructiunii curente (instr_type),

􀂾 adresei operandului instructiunii (data_loc),

􀂾 a operandului curent insusi (data).

Se presupune ca instructiunile contin o singura adresa de memorie. Locatia de memorie adresata contine operandul, de exemplu valoarea care sa fie adaugata la acumulator.

public class Interp


private static int get_instr_type(int addr)

private static int find_data(int instr, int type)

private static void execute(int type, int data)


Figura 3.3 Un interpretor pentru un calculator simplu (scris in Java).

Faptul ca este posibil sa se scrie un program care sa simuleze functionarea CPU arata ca nu este necesar ca un program sa fie executat de catre un CPU hardware constand dintr-o cutie plina de electronice. In schimb, un program poate fi executat de alt program care ii extrage, decodifica si executa instructiunile. Un program (ca in figura 3.3) care extrage, decodifica si executa instructiunile altui program este numit interpretor.

Aceasta echivalenta intre procesoarele hardware si interpretoarele software are implicatii importante pentru organizarea si proiectarea sistemelor de calcul. Dupa ce a specificat limbajul masinii, L, pentru un calculator nou, echipa de proiectare decide daca vor sa construiasca un procesor hardware pentru a executa direct programe in L sau, alternativ, daca vor sa scrie un interpretor pentru a interpreta programe pentru L. Daca ei aleg sa scrie un interpretator, ei trebuie deasemenea sa ofere o alta masina hardware care sa ruleze interpretatorul. Anumite constructii hibrid sunt deasemenea posibile cu unele executii hardware, dar si cu interpretare software.

Un interpretor sparge instructiunile unei masini tinta in pasi mici. Ca o consecinta, masina pe care ruleaza interpretorul poate fi mult mai simpla si mai putin scumpa decat un processor hardware pentru masina tinta. Aceasta econimie este semnificativa daca masina tinta are un numar mare de instructiuni si instructiunile sunt complicate, cu multe optiuni. Economia provine in esenta din faptul ca un sistem hardware este inlocuit de un sistem software (interpretator).



Primele computere aveau seturi simple de instructiuni. Dar goana pentru computere mai puternice conduce, printre alte lucruri, la instructiuni individuale mai puternice. Foarte repede s-a descoperit ca instructiunile mai complexe conduc la executii mai rapide ale programelor, chiar daca instructiunile individuale dureaza mai mult. O instructiune in virgula mobila este un exemplu de instructiune complexa. Instructiunile pentru accesarea blocurilor de elemente este alt exemplu. Tot asa de simpla este observatia ca pentru doua instructiuni care apar frevcent consecutiv este preferabila o singura instructiune care poate sa realizeze mai rapid efectul celor doua.

Instructiunile mai complexe sunt preferabile deoarece executarea operatiilor individuale poate fi executata in paralel folosind resurse hardware diferite. Pentru computerele scumpe de inalta performanta costul acesta suplimentar ar putea fi justificat. De aceea computerele scumpe de inalta performanta tind sa aiba mult mai multe instructiuni decat calculatoarele cu un pret mai scazut. Totusi cresterea costului dezvoltarii de software si cerintele de compatibilitate a instructiunilor au creat necesitatea de a implementa instructiuni

O implementare hardware directa, adica neinterpretata, a fost folosita numai in implementarea modelelor scumpe. Calculatoarele simple cu instructiuni interpretate au avut deasemenea alte beneficii. Printre cele mai importante importante au fost:

􀂾 Abilitatea de a repara instructiunile implementate incorect sau a unor deficiente de proiectare in hardware - ul de baza, Oportunitatea de a adauga unele noi instructiuni, cu cost minimal, chiar dupa livrarea masinii,

􀂾 Proiectarea structurata care a permis dezvoltarea eficienta, testarea si documentarea

instructiunilor complexe.