Architettura della CPU
La CPU
L'elemento fondamentale di un sistema di elaborazione, come proposto da Von Neumann, è la CPU (Central Processing Unit)
Nel corso dei decenni l'evoluzione delle CPU è stata enorme in termini di capacità di elaborazione e velocità, ma la struttura interna, cioè l'architettura, ha mantenuto le caratteristiche e le funzionalità evidenziate nella figura sotto.
Si possono individuare i seguenti blocchi:
CU (Control Unit): coordina e gestisce le operazioni interne dei vari blocchi in base ai segnali ricevuti dall'esterno e alle istruzioni da eseguire;
ALU (Arithmetic Logic Unit): esegue tutte le operazioni logico-matematiche necessarie richieste dall'unità di controllo;
REGISTERS: piccole aree di memoria (le dimensioni massime dipendono da quanti bit può elaborare simultaneamente l'unità di controllo) molto veloci che conservano i dati da elaborare e le informazioni relative alle operazioni da eseguire durante l'esecuzione delle istruzioni;
CACHE interna: area di memoria nella quale sono inserite le istruzioni successive a quella in corso di esecuzione, velocizzando così le operazioni; è organizzata su più livelli (L1, L2, ecc.) in base alla velocità di accesso e alla frequenza d'uso;
LCU (Logic Control Unit): insieme di circuiti che trasformano gli impulsi elettrici provenienti dall'esterno in segnali utili per l'unità di controllo e trasformano in impulsi elettrici i comandi provenienti dall'unità di controllo;
MI (Memory Interface): insieme di circuiti che si occupa di fornire ai bus esterni di comunicazione (dati e indirizzi) gli impulsi necessari per le comunicazioni con la memoria e con le periferiche e di trasformare gli impulsi ricevuti dall'esterno in segnali utili per l'unità di controllo;
BUS interno (o CPU bus): insieme di collegamenti elettrici che consente di trasferire dati e indirizzi tra i vari blocchi del microprocessore.
I Registri
Un registro è una piccola e veloce memoria interna alla CPU.
Dal punto di vista tecnologico, un registro è un insieme di elementi fisici bistabili, detti bit.
Il termine bit è una contrazione di Binary digit e rappresenta la più piccola unità di memorizzazione di un elaboratore che può assumere solo due valori (in genere 0 e 1)
Poiché ciascun elemento ha due configurazioni stabili possibili, per cui per convenzione sono associati i simboli 0 e 1, un registro formato da n bit è in grado di assumere configurazioni di stato diverse.
Nella figura sotto un registro di 16 bit (contiene la sequenza di bit, 0001 1000 0110 0011
)
Lo stato di un registro, cioè la configurazione dei suoi bit, rappresenta l'informazione che vi è memorizzata; essa è conservata fino a quando non la si altera.
Su un registro si può effettuare l'operazione di scrittura, che consente di depositare i bit che compongono l'informazione, e l'operazione di lettura, che permette di acquisire dall'esterno il valore dei bit memorizzati.
Anche i registri hanno attraversato un'evoluzione negli anni e ne sono aumentati di numero e dimensione, crescendo col le potenze di 2: inizialmente registri a 8 bit, poi 16, 32 , fino allo standard attuale a 64 bit.
I registri fondamentali, presenti in tutte le CPU (pur con nomi differenti a seconda dell'azienda produttrice di microprocessori), sono presentati nella figura sotto.
Le linee rosse rappresentano i bus su cui viaggiano i segnali di controllo, mentre le linee blu rappresentano i bus su cui viaggiano dati e indirizzi.
Vediamo lo scopo di ciascun registro:
AR (Address Register): memorizza gli indirizzi per gli accessi in memoria (dunque solo dalla CPU verso la memoria).
DR (Data Register): memorizza i dati provenienti:
dalla memoria diretti alla CPU;
dalla CPU diretti alla memoria;
IR (Istruction Register): memorizza il codice operativo (opcode) dell'istruzione da eseguire. Sulla base dell'opcode, l'unità di controllo capisce quale operazione deve essere eseguita e ne comanda l'esecuzione.
PC (Program Counter): memorizza l'indirizzo della prossima istruzione da eseguire.
SR (Status Register): memorizza, tramite una serie di flag, lo stato del processore successivo all'esecuzione dell'ultima operazione. I suoi bit assumono valore 0 o 1 in base al risultato dell'operazione svolte dal processore.
SP (Stack Pointer): memorizza l'indirizzo top dello stack. Lo stack è un'area della memoria in cui i dati sono letti/scritti in modalità Last-In-First-Out (LIFO). Tipicamente si usa per salvare l'indirizzo di ritorno della subroutine (funzioni o procedure) chiamate dal main program. L'ultima subroutine chiamata è la prima ad essere finita e per tornare al main program serve l'indirizzo di ritorno, salvato in cima alla pila (stack) e puntato da SP.
R0,..., Rn: registri di lavoro (o registri generali) che memorizzano i risultati temporanei in ingresso e in uscita dall'ALU.
Il CICLO MACCHINA
La CPU ha il compito di eseguire una sequenza di istruzioni (un programma).
Prima preleva l'istruzione insieme a eventuali dati dalla memoria esterna (la RAM) e carica tutto negli opportuni registri. Poi l'ALU elabora l'istruzione e mette a disposizione il risultato in un registro dedicato o in memoria.
Tutto questo rappresenta un ciclo macchina o fetch-execute cycle.
Le fasi durante le quali la CPU compie un intero ciclo sono cinque e si ripetono in sequenza fino al termine del programma:
IF (Instruction Fetch): lettura dell'istruzione da memoria;
ID (Instruction Decode): decodifica dell'istruzione e lettura dati dai registri;
EX (Execution): esecuzione dell'istruzione;
MEM (Memory): scrittura del risultato in memoria (solo per certe istruzioni);
WB (Write Back): scrittura del risultato nel registro opportuno e aggiornamento dello stato.
Gli attuali microprocessori superano la suddivisione delle istruzioni in cinque fasi. E' possibile frazionare la fasi del ciclo in sequenze di micro-operazioni, ognuna di una complessità comparabile alle altre, che sono ripetute identicamente su flussi continui di dati. Ottimizzando i microprocessori, ogni micro-operazione è eseguita in un ciclo di clock.
Un ciclo macchina è così costituito da una sequenza di fasi, ognuna a sua volta costituita da micro-operazioni eseguite dalla CPU. La durata di una micro-operazione prende il nome di cycle time ed è comunemente indicata con .
ESEMPIO
Frequenza di clock = 2GHz
= 0,5 ns (nanosecondi)
Il valore è la frequenza di clock della CPU, misurata in gigaherz (GHz).
Nella figura sotto sono mostrate tre istruzioni eseguite in sequenza, in cui ogni intervallo dell'asse del tempo rappresenta un , che per semplicità supponiamo corrispondere alla durata di una fase (anche se sarebbe più realistico che corrispondesse alla curata di una delle micro-operazioni in cui è suddivisa ogni fase).
Se ogni fase ha un di 0,5 ns, occorreranno 7,5 ns ( = 3 istruzioni * 5 fasi * 0,5 ns) per eseguirle.
Il flusso di esecuzione dei cicli macchina coinvolge tutti i registri che abbiamo visto trattando la CPU.
Il flowchart nella figura sotto mostra i passi principali del ciclo e i registri coinvolti (i blocchi tratteggiati indicano le azioni non obbligatorie realizzate a ogni ciclo).
FASE 1: IF
L'indirizzo della prima istruzione viene caricato nel Program Counter e poi da quasto nell'Address Register.
L'istruzione è prelevata (fetch) dalla memoria e caricata nell'Instruction Register (anche eventuali dati vengono caricati nel Data Register).
Il Program Counter viene incrementato al fine di puntare alla successiva istruzione da eseguire. La posizione dell'istruzione successiva è (salvo nelle istruzioni di salto) implicita; il programma è eseguito in sequenza e quindi l'indirizzo dell'istruzione successiva corrisponde all'indirizzo della prima istruzione successiva all'istruzione corrente.
FASE 2: ID
L'opcode dell'istruzione è decodificato e in base a esso si caricano nei registri di lavoro (R0, ..., Rn) gli operandi necessari all'istruzione e si attivano le microcircuiterie necessarie a svolgere l'operazione richiesta.
FASE 2: EX
Le elaborazioni previste dall'opcode dell'istruzione sono eseguite nell'ALU, sfruttando i registri di lavoro (R0, ..., Rn) per eventuali risultati parziali.
FASE 4: MEM
Consiste nell'eventuale scrittura del risultato di un'operazione in memoria (per esempio in caso di assegnamento di valori a variabili del programma) o verso le periferiche.
FASE 5: WB
Il risultato dell'esecuzione dell'istruzione viene scritto nel Data Register e lo stato del processore a seguito dell'esecuzione viene settato nello Status Register.
Esercizi
A) Considera la seguente situazione:
Esegui le seguenti istruzioni e rispondi alle domande:
Prendi il dato contenuto nella locazione di indirizzo
D000
e mettilo inRegistro A
.Registro A
= ...............................Prendi il dato contenuto nella locazione di indirizzo
D001
e mettilo inRegistro B
.Registro B
= ...............................Prendi l'istruzione contenuta nella locazione di memoria in cui l'indirizzo è in
PC
e mettila inIR
IR
= .............................................Supponendo che l'istruzione appena letta sia A - B, esegui l'istruzione. Se il risultato è minore di 0, metti il risultato nella locazione di memoria di indirizzo
D002
; se è maggiore o uguale a 0, mettilo nella locazione di memoria di indirizzoD003
(i numeri in memoria sono rappresentati in complemento a 2).Somma 1 al contenuto di
PC
e metti il risultato inPC
. Prendi l'istruzione contenuta nella locazione il cui risultato è inPC
è mettila inIR
.IR
= ...........................................
B) Determina la dimensione minima di un bus indirizzi utile a indirizzare 8kbyte.
C) Determina l'indirizzo minimo e l'indirizzo massimo delle locazioni di una memora con capacità 256 kbit e locazioni di 1 byte.
D) Una memoria contiene complessivamente 232 bit. Quante celle da 1 byte si possono avere, e quante da 4 byte? (esprimi i calcoli mantenendo le potenze di 2)
E) Se l'ultima cella di memoria ha indirizzo FFFFh
e ogni cella è di 8 bit, quanti byte contiene la memoria? Quanti bit? Quante word? (parole di 2 byte)
Last updated