CPU

 In ultimul timp au aparut procesoarele de tip dual core si  quad core, care contin 2 sau 4 procesoare în aceeasi capsula. Acesta lucreaza cu o frecventa de tact de pâna la3 GHz.Pentru a utiliza aceste procesoare, sistemul de operare trebuie sa recunoasca structura multithreading (multifir-executia simultana a mai multor parti ale unui program, fara a se influenta unele pe altele) si sa contina partea de cod care sa permita lucrul în tehnologia multithreadiding. Exemplu: Adobe Photoshop este un program care foloseste tehnologia multithreading. Un astfel de procesor îmbunatateste viteza de executie si eficienta rularii programului, fiecare miez (core) poate executa pâna la 4 instructiuni simultan.Cerintele impuse în proiectarea oricarei variante noi de procesor au fost sa pastreze compatibilitatea cu variantele anterioare, încât orice program care ruleaza pe o anumita varianta de procesor sa poata rula la fel si pe urmatoarele variante. Bineînteles ca noile variante puteau face totdeauna lucruri pe care predecesoarele lor nu le puteau face. Scopul pentru care a fost creat un procesor este de a executa un program, care este compus dintr-o succcesiune de instructiuni. Aceste instructiuni sunt stocate în memorie sub forma de octeti (în general între 1 si 12 octeti pentru o instructiune), la adrese succesive. Principalii parametri ai unui procesor sunt latimea si viteza. Latimea, sau numarul de biti, este influentata de trei caracteristici: magistrala de date, magistrala de adrese si registrele interne.  Viteza procesorului este exprimata prin frecventa de tact (ceasul sistemului) pe care acesta îl primeste de la un oscilator cu cristal de cuart. O perioada (ciclu) a semnalului cu frecventa de tact este unitatea de timp elementara în functie de care se se exprima viteza procesorului. Frecventa de tact se exprima în MHz  sau GHz . 1 Hz înseamna un ciclu (o oscilatie) pe secunda. 

Primul procesor a avut frecventa de tact de ordinul a 5 MHz. Pentru variantele ulterioare, aceasta a crescut la valori succesive de zeci, sute de MHz, ajungându-se actualmente la valori de câtiva GHz.
Procesoarele originale aveau nevoie de 12 perioade (ciclii) pentru a face o instructiune. Apoi, numarul de perioade s-a redus, de exemplu 486 avea nevoie de 2, iar cele începând cu generatia Pentium II pot executa 3 sau mai multe instructiuni pe un ciclu. Rezulta ca procesoarele nu se pot compara din punct de vedere al vitezei doar în functie de frecventa de tact. În concluzie, cresterea numarului de instructiuni/unitatea de timp pentru un procesor se poate face: 
-brut, prin marirea frecventei de tact; 
-printr-o proiectare avansata care sa permita mai multe instructiuni într-unciclu(multithreading).
Legat de frecventa pocesorului trebuie retinut ca celelalte componente de pe placa de baza functioneaza la o frecventa mai mica decât procesorul. În acest sens trebuie amintita magistrala FSB (Front Side Bus) care face legatura între procesor si asa numita punte de nord (North Bridge), care lucreaza la o frecventa fFSB. Frecventa de lucru a procesorului se obtine prin înmultirea fFSB(frecventa magistralei FSB) cu un factor, numit clock multiplier (cm). Exemplu: fFSB=800 MHz, cm=4, rezulta fprocesor= 3200 MHz. Tot legat de frecventa de tact a procesorului trebuie amintita idea de overclocking, adica practica de a face procesorul (si alte componente ale calculatorului) de a functiona peste performantele pentru care au fost proiectate. De exemplu, cresterea frecventei de tact a procesorului se poate face prin modificarea factorului de multiplicare sau a frecventei magistralei FSB. Acest lucru se realizeaza practic prin modificari în programul BIOS setup sau modificari ale unor comutatoare de pe placa de baza. 
                           Magistrale

Din punct de vedere constructiv procesorul are o multime de pini (terminale). Acestiase pot grupa în trei mari categorii: pinii magistralei de date, pinii magistralei de adresesi pinii magistralei de control. Procesorul este conectat prin intermediul acestor treimagistrale la pini similari ai memoriilor sau echipamentelor de intrare-iesire. Altfel spus, o magistrala este constituita dintr-o multime de linii (fire) paralele. Pentru a vorbi despre magistrale este necesar sa se cunoasca (reaminteasca) ce este aceea memorie. Memoria este un dispozitiv care contine mai multe locatii, fiecare putând memora un octet. Fiecare locatie are o adresa. Magistrala de date este „poarta” pe care intra sau iasa informatia propriuzisa în/din procesor (atât datele cât si programele, acestea din urma doar ca intrare) de la sau catre memorie. Caracteristica sa principala este numarul de biti (largimea). Initial, procesoarele aveau magistrale de date de 8 biti, apoi acest numar a cresut, având succesiv valorile: 16, 32 sau 64 de biti. Prin magistrala de adrese, procesorul precizeaza adresa din memorie a octetului care urmeaza sa fie citit sau scris. Si în acest caz caracteristica principala este numarul de biti. Acesta a evoluat în timp, având urmatoarele valori: 16, 20, 32, 36, 44. Marimea (latimea) acestei magistrale determina dimensiunea maxima a memoriei pe care procesorul o poate adresa. Asa cum s-a precizat anterior, latimea unui procesor depinde de magistralele de date si adrese. Astfel, un procesor cu n biti în magistrala de adrese poate adresa 2^n locatii de memorie. Un procesor cu m biti pe magistrala de date poate citi sau scrie într-o
singura instructiune cuvinte de m biti.Un registru este o locatie speciala pentru memorarea datelor din interiorul procesorului permitând cea mai mare viteza de citire sau scriere dintre toate dispozitivele calculatorului. Toate datele trebuie introduse în registre înainte de prelucrare. Fiecare procesor are mai multe registre, unele având functii dedicate, altele de uz general. În general, latimea, în biti a registrelor procesorului este aceeasi cu cea a magistralei de date.


Totusi, prin magistralele de adrese si date se poate accesa si altceva în afara de locatii
de memorie. Anume, daca nivelul logic al tensiunii de pe un pin numit Memory (din magistrala de control) se modifica din 1 în 0, procesorul semnalizeaza faptul ca doreste ca adresa respectiva sa fie interpretata de o locatie dintr-un spatiu total diferit. Deoarece rolul principal al acestor locatii este sa transfere informatii între procesor si alte parti ale PC-ului, inclusiv spre exterior, respectivul spatiu a fost numit spatiul porturilor de intrare/iesire (I/O, input-output) al PC-ului. Indiferent câte linii de adrese are procesorul în total, pentru porturile de intrare-iesire sunt folosite doar 16. Deosebirea esentiala între porturile de intrare-iesire si memorii consta în actiunile care se efectueaza asupra datelor: când se scriu octeti într-un port, acestia vor ajunge la un dispozitiv hardware receptor (exemplu: monitor, imprimanta), iar când se citesc, acestia reprezinta informatia receptionata de port din exterior (exemplu: tastatura, mouse), adica, în general nu se citeste ceea ce a fost scris initial, cum se întâmpla la memorii. Multe dispozitive folosesc o gama de adrese de intrare/iesire, exprimata ca un interval de numere hexazecimale. Magistrala de control are rolul de a regla fluxul si cadenta datelor de la si catre UCP,
precum si alte câteva functii. Pinii care compun aceasta magistrala au functii individuale, spre deosebire de cei din magistralele de date si adrese. Pe lânga pinii din cele 3 magistrale mai exista si pinii la care trebuie aplicate
tensiunile continue de alimentare.
Structura unui procesor. Unitatea aritmetica si logica. Registre mai importante Procesorul este format în principal din unitatea aritmetica si logica (UAL) si mai multe registre, care sunt legate împreuna prin magistrale interne. Unul dintre cele mai importante registre al unui procesor este registrul numarator de program (program counter, PC). Acesta contine totdeauna adresa din memorie a instructinunii care se executa (sau urmeaza sa se execute), si îsi modifica continutul în ritmul executarii programului. De asemenea, un alt registru important este si registrul de instructiuni, care pastreaza instructiunea în curs de executie. În plus, UCP contine mai multe registre de uz general. UAL executa asupra datelor de intrare operatii aritmetice (adunari, scaderi, înmultiri,împartiri), operatii logice (SI, SAU) si alte operatii simple. În fig. 3.1 se prezinta o parte a UCP, numita „calea de date von Neumann”, având ca element central UAL. În continuare se exemplifica realizarea unei adunari de catre aceasta structura.
1. Cei doi operanzi, O1 si O2, se afla în doua registre de uz general, A si B.
2. Operanzii sunt transferati în cele doua registre de intrare ale UAL.
3. UAL calculeaza rezultatul adunarii, si depune rezultatul în registrul de iesire.
4. Rezultatul este mutat în alt registru de uz general al UAL, C.Apoi, daca se doreste, continutul registrului C poate fi transferat în memorie.

Majoritatea instructiunilor sunt de tipul registru-registru sau registru-memorie. În
primul caz, operanzii (operandul) sunt extrasi din registre si adusi în registrele de
intrare ale UAL, iar rezultatul este depus într-un alt registru. În al doilea caz,
operanzii (operandul) sunt adusi din memorie în registre, de unde pot fi folositi ca
date de intrare pentru UAL. Rezultatul este depozitat înapoi în memorie.
În principiu, pasii pe care îi realizeaza procesorul la executia unei instructiuni sunt
urmatorii:
1. Transfera instructiunea din memorie în registrul de instructiuni (extrage instructiunea).
2. Schimba numaratorul de program astfel încât acesta sa indice adresa urmatoarei instructiuni (continutul acestuia creste cu un numar egal cu numarul de octeti al instructiunii în curs de executie).
3. Determina tipul instructiunii proaspat extrase (decodifica).
4. Daca instructiunea are nevoie de un operand (cuvânt) din memorie, determina unde se gaseste acesta.
5. Extrage (aduce) cuvântul respectiv în unul dintre registrele UCP, daca este cazul.
6. Executa instructiunea.
7. Salt la pasul 1 pentru a începe executia instructiunii urmatoare.Deseori, aceasta secventa de pasi este denumita ciclul extrage-decodifica-executa (fetch-decode-execute).Trebuie precizat ca exista situatii când executia programului contine ramificatii sau salturi, adica instructiunile executate nu sunt situate la locatii succesive în memorie.În acest caz la punctul 6 de mai sus efectul instructiunii este ca în registrul numarator de program este introdusa adresa instructiunii de salt, care este diferita de adresa instructiunii introduse la punctul 2.

Alte caracteristici ale procesoarelor


Tehnica pipeline În scopul cresterii vitezei de executie a instructiunilor, procesoarele folosesc tehnica numita pipeline (banda de asamblare sau conducta).
Astfel, executia unei instructiuni este împartita în mai multe parti, de fiecare parte ocupându-se o componenta hardware dedicata (unitate) a procesorului. Toate unitatile hardware pot sa functioneze în paralel.
În imaginea alaturata este prezentata o banda de asamblare cu 4 unitati (numite si segmente), S1 pentru extragere instructiune, S2 pentru decodificare, S3 pentru extragere operanzi iar S4 pentru executie.

Functionarea este prezentata în continuare: -pe perioada ciclului 1, unitatea S1 extrage instructiunea 1 (I1) din memorie; -pe perioada ciclului 2, unitatea S1 extrage instructiunea 2 (I2) din memorie, iar unitatea S2 decodifica I1; -pe perioada ciclului 3, unitatea S1 extrage instructiunea 3 (I3) din memorie, unitatea S2 decodifica I2, iar unitatea S3 extrage operanzii pentru I1; -pe perioada ciclului 4, unitatea S1 extrage instructiunea 4 (I4) din memorie, unitatea S2 decodifica I3, unitatea S3 extrage operanzii pentru I2, iar unitatea S4 executa I1. Astfel, dupa 4 cicluri, instructiunea 1 este executata complet, instructiunea 2 este executata în proportie de 75%, etc.

Memoria intermediara
În general, procesoarele pot lucra la viteze mult mai mari în raport cu memoriile.          
Introducerea unei memorii mai mari în interiorul UCP i-ar creste acesteia
dimensiunile si costul. Memoria intermediara sau cache (de la frantuzescul cacher, a
ascunde) este o memorie de capacitate mai mica dar foarte rapida. Memoria principala
a calculatorului (identificata de obicei ca RAM) are o capacitate foarte mare dar este
mai lenta. Ideea de baza a memoriei intermediare este urmatoarea: cuvintele de
memorie cele mai frecvent utilizate sunt pastrate în memoria intermediara; doar când
UCP nu gaseste un cuvânt, îl cauta în memoria principala.
Orice procesor are un controler de memorie cache care este responsabil cu aducerea datelor din memoria principala în cea de tip cache. O caracteristica a memoriei cache este raportul dintre cache hit (numarul de accesari reusite la memoria cache, adica atunci când datele de care procesorul avea nevoie au fost gasite în memoria cache) si numarul total de accesari.
Termenul de cache miss se refera la cazurile în care datele solicitate de procesor nu au fost
încarcate în prealabil în memoria cache, urmând sa fie preluate din memoria principala, mai lenta. De exemplu, un procesor Intel Core Duo 6600 are o memorie intermediara pe doua        
niveluri. Exista o pereche de memorii intermediare de 32 KB pentru instructiuni si 32
KB pentru date, chiar în cipul UCP (level 1-nivelul 1), precum si o memorie
intermediara unificata, situata tot în interiorul capsulei circuitului integrat care
gazduieste UCP, legata de UCP printr-o cale de mare viteza (nivelul doi), de 4 MB.
Ambele memorii ruleaza la frecventa cu care lucreaza si procesorul, adica 2 GHz.
Procesorul Itanium a fost construit chiar cu 3 niveluri de memorie cache. Pentru alte procesoare dual core sau quad core memoria cache L2 este în gama 6MB -12 MB, asa cum rezulta si din tabelul da la pag. 12. Acesata memorie este
folosita în comun de toate procesoarele.
Modul protejat :Initial, procesoarele (8088 si 80286) rulau în asa numitul mod real. În acest mod, sistemul de operare (asigura gestionarea resurselor hardware si software ale calculatorului si interfata cu utilizatorul) era de tipul single-tasking, adica numai un program rula la un moment dat. Sistemul de operare folosea instructiuni de 16 biti si putea adresa 1 MB de memorie. Nu exista protectie incorporata pentru ca un program sa nu suprascrie peste un alt program sau chiar peste sistemul de operare. Astfel, daca rulau mai multe programe, întregul sistem se putea bloca. O importanta facilitate a procesoarelor, aparuta odata cu generatia Intel 386, o reprezinta existenta modului protejat. Conform acestui mod nu se pot face scrieri la orice adresa din spatiul de memorie. Acest mod este folosit pentru facilitarea unui mod de lucru multitasking foarte bun. Modul multitasking înseamna ca pe un calculator pot rula în acelasi timp mai multe programe aplicatie, fara ca ele sa interfere unul cu celalalt. Sistemele de operare scrise pentru aceste calculatoare opereaza cu instructiuni pe 32 de biti si pot adresa întregul spatiu de memorie. Un program eronat nu putea deteriora alte programe sau sistemul de operare. Putea fi terminat, în timp ce restul sistemului continua sa functioneze fara a fi afectat.
Întreruperi
Un alt aspect important al procesoarelor este conceptul de întrerupere. În principiu prin întrerupere se întelege întreruperea executiei normale a unui program datorita unui eveniment care a avut loc în exteriorul sau în interiorul UCP. Ca efect, programul în rulare va fi întrerupt si se va face un salt la un alt program a carui adresa depinde de evenimentul care a generat întreruperea. Programul respectiv trebuie sa realizeze niste actiuni în functie de evenimentul (sursa) care a generat întreruperea. Dupa efectuarea acelui program, procesorul va continua cu rularea programului initial, din punctul în care a fost întrerupt. O alternativa mult mai putin eficienta este ca UCP sa verifice periodic daca anumite evenimente au avut loc. În acest caz s-ar pierde timp în situatiile în care verificarea se face degeaba. În plus, s-ar putea ca anumite evenimente sa apara între doua verificari consecutive, iar deservirea lor ulterioara sa fie prea târzie. Semnalele (cererile) de întreruperi pot veni de la diverse surse. De exemplu, apasarea unei taste, receptia unui octet la portul serial sau conectarea unui dispozitiv la un port USB genereaza întreruperi. Acestea sunt întreruperi hardware. Întreruperile initiate în urma executiei unui program se numesc întreruperi software (de exemplu la realizarea unei împartiri cu zero).



IRQ (Interrupt ReQuest line) reprezinta liniile prin care dispozitivele hardware pot cere întreruperi procesorului. Fiecare dispozitiv (porturi, tastatura, hard disc,...) are alocata o astfel de linie, numita IRQi, cu i având valori între 1 si 15. Cele 15 linii sunt conectate la intrarile a doua circuite speciale numite controllere de întreruperi, legate în cascada, de unde o singura linie este conectata la o intrare speciala (pin) al procesorului. Procesoarele din familia Intel accepta 256 de tipuri de întreruperi (15 hardware), fiecare corespunzând unui anumit eveniment. Prin constructie, s-a stabilit modalitatea de determinare a adresei unde se va face saltul pentru deservirea întreruperii, astfel: în memorie exista o tabela, cu 1024 de locatii, situata chiar la începutul memoriei; pentru fiecare întrerupere exista alocati 4 octeti, în functie de care se calculeaza adresa de salt. Aceasta tabela este creata în timpul procedurii de initializare a sistemului, de catre programul continut în memoria ROM BIOS.
Tehnica DMA
O alta caracteristica standard a procesoarelor din PC-uri este tehnica DMA. De fiecare data când are loc un transfer între un dispozitiv de intrare-iesire (prin intermediul unui port) catre memorie sau invers, acesta are loc în doua etape: în prima octetul este citit de UCP într-unul dintre registre, iar în a doua octetul este scris în memorie. Daca numarul de octeti care trebuie transferat este mare, aceasta metoda are dezavantajul ca UCP nu poate face altceva în acel timp si, respectiv, transferul se face în doi pasi. Pentru a elimina acest neajuns, proiectantii PC-urilor au decis sa incorporeze în acesta un circuit (procesor) suplimentar, numit controller de acces direct la memorie (Direct Memory Access, DMA). Astfel, UCP poate sa-i spuna controller-ului de DMA sa transfere un bloc de octeti din memorie într-un dispozitiv de iesire, sau în sens invers, dintr-un dispozitiv de intrare în memorie. Un PC are 8 canale DMA, folosite de placa de sunet, unitatile de hard disc si de discheta, etc.
Când PC-ul este pus sub tensiune, procesorul sare automat la adresa FFFF0h, asteptând sa gaseasca aici instructiuni de executat. Rezulta ca la adresa respectiva trebuie sa existe memorie ROM, care pastreaza informatia în permanenta. Deoarece aceasta adresa este cu exact 16 octeti mai jos de sfârsitul primului megaoctet (MB) de memorie, care reprezinta tot ceea ce vede procesorul la pornire, la adresa respectiva trebuie înscrisa o adresa de salt la o adresa mai mica.
   Un program reprezinta o lista secventiala de instructiuni.
Un procesor poate sa faca în principal urmatoarele trei tipuri de instructiuni:
-operatii aritmetice si logice pe baza UAL
-poate transfera un operand dintr-o locatie de memorie în alta
- poate testa rezultatul operatiilor efectuate si apoi, functie de rezultatul testului, poate
face salturi în program.
Exista mai multe tipuri de limbaje de programare:
-Limbaje de nivel înalt (C, Pascal, BASIC)
-Limbaje de nivel coborât, numite limbaje de asamblare.
Orice program trebuie translatat într-un limbaj masina pe care îl întelege procesorul. Acest
lucru este realizat de programe numite complilatoare, interpretoare sau asambloare.
Exemple de instructiuni în limbaj de asamblare:
• LOADA mem – Încarca registrul A cu continutul locatiei de memorie de la
adresa mem.
• LOADB con – Încarca registrul B cu constanta con.
• SAVEB mem – Salveza registrul B în locatia de memorie de la adresa mem.
• ADD – Aduna registrele A si B si depune rezultatul în registrul C.
• SUB – Scade registrele A si B si depune rezultatul în registrul C.
• JUMP addr – Salt la adresa addr
• JNEQ addr – Salt, la adresa addr, daca operandul A nu este egal cu B.
Fiecare instructiune în limbaj de asamblare este reprezentata prin 1, 2 sau mai multi octeti. Aceste numere binare reprezinta limbajul masina. Astfel, un program este reprezentat printr-un numar de octeti în memorie.