Salta al contenuto
Note per Studenti Struttura interna della CPU e registri

Struttura interna della CPU e registri

In questa pagina 4
In questa pagina 3

La CPU deve: prelevare le istruzioni, interpretarle, prelevare i dati, elaborarli, scrivere i risultati (vedi Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →). Per farlo ha bisogno di una piccola memoria interna: i registri.

Componenti: ALU (vedi Unità aritmetico-logica (ALU)Ruolo dell'ALU, ingressi, uscite e flag; ALU a 1 bit con AND, OR e sommatore selezionati da un multiplexer; estensione a 32 bit, sottrazione, confronto set-less-than e rilevazione dello zero e dell'overflow; tabella dei segnali di controllo; unità di moltiplicazione e virgola mobile.Unità aritmetico-logica (ALU) →), unità di controllo, banco dei registri (vedi Registri e contatoriRegistro parallelo a n bit con caricamento abilitato; banco dei registri con due porte di lettura e una di scrittura; registri a scorrimento; contatori sincroni e asincroni (ripple), contatore modulo N con esempio svolto.Registri e contatori →), bus interno che li collega.

Registri visibili all'utente

Il "programmatore" è chi scrive in assembly oppure il compilatore. Può usare:

Tipo Uso
uso generale operandi e risultati, indirizzi
dati solo dati (in alcune architetture)
indirizzi puntatori: registri base di segmento, registri indice, stack pointer
codici di condizione (flag) bit impostati dall'ALU, letti dalle istruzioni condizionate

Proprietà (numero di registri e bit nell'istruzione). Più registri significa meno accessi alla memoria, ma più bit nell'istruzione per indicarli (con 16 registri servono 4 bit per operando, con 32 ne servono 5) e più stato da salvare a ogni chiamata o interruzione. Le architetture RISC ne hanno tipicamente 16–32 (vedi Architetture RISC e CISCMotivazioni del CISC (divario semantico) e dati sull'esecuzione dei programmi; caratteristiche delle architetture RISC; finestre di registri; allocazione dei registri con colorazione di un grafo; confronto e situazione attuale (MIPS, ARM, x86).Architetture RISC e CISC →); ARM a 32 bit ne ha 16, MIPS 32.

Esempio. Con 1616 registri servono log⁡216=4\log_216=4 bit per operando, con 3232 registri 55 bit.

Esempio: valutare (a+b)⋅(c+d)−(e+f)(a + b) \cdot (c + d) - (e + f) con le variabili in memoria. Con 6 registri liberi si caricano tutte e sei le variabili una volta sola; con 4 registri si devono riusare e alcuni risultati intermedi vanno salvati in memoria e ricaricati. Con pochi registri il codice ha più load e store.

Formula (ampiezza dei registri e spazio di indirizzamento). Ampiezza: i registri per gli indirizzi devono contenere un indirizzo intero: con registri a 32 bit si indirizzano 2322^{32} byte = 4 GB, a 64 bit 2642^{64}.

Esempio. Registri a 3232 bit indirizzano 2322^{32} byte =4=4 GB.

Registri di controllo e di stato

Di solito non accessibili direttamente: PC, IR, MAR, MBR e la parola di stato (PSW, Program Status Word; in ARM si chiama CPSR).

Definizione (parola di stato PSW). Contenuto tipico della PSW:

Esempio. A 88 bit in complemento a 2, 127+1=1000 0000127+1=1000\,0000 dà N=1N=1, Z=0Z=0, C=0C=0, V=1V=1.

Segmentazione

In alcune architetture (es. x86) la memoria è divisa logicamente in segmenti con scopi diversi: codice, dati, stack. Gli indirizzi dentro un segmento partono da 0 (indirizzo logico); l'indirizzo lineare si ottiene sommando l'indirizzo base del segmento, tenuto in un registro di segmento. ARM e MIPS non usano segmentazione: lo spazio di indirizzamento è lineare e la protezione è affidata alla Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →.

Errori tipici

  • Considerare il PC un registro generale: in MIPS non lo è; in ARM è r15, ma scriverci equivale a un salto.
  • Pensare che il bit di supervisore lo possa cambiare il programma utente: lo cambia solo un'interruzione o una chiamata al sistema operativo.

Versione ripasso

Componenti: ALU (Unità aritmetico-logica (ALU)Ruolo dell'ALU, ingressi, uscite e flag; ALU a 1 bit con AND, OR e sommatore selezionati da un multiplexer; estensione a 32 bit, sottrazione, confronto set-less-than e rilevazione dello zero e dell'overflow; tabella dei segnali di controllo; unità di moltiplicazione e virgola mobile.Unità aritmetico-logica (ALU) →), unità di controllo, banco dei registri (Registri e contatoriRegistro parallelo a n bit con caricamento abilitato; banco dei registri con due porte di lettura e una di scrittura; registri a scorrimento; contatori sincroni e asincroni (ripple), contatore modulo N con esempio svolto.Registri e contatori →), bus interno (Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →).

Registri visibili

Uso generale, dati, indirizzi (base di segmento, indice, stack pointer), flag. Più registri ⇒\Rightarrow meno accessi alla memoria, ma più bit per indicarli (16: 4 bit; 32: 5) e più stato da salvare a ogni chiamata o interruzione. RISC: 16-32 (Architetture RISC e CISCMotivazioni del CISC (divario semantico) e dati sull'esecuzione dei programmi; caratteristiche delle architetture RISC; finestre di registri; allocazione dei registri con colorazione di un grafo; confronto e situazione attuale (MIPS, ARM, x86).Architetture RISC e CISC →); ARM 16, MIPS 32. Registri di indirizzo da 32 bit →\to 4 GB.

Controllo e stato

PC, IR, MAR, MBR e la PSW (CPSR in ARM): flag N, Z, C, V (Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →), abilitazione delle interruzioni, bit di supervisore: solo in modo privilegiato sono permesse le istruzioni privilegiate (memoria, I/O, modifica della PSW), altrimenti eccezione.

Segmentazione

x86: segmenti di codice, dati e stack; indirizzo lineare = base del segmento + indirizzo logico. ARM e MIPS: spazio lineare, protezione con la Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →.

Errori tipici: il PC non è un registro generale (in ARM è r15, scriverci è un salto); il bit di supervisore lo cambia solo un'interruzione o una chiamata al sistema.

Teoria collegata