HTG explică cum funcționează un CPU?
Cele mai multe lucruri de pe un computer sunt relativ simple de înțeles: memoria RAM, memoria, perifericele și software-ul toate lucrează împreună pentru a face o funcție a computerului. Dar inima sistemului tău, CPU, pare a fi magică chiar și pentru mulți oameni de tehnologie. Aici vom face tot posibilul pentru a ne desprinde.
Majoritatea cercetărilor pentru acest articol provin de la "Dar cum știe?" De către J. Clark Scott. Este o citire fantastică, merge într-o profunzime mult mai mare decât acest articol, și merită foarte bine câțiva dolari pe Amazon.
O notă înainte de a începe: CPU-urile moderne sunt ordine de mărime mai complexe decât cele pe care le prezentăm aici. Este aproape imposibil ca o persoană să înțeleagă fiecare nuanță a unui chip cu peste un miliard de tranzistori. Cu toate acestea, principiile de bază ale modului în care se potrivesc împreună rămân aceleași, iar înțelegerea principiilor vă va oferi o mai bună înțelegere a sistemelor moderne.
Începând cu micul
Calculatoarele funcționează în binar. Înțeleg doar două stări: pe și în afara. Pentru a efectua calculele în binare, ele folosesc ceea ce se numește tranzistor. Tranzistorul permite doar ca curentul sursei să treacă prin acesta către scurgere dacă există curent pe poarta. În esență, acesta formează un comutator binar, care taie firul în funcție de un al doilea semnal de intrare.
Calculatoarele moderne folosesc miliarde de tranzistori pentru a efectua calcule, dar la cele mai joase niveluri, aveți nevoie doar de o mână pentru a forma cele mai elementare componente, cunoscute sub numele de porți.
Porți logice
Stack câteva tranzistori în mod corespunzător, și aveți ceea ce este cunoscut ca o poartă logică. Porțile logice au două intrări binare, realizează o operație pe ele și returnează o ieșire. Poarta OR, de exemplu, returnează adevărat dacă oricare dintre intrări este adevărată. Poarta AND verifică dacă ambele intrări sunt adevărate, XOR verifică dacă numai una dintre intrări este adevărată, iar variantele N (NOR, NAND și XNOR) sunt versiuni inversate ale porților de bază.
Făcând matematică cu porți
Cu doar două porți puteți face adăugarea binară de bază. Această diagramă de mai sus arată o sumă jumătate, creată folosind Logicly, un loc gratuit de joacă online pentru porți logice. Poarta XOR aici va porni dacă doar una dintre intrări este activată, dar nu ambele. Poarta AND va porni dacă ambele intrări sunt activate, dar rămâneți oprit dacă nu există nici o intrare. Deci, dacă amândouă sunt pornite, XOR rămâne și porțiunea AND se aprinde, ajungând la răspunsul corect al două:
Acest lucru ne oferă o configurație simplă cu trei ieșiri distincte: zero, una și două. Dar un bit nu poate stoca nimic mai mare decât 1 și această mașină nu este prea utilă, deoarece rezolvă doar una dintre cele mai simple probleme matematice posibile. Dar aceasta este doar o jumătate adder, și dacă vă conectați două dintre ele cu o altă intrare, veți obține o sumă completă:
Agregatul complet are trei intrări - cele două numere de adăugat și un "purtător". Carnetul este utilizat atunci când numărul final depășește ceea ce poate fi stocat într-un singur bit. Adaptorii compleți vor fi legați într-un lanț, iar carnetul va fi transmis de la un colector la altul. Carul este adăugat la rezultatul porții XOR în prima jumătate a adderului și există o poartă suplimentară OR pentru a se ocupa de ambele cazuri atunci când astfel încât ar trebui să fie pe.
Când ambele intrări sunt pornite, carul se aprinde și îl trimite la următorul numărător complet din lanț:
Și aceasta este cam atât de complexă ca și adiția. Mutarea la mai mulți biți înseamnă doar mai mulți aditivi compleți într-un lanț mai lung.
Cele mai multe alte operații de matematică se pot face cu adăugarea; multiplicarea este doar adunarea repetată, scăderea poate fi făcută cu o anumită inversiune bit biți, iar diviziunea este doar repetată scădere. Și în timp ce toate computerele moderne au soluții bazate pe hardware pentru a accelera operațiile mai complicate, puteți face totul din punct de vedere tehnic,.
Autobuzul și memoria
În momentul de față, calculatorul nostru nu este altceva decât un calcul rău. Acest lucru se datorează faptului că nu își poate aminti nimic și nu face nimic cu rezultatele sale. Arată mai sus este o celulă de memorie, care poate face toate acestea. Sub capota foloseste o multime de porti NAND, iar in viata reala poate fi destul de diferita in functie de tehnica de stocare, dar functia sa este aceeasi. Dați-i câteva intrări, porniți bitul "write" și stocați intrările din interiorul celulei. Aceasta nu este doar o celulă de memorie, deoarece avem nevoie și de o modalitate de a citi informații din ea. Acest lucru se face cu un activator, care este o colecție de porți AND pentru fiecare bit din memorie, toate legate de o altă intrare, bitul "citit". Bitile de scriere și de citire sunt deseori numite "set" și "enable", de asemenea.
Acest întreg pachet este înfășurat în ceea ce este cunoscut ca registru. Aceste registre sunt conectate la magistrala, care este un pachet de fire care rulează în jurul întregului sistem, conectate la fiecare componentă. Chiar și calculatoarele moderne au un autobuz, deși pot avea mai multe autobuze pentru a îmbunătăți performanța multitasking.
Fiecare registru are încă un bit de scriere și de citire, dar în această configurație intrarea și ieșirea sunt aceleași. Acest lucru este de fapt bun. De exemplu. Dacă doriți să copiați conținutul R1 în R2, ați activa bitul de citire pentru R1, care ar împinge conținutul lui R1 pe magistrală. În timp ce bitul de citire este activat, ați porni bitul de scriere pentru R2, care va copia conținutul magistralei în R2.
Registrele sunt folosite pentru a face RAM, de asemenea. RAM este deseori prevăzut într-o rețea, cu fire care merg în două direcții:
Decodoarele primesc o intrare binară și pornesc firul numerotat corespunzător. De exemplu, "11" este 3 în binar, cel mai înalt număr pe 2 biți, deci decodorul va porni cel mai înalt fir. La fiecare intersecție, există un registru. Toate acestea sunt conectate la magistrala centrală și la o intrare centrală de scriere și citire. Atât citirea, cât și intrarea de scriere se vor activa numai dacă cele două fire care trec peste registru sunt de asemenea activate, permițându-vă efectiv să selectați registrul din care să scrieți și să citiți. Din nou, memoria RAM modernă este mult mai complicată, dar această configurație încă funcționează.
Ceas, Stepper și Decodor
Registrele sunt utilizate peste tot și sunt instrumentul de bază pentru mutarea datelor și stocarea informațiilor în procesor. Deci, ceea ce îi spune să-și miște lucrurile?
Ceasul este prima componentă din nucleul procesorului și se va opri și se va opri la un interval stabilit, măsurat în hertz sau cicluri pe secundă. Aceasta este viteza pe care o vedeți anunțată alături de CPU-uri; un cip de 5 GHz poate efectua 5 miliarde de cicluri pe secundă. Viteza ceasului este adesea o metrică foarte bună pentru cât de rapid este un procesor.
Ceasul are trei stări diferite: ceasul de bază, ceasul de activare și ceasul setat. Ceasul de bază va fi activat pentru o jumătate de ciclu și va fi oprit pentru cealaltă jumătate. Ceasul de activare este folosit pentru a activa registrele și va trebui să fie activat mai mult timp pentru a vă asigura că datele sunt activate. Ceasul setat trebuie întotdeauna să fie activat în același timp cu ceasul de activare, sau pot fi scrise date incorecte.
Ceasul este conectat la pas cu pas, care va conta de la un pas până la pasul maxim și se va reseta la unul după ce sa terminat. Ceasul este de asemenea conectat la porți AND pentru fiecare registru pe care CPU-ul îl poate scrie:
Aceste porți AND sunt de asemenea conectate la ieșirea unei alte componente, decodificatorul de instrucțiuni. Decodificatorul de instrucțiuni ia o instrucțiune precum "SET R2 TO R1" și o decodifică în ceva pe care CPU-ul îl poate înțelege. Are propriul registru intern, numit "Registrul de instrucțiuni", unde se stochează operația curentă. Cât de mult se întâmplă acest lucru se întâmplă până la sistemul pe care îl executați, dar odată ce este decodat, acesta va porni setul corect și de a permite biți pentru registrele corecte, care se va declanșa în conformitate cu ceasul.
Instrucțiunile de program sunt stocate în memoria RAM (sau cache L1 pe sisteme moderne, mai aproape de CPU). Deoarece datele programului sunt stocate în registre, la fel ca orice altă variabilă, pot fi manipulate în zbor pentru a sari în jurul programului. Acesta este modul în care programele obțin structura lor, cu bucle și declarații. O instrucțiune de salt stabilește locația curentă în memorie pe care decodorul de instrucțiuni le citește dintr-o locație diferită.
Cum toate acestea vin împreună
Acum, simplificarea excesivă a modului în care funcționează un procesor este completă. Autobuzul principal se întinde pe întregul sistem și se conectează la toate registrele. Adaptorii compleți, împreună cu o grămadă de alte operațiuni, sunt împachetați în unitatea logică aritmetică sau în ALU. Această ALU va avea conexiuni la magistrala și va avea, de asemenea, registre proprii pentru stocarea celui de-al doilea număr pe care îl operează.
Pentru a efectua un calcul, datele programului sunt încărcate din sistemul RAM în secțiunea de control. Secțiunea de control citește două numere din RAM, o încarcă pe prima în registrul de instrucțiuni ALU și apoi le încarcă pe magistrală. Între timp, el trimite UNU un cod de instrucțiune spunându-i ce să facă. Ulterior, ALU efectuează toate calculele și stochează rezultatul într-un alt registru, pe care CPU-ul îl poate citi și apoi continuă procesul.
Credit de imagine: Rost9 / Shutterstock