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 |
Quanti registri? 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: valutare 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.
Ampiezza: i registri per gli indirizzi devono contenere un indirizzo intero: con registri a 32 bit si indirizzano byte = 4 GB, a 64 bit .
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).
Contenuto tipico della PSW:
- flag: N (segno, bit più significativo del risultato), Z (zero), C (riporto), V (overflow) — vedi 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 (modo privilegiato): indica se la CPU sta eseguendo codice del sistema operativo. Solo in questo modo sono permesse le istruzioni privilegiate (gestione della memoria, I/O, modifica della PSW stessa); un programma utente che le tenta provoca un'eccezione.
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 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 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.