Ce este un registru?

click fraud protection

Dacă nu sunteți în mod deosebit interesat de computere, ați fi iertat să presupuneți că singurele forme de memorie dintr-un computer au fost hard disk-ul și RAM. Cei dintre voi care sunt interesați de computere ar ști probabil că acesta nu este cazul și că CPU are, de asemenea, un set de cache-uri care sunt folosite pentru a stoca în cache datele din RAM, astfel încât CPU-ul să le poată accesa Mai repede. Toate acestea sunt caracteristici promovate, în primul rând pentru că viteza și/sau capacitatea este un punct de vânzare decent și afectează în general nivelurile de performanță.

Există totuși un alt strat de memorie. Oricât de mult ați putea crede cache-ul L1 este cât mai aproape de nucleul de procesare real, există un alt strat superior în ierarhia memoriei. Acestea sunt registrele CPU. Motivul pentru care acestea nu sunt cu adevărat promovate sau menționate este că nu sunt deloc modificate. Din punct de vedere tehnic, acestea ar putea fi, totuși, numărul și dimensiunea registrelor este de fapt fundamentală pentru arhitectură. Aceasta înseamnă că toate procesoarele x86-64 au același număr de registre. Nu sunt comercializate pentru că nu sunt un punct concurent.

Ce face un registru?

Un registru este o locație de stocare rapidă disponibilă pentru procesor. Accesul la un registru este imediat cu latență zero, în timp ce chiar și memoria cache L1 are o latență de aproximativ 4-5 cicluri în procesoarele moderne. Această imediată a accesului indică cazul de utilizare pentru registre. Registrele sunt folosite pentru a stoca instrucțiunile operate în mod activ de CPU. De asemenea, ele stochează puncte de date care urmează să fie procesate. Unele registre au un scop general, în timp ce altele au un scop foarte specific. Un exemplu de registru cu scop special ar fi contorul de programe, care este locul în care procesorul își urmărește poziția în secvența sa de program.

Multe registre sunt considerate accesibile utilizatorului. Acest lucru nu înseamnă însă că utilizatorul unui computer poate alege ce valoare să le pună. Înseamnă că software-ul care rulează poate specifica datele care urmează să fie încărcate în aceste registre. Un număr mai mic de registre sunt interne, ceea ce înseamnă că software-ul nu le poate aborda deloc. Registrul de instrucțiuni, care stochează instrucțiunea în curs de executare, este un exemplu de registru intern.

Înregistrați redenumirea

În timp ce o arhitectură CPU poate permite doar o singură configurație de registre, există de fapt un pic de nuanță în acest sens. Toate procesoarele moderne folosesc redenumirea registrului. Aceasta este o tehnică în care puteți avea mai multe registre fizice și le puteți folosi pentru a preîncărca date sau pentru a stoca date legate de o instrucțiune nefuncțională care altfel ar fi fost suprascrise. Când CPU ajunge în punctul în care are nevoie de datele din registrele suplimentare, pur și simplu le redenumește astfel încât să fie adresabil, în același timp cu facerea unui registru adresabil anterior inadresabil.

Procesul de redenumire a registrului poate fi foarte util pentru execuția necorespunzătoare. De exemplu, dacă o locație de memorie este programată să fie citită de atunci în care este scrisă și instrucțiunile au fost executate în această ordine, este bine. Dacă, totuși, instrucțiunile sunt reordonate pentru a efectua mai întâi scrierea, instrucțiunea de citire ar obține o valoare greșită. Pentru a preveni acest lucru, valoarea inițială de citit este stocată într-un registru neutilizat, care este apoi redenumit atunci când instrucțiunea relevantă este procesată.

Concluzie

Registrele sunt cel mai înalt nivel din ierarhia memoriei. Sunt singura parte care poate fi adresată direct de CPU și nu au latență. Registrele sunt folosite pentru a stoca datele executate în mod activ de CPU. Ele sunt, de asemenea, folosite pentru a stoca alte puncte de date, cum ar fi contorul de programe care ține evidența instrucțiunii care urmează să fie executată. Un număr foarte limitat de registre sunt disponibile cu arhitectura x86-64 având 16 registre de uz general și fie 16, fie 32 registre în virgulă mobilă, în funcție de dacă AVX-512 este acceptat.