If-Koubou

HTG explică: Cum funcționează un CPU?

HTG explică: Cum funcționează un CPU? (Cum să)

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 magie 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 J. Clark Scott. Este o citire fantastică, merge într-o profunzime mult mai mare decât va face 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 cip cu peste un miliard de tranzistori. Cu toate acestea, principiile de bază ale modului în care se potrivesc împreună rămân aceleași și înțelegerea principiilor de bază vă va oferi o mai bună înțelegere a sistemelor moderne.

Începând cu micul

Calculatoarele funcționează în binar. Ei înțeleg doar două stări: pe și în afara. Pentru a efectua calcule în binar, ei folosesc ceea ce se numește tranzistor. Tranzistorul permite doar ca curentul sursei să treacă prin acesta spre 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 tranzistoare 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, execută o operație pe ele și returnează o ieșire. Poarta OR, de exemplu, returnează true 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 se poate adăuga binar de bază. Această diagramă de mai sus arată o sumă jumătate, creată folosind Logicly, un loc gratuit de joacă online pentru porțile 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 a 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, iar această mașină nu este prea utilă, deoarece rezolvă doar una dintre cele mai simple probleme matematice posibile. Dar acest lucru 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 o "transportare". Cartea 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 din prima jumătate a adderului și există o poartă suplimentară OR care să se ocupe de ambele cazuri atunci când așa ar fi trebuit să fie.

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 adunarea. 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 matematice se pot face cu adăugare; multiplicarea este doar repetarea adunării, scăderea poate fi făcută cu o anumită inversiune de bit fantezie, iar diviziunea este doar repetată scădere. Și în timp ce toate computerele moderne au soluții hardware bazate pe hardware pentru a accelera operațiile mai complicate, puteți face totul din punct de vedere tehnic cu ajutorul programului complet.

Autobuzul și memoria

Chiar acum, 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. Arătată 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 și nevoie de o modalitate de a citi informații din ea. Acest lucru se face cu un factor de activare, care este o colecție de porți ȘI pentru fiecare bit din memorie, toate legate de o altă intrare, bitul "citit". Biti-urile de scriere și citire sunt adesea numite "set" și "enable", de asemenea.

Acest pachet întreg 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 lui 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 ar copia conținutul magistralei în R2.

Registrele sunt folosite pentru a face RAM, de asemenea. RAM este adesea 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ă.

Ceasul, Stepper-ul și Decodorul

Registrele sunt utilizate peste tot și sunt instrumentul de bază pentru mutarea datelor și stocarea informațiilor în procesor. Deci, ce îi spune să-și miște lucrurile?

Ceasul este prima componentă din nucleul CPU ș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 procesoare; 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 află operațiunea curentă. Cât de bine se întâmplă acest lucru se întâmplă până la sistemul pe care funcționați, dar odată decodificat, acesta va activa setul corect și va permite biții pentru registrele corecte, care se vor declanșa în funcție de ceas.

Instrucțiunile de program sunt stocate în RAM (sau cache L1 pe sisteme moderne, mai aproape de CPU). Din moment ce 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 noastră 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ții, sunt împachetați în unitatea logică aritmetică sau în unitatea de procesare a datelor. Această ALU va avea conexiuni la magistrala și va avea, de asemenea, registre proprii pentru stocarea celui de-al doilea număr pe care 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 memoria 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 registru diferit, pe care CPU-ul îl poate citi și apoi continuă procesul.

Credit de imagine: Rost9 / Shutterstock