Che cosa sono i registri della CPU?

25

Questa domanda mi ha infastidito da un po 'di tempo e oggi ho pensato che avrei fatto su 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? In realtà è necessario che un registro sia all'interno di una CPU affinché funzioni?

Secondo Wikipedia, un registro è un posto nella CPU in cui la memoria può essere rapidamente consultata e modificata prima di essere inviata alla RAM. Ho capito male o la cache e il registro sono effettivamente gli stessi?

    
posta Jeroen Bollen 28.08.2013 - 18:53
fonte

4 risposte

59

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

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

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

Immaginiamo di avere quattro registri chiamati R1..R4. Se compili una dichiarazione che assomiglia a questa:

x = y + z * 3;

il compilatore produrrebbe un codice macchina che (una volta smontato) assomiglia a questo:

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

Dal momento che la maggior parte delle moderne CPU dispone di registri con larghezza di 32 o 64 bit, possono eseguire calcoli matematici su qualsiasi valore fino alla dimensione che possono contenere. Non hanno bisogno di registri speciali per valori minori; usano solo istruzioni ASM speciali che dicono di usare solo parte del registro. E, proprio come il falegname con solo due mani, i registri possono contenere solo una piccola quantità di dati contemporaneamente, ma possono essere riutilizzati, passando i dati attivi dentro e fuori di essi, il che significa che "molti registri" non lo fanno finiscono per essere necessari. (Avere molto a disposizione non consente ai compilatori di generare codice più veloce, ovviamente, ma non è strettamente necessario.)

    
risposta data 28.08.2013 - 18:59
fonte
3

In realtà, un registro nella terminologia della CPU è un piccolo blocco denominato di memoria Disponibile all'interno di un microprocessore (CPU), i registri hanno nomi, dimensioni e funzioni specifici variano da processore a processore, ad esempio se il microprocessore 8085 è un processore a 8 bit che ha 8 bit Registri (A: Accumulatore, B, C, D, E, H e L Registri e un registro di registro sono tutti 8 bit). Due registri a 16 bit PC e SP hanno tutti funzioni speciali e le funzioni entrano in scena durante la programmazione degli assiemi. Il controllo di pochi registri è al di là del programmatore.

Se si prende un altro processore, i registri varieranno, diciamo che 8086 è un processore a 16 bit e lo è AX, BX, CX e DX sono tutti registri a 16 bit, PC, SP e Flag.

come hai citato nella domanda per accelerare l'esecuzione del programma e agire come cache del processore ma ora un'architettura di processore giorni è cambiata e loro (Intel) aggiungono molta memoria del processore chiamata cache

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

Puoi vedere la spiegazione di Mason Wheeler per gli esempi

    
risposta data 03.09.2013 - 05:47
fonte
1

Penso che aiuti a pensare che i registri non siano memoria e non dovrebbero essere pensati come tali.

Pensa più come OO - Register è una classe, non derivata da Memory e Memory è una classe non derivata dal registro, ma la classe Register ha metodi (Machine Op Codes) per convertire i suoi dati da e verso Memory. 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 da registri, che spesso accedono alla memoria.

Non è raro vedere registri di sola scrittura - difficilmente un attributo di memoria. E 'anche possibile che un valore di registro cambi senza scrivere - di nuovo, non il comportamento che ci si aspetta dalla memoria.

    
risposta data 03.09.2013 - 07:20
fonte
0

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

Questo è legato 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 memorizzati in qualche modo in qualche registro. Potrebbe essere diverso, ma il circuito necessario per collegare direttamente la memoria all'ALU sarebbe troppo complesso: è più facile e più 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 un operando (una modalità di indirizzamento conosciuta 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. Esistono cache per motivi di prestazioni, i registri esistono a causa del design della CPU (ad esempio, a causa del percorso dati). Programmatori intelligenti (in realtà i compilatori intelligenti cercano di ottimizzare l'uso dei registri per ridurre al minimo gli accessi alla memoria (i registri sono più veloci della cache o della memoria). Questo è giustificabile perché le informazioni memorizzate nei registri tendono ad essere utilizzate più volte e, in effetti, questo è uno dei principi della filosofia RISC.

    
risposta data 04.03.2017 - 22:34
fonte

Leggi altre domande sui tag