Cosa sono i registri della CPU?


27

Questa domanda mi ha infastidito da un po 'di tempo e oggi ho pensato che avrei Google. Ho letto alcune cose a riguardo e mi è sembrato molto simile a quello che ho sempre conosciuto come cache del processore .

C'è una differenza tra i due o ho ragione quando penso che siano uguali? È davvero necessario che un registro si trovi all'interno di una CPU affinché funzioni?

Secondo Wikipedia un registro è un posto nella CPU in cui è possibile accedere e modificare rapidamente la memoria prima di essere rispediti nella RAM. Ho capito bene o la cache e la registrazione sono effettivamente le stesse?


13
Un registro CPU è un'organizzazione che tiene traccia della tua CPU per te. L'NSA è un esempio di un registro CPU.
Jimmy Hoffa,

3
La cache di livello 1 della CPU è spesso fatta dello stesso tipo di roba di silicio dei registri. Non è così veloce perché ha bisogno di ricerche extra per associare gli indirizzi memorizzati nella cache alle posizioni della cache. Ma i registri e la cache sono sicuramente posti diversi nei chip.
Zan Lynx,

3
@JimmyHoffa: temo che il tuo commento sarà molto confuso per OP, a scapito della conoscenza informatica.
rwong,

3
@rwong Nah L'ho capito, ho pensato che fosse abbastanza divertente. : P
Jeroen,

1
E un'altra differenza è la dimensione: un file di registro è raramente più grande di un paio di centinaia di parole, mentre la cache L1 può essere facilmente grande quanto 64k.
SK-logic,

Risposte:


61

Non sono proprio gli stessi. I registri sono i luoghi in cui si trovano i valori su cui la CPU sta effettivamente lavorando. Il design della CPU è tale da poter effettivamente modificare o agire in altro modo su un valore quando si trova in un registro. Quindi i registri possono funzionare in modo logico, mentre la memoria (compresa la cache) può contenere solo valori che la CPU legge e scrive.

Immagina un falegname al lavoro. Ha alcuni oggetti tra le mani (registri) e poi, molto vicino al suo banco di lavoro (cache) cose su cui sta lavorando frequentemente, ma non sta usando proprio in questo momento, e poi in officina (memoria principale) cose che riguardano il progetto a portata di mano ma che non sono immediatamente abbastanza importanti per essere sul banco di lavoro.

EDIT: ecco una semplice spiegazione di come funziona la logica di registro.

Immaginiamo di avere quattro registri chiamati R1..R4. Se compili un'istruzione simile a questa:

x = y + z * 3;

il compilatore produrrebbe un codice macchina che (quando disassemblato) avrà un aspetto simile al seguente:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Poiché la maggior parte delle CPU moderne ha registri larghi 32 o 64 bit, possono fare matematica su qualsiasi valore fino alla dimensione che possono contenere. Non hanno bisogno di registri speciali per valori più piccoli; usano solo speciali istruzioni ASM che gli dicono di usare solo una parte del registro. E, proprio come il falegname con solo due mani, i registri possono contenere solo una piccola quantità di dati alla volta, ma possono essere riutilizzati, passando i dati attivi dentro e fuori, il che significa che "molti registri" non lo fanno finire per essere necessario. (Avere molto disponibile consente ai compilatori di generare codice più veloce, ovviamente, ma non è strettamente necessario.)


26
E altre cose nel magazzino di tutta la città (disco) e altre cose su cui può avere Fedex (rete) :-)
Dan Pichelman,

2
Dipende molto dall'architettura di sistema in questione.
Ingegnere mondiale il

5
@Binero in un processore x86 a 16 bit hai registri denominati Ax, Bx e così via. Quando sono passati a processori a 32 bit hanno esteso i registri a EAx a 32 bit, EBx, se si accede ad Ax si ottengono i 16 bit bassi di EAx. In modalità 64 bit hanno chiamato i registri RAx con i 32 bit inferiori che sono EAx e i 16 bit inferiori che sono ancora Ax. controlla questi diagrammi per vedere come si arriva ad altre parti di byte come AH per ottenere il byte alto del registro Ax a 16 bit: en.wikipedia.org/wiki/X86#Structure
stonemetal

2
E nelle moderne CPU, anche questo tipo di guasti si interrompe, dato che i registri sono semplicemente mappature temporanee su una banca interna di memoria realmente veloce, cambiando a seconda del flusso di istruzioni e di quanto strettamente segue il flusso di istruzioni previsto.
Vatine,

2
@MasonWheeler Una buona scelta da parte tua.
Vatine,

3

In realtà un registro nella terminologia della CPU è piccolo Parte della memoria denominata Disponibile all'interno di un microprocessore (CPU), i registri hanno nomi, dimensioni e funzioni specifici che variano da processore a processore, ad esempio, se prendere 8085 microprocessore è un processore a 8 bit che ha 8 -bit Registers (A: Accumulator, B, C, D, E, H e L I registri e un registro flag sono tutti a 8 bit). Due registri a 16 bit PC e SP hanno tutti una funzione speciale e le funzioni vengono visualizzate durante la programmazione dell'assemblaggio. Pochi registri controllano oltre il programmatore.

Se prendi un altro processore I registri varieranno diciamo che 8086 è un processore a 16 bit e ha AX, BX, CX e DX tutti sono registri a 16 bit, PC, SP e Flag.

come hai citato nella domanda, devono accelerare l'esecuzione del programma e fungere da cache del processore, ma ora l'architettura del processore è cambiata per giorni e loro (Intel) aggiungono molta memoria chiamando la cache del processore

ma c'è una leggera differenza tra la cache del processore (CPU) e i registri del processore (CPU), i registri effettivamente necessari per alcune attività speciali come il puntatore di memoria, lo stato del programma ecc. Es: PC: Contatore di programma che agisce un puntatore di memoria nella memoria del programma, SP: Stack pointer che agisce come un puntatore di memoria nella memoria dello stack. e l'accumulatore è buffer e registro principale per accedere a ALU per operazioni aritmetiche ...

Puoi vedere la spiegazione di Mason Wheeler per gli exaples


1

Penso che aiuta a pensare che i registri non siano memoria e non debbano essere considerati tali.

Pensa di più come OO: Register è una classe, non derivata dalla memoria e Memory è una classe non derivata dal registro, ma la classe Register ha metodi (Codici operativi macchina) per convertire i suoi dati in e dalla memoria. La memoria d'altra parte non sa nulla dei registri e non può invocare azioni su di essi. Di conseguenza, tutte le operazioni della CPU vengono eseguite dai registri, che spesso accedono alla memoria.

Non è raro vedere registri di sola scrittura, quasi un attributo di memoria. È anche possibile che un valore di registro cambi senza scriverlo, ancora una volta, non il comportamento che ci si aspetta dalla memoria.


Nell'I / O mappato in memoria, le regioni di "memoria" di sola scrittura non sono così rare.
SK-logic

@ SK-logic - Corretto - tuttavia il contesto della domanda posta chiaramente l'OP pensa alla memoria come qualcosa da cui leggi e scrivi. Non c'è bisogno di confonderlo di più :)
mattnz,

0

La risposta fornita da @Mason Wheeler è stata accurata, ma penso che sia possibile porre la tua domanda in un'altra prospettiva. A giudicare dalla tua domanda, mi sembra il concetto di cui hai bisogno per capire perfettamente la differenza tra una cache e un registro è il percorso dei dati . Come correttamente sottolineato da Mason, la logica della CPU (cioè il suo percorso di dati) è progettata in modo tale che le informazioni sulla memoria non possano essere gestite direttamente dalla CPU ed è per questo che esistono i registri. In effetti, la CPU non è nemmeno in grado di decodificare l'attuale istruzione del programma che sta eseguendo se quell'istruzione non è stata caricata prima nel registro appropriato (di solito quello chiamato IR, "Registro istruzioni").

Ciò è correlato al modo in cui la CPU è cablata. Non esiste un percorso fisico tra la memoria e l'ALU; tutti i dati forniti all'ALU devono essere bufferizzati in qualche modo in alcuni registri. Potrebbe essere diverso, ma i circuiti necessari per connettere direttamente la memoria all'ALU sarebbero troppo complessi: è più facile ed efficiente mediare tutte le comunicazioni tra la memoria e l'ALU tramite il file di registro , come determinato dal percorso dati sopra menzionato . Infatti, anche quando una determinata istruzione specifica una posizione di memoria come operando (una modalità di indirizzamento nota come indirizzamento diretto ), l'unità di dati corrispondente viene caricata in un registro noto come MBR (Memory Buffer Register, a volte chiamato MDR, Memory Data Buffer ).

Si noti che dal punto di vista della CPU, non importa se le informazioni (dati o codice) provengono dalla memoria principale o dalla cache, ma quest'ultima è molto più veloce. Le cache esistono per motivi di prestazioni, i registri esistono a causa del design della CPU (ovvero a causa del percorso dei dati). I programmatori intelligenti (compilatori intelligenti, in realtà) cercano di massimizzare l'uso dei registri per ridurre al minimo gli accessi alla memoria (i registri sono più veloci della cache o della memoria). Ciò è giustificabile perché le informazioni archiviate nei registri tendono a essere utilizzate più volte e, di fatto, questo è uno dei principi della filosofia RISC.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.