Vad är ett register?

click fraud protection

Om du inte är särskilt intresserad av datorer, skulle du bli förlåten för att anta att de enda formerna av minne i en dator var hårddisken och RAM-minnet. De av er som är intresserade av datorer skulle förmodligen veta att så inte är fallet, och att CPU har också en uppsättning cacher som används för att cache data från RAM så att CPU kan komma åt det snabbare. Alla dessa är annonserade funktioner, främst för att hastigheten och/eller kapaciteten är ett anständigt försäljningsargument och generellt påverkar prestandanivåerna.

Det finns faktiskt ett annat lager av minne dock. Så mycket som du kanske tror att L1-cachen är så nära den faktiska bearbetningskärnan som möjligt, så finns det ytterligare ett högre lager i minneshierarkin. Dessa är CPU-registren. Anledningen till att dessa inte riktigt annonseras eller nämns är att de egentligen inte ändras alls. Tekniskt sett kan de vara, men antalet och storleken på register är faktiskt grundläggande för arkitekturen. Det betyder att alla x86-64-processorer har samma antal register. De marknadsförs inte eftersom de inte är en konkurrerande punkt.

Vad gör ett register?

Ett register är en snabbt tillgänglig lagringsplats för processorn. Tillgång till ett register är omedelbart med noll latens, medan även L1-cachen har en ungefär 4-5 cyklers latens i moderna processorer. Denna omedelbara åtkomst antyder användningsfallet för register. Register används för att lagra instruktionerna som aktivt drivs av CPU: n. De lagrar även datapunkter som ska behandlas. Vissa register är generella, medan andra har ett mycket specifikt syfte. Ett exempel på ett specialregister skulle vara programräknaren som är där processorn spårar sin position i sin programsekvens.

Många register anses vara tillgängliga för användare. Detta betyder dock inte att användaren av en dator kan välja vilket värde som ska läggas i dem. Det betyder att programvaran som körs kan specificera data som ska laddas i dessa register. Ett mindre antal register är interna, vilket innebär att programvara inte kan adressera dem alls. Instruktionsregistret, som lagrar den instruktion som för närvarande exekveras, är ett exempel på ett internt register.

Register byta namn

Medan en CPU-arkitektur bara tillåter en enda konfiguration av register, finns det faktiskt lite nyanser i det. Alla moderna processorer använder sig av registerbyte. Det här är en teknik där du kan ha fler fysiska register och använda dem för att förladda data eller lagra data relaterad till en instruktion som inte fungerar som annars skulle ha skrivits över. När CPU: n kommer till den punkt att den behöver data i de extra registren byter den helt enkelt om den så att den är adresserbar, samtidigt som ett tidigare adresserbart register blir oadresserbart.

Processen att byta namn på register kan vara till stor hjälp för exekvering som inte fungerar. Till exempel, om en minnesplats är programmerad att läsas från och med sedan skrivas till, och instruktionerna utfördes i den ordningen är detta bra. Om emellertid instruktionerna ordnas om för att utföra skrivningen först, skulle läsinstruktionen få fel värde. För att förhindra detta lagras det ursprungliga värdet som ska läsas i ett oanvänt register som sedan döps om när den relevanta instruktionen bearbetas.

Slutsats

Register är den högsta nivån i minneshierarkin. De är den enda delen som kan adresseras direkt av CPU: n och har ingen latens. Register används för att lagra data som aktivt exekveras av CPU: n. De används också för att lagra andra datapunkter såsom programräknaren som håller reda på vilken instruktion som är nästa som ska exekveras. Mycket begränsat antal register är tillgängliga med x86-64-arkitekturen med 16 allmänna register och antingen 16 eller 32 flyttalsregister beroende på om AVX-512 stöds.