Sei sulla pagina 1di 46

Informatica A

A.A. 2017-18

Architettura del Calcolatore


(slide usate da Daniele Braga)

1
Un vecchio esempio… prodotto per somme ripetute

1 Leggi X • Procedimento sequenziale


2 Leggi Y • Non ambiguo
3 SP = 0 • Formulazione generale
4 NS = Y • Prevede tutti i casi ?
5 SP = SP + X
6 NS = NS - 1
SP e NS sono VARIABILI,
7 NS è uguale a 0 ? introdotte come ausilio alla
Se no: torna al passo 5 scrittura dell’algoritmo
8 Z = SP SP: SommaParziale
9 Scrivi Z NS: NumeroSomme
2
int main() {
Il programma in C
int x, y, sp=0, ns, z;
scanf("%d%d", &x, &y);
ns = y;
do {
sp += x;
ns -= 1;
} while( ns != 0 );
z = sp;
printf("%d", z);
return 0;
}
3
Prodotto di due interi positivi
1 Leggi X
2 Leggi Y
3 SP = 0
4 NS = Y
1 Leggi X
5 SP = SP + X
2 Leggi Y
6 NS = NS - 1
3 SP = 0
7 NS è uguale a 0 ?
4 SP = SP + X
Se no: torna al passo 5
5 Y=Y-1
8 Scrivi SP
6 Y è uguale a 0 ?
Se no: torna al passo 4
7 Scrivi SP
4
int main() {
int x, y, sp=0, ns;
Il programma in C
scanf("%d%d", &x, &y);
ns = y;
do { int main() {
sp += x; int x, y, sp=0;
ns -= 1; scanf("%d%d", &x, &y);
} while( ns != 0 ); do {
printf("%d", sp); sp += x;
return 0; y -= 1;
} } while( y != 0 );
printf("%d", sp);
return 0;
} 5
La macchina di von Neumann
canale di comunicazione
bus di sistema

Mem. Mem.
CPU Perif.
RAM Massa

esecutore programmi I/O dei dati


e dati (e dei programmi)
6
Elementi funzionali
• Bus di sistema
– collega gli altri elementi e consente lo scambio di dati
• Unità di elaborazione, o CPU
• elabora dati, coordina trasferimento dei dati
• esegue i programmi, cioè interpreta ed esegue le loro
istruzioni
• Memoria Centrale
• memorizza dati e programmi
• capacità limitata (esempio: 4 GByte)
– volatile (si cancella se si spegne il calcolatore)
– accesso all’informazione molto rapido

7
• Memoria secondaria o memoria di massa
– memorizza grandi quantità di dati e programmi
• Su PC: hard disk (es. 750 GB), CD-ROM (700 MB), DVD (4,7 GB),
pendrive usb (es. 8 GB), scheda microSD (32 GB)
– persistente (si deve cancellare esplicitamente)
– accesso molto meno rapido della RAM
• Unità periferiche (I/O)
– comunicazione con l’ambiente esterno
• terminali, con tastiera, mouse, video, stampanti
– Input: tastiere, microfoni, mouse, touchpad, videocamere, …
– Output: schermi, altoparlanti, stampanti, …
– l’ambiente esterno non è sempre un utente umano (impianti
industriali, robot, strumenti di controllo)
• Sensori e attuatori
8
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE DI
INPUT/OUTPUT

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT
9
Le memorie di massa
• Informazione memorizzata su supporto magnetico
(o ottico o altro...) di costo contenuto
• Memoria permanente: le informazioni sono
raggruppate in file gestiti dal sistema operativo.
• Dischi rigidi: tempi di accesso dell’ordine delle decine
di millisecondi; floppy disk: dell’ordine delle centinaia
di millisecondi
• Nastri e Cartucce: per memorizzare informazioni
“storiche” (back-up)
• CD-ROM e DVD-ROM: sola lettura (700 MB e 4,7 GB)
– CD-RW e DVD-RW: anche riscrivibili 10
Struttura dei dischi rigidi (Hard Disk)

• testine
• superfici
• tracce
• cilindri
• settori

11
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE DI
INPUT/OUTPUT

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT
12
La memoria centrale
• Contiene le istruzioni e i dati su cui la CPU può operare
– Contiene, cioè, sia i dati sia i programmi
– Tutta l’informazione, per poter essere elaborata, deve passare
dalla memoria centrale
• e successivamente essere caricata in qualche registro della CPU

• È memoria a breve-medio periodo


– è volatile (si perde allo spegnendo la macchina)
• Ha dimensioni "ridotte"
– ordine dei GByte (ma fino a non molto tempo fa, MByte)
• Tempi di accesso più rapidi
– ordine delle decine di nanosecondi
• circa 1 milione di volte più veloce delle memorie di massa 13
La memoria centrale
• È strutturata come un insieme ordinato di parole (celle)
– 1 parola = n elementi binari (tipicamente 8, 16, 32, 64 bit)
– La posizione di ogni parola è identificata da un indirizzo
• Capacità di indirizzamento (numero di celle "accessibili")
– È definita dalle dimensioni del bus indirizzi e del registro indirizzi
(AR), spiegati dopo
– Una zona di memoria non indirizzabile è inaccessibile
• di fatto è inutile
– Il numero di celle di una memoria, quindi, tende a coincidere con
il massimo numero di celle indirizzabili
• Altrimenti il bus e il registro degli indirizzi sono inutilmente sovradimensionati
• Una capacità di indirizzamento sovradimensionata può (ad esempio) essere
predisposta in previsione di una futura espansione della memoria
14
Indirizzamento della memoria centrale
Celle
• Esiste un registro (registro indirizzi - AR) - hanno un indirizzo
della CPU per indirizzare la memoria - contengono parole
• È un registro di k bit: può indirizzare 2k celle
0
– Con 10 bit si indirizzano 1.024 celle
• 1 “kilo-parole”
– Con 20 bit, 1.048.576 parole
i-1
• 1 “mega” parole
i …01110100110…
– 30(giga), 40(tera), 50(a), 60(exa) i+1
i+2
Registro Indirizzi (AR) i

2k-1
15
RAM e ROM
• RAM: Random Access Memory
– Le celle sono indirizzabili in un ordine qualunque (accesso
random = diretto, non "casuale")
– Il tempo di accesso non dipende dalla cella
• ROM: Read-Only memory
– Per programmi protetti e definiti dal costruttore
• Il BIOS (Basic I/O System) che carica in memoria il sistema
operativo quando la macchina viene accesa
– Ne esistono di diversi tipi
• “Erasable”, “Programmable”, (EPROM)
• Una via intermedia tra Hardware e Software (Firmware)
16
Tecnologie per la memoria centrale
 La memoria RAM
 È realizzata mediante circuiti a transistori
 È modificabile (leggibile e scrivibile) ma deve essere
continuamente alimentata per mantenere le informazioni (volatile)
 All’accensione il suo contenuto è una sequenza casuale di 0 e 1
 La memoria ROM
 È solo leggibile: le informazioni sono di solito scritte in modo
permanente dal costruttore
 È caricata al momento della produzione del calcolatore
 Vi si accede ogni qualvolta questo viene acceso
 Contiene il bootstrap, un programma contenente le prime
istruzioni che la CPU deve eseguire
17
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE DI
INPUT/OUTPUT

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT
18
La CPU
• Contiene gli elementi circuitali che regolano il
funzionamento del calcolatore:
– L’unità di controllo è responsabile della decodifica e
dell’esecuzione delle istruzioni. "Dirige" l'azione delle altre parti
– L’orologio di sistema (clock) permette di sincronizzare le
operazioni, temporizzando il funzionamento del calcolatore
– L’unità aritmetico-logica (ALU) realizza le operazioni aritmetiche
e logiche eventualmente richieste per l’esecuzione dell’istruzione.
È priva di facoltà di scelta
– I registri sono piccole memorie velocemente accessibili, utilizzate
per memorizzare risultati parziali o informazioni necessarie al
controllo. L’insieme dei valori contenuti nell'insieme di tutti i registri
in un dato istante dell’elaborazione è detto contesto della CPU 19
La CPU
Altri registri “speciali”

R0

R1

…registri generici…

Rn

20
Il ciclo “preleva-esegui”
• Le istruzioni da eseguire sono nella memoria RAM
• La CPU ciclicamente (e indefinitamente):
Preleva la prossima istruzione dalla RAM
La decodifica e la esegue
• Tipologie di istruzioni
– di elaborazione dei dati
– di trasferimento dei dati
– di controllo del flusso di esecuzione del programma
– di arresto (per terminare un programma)
• Funzionamento scandito dall’orologio di sistema (“clock”)
21
Il ciclo “preleva-esegui” più in dettaglio
1. Preleva la prossima istruzione
2. Decodifica ed esegui l’istruzione prelevata

1. Contenuto di PC  AR
2. Lettura da memoria centrale  DR
3. Trasferimento da DR  CIR
4. Incremento di PC

5. Interpretazione ed esecuzione di CIR


22
Formato istruzioni in linguaggio macchina
• Costituite (ovviamente) da sequenze di 0 e 1
– campo codice operativo (obbligatorio) specifica
l’operazione da eseguire
– campo operandi (facoltativo) indica i dati da
utilizzare (gli operandi possono essere uno o due)
• Può contenere direttamente il valore, o l’indirizzo della
cella che contiene il valore (riferimento a una variabile)
– FORMATO ISTRUZIONE:

Cod. operativo Operandi


23
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE DI
INPUT/OUTPUT

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT
24
Il bus di sistema
• Insieme di connettori (conduttori elettrici) che trasferiscono
dati (bit!) collegando fra loro CPU, RAM e interfacce di i/o
– I trasferimenti sono gestiti dalla CPU (modalità master/slave) e si
chiamano cicli del bus
• La capacità del bus e la frequenza del clock determinano la velocità di trasferimento

• Bus Dati
– trasferisce dati da master a slave e viceversa
• Bus Indirizzi
– trasferisce indirizzi, per esempio l’indirizzo di un dato dal
registro indirizzi alla memoria, per accedere al dato stesso
• Bus di Controllo
– Da master a slave: comandi da eseguire (es: lettura da disco)
– Da slave a master: informazioni sul successo dell’operazione 25
Cicli di bus: esempi
• Operazione di lettura da memoria centrale (LOAD):
– la CPU carica l’indirizzo della parola di memoria nel registro indirizzi e lo
trasmette alla memoria via bus indirizzi
– la CPU invia il comando di Read Memory sul bus di controllo
– la memoria trasmette sul bus dati il contenuto della parola verso il
registro dati
– la memoria segnala al processore sul bus di controllo che l’operazione
è stata completata con successo: il dato si trova nel registro dati

• Così si trasferisce il contenuto di una cella della RAM nel registro dati della CPU

26
Cicli di bus: esempi
• Operazione di scrittura in memoria centrale (STORE):
– la CPU carica indirizzo della parola di memoria dove si vuole scrivere
nel registro indirizzi e lo trasmette alla memoria via bus indirizzi
– la CPU carica nel registro dati la parola da scrivere in memoria
– la CPU invia il comando di Write Memory sul bus di controllo
– la CPU trasmette sul bus dati il contenuto del registro dati verso
l’indirizzo di memoria segnalato
– la memoria segnala al processore sul bus di controllo che
l’operazione è stata completata con successo: il dato si trova nella
parola di memoria destinazione

• Così si copia il contenuto del registro dati della CPU in una cella dalla RAM
27
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE DI
INPUT/OUTPUT

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT
28
Interfacce di I/O (verso le periferiche)
• Consentono il collegamento tra elaboratore e periferiche
• Possono essere dispositivi elettromeccanici
• Contengono registri per
– inviare comandi alla periferica
• registro comandi periferica (PCR) – collegato al bus di controllo
– scambiare dati
• registro dati della periferica (PDR) – collegato al bus dati
– controllare il funzionamento della periferica
• registro stato periferica (PSR): pronto, occupato, errore, ...

29
Il sistema operativo
• Programma di grandi dimensioni e notevole complessità, che
permette all’utente di interagire con il calcolatore
• Sviluppo di un sistema operativo: centinaia di anni-uomo
• Poca teoria, e solo in alcune aree, perché…
– storicamente: prima lo sviluppo tecnologico, poi la teorizzazione
– aspetti non di calcolo ma di ottimizzazione, gestione di interazione,
gestione di malfunzionamenti etc.
– il progetto di un sistema operativo è un problema intrinsecamente
complesso e interdisciplinare
• Complessità estrema: studio per livelli di macchine astratte per
ragionare a diversi livelli di astrazione
• Funzioni:
– Supporto per la programmazione
– Meccanismi di Ingresso / Uscita (I/O)
– Gestione archivi (file) 30
Esempio minimale: la macchina mini-HW
Mini-CPU
A
PC ALU
B
CIR
RAM
UC

DR AR

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

DUE SOLE UNITÀ


PERIFERICHE
(i/o di soli numeri interi) OUTPUT
INPUT
31
RAM da 8 KByte = h x 2k bit
0
indirizzi delle celle

Registro Dati (DR)


Registro Indirizzi (AR) 1001011001010010

001000110010 h =16 bit h = 16 bit


k = 12 bit 562 1001011001010010
16 x 212 bit =
4.096 parole 216 bit =
cella selezionata 65536 bit =
23 x 210 x 23 bit =
4.095 8 K Byte 32
La mini-CPU

A
ALU
B
PC
Unità di
controllo
CIR

DR AR
33
Formato delle istruzioni della mini-CPU
• Il codice operativo (obbligatorio) è di 4 bit
• Il campo operandi è di 12 bit
– Contiene un solo operando (un solo valore)
– È facoltativo: non tutte le istruzioni lo richiedono
• Può contenere direttamente un valore da elaborare (una
costante) o l’indirizzo di una cella della RAM che contiene
il valore da elaborare (riferimento a una variabile)

– FORMATO ISTRUZIONE:
Cod. operativo Operando
1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 1
34
Fasi del ciclo di CPU (preleva-esegui)
• Prelievo (o Fetch):
– PC contiene l’indirizzo della prossima istruzione
– acquisizione prossima istruzione da memoria (con un ciclo di bus)
(che viene scritta nel CIR, Registro Istr. Corrente)
– incremento del registro PC
• Decodifica: interpretazione del codice operativo
• Esecuzione: attivazione dell'esecuzione pertinente all’istruzione:
– Operazioni della ALU sugli operandi
– Operazioni di salto (modifica del flusso di esecuzione modificando PC)
– Operazioni di accesso alla RAM (load o store)
– Operazioni di modifica del contenuto dei registri
– … 35
Cod. binario Cod. simbolico Semantica
0000 LOADA poni in A il valore della cella <op> della RAM
0001 LOADB poni in B il valore della cella <op> della RAM
0010 STOREA poni nella cella <op> della RAM il valore in A
0011 STOREB poni nella cella <op> della RAM il valore in B
0110 ADD poni in A il valore di A+B restituito dalla ALU
0111 DIF poni in A il valore di A-B restituito dalla ALU
1010 JMP la prossima istr. da eseguire è nella cella <op>
1011 JMPZ se A=0, la prossima istr. da eseguire è in <op>
1100 NOP istruzione nulla: nessun effetto [...HA senso]
1101 HALT fine del programma
0100 READ leggi (I/O) un valore e ponilo nella cella <op>
0101 WRITE scrivi (I/O) il valore contenuto nella cella <op>
1000 LDCA poni in A la costante (il valore numerico) <op>
1001 LDCB poni in B la costante (il valore numerico) <op>
… … 36
Piccolo esempio di programma assembly
Cella di mem. Cod. Oper. Operando
0 READ 8
1 READ 9
2
3
LOADA
LOADB
8
9
Che cosa fa?
4 ADD -
5 STOREA 10
6 WRITE 10 Si noti che il primo valore
7 HALT - letto si perde nel processore
8 (un numero intero) (sovrascritto per effetto
9 (un numero intero) della ADD) ma resta in
memoria centrale (cella 8)
10 (un numero intero)

37
Un programma «più complesso»
Esempio: calcolare l’espressione (x + y) - (z + w)
1. poni in memoria centrale (rispettivamente nelle
celle 16, 17, 18 e 19) i valori di x, y, z, e w
2. esegui l’addizione di z e w:
1. copia da cella 18 a registro A
2. copia da cella 19 a registro B
3. somma i due registri (operazione eseguita dalla ALU
che lascia il risultato nel registro A)
3. immagazzina risultato (che ora è nel registro A)
nella cella 20 38
4. esegui l’addizione di x e y:
1. copia da cella 16 a registro A;
2. copia da cella 17 a registro B;
3. somma i registri (operazione eseguita dalla ALU
che lascia il risultato nel registro A);
5. esegui la sottrazione di (x + y) e (z + w):
1. copia da cella 20 a registro B;
2. sottrai il contenuto dei due registri (operazione
eseguita dalla ALU che lascia il risultato nel reg. A);
6. scrivi il risultato sul dispositivo di uscita:
1. copia da registro A a cella 20;
2. copia da cella 20 a registro dati della periferica
7. arresta l’esecuzione del programma 39
Il programma in assembly 0
1
READ
READ
X
Y
2 READ Z
0-3: acquisizione dei 0 READ 16 3 READ W
dati 1 READ 17 4 LOADA Z
2 READ 18 5 LOADB W
4-6: Somma Z+W 3 READ 19 6 ADD
4 LOADA 18 7 STOREA RIS
7: salvataggio del 5 LOADB 19 8 LOADA X
6 ADD 9 LOADB Y
risultato intermedio 10 ADD
7 STOREA 20 11 LOADB RIS
8-10: Somma X+Y 8 LOADA 16 12 DIF
9 LOADB 17 13 STOREA RIS
11: recupero del 10 ADD 14 WRITE RIS
risultato intermedio 11 LOADB 20 15 HALT
12 DIF 16 ...int....(X).....
13 STOREA 20 17 ...int....(Y).....
12-13: calcolo del 18 ...int....(Z).....
risultato finale 14 WRITE 20
15 HALT 19 ...int....(W).....
16 .....int........... 20 ...int...(RIS)...
14: output del risultato
17 .....int........... 40

16-20: spazio per


18 .....int........... 16-20: le celle corrispondenti alle
19 .....int........... variabili simboliche X, Y, Z, W, RIS
contenere i dati 20 .....int........... usate nel programma
• I nomi simbolici sono più comodi degli
indirizzi, ma bisogna che qualcuno (il
compilatore!) gestisca la corrispondenza
tra i simboli e gli indirizzi
0. 0100000000010000
Il programma in 1.
2.
0100000000010001
0100000000010010
linguaggio 3.
4.
0100000000010011
0000000000010010
5. 0001000000010011
macchina 6. 0110000000000000
7. 0010000000010100
8. 0000000000010000 istruzioni
9. 0001000000010001
indirizzi delle celle 10. 0110000000000000
11. 0001000000010100
codici operativi 12. 0111000000000000
13. 0010000000010100
14. 0101000000010100
operando significativo 15. 1101000000000000
(indirizzo della cella RIS) 16. ................
17. ................
18. ................ dati
operando non significativo 19. ................
20. ................
41
Il programma in C
int main() {
int x, y, z, w, ris;
scanf("%d%d%d%d", &x, &y, &z, &w);
ris = (x+y)-(z+w);
printf("\n\n Il risultato e’ : %d", ris);
return 0;
}
Notiamo che:
• il compilatore deve decidere quanto spazio allocare per le variabili
(e dove allocarle – prima o dopo le istruzioni?)
• La corrispondenza posizionale tra i %d e le variabili si traduce in un
preciso ordine delle istruzioni READ in assembly 42
0 READ X
Il programma (x+y)-(z+w) in 1 READ Y
2 READ Z
C e in assembler 3
4
READ
LOADA
W
Z
int main() { 5 LOADB W
int x, y, z, w; 6 ADD
7 STOREA RIS
scanf("%d%d%d%d", &x, &y, &z, &w); 8 LOADA X
printf("\nRisultato:%d",(x+y)-(z+w)); 9 LOADB Y
return 0; 10 ADD
11 LOADB RIS
} 12 DIF
13 STOREA RIS
In questa versione del programma C la “variabile d’appoggio” 14 WRITE RIS
RIS non è esplicitata: il compilatore si fa carico della gestione 15 HALT
dei risultati intermedi (linguaggio di livello più alto) 16 ...int....(X).....
Disponendo dei soli registri A e B, è necessario depositare un
17 ...int....(Y).....
risultato intermedio in una variabile in memoria. Avendo a
18 ...int....(Z).....
19 ...int....(W).....
disposizione un processore con più di due registri, non lo sarebbe
20 ...int...(RIS)...
43
int main() {
int x, y, sp=0, ns;
Il prodotto per
scanf("%d%d", &x, &y); somme ripetute
ns = y;
do { int main() {
sp += x; int x, y, sp=0;
ns -= 1; scanf("%d%d", &x, &y);
} while( ns != 0 ); do {
printf("%d", sp); sp += x;
return 0; y -= 1;
} } while( y != 0 );
printf("%d", sp);
return 0;
} 44
0 READ 18 x
1 READ 19 y Il prodotto per somme ripetute
2 LDCA 0 0 READ 16 x
3 STOREA 20 sp 0 READ x
1 READ 17 y 1 READ y
4 LOADA 19 y 2 LDCA 0
5 STOREA 21 ns 2 LDCA 0
3 STOREA 18 sp 3 STOREA sp
6 LOADA 20 sp 4 LOADA 18 sp
7 LOADB 18 x loop: LOADA sp
5 LOADB 16 x 5 LOADB x
8 ADD
9 STOREA 20 sp 6 ADD 6 ADD
10 LOADA 21 ns 7 STOREA 18 sp 7 STOREA sp
11 LDCB 1 8 LOADA 17 y 8 LOADA y
12 DIF 9 LDCB 1 9 LDCB 1
13 STOREA 21 ns 10 DIF 10 DIF
14 JMPZ 16 11 STOREA 17 y 11 STOREA y
15 JMP 6 12 JMPZ 14 12 JMPZ end
16 WRITE 20 sp 13 JMP 4 13 JMP loop
17 HALT 14 WRITE 18 sp end: WRITE sp
18 ...intero....(x)..... 15 HALT 15 HALT
19 ...intero....(y)..... 16 ...intero....( x ).... x :..un.numero.intero....
20 ...intero....(sp)..... 17 ...intero....( y ).... y :..un.numero.intero....
21 ...intero....(ns)..... 18 ...intero....(sp)... sp :..un.numero.intero.... 45

4, 14, 16-18: possiamo usare dei simboli


(etichette) per denotare gli indirizzi delle
variabili, e anche per le istruzioni di salto!
Come si regola il flusso di esecuzione?
• Il programma inizia sempre dalla prima istruzione, e
prosegue fino a quando non incontra HALT
• Che cosa impedisce che i dati siano caricati al posto
delle istruzioni?
– Che cosa succede se si tenta di "eseguire un dato"?
• È possibile che il programma si auto-modifichi, alterando
le sue stesse istruzioni? Come?
– In un calcolatore reale, permettereste che questo accada?
– Come si può impedirlo?
• I calcolatori reali hanno meccanismi di protezione della memoria e utilizzano
speciali convenzioni per memorizzare separatamente i dati e il codice
46

Potrebbero piacerti anche