1
RELAZIONE FINALE
ANNO 2002
CALCOLATORI
FABIO BARONCINI
CINZIA MARCACCI
2
Unità centrale CPU
Controllo
Unità
Aritmetico
logica
Un calcolatore digitale è composto da CPU,
memorie e dispositivi di input/output.
Dispositivi di ingresso\uscita
Registri
Memoria
Principale
Unità
Disco
Display
bus
3
Central Processing Unit
Descrizione
Organizzazione
Funzionamento
4
La CPU e’ il “cervello” del calcolatore e il suo
compito è quello di eseguire i programmi,
residenti nella memoria, leggendo ed eseguendo
le loro istruzioni.
I componenti sono collegati tra loro attraverso
dei bus.
Questa è composta da diverse parti:
- l’unita’ di controllo: legge le istruzioni della
memoria
- l’unità aritmetico logica: esegue le operazioni
aritmetiche (come addizione e sottrazione) e
logiche (come AND e OR)
- una piccola memoria.
5
Un bus, che è un gruppo di fili tra loro paralleli, ha il compito
di trasportare segnali di controllo, dati e indirizzi. Il Bus puo’
essere esterno alla CPU e ha lo scopo di permettere la
comunicazione tra la memoria e i dispositivi di I\O.
6
A+B
Registri
A
B
A
B
Registro ALU
dell’ingresso
L’organizzazione interna di una CPU è
caratterizzata dal data path, che è costituito da
una serie di componenti, tra i quali l’ALU, i registri,
e molti bus di comunicazione.
I registri memorizzano i dati che vengono poi
utilizzati e rielaborati dall’ALU che, a sua volta,
riscrive i risultati delle elaborazioni nei registri
stessi attraverso i bus di accesso ai registri.
Bus di ingresso dell’ALU
ALU
A+B
Registro di uscita
dell’ALU
l registri più importanti sono:
•il Program Counter (PC) che indica la precisa
istruzione da recuperare e eseguire
•l’Instruction Register (IR) che memorizza le
istruzioni che vengono eseguite in quel momento
7
Arithmetic Logic Unit
L’ALU esegue dei calcoli matematici sui dati e poi memorizza il risultato in
un registro in uscita.
I dati hanno due possibilità di percorsi:
registro-memoria i dati vengono trasportati dal registro di uscita alle
memoria e/o viceversa;
registro-registro i dati vengono riportati nei registri iniziali per essere
successivamente rielaborati: questo processo è chiamato ciclo del data
path, che è il centro del funzionamento delle CPU.
8
La memoria della CPU, che è ad alta velocità, viene utilizzata per
memorizzare temporaneamente istruzioni e dati piu’ frequentemente
acceduti. Questa memoria è composta da una serie di celle ad accesso
Random, sulle quali si può leggere e scrivere rapidamente perché si
trovano all’interno della CPU.
9
Il funzionamento della CPU si basa su una sequenza di operazioni, che insieme
prendono il nome di fetch-decode-execute:
1
prelievo delle istruzioni dalla memoria, e immissione di queste nel registro
delle istruzioni; Caricamento del nuovo program counter
2
determinazione del tipo di istruzione
3
ricerca operandi ed esegui l’istruzione.
Il programma utilizzato dalla CPU per compiere il fetch-decode-execute è una
procedura guidata dall’unita’ di controllo.
Questa interpretazione delle istruzioni può essere eseguita da un hardware o da
un programma software (microcodice) che legge, decodifica ed esegue
istruzioni piu semplici.
10
L’hardware e’ l’insieme degli elementi costitutivi di un elaboratore
Il software serve per utilizzare il calcolatore.
Il software suddivide le istruzioni in piccole porzioni che esegue in modo più
semplice attraverso un interprete, mentre l’hardware le esegue direttamente.
L’utilizzo del software è meno costoso, e il risparmio si ha soprattutto quando
le istruzioni sono molto complicate. Inoltre il software ha la possibilità di
correggere l’implementazione di istruzioni eseguite in modo sbagliato, di
aggiungere nuove istruzioni a costi minimi e infine di permettere lo sviluppo di
informazioni più elaborate, come nei processori attuali.
11
Durante gli anni 70’ dello scorso secolo il mercato dei calcolatori era in pieno sviluppo e
aumentava sempre di piu’ la richiesta di calcolatori a basso costo. Lo sviluppo di software
eliminava i limiti di costo inerenti alla esecuzione di istruzioni complesse. Venne creato il
calcolatore VAX della Digital Equipment Corporation, la cui CPU aveva migliaia di istruzioni e piu’
di 200 modi diversi per accedere ai dati in memoria. Verso la fine degli anni 70’ un gruppo tento’
di creare un minicomputer ad alto rendimento, che venne chiamato 801. Nell’ambito di un nuovo
studio, un gruppo di Berkeley progetto’ una CPU su chip VLSI che non utilizzava l’interpretazione
(tramite microcodice) e la chiamarono RISC (Reduced Instruction Set Computer). Poco dopo
venne creato un nuovo chip che prese il nome di MIPS. Questi processori erano molto diversi da
quelli in commercio e ben presto si capi’ l’importanza di proggettare processori che eseguissero le
istruzioni velocemente. Inizio’ quindi una lotta tra RISC e CISC (Complex Istruction Set
Computer) tuttora aperta.
12
Ci sono dei principi di progettazione chiamati principi di progettazione RISC, che gli
architetti delle CPU possono seguire. Tra i piu’ importanti troviamo:
1)
Tutte le istruzioni vengono eseguite direttamente dall’hardware
2)
Ottimizzare la velocita’ con la quale vengono iniziate le istruzioni
3)
Le istruzioni dovrebbero essere facilmente decodificabili
4)
Solo le istruzioni di load e store dovrebbero contenere indirizzi di memoria
5) Disporre di molti registri.
I progettisti, per migliorare le prestazioni delle macchine, utilizzano il parallelismo.
13
Tutte le istruzioni comuni vengono eseguite direttamente
dall’hardware e non vengono interpretate da microcodice, per cui il
sistema e’ piu’ veloce. Mentre per i calcolatori che implementano
istruction set CISC le istruzioni vengono scomposte in
miscroistruzioni anche se questo passaggio rallenta la macchina.
14
I calcolatori moderni cercano di iniziare piu’ istruzioni possibili al secondo. Il
parallelismo svolge quindi un ruolo fondamentale nel miglioramento delle
prestazioni perche’ inviare una grossa quantita’ di istruzioni lente a intervalli brevi
e’ possibile solo se istruzioni multiple si possono eseguire contemporaneamente.
Anche se le istruzioni devono sempre essere eseguite nello stesso ordine
specificato dal programma, esse non vengono sempre iniziate e finite in
quell’ordine ma se due istruzioni usano uno stesso registro bisogna sempre
controllare che la seconda istruzione usi il registro dopo della prima.
15
Una limitazione della velocita’ con la quale vengono mandate in esecuzione le
istruzioni e’ dovuta alla decodifica delle istruzioni. Per eliminare questo
problema bisogna usare istruzioni con struttura regolare, di lunghezza fissa,
con un numero limitato di campi e con formati molto simili.
16
La maggior parte delle operazioni di load e store trasferiscono dati tra la
memoria e i registri. Queste operazioni di trasferimento sono piu’ lente e quindi
talvolta si sovrappongono con le altre istruzioni;
17
Poiche’ l’accesso alla memoria e’ molto lento e’ necessario disporre di molti
registri, almeno 32, in modo che un’istruzione, una volta letta, possa
essere conservata in un registro fin quando non e’ piu’ necessaria.
18
Un modo per accelerare il funzionamento dei chip e’ aumentare la velocita’ del
clock e i ricercatori utilizzano il parallelismo, nel tentativo di eseguire due o piu’
operazioni contemporaneamente per ottenere maggiori prestazioni con la
frequenza di clock a disposizione.
Ci sono due tipi di parallelismo:
1 - a livello di istruzioni, in modo da eseguire piu’ istruzioni al secondo
2 - a livello di processore facendo lavorare CPU multiple sullo stesso programma.
19
Per eseguire piu’ istruzioni parallelamente si usava un prefetch buffer,
che le prelevava invece di aspettare la lettura completa della memoria.
Quindi il processo si divideva in due parti: lettura della memoria e
esecuzione. Mentre la tecnica di pipeline divide l’esecuzione delle
istruzioni in molte fasi, ognuna delle quali viene gestita da una parte di
hardware . Ogni fase e’ chimata stadio.
Stadio di
lettura delle
istruzioni
Stadio di
decodifica
delle
istruzioni
Stadio di
lettura degli
operandi
Stadio di
esecuzione
delle
istruzioni
Stadio di
scrittura
Il primo stadio legge le istruzioni della memoria e le mette in un buffer, il secondo
decodifica l’istruzione determinandone il tipo e gli operandi. Mentre il terzo stadio
individua e recupera gli operandi dai registri o dalla memoria, il quarto esegue le
istruzioni facendo passare gli operandi nel data path. Infine l’ultimo stadio invia i
risultati al registro adatto. In questo modo ad ogni clock possono essere eseguite fino a
5 istruzioni differenti. La pipeline permette un compromesso tra la latenza (tempo
impiegato per eseguire un’istruzione) e la capacita’ elaborativa del processore (quanti
MIPS – Mega Instruction Per Second - ha la CPU).
20
Oltre ad una pipeline singola che divide l’esecuzione delle istruzioni in molte fasi
esistono anche delle pipeline doppie.
Stadio di
lettura delle
istruzioni
Stadio di
decodifica delle
istruzioni
Stadio di lettura
degli operandi
Stadio di
esecuzione delle
istruzioni
Stadio di
decodifica delle
istruzioni
Stadio di lettura
degli operandi
Stadio di
esecuzione delle
istruzioni
Stadio di
scrittura
Stadio di
scrittura
Nella CPU e’ possibile configurare una doppia pipeline; in questo caso nello stadio di
lettura vengono lette due istruzioni alla volta. Le due istruzioni non devono pero’
entrare in conflitto sull’uso delle risorse e devono essere tra loro indipendenti. La
pipeline principale prende il nome di pipeline U, mentre la secondaria prende il nome di
pipeline V. Quando le due istruzioni non possono essere lette parallelamente viene
utilizzata soltanto la prima pipeline.
Con l’ottimizzazione delle pipeline si sono creati anche processori conteneti pipeline
multiple.
21
Con le CPU di piu’ alto livello, viene utilizzata una singola pipeline con unita’
funzionali multiple. Ad esempio il Pentium II ha un processore con cinque unita’
funzionali.
ALU
ALU
Stadio di
lettura delle
istruzioni
Stadio di
decodifica
Stadio di
lettura
operandi
LOAD
Stadio di
scrittura
STORE
Floating
point
Le unita’ funzionali dello stadio 4 richiedono molto piu’ tempo di un ciclo di clock,
soprattutto quelle che eseguono il floating-point.
22
Il parallelismo delle istruzioni non riesce a velocizzare molto il processore e quindi
possono essere usati anche processori paralleli.
Un array processor e’ composto da un gran numero di processori identici che
eseguono la stessa sequenza di istruzioni su un insieme di dati diverso. Il primo
esempio di array processor fu quello dell’universita’ dell’Illinois chiamto ILLIAC IV.
Un vector processor appare al programmatore come un array processor molto
efficente ma tutte le operazioni di addizione vengono eseguite da un sommatore unico
dotato di molte pipeline. Sia l’array processor sia il vector processor lavorano su array
(matrici) di dati. Entrambi eseguono singole istruzioni; mentre il primo lo fa avendo
tanti sommatori quanti elementi ci sono nel vettore. Il vector processor ha un
registro vettoriale, cioe’ un insieme di registri tradizionali che si possono leggere
dalla memoria in una sola istruzione. Mentre gli array processor sono in diminuzione, I
processori vettoriali si possono aggiungere ad altri processori; il risultato e’ che le
parti del programma che si possono vettorizzare sono eseguite piu’ velocemente
mentre le altre sono eseguite su un processore tradizionale.
23
Registri
+lente
Da 32KB a alcuni MB
Cache
+capacita`di
memorizzazione
Memoria principale
Da 16MB a decine di
GB
Dischi magnetici
Nastri
Memorizzazione
permanente
Dischi ottici
Memorizzazione di
archivi
Da alcuni GB a
decine di TB
24
Storicamente la capacita’ di accesso ai dati da parte delle CPU e’ sempre stata
limitata dalla velocita’ di I/O della memoria.
In realta`non si tratta di un problema tecnologico, ma economico; gli ingegneri sono in
grado di costruire memorie veloci come le CPU, ma il costo complessivo del sistema
sarebbe molto elevato.
Pertanto si tratta di scegliere fra una memoria piccola, ma veloce oppure una
memoria grande ma lenta.
Ultimamente pero`le tecniche esistenti permettono di combinare una piccola
quantita’ di memoria veloce con una grossa quantita` di memoria lenta. La memoria
piccola e veloce si chiama cache. L`idea principale dietro le cache
e`semplice: le parole di memoria piu`usate vengono tenute in cache. Quando
la CPU ha bisogno di una parola, prima controlla nella cache e solo se la
parola non c’e` accede alla memoria centrale.
In questo modo i tempi di accesso medi si riducono notevolmente.
25
La validita’ di questo metodo dipende dalla quantita` di parole che si trovano
nella cache. Statisticamente i programmi non accedono alla memoria a caso:
se La CPU richiede un dato della memoria di indirizzo A, e` assai probabile che
l`accesso seguente si trovera` nelle vicinanze di A.
L`osservazione che gli accessi in memoria eseguiti a corti intervalli di tempo
tendono a usare solo una piccola parte di memoria, viene chiamata principio di
localita’, ed e` alla base del criterio di gestione della memoria organizzata
gerarchicamente.
L`idea generale e` che quando viene
indirizzata una parola, la pagina di
memoria contenente tale parola, viene
Memoria
trasportata dalla memoria principale
principale
CPU
verso la cache, in modo che la volta
seguente la parola sia accessibile
piu`velocemente.
cache
bus
Configurazione comune di CPU, cache e
memoria
26
La memoria e`quella parte del calcolatore dove vengono immagazzinati
i programmi e i dati. Alcuni ricercatori del settore usano il termine
store (magazzino) o storage (immagazzinamento) invece di memoria,
anche se il termine storage solitamente si riferisce alla
memorizzazione su disco. Senza una memoria da cui i processori
possano leggere e copiare le informazioni, i calcolatori digitali non
potrebbero contenere il proprio programma. L`unita` di base della
memoria e`un numero binario chiamato bit che puo’ contenere un uno
logico o uno zero logico.
27
Un disco magnetico si compone di uno o piu` piatti di alluminio con
rivestimento magnetizzabile, attualmente hanno dimensioni che vanno dai 3
ai 12 cm, mentre i dischi per i notebook computer sono gia`sotto ai 3 cm e si
stanno ancora rimpicciolendo. La testina di un disco, contenente un
induttore, e` sospesa appena sopra la superficie e viene sostenuta da un
cuscino d`aria (nei floppy disk tocca la superficie). Quando passa una
corrente negativa o positiva, la superficie appena sotto la testina viene
magnetizzata, poi quando la testina passa sopra quest`area magnetizzata
viene indotta una corrente (positiva o negativa) nella testina , cio`permette
di rileggere i bit memorizzati precedentemente.
28
S codice di correzione
E
T
dato (512 byte)
T
O
preambolo
R
E
Gap fra
settori
Direzione
del movimento
del braccio
Testina di
lettura e
scrittura
Braccio del disco
29
Negli anni sono apparsi sul mercato i dischi ottici (CD o CD-Rom), che
hanno densita` di registrazione mediamente piu` basse dei dischi
magnetici tradizionali. Poiche`le loro capacita` sono potenzialmente
grandi, i dischi ottici sono stati l`ogetto di molta ricerca e si sono
evoluti in modo incredibilmente rapido. I CD vengono prodotti usando
un laser a raggi infrarossi ad alta potenza che brucia fori di 0,8
micron di diametro in un disco master di vetro ricoperto. Da questo
master viene poi ricavato uno stampo con degli incavi in corrispondenza
dei fori fatti dal laser. In questo stampo viene iniettata resina liquida
di policarbonato che forma unCD con la stesa saquenza di fori del
master in vetro.
30
Simboli di 14 bit
…
42 Simboli fanno un frame
Frame di 588
bit, ciascuno
contenente 24
byte di dati
……
preambolo
Settore di tipo 1
(2352 byte )
98 Frame fanno 1 settore
Dati
ECC