Sei sulla pagina 1di 5

Una unità centrale di elaborazione o processore centrale (in inglese: central processing unit, in acronimo:

CPU), in elettronica, informatica e nell'architettura di von Neumann di un calcolatore, indica un'unità o


sottosistema logico e fisico che sovraintende alle funzionalità logiche di elaborazione principali di un
computer.

In ciò essa si contrappone a tutte le altre unità di elaborazione secondarie presenti nelle architetture
hardware dei computer, ovvero le varie schede elettroniche (scheda audio, scheda video, scheda di rete,
coprocessore e processore di segnale digitale). Attualmente la CPU è implementata attraverso un
microprocessore digitale general purpose, basato tipicamente su un'architettura a registri generali.

Indice

1 Storia

2 Descrizione

2.1 Funzioni

2.2 Struttura

2.3 Unità ausiliarie

2.4 Istruzioni macchina

2.5 Ciclo del processore

3 Classificazione

3.1 Architettura CISC

3.2 Architettura RISC

3.3 Architettura RISC MISC

4 Confronto tra architettura RISC e CISC

5 Temperature d'esercizio

6 Note

7 Bibliografia

8 Voci correlate

9 Altri progetti

10 Collegamenti esterni

Storia

Le prime CPU vennero progettate quando iniziarono ad esser sviluppati i primi computer ove riuniti
all'interno dello stesso cabinet vi erano due processori che precedentemente erano sempre stati contenuti
in cabinet diversi o comunque costituivano blocchi distinti: l'ALU e l'unità di controllo. La prima CPU
commercializzata della storia fu l'IBM 709,[1] basata su valvole termoioniche e disponibile sul computer
omonimo IBM 709, commercializzato dall'IBM a partire dal 1958. Quando i transistor disponibili su un solo
chip erano pochi e i calcolatori venivano spesso programmati in linguaggio assembly, per sfruttarli in modo
tale da avere CPU con istruzioni potenti, evolute e complesse: più queste erano vicine alle istruzioni dei
linguaggi di programmazione ad alto livello più il computer sarebbe stato facile da programmare, e i
programmi avrebbero occupato poco spazio in memoria. Tuttavia grazie all'avvento prima del transistor e
poi della microelettronica, è stato possibile contenere la CPU prima in una scheda elettronica e
successivamente in un circuito integrato, quindi nello spazio di pochi centimetri quadrati. In particolare la
prima CPU, anche se limitata perché solo a 4 bit cioè solo numerica, commercializzata e interamente
contenuta in un circuito integrato è il microprocessore Intel 4004, commercializzato a partire dal 1971, la
cui implementazione si deve all'italiano Federico Faggin.

A cavallo fra gli anni '70 e gli '80 la situazione però cambiò rapidamente: la RAM divenne più economica e
comparvero i primi compilatori moderni, ottimizzanti, in grado di generare linguaggio macchina molto
efficiente: per questo si iniziò a pensare ad un nuovo modo di progettare le CPU, prendendo in esame la
possibilità di usare i transistor disponibili per avere invece molti registri e un set di istruzioni elementare,
molto ridotto, che delegasse al compilatore il lavoro di tradurre le istruzioni complesse in serie di istruzioni
più semplici, permettendo così di avere unità di controllo particolarmente semplici e veloci. Attualmente la
distinzione fra queste due classi di architetture è venuta in gran parte meno: il numero di transistor
disponibili su un solo chip è aumentato tanto da poter gestire molti registri ed anche set di istruzioni
complesse.

Descrizione

Funzioni

Una CPU ha il compito di eseguire le istruzioni di un programma presente nella ROM in fase di boot, nella
memoria centrale (o primaria, es. RAM) dopo averlo prelevato dalla memoria secondaria (o di massa) o da
altri dispositivi: durante l'esecuzione del programma l'unità legge o scrive dati direttamente da o nella
memoria centrale; il risultato dell'esecuzione finale dipende dal dato su cui si opera e dallo stato interno in
cui la CPU stessa si trova e può mantenere la traccia delle istruzioni eseguite e dei dati letti (vedi cache).

Struttura

Una CPU vista del lato dei pin

Architettura di un processore basato su registri generali

Una generica CPU contiene:

Unità di controllo (control unit o CU): preleva istruzioni e dati dalla memoria centrale, decodifica le
istruzioni e le invia ad un'unità aritmetica e logica per poi comandarne l'esecuzione. Una volta finita
l'esecuzione di una istruzione e solo allora, la CU ha il compito di prelevare una nuova istruzione e gli
eventuali dati. La CU ha inoltre il compito di inviare i dati relativi ai risultati delle elaborazioni. Infine, nei
computer moderni, la CU ha il compito di organizzare il lavoro delle altre unità di elaborazione;
un'unità aritmetica e logica (Arithmetic Logic Unit o ALU): si occupa di eseguire le operazioni logiche ed
aritmetiche;

uno shifter, direttamente collegato alla ALU, che si occupa dello spostamento verso sinistra o verso destra
dei bit del risultato dell'unità aritmetico logica, eseguendo rispettivamente la moltiplicazione e la divisione
per potenze di due;

alcuni registri interni alla CPU che hanno un tempo di accesso nettamente inferiore a quello della memoria
centrale: il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova in un dato
istante. Due registri sempre presenti sono:

il registro IP (Instruction Pointer) o PC (Program Counter), che contiene l'indirizzo della prossima istruzione
da eseguire. È il registro grazie al quale la CU sa quale istruzione prelevare. È la CPU stessa ad aggiornare il
contatore;

il registro dei flag (registro di stato, Condition Code Register o CCR), che contiene informazioni particolari,
detti appunto flag che segnalano determinati stati dell'insieme delle unità di calcolo e alcune informazioni
sul risultato dell'ultima operazione eseguita. I flag più importanti sono:

Flag di stato:

Overflow: indica se il risultato dell'operazione precedente era troppo grande e non può quindi essere
valutato correttamente: 0 assenza di overflow, 1 presenza di overflow

Zero: Segnala se il risultato dell'operazione è o no zero.

Carry: (riporto) vale 1 se l'ultima operazione ha ecceduto la capacità del registro che contiene il risultato,
altrimenti vale 0 (esempio: in un registro a 8 bit, che può rappresentare solo numeri da 0 a 255, la somma
178+250 darebbe come risultato 172, cioè 428-256, e il carry verrebbe posto a 1 insieme al flag di
overflow). Nelle operazioni di sottrazione, ottenuta come somma del complemento, ha invece esattamente
il significato opposto.

Segno: indica il segno del risultato dell'operazione precedente: 0 risultato positivo, 1 risultato negativo. In
realtà non esiste uno specifico flag di segno, ma questo è direttamente derivato dai flag zero e carry. Nelle
operazioni di sottrazione con flag zero=0 e carry=1 si ha segno positivo, con carry=0 segno negativo.

Flag di controllo:

Interruzione (interrupt) : se a questo flag viene assegnato valore 1, la CPU smette di rispondere alle
richieste di servizio esterne delle periferiche (i segnali delle linee IRQ) finché non viene ripristinato al valore
0 o finché non arriva dall'esterno un segnale di RESET.

Una generica CPU deve eseguire i suoi compiti sincronizzandoli con il resto del sistema perciò è dotata,
oltre a quanto sopra elencato, anche di uno o più BUS interni che si occupano di collegare registri, ALU,
unità di controllo e memoria: inoltre all'unità di controllo interna della CPU fanno capo una serie di segnali
elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di
esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il RESET, le linee di IRQ e il
CLOCK sono sempre presenti.

Per quanto riguarda i registri, le CPU possono gestirli in molti modi: i più comuni sono registri nominativi
(CPU CISC classiche), file di registri (RISC) e stack di registri (Transputer e simili).
Stack di registri: i registri sono organizzati in una struttura a stack (pila); questa architettura ha il vantaggio
di non dover specificare su quale registro interno operare (è sempre quello in cima allo stack) ottenendo
istruzioni più corte e più semplici da decodificare. Il rovescio della medaglia è che nel caso sia necessario un
dato "sepolto" in fondo allo stack, il suo recupero è un'operazione molto lenta.

Registri nominativi: ogni registro è identificato singolarmente e le istruzioni che usano registri specificano di
volta in volta quale registro devono usare. Spesso alcuni registri sono dedicati a scopi particolari (registri
indice, accumulatori, registri di segmento ecc.) imponendo la non ortogonalità del set di istruzioni (vedi
oltre). La gran maggioranza delle CPU generiche degli anni '70 e '80 è di questo tipo.

File di registri: I registri sono organizzati come una memoria interna della CPU e indicizzati: la CPU "alloca"
un certo numero di registri per ogni processo e/o subroutine in esecuzione, eliminando la necessità di
accedere alla RAM per salvare gli stack di chiamata delle funzioni e i dati di task switching nei sistemi
multitask.

Una CPU è un circuito digitale sincrono: vale a dire che il suo stato cambia ogni volta che riceve un impulso
da un segnale di sincronismo detto clock, che ne determina di conseguenza la velocità operativa, detta
velocità di clock: quindi il tempo di esecuzione di un'istruzione si misura in cicli di clock, cioè in quanti
impulsi di clock sono necessari perché la CPU la completi. In effetti, una parte importante e delicata di ogni
CPU è il sistema di distribuzione che porta il segnale di clock alle varie unità e sottounità di cui è composta,
per fare in modo che siano sempre in sincronia: questo sistema si dirama in una struttura ad albero con
divisori e ripetitori che giunge ovunque nella CPU.

Nei processori più moderni (Pentium, Athlon, PowerPC) questa "catena di ingranaggi" elettronica arriva ad
impiegare circa il 30% di tutti i transistor disponibili. La velocità di questa distribuzione determina in
maniera diretta la massima frequenza operativa di una CPU: nessuna CPU può essere più veloce del suo
critical path, cioè del tempo che impiega il clock per percorrere il tratto più lungo in tutto l'albero di
distribuzione del clock. Per esempio, se il segnale di clock di una data CPU impiega un nanosecondo per
attraversare tutto il chip ed arrivare fino all'ultima sottounità, questa CPU potrà operare a non più di 1 GHz,
perché altrimenti le sue componenti interne perderebbero la sincronizzazione, con risultati imprevedibili.
Per avere un margine di sicurezza, il limite pratico è ben minore di 1 GHz.

La massima frequenza di clock ha evidentemente un impatto importante sulle prestazioni della CPU.
Tuttavia, questo parametro da solo consente solo di valutare quanto velocemente la CPU è in grado di
espletare uno step elementare del ciclo di esecuzione. Le prestazioni di un processore dipendono in realtà
da diversi parametri architetturali, come il numero di step elementari richiesti per eseguire una data
istruzione e il numero di istruzioni richieste per eseguire un dato programma. La valutazione delle
prestazioni va fatta perciò misurando il tempo di cui ha bisogno la CPU per eseguire un intero programma. I
programmi utilizzati a questo scopo sono in genere standardizzati e noti come benchmark.[2][3]

Unità ausiliarie

Possono affiancare la CPU le seguenti unità ausiliarie:

una FPU (Floating Point Unit), che si occupa di eseguire calcoli in virgola mobile;
una MMU (Memory Management Unit), che si occupa di tradurre gli indirizzi di memoria logici in indirizzi
fisici, supportando la protezione della memoria e/o uno o più meccanismi di memoria virtuale.

Potrebbero piacerti anche