moștenirile de modele anterioare, cum ar fi Babbage diferență motor și mainframe carte de pumn sisteme de anii 1970, au un impact semnificativ asupra astăzi sistemele informatice. În primul meu articol din această serie istorică, istoria computerelor și computerele moderne pentru sysadmini, am discutat despre mai mulți precursori ai computerului modern și caracteristicile enumerate care definesc ceea ce numim astăzi un computer.,în acest articol, discut despre unitatea centrală de procesare (CPU), inclusiv componentele și funcționalitatea acesteia. Multe dintre subiecte se referă la primul articol, așa că asigurați-vă că îl citiți dacă nu ați făcut-o deja.

unitatea centrală de procesare (CPU)

procesorul din computerele moderne este întruchiparea „Morii” din motorul diferenței lui Babbage. Termenul unitate centrală de procesare își are originea în ceața timpului computerului, când un singur cabinet masiv conținea circuitele necesare pentru a interpreta instrucțiunile programului la nivel de mașină și pentru a efectua operațiuni pe datele furnizate., Unitatea centrală de procesare a finalizat, de asemenea, toate prelucrările pentru orice dispozitive periferice atașate. Perifericele includ imprimante, cititoare de carduri și dispozitive de stocare timpurie, cum ar fi unități de tambur și disc. Dispozitivele periferice moderne au o cantitate semnificativă de putere de procesare în sine și dezactivează unele sarcini de procesare de la CPU. Acest lucru eliberează CPU-ul de sarcinile de intrare/ieșire, astfel încât puterea sa să fie aplicată sarcinii principale la îndemână.

calculatoarele timpurii aveau doar un singur procesor și puteau efectua o singură sarcină la un moment dat.,păstrăm termenul CPU astăzi, dar acum se referă la pachetul de procesoare de pe o placă de bază tipică. Figura 1 afișează un pachet standard de procesor Intel.

Imagine

Figura 1: Un procesor Intel Core i5 pachet (Jud McCranie via Wikimedia Commons CC BY-SA 4.0).

nu este nimic de văzut aici decât pachetul procesorului în sine. Pachetul de procesoare este un cip care conține procesorul(ele) sigilat (e) în interiorul unui recipient metalic și montat pe un mic circuit imprimat (PC) bord., Pachetul este pur și simplu a scăzut în loc în soclul procesorului pe o placă de bază și securizat cu un aranjament pârghie de blocare. Un cooler CPU se atașează la pachetul procesorului. Există mai multe prize fizice diferite, cu un număr specific de contacte, astfel încât obținerea pachetului corect pentru a se potrivi soclului plăcii de bază este esențială dacă vă construiți propriile computere.

cum funcționează CPU

să ne uităm la CPU în detaliu. Figura 2 este o diagramă conceptuală a unui procesor ipotetic, astfel încât să puteți vizualiza componentele mai ușor., Memoria RAM și ceasul de sistem sunt umbrite, deoarece nu fac parte din procesor și sunt afișate doar pentru claritate. De asemenea, nu sunt trase conexiuni între ceasul procesorului și unitatea de control la componentele procesorului. Este suficient să spunem că semnalele de la ceas și unitatea de control fac parte integrantă din fiecare altă componentă.

imagine

Figura 2: o diagramă conceptuală simplificată a unui procesor tipic.acest design nu pare deosebit de simplu, dar realitatea este și mai complicată., Această cifră este suficientă pentru scopurile noastre, fără a fi prea complexă.

unitate logică aritmetică

unitatea logică aritmetică (ALU) îndeplinește funcțiile aritmetice și logice care sunt opera computerului. Registrele A și B dețin datele de intrare, iar acumulatorul primește rezultatul operației. Registrul de instrucțiuni conține instrucțiunea pe care ALU trebuie să o efectueze.de exemplu, atunci când adăugați două numere, un număr este plasat în registrul A, iar celălalt în registrul B. ALU efectuează adăugarea și pune rezultatul în acumulator., Dacă operația este una logică, datele care trebuie comparate sunt plasate în registrele de intrare. Rezultatul comparației, un 1 sau 0, este pus în acumulator. Indiferent dacă aceasta este o operație logică sau aritmetică, conținutul acumulatorului este apoi plasat în locația cache rezervată de program pentru rezultat.

există un alt tip de operație efectuată de ALU. Rezultatul este o adresă în memorie și este utilizată pentru a calcula o nouă locație în memorie pentru a începe instrucțiunile de încărcare. Rezultatul este plasat în registrul indicatorului de instrucțiuni.,

Registrul de instrucțiuni și indicatorul

indicatorul de instrucțiuni specifică locația din memorie care conține următoarea instrucțiune care trebuie executată de CPU. Când procesorul finalizează execuția instrucțiunii curente, următoarea instrucțiune este încărcată în registrul de instrucțiuni din locația de memorie indicată de indicatorul de instrucțiuni.

după ce instrucțiunea este încărcată în registrul de instrucțiuni, indicatorul registrului de instrucțiuni este incrementat cu o adresă de instrucțiuni. Incrementarea îi permite să fie gata să mute următoarea instrucțiune în registrul de instrucțiuni.,

Cache

procesorul nu accesează niciodată direct memoria RAM. Procesoarele moderne au unul sau mai multe straturi de memorie cache. Capacitatea procesorului de a efectua calcule este mult mai rapidă decât capacitatea RAM de a alimenta date procesorului. Motivele pentru aceasta sunt dincolo de domeniul de aplicare al acestui articol, dar îl voi explora mai departe în articolul următor.memoria Cache este mai rapidă decât memoria RAM a sistemului și este mai aproape de procesor, deoarece este pe cipul procesorului. Memoria cache oferă stocare de date și instrucțiuni pentru a împiedica procesorul să aștepte recuperarea datelor din memoria RAM., Când procesorul are nevoie de date—iar instrucțiunile programului sunt, de asemenea, considerate date—memoria cache determină dacă datele sunt deja în reședință și le furnizează procesorului.

dacă datele solicitate nu se află în memoria cache, acestea sunt preluate din memoria RAM și utilizează algoritmi predictivi pentru a muta mai multe date din memoria RAM în memoria cache. Controlerul cache analizează datele solicitate și încearcă să prezică ce date suplimentare vor fi necesare din memoria RAM. Se încarcă datele anticipate în memoria cache., Prin păstrarea unor date mai aproape de CPU într-un cache care este mai rapid decât RAM, CPU poate rămâne ocupat și nu pierde cicluri de așteptare pentru date.

CPU-ul nostru simplu are trei niveluri de memorie cache. Nivelurile 2 și 3 sunt concepute pentru a prezice ce date și instrucțiuni de program vor fi necesare în continuare, muta aceste date din RAM, și mutați-l tot mai aproape de CPU pentru a fi gata atunci când este necesar. Aceste dimensiuni cache variază de obicei de la 1 MB la 32 MB, în funcție de viteza și utilizarea prevăzută a procesorului.

cache-ul de nivel 1 este cel mai apropiat de CPU. În CPU-ul nostru, există două tipuri de cache L1., L1i este memoria cache de instrucțiuni, iar L1d este memoria cache de date. Dimensiunile cache de nivel 1 variază de obicei de la 64 KB la 512 KB.unitatea de gestionare a memoriei (MMU) gestionează fluxul de date între memoria principală (RAM) și CPU. De asemenea, oferă protecția memoriei necesară în mediile multitasking și conversia între adresele de memorie virtuală și adresele fizice.

ceas CPU și unitate de control

toate componentele procesorului trebuie să fie sincronizate pentru a lucra împreună fără probleme., Unitatea de control îndeplinește această funcție la o rată determinată de viteza ceasului și este responsabilă pentru direcționarea operațiunilor celorlalte unități prin utilizarea semnalelor de sincronizare care se extind pe întregul procesor.

memorie cu acces aleatoriu (RAM)

deși memoria RAM, sau stocarea principală, este prezentată în această diagramă și în următoarea, nu este cu adevărat o parte a procesorului. Funcția sa este de a stoca programe și date, astfel încât acestea să fie gata de utilizare atunci când CPU are nevoie de ele.

cum funcționează

procesoarele funcționează pe un ciclu care este gestionat de unitatea de control și sincronizat de ceasul procesorului., Acest ciclu se numește ciclul de instrucțiuni CPU și constă dintr-o serie de componente fetch/decode/execute. Instrucțiunea, care poate conține date statice sau indicii pentru date variabile, este preluată și plasată în registrul de instrucțiuni. Instrucțiunea este decodificată și orice date sunt plasate în registrele de date A și B. Instrucțiunea este executată folosind registrele A și B, rezultatul fiind introdus în acumulator. CPU crește apoi valoarea indicatorului de instrucțiuni cu lungimea celei anterioare și începe din nou.

ciclul de instrucțiuni CPU de bază arată astfel.,

imagine

Figura 3: ciclul de instruire CPU de bază.deși procesorul de bază funcționează bine, procesoarele care rulează pe acest ciclu simplu pot fi utilizate și mai eficient. Există mai multe strategii pentru creșterea performanței procesorului și ne uităm la două dintre ele aici.

supraalimentarea ciclului de instrucțiuni

o problemă pe care designerii de procesoare timpurii au întâmpinat-o a fost pierderea timpului în diferitele componente ale procesorului., Una dintre primele strategii pentru îmbunătățirea performanței procesorului a fost suprapunerea porțiunilor ciclului de instrucțiuni CPU pentru a utiliza mai complet diferitele părți ale procesorului.de exemplu, atunci când instrucțiunea curentă a fost decodificată, următoarea este preluată și plasată în registrul de instrucțiuni. De îndată ce a avut loc acest lucru, indicatorul de instrucțiuni este actualizat cu adresa de memorie a următoarei instrucțiuni. Utilizarea ciclurilor de instrucțiuni suprapuse este ilustrată în Figura 4.,

imagine

Figura 4: ciclul de instrucțiuni CPU cu suprapunere.acest design arată frumos și neted, dar factori precum așteptarea I/O pot perturba fluxul. Nu au adecvată date sau instrucțiuni în cache necesită MMU să găsiți cele corecte și de a le muta la CPU, si asta poate dura ceva timp. Anumite instrucțiuni necesită, de asemenea, mai multe cicluri CPU pentru a fi completate decât altele, interferând cu suprapunerea lină.cu toate acestea, aceasta este o strategie puternică pentru îmbunătățirea performanței procesorului.,

Hyperthreading

o altă strategie pentru îmbunătățirea performanței procesorului este hyperthreading. Hyperthreading face ca un singur procesor să funcționeze ca două procesoare prin furnizarea a două fluxuri de date și instrucțiuni. Adăugarea unui al doilea indicator de instrucțiuni și a unui registru de instrucțiuni la CPU-ul nostru ipotetic, așa cum se arată în Figura 5, îl determină să funcționeze ca două procesoare, executând două fluxuri de instrucțiuni separate în timpul fiecărui ciclu de instrucțiuni. De asemenea, atunci când un flux de execuție se oprește în așteptarea datelor—din nou, instrucțiunile sunt și date—al doilea flux de execuție continuă procesarea., Fiecare nucleu care implementează hyperthreading este echivalentul a două procesoare în capacitatea sa de a procesa instrucțiuni.

Imagine

Figura 5: O diagramă conceptuală de un PROCESOR cu hyperthreading.amintiți-vă că aceasta este o diagramă și o explicație foarte simplificată a procesorului nostru ipotetic. Realitatea este mult mai complexă.

mai multe terminologii

am întâlnit o mulțime de terminologii CPU diferite., Pentru a defini terminologia puțin mai Explicit, să ne uităm la CPU în sine folosind comanda lscpu.procesorul Intel prezentat mai sus este un pachet care se conectează la o singură priză de pe placa de bază. Pachetul de procesoare conține șase nuclee. Fiecare nucleu este capabil de hyperthreading, astfel încât fiecare poate rula două fire simultane pentru un total de 12 procesoare.

definițiile mele:

  • Core-un nucleu este cea mai mică unitate hardware fizică capabilă să îndeplinească sarcina de procesare. Acesta conține un ALU și unul sau două seturi de registre de sprijin., Al doilea set de registre și circuite de susținere permite hyperthreading. Unul sau mai multe nuclee pot fi combinate într-un singur pachet fizic.
  • CPU-o unitate hardware logică capabilă să proceseze un singur fir de execuție. Utilizarea modernă a termenului unitate centrală de procesare se referă la numărul total de fire pe care un pachet de procesoare este capabil să le execute simultan. Un procesor cu un singur nucleu care nu acceptă hyperthreading este echivalentul unui singur procesor. În acest caz, CPU și core sunt sinonime., Un procesor hyperthreading cu un singur nucleu este echivalentul funcțional al două procesoare. Un procesor hyperthreading cu opt nuclee este echivalentul funcțional al procesoarelor 16.
  • pachet-componenta fizică care conține unul sau mai multe nuclee, cum ar fi cea prezentată în Figura 1 de mai sus.
  • procesor-1) un dispozitiv care procesează instrucțiunile programului pentru a manipula datele. 2) folosit frecvent ca sinonim pentru pachet.,
  • Socket-uneori folosit ca un alt sinonim pentru pachet, dar se referă mai precis la soclul fizic de pe placa de bază în care este introdus pachetul procesorului.

termenii soclu, procesor și pachet sunt adesea folosiți interschimbabil, ceea ce poate provoca o anumită confuzie. După cum vedem din rezultatele comenzii lscpu de mai sus, Intel ne oferă propria terminologie și consider că sursa autoritară., În realitate, toți folosim acești termeni în diferite moduri, dar atâta timp cât ne înțelegem la un moment dat, asta contează cu adevărat.observați că procesorul de mai sus are două cache-uri de nivel 1 de 512 KiB fiecare, unul pentru instrucțiuni (L1i) și unul pentru date (L1D). Cache-ul de nivel 1 este cel mai apropiat de CPU și accelerează lucrurile pentru a avea instrucțiuni și date separate în acest moment. Cache-urile de nivel 2 și Nivel 3 sunt mai mari, dar instrucțiunile și datele coexistă în fiecare.

ce înseamnă toate acestea?

bună întrebare., În primele zile ale mainframe-urilor, fiecare computer avea doar un singur procesor și era incapabil să ruleze mai multe programe simultan. Mainframe-ul ar putea rula salarizare, apoi contabilitate inventar, apoi facturare client, și așa mai departe, dar numai o singură aplicație ar putea rula la un moment dat. Fiecare program trebuia să se termine înainte ca operatorul de sistem să poată începe următorul.unele încercări timpurii de a rula mai multe programe simultan au avut o abordare simplă și au avut ca scop o mai bună utilizare a unui singur procesor., De exemplu, program1 și program2 au fost încărcate, și program1 fugit până când a fost blocat de așteptare pentru I/O să apară. În acel moment, program2 a rulat până când a fost blocat. Această abordare a fost numită multi-procesare și a ajutat la utilizarea pe deplin a timpului valoros al computerului.

încercări timpurii de multitasking toate implicate comutarea contextul de execuție a unui singur procesor foarte rapid între fluxurile de execuție a mai multor sarcini. Această practică nu este adevărată multitasking așa cum o înțelegem, deoarece, în realitate, doar un singur fir de execuție este procesat la un moment dat. Este mai corect numit timp de partajare.,calculatoarele moderne, de la ceasuri inteligente și tablete la supercomputere, toate acceptă multitasking adevărat cu mai multe procesoare. Procesoarele Multiple permit computerelor să ruleze mai multe sarcini simultan. Fiecare procesor își îndeplinește propriile funcții în același timp cu toate celelalte procesoare. Un procesor cu opt nuclee cu hyperthreading (adică 16 procesoare) poate rula simultan 16 SARCINI.

Gânduri finale

ne-am uitat la un procesor conceptualizat și simplificat pentru a învăța un pic despre structuri. Abia am degresat suprafața funcționalității procesorului în acest articol., Puteți afla mai multe luând legăturile încorporate pentru subiectele pe care le-am explorat.amintiți-vă că diagramele și descrierile din acest articol sunt pur conceptuale și nu reprezintă niciun procesor real.în următoarea parte a acestei serii, mă voi uita la RAM și unități de disc ca diferite tipuri de stocare și de ce fiecare este necesar pentru computerele moderne.