Semplificando molto si puo' dire che l'elemento base della logica della CPU e' semplicemente un interruttore, che puo' essere acceso e spento con un segnale elettrico.
All'inizio come interruttori si sono usati rele', quindi tubi a vuoto, ed infine transistor ed integrati, ma il principio e' rimasto sempre lo stesso.
Le memorie sono realizzate con circuiti particolari, detti flip-flop, che, indipendentemente dalla tensione in ingresso, "ricordano" lo stato di acceso o spento cui sono stati settati.
Nella figura sotto (presa da un libro di Tanenbaum) vediamo lo schema di alcuni circuiti semplici realizzati con transistors: un invertitore, una porta NAND e una OR, questi circuiti logici elementari sono detti gates. Nella figura Vcc=5volt, e' interpretato come un 1, 0 Volt e' interpretato come 0.
figura a: porta NOT (invertitore):
Se "accendo" il transistor, dando una tensione Vin=1, ho che Vout=0;
se invece Vin=0 nel transistor non passa corrente e Vcc=Vout=1,
Abbiamo quindi che l'uscita Vout e' il contrario dell'ingresso Vin e questo circuito implementa la funzione NOT.
figura b: porta NAND:
Qui devo "accendere" entrambi i transistor per avere Vout=0 ; in caso contrario avro' Vout=Vcc=1
Questa e' la funzione logica NAND, che fornisce 0 (falso) se e solo se i 2 ingressi V1 e V2 sono veri (1)
figura c: porta NOR:
Se uno dei 2 transistor e' "acceso" (V1 = 1 oppure V2 = 1 , o entrambi) ho che Vout=Vcc=0 , altrimenti Vout=Vcc=1
Questa e' la funzione logica NOR, che fornisce 0 (falso) se uno o entrambi gli ingressi sono veri.
Tutte le operazioni, logiche e matematiche, sono implementate, usando l'algebra di Boole, in termini di circuiti logici di questo tipo. Vediamo sotto i simboli che li rappresentano, e le tabelle che mostrano cosa si ottiene dalle operazioni logiche nei vari casi (tabelle di verita').
Un or esclusivo (XOR) e' una funzione che e' vera se uno solo dei suoi ingressi e' vero, vediamo ora come un XOR e un AND possono essere usati per implementare un sommatore. La somma di due numeri di un bit sara' 0 se i 2 bit sono 0, varra' 1 se uno dei due numeri vale 1. Se entrambi sono 1 abbiamo zero come risultato ed un riporto alla cifra binaria successiva. Una somma di numeri con molti bit si implementa con una catena di circuiti come quello mostrato sotto.
Le CPU moderne contengono decine e decine di milioni di gates, che implementano funzioni complesse, inoltre la CPU deve contenere circuiti elettronici per interfacciarsi col bus e gli altri dispositivi. In questa descrizione semplificata delle cose non abbiamo parlato del clock, che e' un segnale periodico, con frequenza fissa, generato da appositi circuiti sulla scheda madre, che permette di sincronizzare i circuiti della CPU, le memorie e tutta l'elettronica del computer. La velocita' del clock da' un'idea della velocita', e un po' delle prestazioni, della CPU.
A fine 2004 si e' arrivati a clock attorno ai 4 Ghz, e ad un cento milioni di gates nella CPU;
la miniaturizzazione e' estrema, e nel 2004 si arriva a dimensioni di 90 nanometri per i gates.
Il problema piu' grosso diviene quello dello smaltimento del calore generato, che puo' arrivare
attorno ai 100 Watt.
I primi computer veri e propri, sviluppati a meta' del 1900, suscitarono l'interesse dei matematici, anche in relazione agli sviluppi della logica matematica di quel periodo.
Abbiamo quindi alcune schematizzazioni del funzionamento dei computer cui si fa riferimento ancor oggi: in particolare il modello di Touring ed il modello di Von Noiman. Von Noiman e' il primo che mette le istruzioni macchina in RAM, come i dati.
Le CPU moderne sono piu' complicate di cosi' ed usano tutti i trucchi
possibili per rendere il calcolo piu' veloce, vediamone in breve:
C'e' un buffer ( pre-fetch buffer) in cui le istruzioni vengono trasferite, la CPU le legge e decodifica in anticipo rispetto al momento in cui dovra' eseguirle
La CPU cerca di indovinare quale sara' la prossima istruzione, fra quelle nel pre-fetch buffer.
Le istruzioni sono scomposte in passi elementari (stage), i passi di diverse istruzioni sono eseguiti contemporaneamente da hardware diverso
E' una specie di catena di montaggio:
stage | Tempo: | T1 | T2 | T3 | T4 | T5 | T6 |
---|---|---|---|---|---|---|---|
lettura istruzione | istr.1 | istr.2 | istr.3 | istr.4 | istr.5 | istr.6 | |
decodifica | - | istr.1 | istr.2 | istr.3 | istr.4 | istr.5 | |
fetch operandi | - | - | istr.1 | istr.2 | istr.3 | istr.4 | |
esecuzione | - | - | - | istr.1 | istr.2 | istr.3 | |
risultati ai registri | - | - | - | - | istr.1 | istr.2 | |
Con n stages si produce un'istruzione completa ogni ciclo di clock.
Tempo di latenza: tempo perche' la pipe si riempia:
i salti nel programma "svuotano" la pipeline spesso e la rendono dannosa.
Il P4A Northwood ha pipelines di 20 stages.
Nella scelta di una CPU occorre fare quindi riferimento a benchmark che rispecchino quelle che
sono le proprie esigenze.
La situazione reale non e' sempre riconducibile a queste schematizzazioni; i progettisti seguono un approccio pragmatico, indipendente dalla teoria, il mercato delle CPU e' oggi dominato da CPU Intel che adottano un approccio ibrido CISC-RISC : istruzioni CISC vengono spezzate in istruzioni semplici, e passate ad un core RISC, con piu' pipelines che lavorano in parallelo. Per alimentare le pipeline in modo continuo vengono utilizzate tecniche di pre-analisi del codice, che dovrebbero permettere di caricare e decodificare in anticipo le istruzioni che verranno eseguite in seguito.
Un'altra importante evoluzione del calcolo e' l'introduzione del parallelismo. I computer paralleli hanno molte CPU, che lavorano insieme. Il modo di lavorare dei computer paralleli e' classificato secondo la cosiddetta "tassonomia di Flinn":
Il parallelismo e' oggi relegato in un mercato di nicchia, e le macchine parallele sono costituite da reti di CPU commerciali, non piu' progettate apposta per la macchina.
Un discorso diverso va fatto per le macchine con piu' CPU, che condividono la memoria, ma eseguono programmi (o task) diversi. Questa architettura (SMP : simmetric multi processing) e' comune nei grossi server. Nel 2005 iniziano anche ad apparire CPU con "core" multipli, che implementano quindi una specie di SMP all'interno del processore stesso.
La maggior parte delle CPU per PC sono state, fino a pochi anni fa, a 32 bits, ovvero dotate di
registri e parole di 32 bits. Queste CPU hanno delle limitazioni nella quantita' di memoria che
possono utilizzare (circa 4 Gbyte), dovute al fatto che in 32 bit non si possono mettere indirizzi
di memoria piu' grandi di tanto. Questa limitazione e' grave per i grossi server,
che sono equipaggiati con grandi quantita' di memoria, in modo da minimizzare
le operazioni di lettura e scrittura su disco, relativamente lente. Per questo il mercato dei
grossi server aziendali era appannaggio di produttori che sviluppavano una loro linea dedicata
di CPU a 64 bits, capaci di indirizzare quantita' enormi di memoria. Le cose stanno cambiando, anche
i produttori di CPU per PC, come AMD ed Intel stanno passando a produrre CPU a 64 bits, pur mantenendo la
compatibilita' con il vecchio software a 32 bits.
sono CPU dalle possibilita' e costo limitato, a volte miniaturizzate, e sono usate un po' da per tutto: elettrodomestici, telefonia, centraline delle automobili, badge per sky-pass etc etc. Si assiste oggi alla tendenza ad utilizzare microprocessori programmabili al posto di circuiti elettronici complessi, e ad inserire in pratica microprocessori ovunque. E' una vera rivoluzione tecnologica, cui non si da' l'attenzione che meriterebbe.
questo era il tipo di processori piu' importante negli anni 80, quando 5 grossi produttori si contendevano il mercato del calcolo con i loro prodotti: Silicon Graphics (SGI), SUN con i processori Sparc, HP con l'architettura PA-RISC, IBM con i Power e Digital con le Alfa. Attualmente ( fine 2004) sono equipaggiati con CPU di questo tipo, a 64 bits, i grossi server, ma sono rimasti sul mercato con la loro linea di CPU dedicate solo la SUN e l'IBM, ls Digital e' scomparsa e gli altri utilizzano processori Intel.
la Apple utilizzava processori prodotti dalla Motorola, poi le sue macchine sono state equipaggiate con potenti processori Power G4 o Power G5, simili a quelli dei server IBM. Nel 2006 anche la Apple passa ad usare processori della Intel
ci sono diversi produttori, ma il mercato se lo contendono in pratica Intel ed AMD,
con prodotti simili. L'Intel e' stata una delle prime a produrre integrati, e
fin dall'inizio i PC sono basati su processori Intel, si trattava tuttavia di macchine
con possibilita' limitate. Coi primi modelli "Pentium", attorno al 1995 le cose cambiano,
il Pentium e' una CPU superscalare, a 32 bits, con pipeline efficienti, unita' per il
calcolo con numeri float integrata , memoria cache integrata, clock oltre 200 MHz.
Il Pentiunm IV (2000-2004) ha un core RISC, lunghe pipelines, unita' per il
"branch prediction", un'architettura (netBurst) intesa a sfruttare
al massimo l'alta velocita' del processore, che nei modelli di fine 2004 arriva a 3.8 Ghz.
Ci sono pero' problemi con la dissipazione termica ed a meta' 2004
i progettisti rinunciano a spingere i Pentium IV a 4 Ghz ed oltre, e la tendenza
attuale (2005) e' di migliorare le prestazioni producendo CPU "multi core", cioe'
mettendo su un unico cip piu' CPU che condividono cache e bus. Si tende inoltre a
integrare il controller della memoria nel processore ed a portare le memorie
cache nella CPU.
L'AMD all'inizio produceva "cloni" dei processori Intel, ma il modello contemporaneo del Pentium IV,
l'Athlon XP, ha prestazioni migliori delle CPU Intel, a parita' di clock. Pero' l'Athlon XP
lavora a frequenze di clock piu' basse (max 2.4 Ghz) per cui alla fine i modelli di punta di
Intel ed AMD hanno prestazioni simili.
Nel 2003 l'AMD inizia a produrre l'Athlon 64, che puo' lavorare anche a 64 bits,
nel 2005, con la serie 600 dei Pentium IV l'Intel si accoda a questa linea di processori
ibridi che possono lavorare a 32 o 64 bits; l'Intel ha anche una linea di processori a 64 bit
dedicata ai server: gli Itanium, che pero' non ha mai sfondato.
Le CPU per PC, che costano poco e vanno a 64 bits, vengono oggi usate
per server di fascia media e bassa da quasi tutti i produttori.
Per i portatili si utilizzano varianti a basso consumo dei processori per PC.
Nel 2006 l'Intel, non riuscendo piu' ad aumentare le prestazioni salendo col clock, abbandona il Pentium IV, e passa all'architettura "Core", che e' particolarmente attenta ai consumi. In questo stesso periodo, per aumentare le prestazioni, si inizia a mettere 2 CPU sullo stesso circuito integrato, gran parte dei PC e notebook del 2007 hanno quindi 2 processori, come i "Core 2 Duo" della Intel e gli "Athlon 64 X2" dell'AMD.
processori particolari vengono sviluppati per mercati di nicchia, siccome i costi per lo sviluppo di una CPU sono alti si tende a usare quando si puo' processori per PC, dell'Intel o AMD. Meritano un cenno i processori sviluppati dalla Sony per le Playstation, si tratta di CPU fatte per la grafica; per la Playstation 3 e' stato sviluppato un processore "multi-core", con un clock di 3.2 Ghz ed estremamente potente.
In questo link una lista dettagliata delle CPU per PC, dell'Intel ed AMD.