CPU

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea altor utilizări, consultați CPU (dezambiguizare) .
L ' Intel i486DX2 , un procesor implementat ca microprocesor monolitic

În electronică și informatică , în arhitecturavon Neumann a unui computer ,„ unitatea centrală de procesare sau procesorul central (în engleză : central processing unit, în acronim : CPU) este unitatea sau subsistemul logic și fizic care supraveghează funcționalitatea procesării logice a computerul principal; prin aceea că se opune tuturor celorlalte unități de procesare secundare prezente în arhitecturile hardware ale computerelor sau diferitelor plăci electronice ( placă de sunet , placă video , placă de rețea , coprocesor și procesor de semnal digital ). În prezent, CPU-ul este implementat printr-un microprocesor digital de uz general , de obicei bazat pe o „ arhitectură în registre generale .

Prin urmare, CPU are sarcina de a executa instrucțiunile unui program prezent în ROM în procesul de pornire , în memoria principală (sau primară, de ex. RAM ) după ce este preluată din memoria secundară (sau masă) sau din altă dispozitive: în timpul 'executării programului unitatea citește sau scrie date direct din sau în memoria centrală; Dell 'rezultatele finalizării rulării depind de datele pe care operează și de starea internă a procesorului în sine și poate ține evidența instrucțiunilor executate și a datelor citite (vezi cache ).

Istorie

Procesorul apare atunci când, pentru prima dată în istorie, sunt combinate în același dulap două procesoare care anterior aveau întotdeauna conținut diferit în dulap sau în orice caz constituiau blocuri distincte: „ ALU și” unitatea de control . Primul procesor comercializat de poveste este „ IBM 709 Central Processing Unit , [1] un CPU bazat pe tuburi vidate și este disponibil împreună cu„ IBM 709 Data Processing System , un computer al „ IBM comercializat din 1958 .

Dulapul IBM 709 Central Processing Unit are aproximativ dimensiunea unui dulap. Datorită apariției primului tranzistor și apoi a microelectronicii , a fost posibilă conținerea procesorului într-o primă placă electronică și ulterior într-un circuit integrat , apoi într-un spațiu de câțiva centimetri pătrați. În special, primul procesor, deși limitat, deoarece doar 4 biți, adică doar numeric, comercializat și cuprins în întregime într-un circuit integrat este microprocesorul Intel 4004 , comercializat din 1971 , a cărui implementare trebuie să fie italianul Federico Faggin .

Descriere

Structura procesorului

O vedere a părții CPU a pinului

Un procesor generic conține:

  • Unitate de control ( unitate de control sau CU): preia instrucțiuni și date din memoria principală, decodează instrucțiunile și le trimite către o aritmetică și logică pentru a controla apoi execuția acesteia. Odată ce executarea unei instrucțiuni sa încheiat și numai atunci, CU are sarcina de a prelua o nouă instrucțiune și orice date. CU are, de asemenea, sarcina de a trimite date referitoare la rezultatele prelucrării. În cele din urmă, în computerele moderne, CU are sarcina de a organiza munca celorlalte unități de procesare;
  • o ' unitate aritmetică și logică ( Unitate logică aritmetică sau ALU): este responsabilă pentru efectuarea operațiilor logice și aritmetice;
  • un schimbator , conectat direct la ALU, care este implicat în deplasarea spre stânga sau spre dreapta a biților rezultatului unității logice aritmetice, respectiv efectuarea multiplicării și împărțirii prin puteri a două;
  • unele registre interne CPU care au un timp de acces mult mai mic decât memoria principală: valoarea totală a tuturor registrelor CPU constituie starea în care se află la un moment dat. Două registre întotdeauna prezente sunt:
    • Registrul IP (Instruction Pointer) sau PC ( Program Counter ), care conține adresa următoarei instrucțiuni de executat. Este registrul datorită căruia CU știe ce instrucțiune să ia. CPU în sine actualizează contorul;
    • din steagul registrului ( registrul de stare , registrul codului condiției sau CCR), care conține informații speciale, a spus doar steaguri care indică anumite stări ale întregii unități de calcul și unele informații despre rezultatul ultimei operații efectuate. Cele mai importante steaguri sunt:
      • Steaguri de stare:
        • Overflow : indică dacă rezultatul operației anterioare a fost prea mare și, prin urmare, nu poate fi evaluat corect: 0 absența overflow-ului, 1 prezența overflow-ului
        • Zero: indică dacă rezultatul operației este zero sau nu.
        • Carry : (carry) este 1 dacă ultima operație a depășit capacitatea registrului care conține rezultatul, altfel este 0 (exemplu: într-un registru pe 8 biți, care poate reprezenta doar numere de la 0 la 255, suma de 178+ 250 ar avea ca rezultat 172, adică 428-256, iar transportul ar fi setat la 1 împreună cu semnalizatorul de deversare). În operațiile de scădere, obținute ca suma complementului , dar au exact sensul opus.
        • Semn: indică semnul rezultatului operației anterioare: 0 rezultat pozitiv, 1 rezultat negativ. De fapt, nu există un semnal specific, dar acesta este derivat direct din zero și poartă steaguri. În operațiile de scădere cu steag zero = 0 și carry = 1 există un semn pozitiv, cu carry = 0 un semn negativ.
      • Steagul de control:
        • Întrerupere ( întrerupere ): dacă acestei semnalizări i se atribuie o valoare de 1, CPU încetează să mai răspundă la solicitările de servicii externe ale perifericului (s semnale de linie IRQ) până când este restabilit la valoarea 0 sau până când un semnal ajunge din exteriorul RESET .

Un procesor generic trebuie să-și îndeplinească sarcinile sincronizându-le cu restul sistemului, prin urmare este echipat, pe lângă cele de mai sus, și cu unul sau mai multe BUS-uri interne care sunt responsabile pentru conectarea registrelor, ALU-urilor, unităților de control și memorie: în plus controlul intern al unității CPU este controlat de o serie de semnale electrice externe care sunt responsabile de menținerea procesorului conștient de starea restului sistemului și de acțiune asupra acestuia. Tipul și numărul de semnale externe gestionate pot varia, dar unele, cum ar fi RESET , liniile IRQ și CLOCK sunt întotdeauna prezente.

În ceea ce privește înregistrările, CPU le poate gestiona în mai multe moduri: cele mai frecvente nume sunt registre (CPU clasic CISC), fișier registru (RISC) și registre de stivă ( Transputer și altele asemenea).

  • Stiva de registre: registrele sunt organizate într-o structură de stivă; această arhitectură are avantajul că nu trebuie să specificați pe ce registru intern să operați (este întotdeauna cel din partea de sus a stivei), rezultând instrucțiuni mai scurte și mai ușor de decodat. Dezavantajul este că, în cazul în care aveți nevoie de niște date „îngropate” în partea de jos a stivei, recuperarea acestuia este o operațiune foarte lentă.
  • Registre nominative: fiecare registru este identificat individual și instrucțiunile care utilizează registrele specifică de fiecare dată ce registru trebuie să utilizeze. Adesea, unele registre sunt dedicate unor scopuri particulare (registre index, acumulatori, registre de segmente etc.) prin impunerea non-ortogonalității setului de instrucțiuni (vezi mai jos). Marea majoritate a procesoarelor generice din anii 1970 și 1980 sunt de acest tip.
  • Fișiere de înregistrare: Registrele sunt organizate ca o memorie internă a procesorului și indexate: CPU „alocă” un anumit număr de registre pentru fiecare proces în curs de desfășurare și / sau subrutină, eliminând necesitatea accesării RAM pentru a salva pachetele de funcții și sarcini de comutare a datelor în sistemele multitask.

Un procesor este un circuit digital sincron: adică starea sa se schimbă de fiecare dată când primește un impuls de la un semnal de sincronism numit ceas , care, prin urmare, determină viteza de funcționare a acestuia, numită viteza de ceas : prin urmare, timpul de execuție al unei instrucțiuni este măsurat în cicluri de ceas, adică câte impulsuri de ceas sunt necesare pentru ca CPU să-l finalizeze. De fapt, o parte importantă și delicată a fiecărui procesor este sistemul de distribuție care transportă semnalul de ceas către diferitele unități și subunități din care este compus, pentru a se asigura că acestea sunt întotdeauna sincronizate: acest sistem se ramifică într-o structură cu arbore cu divizoare și repetatoare care ajunge peste tot în CPU.

În procesoarele mai moderne ( Pentium , Athlon , PowerPC ), acest lanț electronic de angrenaje poate folosi aproximativ 30% din toate tranzistoarele disponibile. Viteza acestei distribuții determină în mod direct frecvența maximă de funcționare a unui procesor: niciun procesor nu poate fi mai rapid decât calea sa critică , adică timpul necesar ceasului pentru a parcurge cea mai lungă întindere din întregul arbore de distribuție a ceasului. De exemplu, dacă semnalul de ceas al unui proces dat necesită o nanosecundă pentru a trece prin întregul cip și pentru a ajunge la ultima subunitate, acest procesor va putea funcționa la cel mult 1 GHz, deoarece altfel componentele sale interne ar pierde sincronizarea, cu rezultate imprevizibile. Pentru a avea o marjă de siguranță, limita practică este cu mult sub 1 GHz.

Rata maximă de ceas are, evident, un impact major asupra performanței procesorului. Cu toate acestea, acest parametru singur vă permite să evaluați cât de repede CPU este capabil să finalizeze un pas elementar al ciclului de execuție. Performanța unui procesor depinde de fapt de mai mulți parametri arhitecturali, cum ar fi numărul de pași elementari necesari pentru a executa o instrucțiune dată și numărul de instrucțiuni necesare pentru a executa un anumit program. Prin urmare, evaluarea performanței trebuie făcută prin măsurarea timpului necesar procesorului pentru a executa un întreg program. Programele utilizate în acest scop sunt în general standardizate și cunoscute sub numele de repere . [2] [3]

Unități auxiliare CPU

Următoarele unități auxiliare pot funcționa alături de procesor:

Instrucțiuni privind mașina

Instrucțiunile unui CPU apar, pe linia de bază, indistinct de date, deoarece sunt și coduri binare. Distingerea unui cod opțional de un anumit este modul în care este gestionat: mai întâi urmați un principiu fundamental conform căruia instrucțiunile ar trebui să ocupe întotdeauna porțiuni separate de memorie în comparație cu datele, apoi variază modul în care sunt utilizate. Cel puțin teoretic, din cauza unei erori de programare, o referință poate fi scrisă ca instrucțiune și invers, cu rezultate dezastruoase la executarea unui program. Pe baza valorii opcode, unitatea de control efectuează acțiuni predefinite, cum ar fi citirea următoarei locații de memorie indicate de contorul programului pentru încărcarea unei date, sau activarea ALU pentru efectuarea unui calcul sau scrierea conținutului unui registru într-un anumit locația memoriei sau într-un alt registru sau o combinație a acestora.

Scrierea unui program folosind direct coduri operaționale este o operație deosebit de obositoare. Din acest motiv, utilizați ansamblul ', care nu este altceva decât o „traducere directă” setul de coduri de opțiuni care asociază cuvinte la fiecare instrucțiune CPU și introduce o sintaxă care vă permite să exprimați diferite metode de adresare mai intuitiv. Deși utilizarea asamblării este fără îndoială convenabilă în comparație cu scrierea secvențelor de biți, ar trebui totuși menționat că asamblarea nu este un limbaj de programare unic. Potențial, fiecare model de CPU poate avea un ansamblu diferit, deoarece nimic nu necesită să aveți un anumit set de instrucțiuni, mai degrabă decât altul. Cu toate acestea, în realitate, se recomandă păstrarea varietății de seturi de instrucțiuni cât mai restrânse posibil, pentru a nu fi forțați să trebuiască să programeze de la zero toate programele fundamentale pentru funcționarea unui computer, atunci când acesta nu este strict necesar.

O caracteristică importantă a setului de instrucțiuni ale unui CPU este ortogonalitatea sa: adică faptul că orice instrucțiune care folosește registre le poate folosi pe toate indiferent (cu excepția celor „speciale”, cum ar fi IP) și că niciun registru nu este în unele mod privilegiat față de celelalte deoarece se pot efectua anumite operații asupra acestuia: s-a arătat că un set de instrucțiuni ortogonale, cu același timp de execuție al instrucțiunilor și cu numărul de registre, este mai eficient decât unul neortogonal .

Ciclul procesorului

Pictogramă lupă mgx2.svg Același subiect în detaliu: Ciclul de preluare-executare .
Diagrama bloc simplificată a unui procesor

De obicei, CPU-ul este „ Interpretul limbajului mașinii . Ca toți interpreții, se bazează pe următorul ciclu:

  • Achiziție educațională (preluare instrucțiuni): procesorul preia instrucțiunile din memorie, prezentă în adresa (de obicei logică ) specificată de un registru „specific” („specific” opus „generic”), PC
  • Decodare (ansamblu operand): odată ce cuvântul a fost retras, se determină ce operațiune ar trebui efectuată și cum să se obțină operanzii, în funcție de o funcție al cărei domeniu este format din coduri opționale (de obicei biții înalți ai cuvântului ) și codomain constă din urmele microprogramei de executat
  • Executare (Execute): se efectuează calculul dorit. Ultimul pas de execuție este un PC crescut: de obicei unul dacă declarația nu a fost un salt condițional, altfel creșterea depinde de educație și de rezultatul acestei

Acest ciclu elementar poate fi îmbunătățit în diferite moduri: de exemplu, decodarea unei instrucțiuni poate fi făcută simultan în executarea precedentului și citirea din memorie următoare (preinstrucțiune de instrucțiuni) și același lucru se poate face cu datele pe care le Se aștepta să fie instrucțiunile necesare (preluarea datelor). Executarea instrucțiunilor în sine poate fi împărțită în etape mai simple, care urmează să fie efectuate în etape succesive, organizând unitatea de control și ALU în etape consecutive, cum ar fi liniile de asamblare ( conductă " ): în acest mod pot fi efectuate mai multe instrucțiuni „aproape simultan”, fiecare ocupând un stadiu diferit al conductei la un moment dat.

Problema cu această abordare sunt instrucțiunile de salt condițional : CPU nu poate știi a priori dacă va trebui sau nu să execute saltul înainte de a le executa pe cele anterioare, deci trebuie să decidă dacă va seta conducta ținând cont de salt sau nu: iar în caz de predicție incorectă, conducta trebuie golită complet și instrucțiunile fiind decodate recitite de la început, pierzând un număr de cicluri de ceas direct proporționale cu numărul de etape din conductă. Pentru a evita acest lucru, procesoarele moderne au unități interne („Unități de predicție a ramurilor”) al căror scop este să încerce să prezică dacă, având în vedere o instrucțiune de salt condițional și cele executate anterior, saltul ar trebui executat sau nu.

În plus, procesoarele pot implementa mai multe unități de execuție în interiorul lor pentru a efectua mai multe operații simultan. Această abordare mărește performanța procesorului, dar complică foarte mult execuția, dat fiind că, pentru a efectua în mod eficient mai multe sarcini în paralel, CPU trebuie să fie capabil să organizeze instrucțiunile diferit de modul în care acestea sunt organizate de programator ( execuție în afara comenzii ). O dezvoltare ulterioară a acestui concept a fost implementată în procesoarele multicore Itanium , care implementează instrucțiunile predicative care pot sau nu să fie efectuate în funcție de rezultatul altor, efectuate anterior sau simultan.

Clasificare

Arhitectura Von Neumann și arhitectura Harvard

Pictogramă lupă mgx2.svg Același subiect în detaliu: Arhitectura lui von Neumann și arhitectura Harvard .

Pe baza organizării memoriei, se pot distinge următoarele două familii de CPU:

  • cu arhitectura von Neumann , unde datele și instrucțiunile se află în aceeași memorie (prin urmare este posibil să aveți cod auto-modificat ). Această arhitectură este cea mai comună, deoarece este foarte simplă și flexibilă.
  • cu arhitectura Harvard , în care datele și instrucțiunile se află în două amintiri separate. Această arhitectură poate oferi performanțe mai bune, deoarece cele două amintiri pot funcționa în paralel, reducând pericolele structurale , dar este, evident, mult mai complex de gestionat. Este de obicei utilizat în DSP .

Ambele arhitecturi sunt arhitecturi bazate pe registrele generale .

Arhitectura CISC și arhitectura RISC

Când erau puțini tranzistori disponibili pe un singur cip și computerele erau deseori programate în asamblare, era firesc să le exploatezi în așa fel încât să ai procesoare cu instrucțiuni puternice, evoluate și complexe: cu cât acestea erau mai aproape de instrucțiunile limbaje de programare la nivel, cu atât mai mult computer ar fi fost ușor de programat, iar programele ar fi ocupat puțin spațiu de memorie (de asemenea, puțin și prețios). CPU-urile proiectate conform acestei abordări se numesc CISC și aveau unități de control complexe capabile să profite la maximum de câteva registre și ale căror programe aveau o dimensiune relativ mică. La începutul anilor '70 și '80, însă, situația s-a schimbat rapid: memoria RAM a devenit mai ieftină și au apărut primele compilatoare moderne de optimizare, capabile să genereze un limbaj de mașini foarte eficient: din acest motiv am început să ne gândim la un nou mod de a proiecta CPU-urile. , luând în considerare posibilitatea utilizării tranzistoarelor disponibile pentru a avea în schimb multe registre și un set de instrucțiuni elementare foarte redus, care ar delega compilatorului sarcina de a traduce instrucțiuni complexe în seturi de instrucțiuni mai simple, permițând astfel un control deosebit de simplu și rapid unități. În prezent, distincția dintre aceste două clase de arhitecturi a dispărut în mare măsură: numărul tranzistoarelor disponibile pe un singur cip a crescut atât de mult încât poate gestiona multe registre și chiar seturi de instrucțiuni complexe.

Arhitectura CISC

Pictogramă lupă mgx2.svg Același subiect în detaliu: computer set de instrucțiuni complexe .

CISC înseamnă computer complex set de instrucțiuni: de obicei un procesor de acest tip implementează un număr relativ mic (zece) de registre de uz general și are o unitate de control microprogramată: logica programului este stocată într-o memorie rapidă situată în control , în loc să fie exprimat printr-o rețea combinatorie .

Setul de instrucțiuni asociate cu procesoarele de tip CISC este foarte extins și este în general format din câteva sute de coduri de operare diferite care îndeplinesc chiar funcții foarte complexe, inclusiv transferuri de memorie-memorie, absente în RISC; instrucțiunile au o lungime variabilă și pot fi în diferite formate și sunt necesare două sau mai multe (uneori mult mai multe) cicluri ale ceasului pentru a completa o declarație; puteți specifica locația datelor necesare instrucțiunilor folosind multe metode de adresare diferite. Numărul redus de registre interne obligă aceste procesoare să scrie în memorie de fiecare dată când are loc un apel funcțional, care are loc un comutator de context sau un registru care este salvat în stiva de apeluri .

Programarea în asamblare a unui procesor CISC este o sarcină (relativ) ușoară, deoarece instrucțiunile sunt mai apropiate de cele ale limbajelor de nivel înalt .

Arhitectura RISC

Pictogramă lupă mgx2.svg Același subiect în detaliu: computer de set de instrucțiuni redus .

RISC înseamnă computer cu set de instrucțiuni redus. Setul de instrucțiuni tipic RISC este foarte mic, aproximativ șaizeci sau șaptezeci de instrucțiuni foarte de bază (logică, aritmetică și instrucțiuni de transfer memorie-înregistrare și înregistrare-înregistrare): toate au același format și lungime, iar multe sunt executate numai într-un ciclu de ceas. Consecința directă a acestei alegeri de proiectare este că procesoarele RISC au o unitate de control simplă și cu latență redusă, rezervând în același timp mult spațiu pentru registrele interne: un procesor RISC are de obicei de la o sută la câteva mii de registre interne. organizat într-un fișier jurnal. Faptul de a avea un singur format de instrucțiuni permite structurarea unității de control ca o conductă , adică o linie de asamblare în mai multe etape: această inovație are avantajul considerabil de a reduce calea critică în interiorul procesorului și permite RISC-urilor să atingă rate de ceas mai mari decât Analogii CISC.

În cazul schimbării contextului sau al apelului funcțional sau în orice caz de utilizare a stivei de apeluri, RISC adesea în loc de a accesa memoria sistemului utilizează un mecanism numit redenumirea registrului , care constă în redenumirea registrelor care vor fi utilizate pentru noua execuție a zonă diferită a fișierului jurnal, fără a fi nevoie să accesați memoria de fiecare dată.

Comparație între arhitectura RISC și CISC

Simplitatea RISC se traduce printr-o expresivitate mai redusă a limbajului de asamblare : numărul de cuvinte necesare pentru a exprima un calcul într-o mașină RISC este mai mare decât / egal cu omologul CISC: acest lucru se traduce prin programe mai mari, foarte mare în alte epoci, în care memoria RAM era o componentă scumpă și de capacitate redusă. Arhitectura CISC depinde de compilator mai mult decât de RISC: având în vedere că instrucțiunile prevăd metode de adresare multiple și că există instrucțiuni cu semantică complexă, compilatorului i se oferă o gamă largă de opțiuni cu privire la traducerea unei educații și cea mai bună alegere nu este întotdeauna banală. Așa cum se întâmplă adesea în probleme de optimizare, alegerea celei mai bune configurații este o sarcină NP-completă și este de neimaginat să folosiți un compilator care, pentru fiecare instrucțiune, evaluează cea mai bună alegere în funcție de context. Ei cunosc doar niște euristici bune, dar problema de optimizare este o problemă de cercetare deschisă. Prin urmare, aceeași mașină CISC poate fi mai mult sau mai puțin rapidă decât o mașină RISC comparabilă, în funcție de compilatorul utilizat.

Temperaturi de funcționare

Temperatura de funcționare a CPU variază foarte mult de la model la model; în general, cele destinate dispozitivelor portabile au un domeniu de funcționare mai mare și în același mod consum redus în comparație cu modelele destinate stațiilor de lucru fixe.

Temperaturile pot fi controlate în diferite moduri; în unele modele, răcirea nu este necesară, adică nu este fezabilă în mod congenial datorită caracteristicilor mașinilor care trebuie să o acomodeze sau datorită faptului că nu este necesară ca procesoare înainte de 486 (acestea din urmă pot funcționa fără radiator, dar la frecvențe sub 33 MHz).

Modelele ulterioare necesită un radiator de căldură pasiv, iar în acest caz procesoarele Pentium necesită și un ventilator pentru a putea disipa mai bine căldura produsă. [4]

Odată cu creșterea performanței și, astfel, a frecvențelor de funcționare, AMD a implementat funcția Cool'n'Quiet (activată de BIOS ) care, în absența procesării grele a procesorului, reduce frecvența de lucru:

Pictogramă lupă mgx2.svg Același subiect în detaliu: Bug .

Procesoarele pot fi afectate de erori sau de un comportament neașteptat; astfel de defecte pot necesita înlocuirea componentei sau actualizarea microcodului procesorului sau modificarea BIOS-ului sau UEFI.

Unul dintre primele bug-uri ale poveștii a fost bug-ul Pentium FDIV și Halt and Catch Fire , în timp ce în prezent au stârnit multe bug-uri de fanfară Meltdown și Spectre care au lovit aproape toate procesele recente. [5]

Notă

  1. ^ "Informatică", Francesca Cesarini, Fabio Pippolini, John Soda, Edizioni Cremonese , 1988 .
  2. ^ (RO) Chris Hoffman, De ce nu puteți utiliza viteza de ceas a CPU pentru a compara performanța computerului , la How-To Geek. Adus pe 7 februarie 2021.
  3. ^ Etiemble, D., Evoluția procesorului de 45 de ani: o lege și două ecuații, în arXiv: 1803.00254.
  4. ^ Răcire
  5. ^ Bug-urile din CPU: o poveste fără un final fericit - Aprofundarea pe qdss.it. Accesat la 22 mai 2019 (depus de „Adresa URL originală la 16 ianuarie 2018).

Bibliografie

Elemente conexe

Alte proiecte

linkuri externe

Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica