Sei sulla pagina 1di 95

Architettura del Calcolatore

1
I Modelli dei Calcolatori
• Macchina di Turing (1936):
– Modello teorico legato alla
logica matematica
• Macchina di von Neumann
(194346)
– Calcolatore reale (ENIAC)
dotato di capacità di scelta, di
funzionalità programmata e
digitale (ma non binario bensì
decimale)
– Calcola esattamente le stesse
funzioni della MdT
(purché dotato di memoria
sufficientemente grande) 2
Macchina di von Neumann
• Di tipo sequenziale: può elaborare una sola
istruzione per volta
• Oggi esistono altri modelli di computazione
(es.: le macchine parallele)
– Tutti computano esattamente le stesse funzioni
Altri tipi di calcolatore (paralleli, analogici,
ottici, quantistici, molecolari, …)

3
La Macchina di von Neumann
• L’Unità Centrale
(CPU) MM
• La Memoria Centrale
(RAM)
• La Memoria di Massa RAM
(MM) CPU BUS
• Il Bus di Sistema
UP1
(BUS)
..
• Le Unità Periferiche .
(UPi)
UPN

4
Architettura del Calcolatore:
Componenti Hardware
• Unità Centrale (CPU, o processore)
• Memoria Centrale (spesso tecnologia RAM)
• Memoria di Massa (dischi, chiavette, nastri, …)
• Unità Periferiche (monitor, casse, tastiera, …)
• Bus di Sistema (canale di comunicazione)

• Reti di Calcolatori
– canali di comunicazione a livello superiore

Qual è il linguaggio della macchina?


In buona approssimazione, l’aritmetica binaria

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
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)

7
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)

8
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)

9
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)

10
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)

11
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

12
Elementi funzionali
• 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 p.es. 512 MByte
– volatile
– accesso all’informazione molto rapido

13
• Memoria secondaria o memoria di massa
– memorizza grandi quantità di dati e programmi
– persistente
– accesso molto meno rapido della RAM
• Su PC: hard disk (p.es. 120 GByte), floppy disk (1.44
MByte), CD-ROM (p.es. 700 MByte), …
• Bus di sistema
– collega e consente scambio di dati
• Unità periferiche (I/O)
– comunicazione con l’ambiente esterno
– terminali, con tastiera, mouse, video, stampanti
– l’ambiente esterno non è sempre un utente umano
(impianti industriali, robot, strumenti di controllo)
• Sensori e attuatori

14
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

15
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 DIMENSIONE: centinaia di GB
• Nastri e Cartucce: per memorizzare informazioni
“storiche” (back-up)
• CD-ROM e DVD-ROM: sola lettura (700 MB e 5 GB)

16
Struttura dei dischi rigidi (Hard Disk)
• testine
• superfici
• tracce
• cilindri
• settori

17
Solid State Drive
• I dischi SSD utilizzano delle memorie flash rispetto ai classici dischi rigidi.
• Gli hard disk per anni hanno puntato su una capacità d’archiviazione
sempre più grande mentre le unità a stato solido puntano alla sicurezza, alla
velocità e in maniera particolare a migliorare le prestazioni della macchina
dove vengono installate.
• Le unità a stato solido, a differenza dei dischi rigidi, non hanno parti
meccaniche, come testine o piatti di rotazione. Senza parti meccaniche è
molto più difficile che in seguito a danni o cadute l’SSD possa rompersi.
• La rimozione delle parti meccaniche è stata
possibile grazie all’uso dei collettori SATA
(Serial Advanced Technology Attachment),
compatibili praticamente con qualsiasi
scheda madre.
• Lavorando con dei collettori a livello di RAM
le prestazioni migliorano, ma i dischi SSD
hanno una durata temporale ben precisa. In
media la vita degli SSD è di 5-6 anni.
18
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

19
La memoria centrale
• Contiene le istruzioni e i dati su cui la CPU
può operare
– Contiene, cioè, sia i dati che i programmi
– Tutta l’informazione, per poter essere elaborata,
deve passare dalla memoria centrale (e
successivamente caricata in uno dei registri della
CPU)
• Rispetto alla memoria di massa
– è memoria a breve-medio periodo
– è volatile

20
La memoria centrale
• Dimensioni ridotte
– ordine dei MegaByte... ormai GigaByte
• Tempi di accesso
– ordine delle decine di nanosecondi
• circa 1 milione di volte più veloce delle memorie di massa
• È un insieme ordinato di parole (celle)
– Una parola = n elementi di memoria binari (8, 16, 32, 64 bit)
– La posizione di ogni parola è identificata da un indirizzo
• La capacità di indirizzamento in memoria è definita dalle
dimensioni del bus indirizzi e del registro indirizzi

21
Indirizzamento della memoria centrale
• Esiste un registro (registro Celle
- hanno un indirizzo
indirizzi - AR) della CPU per - contengono parole
indirizzare la memoria
• Registro di k bit: può indirizzare
2k celle
– Con 10 bit indirizzo 1.024 celle
• 1 “kilo-parole”
– Con 20 bit, 1.048.576 parole
• 1 “mega” parole
– 30(giga), 40(tera), 50(peta), 60(exa)

22
La Memoria Centrale (MM)

• Contiene i programmi
(sequenza di istruzioni) in
esecuzione ed i relativi dati
• È schematizzata come una
sequenza di celle.
La Memoria Centrale (MM)

• Contiene i programmi  Parola bit h = 16 bit


(sequenza di istruzioni) in
esecuzione ed i relativi dati
• È schematizzata come una 0/1
sequenza di celle.
• Ogni cella contiene h bit,
i.e.,
una Parola (word) 1111001100100
011
La Memoria Centrale (MM)
• Contiene i programmi
(sequenza di istruzioni) in  Parola bit h = 16 bit

  Indirizzo = 10 bit
esecuzione ed i relativi dati 0
• È schematizzata come una 1
sequenza di celle.
• Ogni cella contiene h bit, i.e.,
una Parola (word)
• Ogni cella ha un indirizzo e
deve essere scritto in binario
• Se ho a disposizione k bit per
scrivere l’indirizzo, lo spazio
di indirizzamento è 2k celle
1023
La Memoria Centrale (MM)
• Contiene i programmi (sequenza di
istruzioni) in esecuzione ed i relativi
dati  Parola bit h = 16 bit

  Indirizzo = 10 bit
• È schematizzata come una sequenza 0
di celle. 1
• Ogni cella contiene h bit, i.e.,
una Parola (word)
• Ogni cella ha un indirizzo e deve
essere scritto in binario
• Se ho a disposizione k bit per scrivere
l’indirizzo, lo spazio di indirizzamento è
2k celle

1023

Oss: Avere più celle dello spazio di indirizzamento è come un palazzo


(senza scale) dove l’ascensore ha meno pulsanti del numero di piani
Anonimo studente di Informatica A
La Memoria Centrale (MM)
• La MM contiene i programmi in esecuzione: ogni dato e
ogni istruzione, prima di essere elaborato, viene copiato in
memoria centrale.
• Diversi tipi di Memorie
– RAM (Random Access Memory) memoria volatile. Celle indirizzabili in
qualunque ordine (accesso random = diretto)
– ROM (Read Only Memory) memoria permanente. Il BIOS (Basic I/O
System) che carica in memoria il sistema operativo quando la
macchina viene accesa
– EPROM (Erasable Programmable ROM) riprogrammabile
• L’HDD è memoria permanente ma non è memoria centrale
ed in riferimento alla macchina di Von Neumann è una
periferica.
Tecnologie per la memoria centrale
La memoria RAM
– È realizzata mediante circuiti a transistori
– È modificabile (leggibile e scrivibile)
– deve essere continuamente alimentata per mantenere le
informazioni (volatile)
– All’accensione contiene 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
Esempio di RAM da 8 KByte
indirizzi delle celle 0

h =16 bit

Registro Indirizzi Registro Dati


(AR) (DR)
000100110010 1001011001010010

k = 12 bit 562 1001011001010010 h = 16 bit

cella selezionata

4.096 parole
4.095

29
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

30
La CPU
• Contiene gli elementi circuitali che regolano il
funzionamento del calcolatore:
– L’unità di controllo è responsabile della decodifica e
dell’esecuzione delle istruzioni. È la parte che "dirige" l'esecuzione
di tutte le 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 viene chiamato contesto

31
L’Unità di Elaborazione (CPU)
• La Central Processing Unit (CPU) coordina il
funzionamento del calcolatore ed esegue i
programmi:
estrae, decodifica ed esegue le istruzioni in memoria.
• Le istruzioni possono comportare elaborazione o
trasferimento dell’informazione
• La CPU contiene a sua volta:
– l’Unità di Controllo che preleva e decodifica istruzioni dalla
MM, invia segnali per eseguire le istruzioni
– Il Clock di sistema, opera come un metronomo per la CPU
– L’Unità Aritmetico Logica: operazioni aritmetiche e logiche
L’Unità di Elaborazione (CPU)

Unità
aritmetico
logica
(ALU)

Unità di controllo
(CU)
Clock
L’Unità di Elaborazione (CPU)

Unità
aritmetico
logica
(ALU)

Unità di controllo
(CU)
Clock

Controllo:
-Prelievo
-Decodifica
-Esecuzione
L’Unità di Elaborazione (CPU)

Operazioni
aritmetiche
e logiche

Unità
aritmetico
logica
(ALU)

Unità di controllo
(CU)
Clock
L’Unità di Elaborazione (CPU)

Unità
aritmetico
logica
(ALU)

Unità di controllo
(CU)
Clock

Sincronizzazione
L’Unità di Elaborazione (CPU)
• La Central Processing Unit (CPU) coordina il funzionamento
del calcolatore ed esegue i programmi:
estrae, decodifica ed esegue le istruzioni in memoria.
• Le istruzioni possono comportare elaborazione o
trasferimento dell’informazione
• La CPU contiene a sua volta:
– l’Unità di Controllo che preleva e decodifica istruzioni dalla MM, invia
segnali per eseguire le istruzioni
– Il Clock di sistema, opera come un metronomo per la CPU
– L’Unità Aritmetico Logica: operazioni aritmetiche e logiche
• La CPU contiene inoltre molti registri: memorie rapide per
informazioni richieste dalla CU (es due numeri da sommare, il
loro risultato)
L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)

Parola letta/da scrivere in MM (h bit)


L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)

Indirizzo cella MM (k bit)


L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
Istruzione in (CU)
elaborazione (h bit) Clock

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Indirizzo prox istruzione


da eseguire (k bit) Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Registro di stato
(SR) Registri operandi
Registro contatore
di programma (PC)
ALU
Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)
Registri generali
Registro istruzione
corrente (CIR)
Unità di controllo
Clock (CU)

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Informazioni su stato periferiche


Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)
L’Unità di Elaborazione (CPU)

Informazioni sui
risultati ALU
Registro di stato
Registro contatore (SR)
di programma (PC) Unità
A
aritmetico
Registro logica
interruzioni (INTR) B (ALU)

Registro istruzione
corrente (CIR)
Unità di controllo
(CU)
Clock

Registro indirizzi
Registro dati (DR) (AR)
Velocità della CPU
• La soluzione di molti problemi importanti richiede una grossa potenza di
calcolo:
• I progettisti tentano di rendere le macchine più veloci. Fino ad un certo
punto, le macchine possono essere accelerate velocizzando l’hardware.
• Limiti fisici di vario tipo si profilano all’orizzonte.
– Niente può andare più veloce della luce, che è di circa trenta centimetri per
nanosecondo nel vuoto e di venti centimetri per nanosecondo in un filo di rame.
– Per costruire un computer con un tempo di un nanosecondo per istruzione, la
distanza totale su cui il segnale elettrico può viaggiare, all’interno della CPU,
verso la memoria e ritorno, non può essere maggiore di venti centimetri.
– Perciò computer molto veloci devono essere molto piccoli.
Sfortunatamente i computer veloci producono più calore di quelli lenti, e
comprimere i computer in uno spazio ristretto rende difficile dissipare il
calore.
– I super computer sono immersi nel freon, come liquido di raffreddamento, per
trasferire all’esterno il calore il più velocemente possibile.
Parallelismo
• Tuttavia è possibile velocizzare le operazioni il
problema da un’altra prospettiva.
• Invece di un’unica CPU ad alta velocità, è possibile
costruire una macchina con molte ALU più lente
(ed economiche) o perfino con diverse CPU
complete, per ottenere la stessa potenza di calcolo
ad un costo minore.
• Molta ricerca è dedicata alla costruzione di macchine
parallele.
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

49
Il bus di sistema
• Insieme di connettori (conduttori elettrici) che
trasportano bit di informazioni collegando fra
di loro l’unità di elaborazione, la memoria e le
varie interfacce di ingresso/uscita
• I trasferimenti sono gestiti dalla CPU
(modalità master/slave) e si chiamano cicli
del bus, che con la sua capacità ne
determina la velocità

50
Componenti del bus di sistema
• 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: codice dell’istruzione da
eseguire (per es. lettura da disco).
– Da slave a master: informazioni sul successo
dell’operazione

51
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
• 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

52
Esempio di istruzioni in linguaggio assemblatore
(o “assembler”)
Cod. binario Cod. simbolico Significato
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>
0110 ...

53
Piccolo esempio di programma assembler
Cella di mem. Cod. Oper. Operando
0 READ 8
1 READ 9
2 LOADA 8
3 LOADB 9
4 ADD
5 STOREA 8
6 WRITE 8
7 HALT
8 (INT)
9 (INT)

54
Esecuzione dei programmi
Esempio: calcolare 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

55
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

56
0 READ X
Il programma in assembler 1 READ Y
2 READ Z
0-3: acquisizione dei dati 3 READ W
4 LOADA Z
16-20: spazio per rappresentare i dati 5 LOADB
– le cinque variabili simboliche X, Y, Z, W, W
RIS menzionate nel programma. Ognuna 6 ADD
identifica una cella di memoria 7 STOREA RIS
• I nomi simbolici sono più comodi degli 8 LOADA X
indirizzi, ma bisogna supporre che 9 LOADB Y
qualcuno (il compilatore!) gestisca la 10 ADD
corrispondenza con un numero opportuno 11 LOADB
di celle allocate per rappresentare i dati RIS
4-6 e 8-10: Somme (Z+W e X+Y) 12 MULT
7: salvataggio del risultato intermedio 13 STOREA RIS
14 WRITE
11: recupero del risultato intermedio RIS
14: Visualizzazione del risultato 15 HALT
16 ...int....(X).....
17 ...int....(Y).....
18 ...int....(Z).....
57
19 ...int....(W).....
0. 0100000000010000
Il programma in 1. 0100000000010001

linguaggio 2.
3.
0100000000010010
0100000000010011

macchina 4.
5.
0000000000010010
0001000000010011
6. 0110000000000000
indirizzi delle celle 7. 0010000000010100
8. 0000000000010000 istruzioni
9. 0001000000010001
codici operativi 10. 0110000000000000
11. 0001000000010100
12. 0111000000000000
operando significativo 13. 0010000000010100
(indirizzo della cella RIS) 14. 0101000000010100
15. 1101000000000000
16. ................
operando non significativo 17. ................
18. ................
19. ................ dati
20. ................
58
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;
}

59
I Programmi nella Macchina di Von Neumann
•Le istruzioni sono (necessariamente) codificate in binario e,
come i dati, sono salvate in parole nella MM
Supponiamo una MM con parole da bit ed indirizzi da bit, con
istruzioni così codificate:
Codice operativo (4bit) 00 Indirizzo Operando (10bit)
ad esempio, 0100000000010000
Consideriamo le seguenti istruzioni eseguibili dalla CPU
– Lettura da periferica, scrittura su periferica
– Caricare un dato da MM in un registro della CPU (load)
– Salvare in MM un dato di un registro della CPU (store)
– Operazioni aritmetiche (le gestisce la ALU)
– Istruzioni di salto (per cambiare il flusso di esecuzione)
I Programmi nella Macchina di Von Neumann

Cod. operativo Operandi

•Le istruzioni sono (necessariamente) codificate in


binario e, come i dati, sono salvate in parole nella
MM
Supponiamo una MM con parole da bit ed indirizzi da
bit, con istruzioni così codificate:
Codice operativo (4bit) 00 Indirizzo Operando (10bit)
ad esempio, 0100000000010000
• 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)
I Programmi nella Macchina di Von Neumann

Consideriamo le seguenti istruzioni eseguibili


dalla CPU
– Lettura da periferica, scrittura su periferica
– Caricare un dato da MM in un registro della CPU
(load)
– Salvare in MM un dato di un registro della CPU
(store)
– Operazioni aritmetiche (le gestisce la ALU)
– Istruzioni di salto per cambiare il flusso di
esecuzione
I Programmi nella Macchina di Von Neumann
Le variabili sono (necessariamente) codificate in
binario e salvate in parole nella MM
Lo spazio riservato alle variabili deve essere:
– ben definito
– Allocato tipicamente «sotto» le istruzioni del
programma
Alle variabili si accederà specificando l’indirizzo
della parola di memoria in cui risiedono (niente
riferimento simbolico)
Il programma deve in qualche modo conoscere gli
indirizzi delle variabili!
Cella 0 0100000000010000
1 0100000000010001
2 0100000000010010

Istruzioni del Programma


3 0100000000010011
4 0000000000010000
5 0001000000010001
6 0110000000000000
7 0010000000010100
8 0000000000010010
9 0001000000010011
10 0110000000000000
11 0001000000010011
12 1000000000000000
13 0010000000010100
14 0101000000010100
15 1101000000000000
Spazio riservato per a 16
Spazio riservato per b 17

dati
Spazio riservato per c 18
Spazio riservato per d 19
Spazio riservato per z 20
Le Tre Fasi Per Eseguire un’Istruzioni
1. Fetch: Acquisizione dell’istruzione dalla MM
1. Trasferimento da PC a AR dell’ indirizzo cella
contenente l’istruzione da eseguire.
2. Lettura dalla MM della cella all’indirizzo in AR,
contenuto trasferito sul DR (l’istruzione è un dato)
3. Sposta da DR a CIR (riferimento istr. in esecuzione)
4. Incrementa PC (definisce la prossima istruzione:
incremento di 1 = sequenzialità)
2. Decodifica: riguarda il codice operativo, legge
dal CIR
3. Esecuzione: dipende dall’istruzione specifica.
Esempio: più nel dettaglio

1. Leggi dal dispositivo 1. Scrivi nella cella di memoria centrale


di ingresso il valore
delle variabili riservata al valore di a il valore letto dal
a,b,c,d registro dati della periferica.
2. Somma il valore di a • Occorre la posizione di a,b,c,d
al valore di b
2. Somma il valore di a al valore di b
3. Salva il risultato
parziale ottenuto 2.1 Copia il contenuto della cella di
memoria riservata ad a nel registro A
2.2 Copia il contenuto della cella di
memoria riservata a b nel registro B
2.3 Somma contenuto dei registri A e B
3. Salva il risultato parziale, contenuto nel
registro A, in una cella di memoria
predisposta per il risultato (z).

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

1. Leggi dal dispositivo 1. Scrivi nella cella di memoria centrale


di ingresso il valore
delle variabili riservata al valore di a il valore letto dal
a,b,c,d registro dati della periferica.
2. Somma il valore di a • Occorre la posizione di a,b,c,d
al valore di b
2. Somma il valore di a al valore di b
3. Salva il risultato
parziale ottenuto 2.1 Copia il contenuto della cella di
memoria riservata ad a nel registro A
2.2 Copia il contenuto della cella di
memoria riservata a b nel registro B
2.3 Somma contenuto dei registri A e B
3. Salva il risultato parziale, contenuto nel
registro A, in una cella di memoria
predisposta per il risultato (z).

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

1. Leggi dal dispositivo 1. Scrivi nella cella di memoria centrale


di ingresso il valore
delle variabili riservata al valore di a il valore letto dal
a,b,c,d registro dati della periferica.
2. Somma il valore di a • Occorre la posizione di a,b,c,d
al valore di b
2. Somma il valore di a al valore di b
3. Salva il risultato
parziale ottenuto 2.1 Copia il contenuto della cella di
memoria riservata ad a nel registro A
2.2 Copia il contenuto della cella di
memoria riservata a b nel registro B
2.3 Somma contenuto dei registri A e B
3. Salva il risultato parziale, contenuto nel
registro A, in una cella di memoria
predisposta per il risultato (z).

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

1. Leggi dal dispositivo 4. Somma il valore di c al valore di d


di ingresso il valore
delle variabili 4.1 Copia il contenuto della cella di
a,b,c,d memoria riservata a c nel registro A
2. Somma il valore di a 4.2 Copia il contenuto della cella di
al valore di b memoria riservata a d nel registro B
3. Salva il risultato 4.3 Somma il contenuto dei registri A e B
parziale ottenuto
5. Moltiplica
4. Somma il valore di c 5.1 Copia il contenuto della cella z nel
al valore di d
registro B (z e B contengono ora a
5. Moltiplica il risultato
parziale appena + b, mentre A contiene c + d)
ottenuto con quello 5.2 Moltiplica contenuto dei registri A e B
precedentemente
salvato

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

1. Leggi dal dispositivo 4. Somma il valore di c al valore di d


di ingresso il valore
delle variabili 4.1 Copia il contenuto della cella di
a,b,c,d memoria riservata a c nel registro A
2. Somma il valore di a 4.2 Copia il contenuto della cella di
al valore di b memoria riservata a d nel registro B
3. Salva il risultato 4.3 Somma il contenuto dei registri A e B
parziale ottenuto
5. Moltiplica
4. Somma il valore di c al 5.1 Copia il contenuto della cella z nel
valore di d
registro B (z e B contengono ora a + b,
5. Moltiplica il risultato
parziale appena mentre A contiene c + d)
ottenuto con quello 5.2 Moltiplica contenuto dei registri A e B
precedentemente
salvato

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

6. Scrivi sul dispositivo 6. Scrivi sul dispositivo in uscita


di uscita il risultato
della valutazione 6.1 Memorizza il risultato calcolato
complessiva (disponibile nel registro A) nella cella
7. Termina l’esecuzione di memoria riservata a z
del programma 6.2 Copia il contenuto della cella di
memoria riservata a z nel registro dati
della periferica di uscita
7. Manda il comando di Halt

Informatica A, AA 20/21, Giacomo Boracchi


Esempio: più nel dettaglio

6. Scrivi sul dispositivo 6. Scrivi sul dispositivo in uscita


di uscita il risultato
della valutazione 6.1 Memorizza il risultato calcolato
complessiva (disponibile nel registro A) nella cella
7. Termina l’esecuzione di memoria riservata a z
del programma 6.2 Copia il contenuto della cella di
memoria riservata a z nel registro dati
della periferica di uscita
7. Manda il comando di Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Forma Binaria del Programma

0100000000010000 Leggi un valore dall’input e mettilo nella cella 16 (a)


0100000000010001 Leggi un valore dall’input e mettilo nella cella 17 (b)
0100000000010010 Leggi un valore dall’input e mettilo nella cella 18 (c)
0100000000010011 Leggi un valore dall’input e mettilo nella cella 19 (d)
0000000000010000 Carica il contenuto della cella 16 (a) nel registro A
0001000000010001 Carica il contenuto della cella 17 (b) nel registro B
0110000000000000 Somma i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris.parziale)
0000000000010010 Carica il contenito della cella 18 (c) nel registro A
0001000000010011 Carica il contenito della cella 19 (d) nel registro B
0110000000000000 Somma i registri A e B
0001000000010100 Carica il contenuto della cella 20 (z) (ris. parziale) in B
1000000000000000 Moltiplica i registri A e B
0010000000010100 Scarica il contenuto di A nella cella 20 (z) (ris. totale)
0101000000010100 Scrivi il contenuto della cella 20 (z) (ris. totale) output
1101000000000000 Halt

Informatica A, AA 20/21, Giacomo Boracchi


Il Calcolatore

Il calcolatore è un potente esecutore di


algoritmi
 È rapido: permette di gestire quantità di
informazioni altrimenti intrattabili
 È preciso: non commette mai errori
 Non ha spirito critico
I programmi sono algoritmi codificati in
linguaggi comprensibili dal calcolatore.
La catena di programmazione
(nel caso dei linguaggi compilati)
• Si parte dalla codifica di un algoritmo
– fatta tramite un linguaggio simbolico
• di basso livello (Assembler)
• o di alto livello (C, Fortran, …)
detta programma sorgente
• Si genera un programma scritto in
codice macchina, chiamato
programma eseguibile

82
1. Videoscrittura (editing)
• Il testo del programma sorgente, costituito da
una sequenza di caratteri, viene composto e
modificato usando uno specifico
programma: l’editor
• Così otteniamo un File Programma
Sorgente memorizzato in memoria di massa
in un file di testo di nome:
– XXX.asm per programmi in assembler
– XXX.c per programmi in C
– XXX.cpp per programmi in C++
–… …

83
2. Traduzione
• Linguaggio di alto livello  Linguaggio
macchina (compilatore)
• Durante questa fase si riconoscono i simboli,
le parole e i costrutti del linguaggio:
– eventuali messaggi diagnostici segnalano errori
lessicali e sintattici
• Si genera la forma binaria del codice
macchina corrispondente: a partire dal File
Programma Sorgente si genera un File
Programma Oggetto, cioè in un file binario
di nome XXX.obj

84
3. Collegamento (linking)
• Il programma collegatore (linker) deve collegare fra loro il file
oggetto e i sottoprogrammi richiesti (es. le funzioni di C)
• I sottoprogrammi sono estratti dalle librerie oppure sono
individuati tra quelli definiti dal programmatore (nel qual caso si
trovano anch’essi nel file oggetto)
• Si rendono globalmente coerenti i riferimenti agli indirizzi dei
vari elementi collegati
• Si genera un File Programma Eseguibile, un file binario che
contiene il codice macchina del programma eseguibile
completo, di nome XXX.exe
• Messaggi di errore possono essere dovuti ad errori nel citare i
nomi delle funzioni da collegare
• Il programma sarà effettivamente eseguibile solo dopo che il
contenuto del file sarà stato caricato nella memoria di lavoro
(centrale) del calcolatore (a cura del Sistema Operativo)

85
4. Caricamento (loading)
• Il caricatore (loader) individua una
porzione libera della memoria di lavoro
e vi copia il contenuto del file XXX.exe
– Eventuali messaggi rivolti all’utente
possono segnalare che non c'è
abbastanza spazio in memoria

86
5. Esecuzione
• Per eseguire il programma occorre fornire in
ingresso i dati richiesti e in uscita riceveremo i
risultati (su video o file o stampante)
• Durante l’esecuzione possono verificarsi degli errori
(detti “errori di run-time”), quali:
· calcoli con risultati scorretti (per esempio un overflow)
· calcoli impossibili (divisioni per zero, logaritmo di un numero
negativo, radice quadrata di un numero negativo,….)
· errori nella concezione dell’algoritmo (l’algoritmo non risolve
il problema dato)
Tutti gli esempi citati si riferiscono ai cosiddetti errori semantici

87
Nel caso del C le fasi sono sei
1. Videoscrittura
• produzione del programma, svolta dal programmatore
tramite un programma di videoscrittura (editor)
2. Pre-compilazione (pre-processing)
• svolta da un programma detto preprocessore
3. Traduzione (compilazione)
• svolta dal compilatore (compiler)
4. Collegamento (linking)
• svolto dal collegatore (linker)
5. Caricamento (loading)
• svolto dal caricatore (loader)
6. Esecuzione
• a cura del Sistema Operativo

88
89
Architettura del calcolatore
RAM ROM

MEMORIA
CPU CENTRALE

BUS INDIRIZZI

BUS DATI

BUS DI CONTROLLO

INTERFACCE

UNITA’
HD
MM INPUT STAMPANTE PERIFERICHE
OUTPUT

90
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, ...

92
Architettura del Calcolatore:
Software di Sistema
• Il sistema operativo
• I sistemi di gestione di basi di dati
• Il software di rete
• Gli ambienti di programmazione:
– editor, compilatori, assemblatori, traduttori,
collegatori, debugger, … strumenti CASE, IDE
• Gli strumenti di produttività:
– videoscrittura, fogli elettronici, strumenti per la
produzione di “slide”, strumenti per la produzione
di ipertesti…

93
Il sistema operativo
• Programma di grandi dimensioni e notevole complessità, che
permette all’utente di interagire con il calcolatore
• Sviluppo di un S.O.: centinaia di anni-uomo
• Poca teoria, solo in alcune aree:
– Perché prima sviluppo tecnologico, poi teorizzazione
– Perché aspetti non di calcolo ma di ottimizzazione, gestione di
interazione, gestione di malfunzionamenti etc.
– Perché il problema del progetto di S.O. è intrinsecamente complesso e
interdisciplinare
• Complessità estrema: studio per livelli di macchine astratte per
ragionare a diversi livelli di astrazione
• Funzioni:
– Gestione lavori
– Supporto per la programmazione
– Meccanismi di Ingresso / Uscita (I/O)
– Gestione archivi (file)

94
Architettura del Calcolatore:
Software Applicativo
• Gestionale
– sistemi informativi aziendali, elaborazione paghe, fatturazione,
automazione del terziario, ..., automazione d’ufficio
• Applicazioni numeriche
– meteorologia, applicazioni statistiche, …
• Telematico
– terminali bancari, prenotazioni aeree, …, Internet, ...
• Automazione industriale
– CAD/CAM, CAE, robotica, CIM, …
• Controllo di processi
– Impianti chimici, centrali elettriche e nucleari, traffico aereo…
• Realtà virtuale, interfacce utente, software multimediale
• Social networks

95

Potrebbero piacerti anche