Hva er et register?

click fraud protection

Hvis du ikke er spesielt interessert i datamaskiner, vil du bli tilgitt for å anta at de eneste formene for minne i en datamaskin var harddisken og RAM. De av dere med interesse for datamaskiner vil sannsynligvis vite at dette ikke er tilfelle, og at CPU har også et sett med cacher som brukes til å cache data fra RAM-en slik at CPU-en kan få tilgang til den raskere. Alle disse er annonserte funksjoner, først og fremst fordi hastigheten og/eller kapasiteten er et anstendig salgsargument og generelt påvirker ytelsesnivåene.

Det er faktisk et annet lag med minne. Så mye som du kanskje tror L1-cachen er så nær den faktiske prosesseringskjernen som mulig, er det enda et høyere lag i minnehierarkiet. Dette er CPU-registrene. Grunnen til at disse egentlig ikke er annonsert eller nevnt, er at de egentlig ikke er endret i det hele tatt. Teknisk sett kan de være, men antallet og størrelsen på registre er faktisk grunnleggende for arkitekturen. Dette betyr at alle x86-64 CPUer har samme antall registre. De markedsføres ikke fordi de ikke er et konkurrerende punkt.

Hva gjør et register?

Et register er et raskt tilgjengelig lagringssted for prosessoren. Tilgang til et register er umiddelbar med null latens, mens til og med L1-cachen har en forsinkelse på omtrent 4-5 sykluser i moderne CPUer. Denne umiddelbare tilgangen antyder brukssaken for registre. Register brukes til å lagre instruksjonene som aktivt betjenes av CPU. De lagrer også datapunkter som skal behandles. Noen registre er generelle formål, mens andre har et helt spesielt formål. Et eksempel på et spesialregister vil være programtelleren som er der prosessoren sporer sin posisjon i sin programsekvens.

Mange registre anses som brukertilgjengelige. Dette betyr ikke at brukeren av en datamaskin kan velge hvilken verdi som skal legges i dem. Det betyr at den kjørende programvaren kan spesifisere data som skal lastes inn i disse registrene. Et mindre antall registre er interne, noe som betyr at programvare ikke kan adressere dem i det hele tatt. Instruksjonsregisteret, som lagrer instruksjonen som for tiden utføres, er et eksempel på et internt register.

Registrer nytt navn

Selv om en CPU-arkitektur bare tillater en enkelt konfigurasjon av registre, er det faktisk litt nyanser i det. Alle moderne CPUer benytter seg av registeromdøping. Dette er en teknikk hvor du kan ha flere fysiske registre og bruke dem til å forhåndslaste data eller lagre data knyttet til en instruksjon som ikke er i orden som ellers ville blitt overskrevet. Når CPU-en kommer til det punktet at den trenger dataene i de ekstra registrene, gir den ganske enkelt nytt navn slik at den er adresserbar, samtidig som den gjør et tidligere adresserbart register uadresserbart.

Prosessen med å gi nytt navn til registeret kan være svært nyttig for utførelse av utførelse. For eksempel, hvis en minneplassering er programmert til å leses fra og deretter skrives til, og instruksjonene ble utført i den rekkefølgen, er dette greit. Hvis imidlertid instruksjonene omorganiseres for å utføre skrivingen først, vil leseinstruksjonen få feil verdi. For å forhindre dette, lagres den opprinnelige verdien som skal leses i et ubrukt register som deretter omdøpes når den aktuelle instruksjonen behandles.

Konklusjon

Registrene er det høyeste nivået i minnehierarkiet. De er den eneste delen som kan adresseres direkte av CPU og har ingen ventetid. Registre brukes til å lagre data som aktivt kjøres av CPU. De brukes også til å lagre andre datapunkter som programtelleren som holder styr på hvilken instruksjon som er den neste som skal utføres. Svært begrenset antall registre er tilgjengelig med x86-64-arkitekturen som har 16 generelle registre og enten 16 eller 32 flyttallsregistre avhengig av om AVX-512 støttes.