Operatia fundamentala a majoritatii procesoarelor, indiferent de forma fizica pe care o au, este de a executa o secventa de instructiuni stocate, care se numeste program. Instructiunile de executat sunt pastrate intr-un fel de memorie-computer. Aproape toate procesoarele urmeaza preluarea, decodarea si executarea pasilor in functionarea lor, care sunt colectiv cunoscute sub numele de ciclu de instructiuni.
Dupa executarea unei instructiuni, intregul proces se repeta, urmatorul ciclu de instructiuni obtinand in mod normal instructiunea urmatoare in secventa din cauza valorii crescute in contorul de programe. Daca a fost executata o instructiune de salt, contorul de program va fi modificat pentru a contine adresa instructiunii la care s-a executat acel salt si executia programului continua normal. In procesoare mai complexe, mai multe instructiuni pot fi obtinute, decodate si executate simultan.
Aceasta sectiune descrie ceea ce este denumita in general “conducta RISC clasica”, care este destul de comuna intre procesoarele simple utilizate in multe dispozitive electronice (adesea numite microcontrolere). Ignora in mare masura rolul important al memoriei cache a procesorului si, prin urmare, etapa de acces a conductei.
Unele instructiuni manipuleaza contorul programului, mai degraba decat producerea directa a rezultatelor; aceste instructiuni sunt in general numite „salturi” si faciliteaza comportamentul programului precum bucle, executarea conditionata a programului (prin utilizarea unui salt conditionat) si existenta functiilor. In unele procesoare, unele alte instructiuni modifica starea bitilor intr-un registru al „steagurilor” – flag register.
Aceste steaguri pot fi folosite pentru a influenta modul in care se comporta un program, deoarece acestea indica deseori rezultatul diferitelor operatiuni. De exemplu, in astfel de procesoare, o instructiune „compara” sau evalueaza doua valori si stabileste sau sterge biti in registrul steagurilor pentru a indica care este mai mare sau daca sunt egale; unul dintre aceste steaguri ar putea fi apoi folosit de o instructiune de salt ulterioara, pentru a determina fluxul programului.
Fetch
Primul pas, preluarea – presupune preluarea unei instructiuni (care este reprezentata de un numar sau o secventa de numere) din memoria programului. Locatia instructiunii (adresa) in memoria programului este determinata de un contor de program (PC), care stocheaza un numar ce identifica adresa urmatoarei instructiuni, care urmeaza sa fie preluate.
Dupa obtinerea unei instructiuni, computerul este incrementat cu lungimea instructiunii, astfel incat va contine adresa instructiunii urmatoare din secventa. Deseori, instructiunea care trebuie obtinuta trebuie sa fie preluata din memoria relativ lenta, provocand CPU sa se opreasca, in asteptarea returnarii instructiunii. Aceasta problema este abordata in mare parte in procesoarele moderne, prin memoria cache si arhitectura conductei.
Decodificare
Instructiunea pe care CPU o preia din memorie determina ce va face procesorul. In etapa de decodare, realizata de circuitul cunoscut sub numele de decodificator de instructiuni, instructiunea este transformata in semnale care controleaza alte parti ale procesorului.
Modul in care instructiunea este interpretata este definit de arhitectura setului de instructiuni al procesorului (ISA), care trebuie efectuata, in timp ce campurile ramase furnizeaza de obicei informatii suplimentare necesare operatiei, cum ar fi operanzii. Acesti operanzi pot fi specificati ca o valoare constanta (numita valoare imediata) sau ca locatie a unei valori care poate fi un registru de procesare sau o adresa de memorie, asa cum este determinat de un anumit mod de adresare.
In unele modele de procesor, decodorul de instructiuni este implementat ca un circuit cu fir, fara switch. In altele, un microprogram este folosit pentru a traduce instructiuni in seturi de semnale de configurare a procesorului, care sunt aplicate secvential pe mai multe impulsuri de ceas. In unele cazuri, memoria care stocheaza microprogramul este rescrisa, ceea ce face posibila schimbarea modului in care procesorul decodeaza instructiunile.
Executie
Dupa etapele de preluare si decodare, se trece la pasul de executie. In functie de arhitectura procesorului, aceasta poate consta dintr-o singura actiune sau o succesiune de actiuni. In timpul fiecarei actiuni, diverse parti ale procesorului sunt conectate electric, astfel incat acestea sa poata efectua total sau partial operatiunea dorita si apoi actiunea este finalizata, de obicei ca raspuns la un impuls de ceas. Foarte des rezultatele sunt scrise intr-un registru intern al procesorului pentru acces rapid prin instructiunile ulterioare. In alte cazuri, rezultatele pot fi scrise in memoria principala mai lenta, dar mai scumpa si cu o capacitate mai mare.
De exemplu, daca se executa o instructiune de adaugare, intrarile unitatii logice aritmetice (ALU) sunt conectate la o pereche de surse operand (numere care trebuie insumate), ALU este configurat pentru a efectua o operatie de adaugare, astfel incat suma din intrarile de operand vor aparea la iesirea sa, iar iesirea ALU este conectata la stocare (de exemplu, un registru sau o memorie) care va primi suma. Cand apare pulsul de ceas, suma va fi transferata in stocare si, daca suma rezultata este prea mare (adica este mai mare decat dimensiunea cuvantului de iesire ALU), va fi setat un steag aritmetic de preaplin.
Structura si implementarea
In circuitul procesorului este implementat la nivel hardware, un set de operatii de baza pe care le poate efectua, numit set de instructiuni. Astfel de operatiuni pot implica, de exemplu, adaugarea sau scaderea a doua numere, compararea a doua numere sau saltul la o parte diferita a unui program. Fiecare operatie de baza este reprezentata de o combinatie particulara de biti, cunoscuta sub denumirea de cod de operare a limbajului masinii; in timp ce executa instructiuni intr-un program de limbaj al masinii, procesorul decide ce operatie trebuie efectuata prin „decodarea” codului optional.
O instructiune completa a limbajului masinii consta dintr-un cod de operare si, in multe cazuri, biti suplimentari care specifica argumente pentru operatie (de exemplu, numerele care trebuie insumate in cazul unei operatii de adaugare). Urmand scara complexitatii, un program de limbaj masina este o colectie de instructiuni de limbaj masina, pe care CPU le executa.
Operatia matematica reala pentru fiecare instructiune este realizata de un circuit logic combinational in procesor, cunoscut sub numele de unitate logica aritmetica sau ALU. In general, un procesor executa o instructiune preluand-o din memorie, utilizand ALU-ul sau pentru a efectua o operatie, apoi stocand rezultatul in memorie. Pe langa instructiunile pentru operatiuni matematice si logice intregi, exista alte alte instructiuni ale masinilor, cum ar fi cele pentru incarcarea datelor din memorie si stocarea acestora ulterioara, operatii de ramificare si operatii matematice pe numere in virgula flotanta, efectuate de unitatea cu punct flotant al CPU (FPU).
Unitatea de comanda
Unitatea de control (CU) este o componenta a procesorului care conduce functionarea procesorului. Aceasta comunica cu memoria computerului, indicand unitatii aritmetice si logice si dispozitivelor de intrare si iesire, cum sa raspunda la instructiunile care au fost trimise procesorului.
Acesta directioneaza functionarea celorlalte unitati prin furnizarea de semnale de timp si control. Majoritatea resurselor informatice sunt gestionate de CU. Acesta directioneaza fluxul de date intre procesor si celelalte dispozitive. John von Neumann a inclus unitatea de control ca parte a arhitecturii von Neumann. In proiectele moderne de computer, unitatea de control este, de obicei, o parte interna a procesorului, cu rolul si functionarea acesteia, fiind neschimbate de la introducerea sa.
Unitate logica aritmetica
Unitatea de logica aritmetica (ALU) este un circuit digital in cadrul procesorului care efectueaza operatiuni aritmetice si logice in bit. Intrarile catre ALU sunt fluxurile de date pe care trebuie sa le opereze (numite operanzi), informatii despre starea operatiunilor anterioare si un cod de la unitatea de control care indica ce operatie trebuie efectuata. In functie de instructiunile care se executa, operanzii pot proveni din registrele interne ale procesorului sau din memoria externa sau pot fi constante generate de ALU in sine.
Cand toate semnalele de intrare au fost decodate si propagate prin circuitele ALU, rezultatul operatiei efectuate apare la iesirile ALU. Rezultatul consta atat dintr-o insiruire de date, care poate fi stocata intr-un registru sau memorie, cat si din informatii de stare, care sunt de obicei stocate intr-un registru de procesare special, intern, rezervat in acest scop.
Unitate de generare de adrese
Unitatea de generare de adrese (AGU), uneori numita si unitate de calcul de adrese (ACU), este o unitate de executie din interiorul procesorului care calculeaza adresele utilizate de CPU pentru a accesa memoria principala. Avand calcule de adresa gestionate de circuite separate care functioneaza in paralel cu restul procesorului, numarul ciclurilor CPU necesare pentru executarea diverselor instructiuni ale masinii poate fi redus, aducand imbunatatiri ale performantei.
In timp ce efectueaza diferite operatii, procesoarele trebuie sa calculeze adresele de memorie necesare pentru preluarea datelor din memorie; de exemplu, pozitiile din memorie ale elementelor matricei trebuie sa fie calculate inainte ca CPU sa preia datele din locatiile de memorie reale. Aceste calcule de generare de adrese implica diferite operatii aritmetice intregi, cum ar fi adunarea, scaderea, operatiile de modul sau schimbarile de biti.
Adesea, calcularea unei adrese de memorie implica mai multe instructiuni de masina cu scop general, care nu se decodeaza si se executa rapid. Prin incorporarea unui AGU intr-un design al procesorului, impreuna cu introducerea instructiunilor specializate care utilizeaza AGU, diverse calcule de generare de adrese pot fi descarcate de la restul procesorului si adesea pot fi executate rapid intr-un singur ciclu de procesor.
Capacitatile unui AGU depind de un anumit procesor si de arhitectura acestuia. Astfel, unele AGU implementeaza si expun mai multe operatiuni de calcul al adreselor, in timp ce altele includ, de asemenea, instructiuni de specialitate mai avansate, care pot opera pe mai multi operanzi simultan.
In plus, unele arhitecturi de procesor includ mai multe AGU-uri, astfel incat mai mult de o operatiune de calcul adresa poate fi executata simultan, aducand imbunatatiri suplimentare de performanta prin valorificarea caracterului suprascalar al proiectelor avansate de procesor. De exemplu, Intel incorporeaza mai multe AGU-uri in microarhitecturile sale Sandy Bridge si Haswell, care cresc latimea de banda a subsistemului de memorie al procesorului, permitand executarea in paralel a instructiunilor de acces la memorie.