Sei sulla pagina 1di 30

Architettura del calcolatore

• Il calcolatore è:
– Uno strumento programmabile per
rappresentare, memorizzare ed elaborare
informazioni
– Un sistema, costituito da molte componenti

• Studiare l’architettura di un sistema significa:


– Individuare ciascun componente del sistema
– Comprendere i principi generali di
funzionamento di ciascun componente
– Comprendere come le varie componenti
interagiscono
Esecuzione Automatica degli Algoritmi

• Per l’esecuzione automatica, un algoritmo deve


essere scritto in linguaggio artificiale (programma),
comodo per l’uomo -linguaggio di alto livello – che
deve essere tradotto in una rappresentazione
direttamente eseguibile dal calcolatore

• Occorre capire:
– Come le informazioni si rappresentano all’interno del
calcolatore

– Funzionalità del calcolatore: architettura HW e SW

– Codifica degli algoritmi in linguaggio artificiale


• Capacità di individuare una soluzione algoritmica
• Conoscenza del linguaggio di programmazione
Architettura del calcolatore

• La prima decomposizione di un calcolatore è relativa


a due macro-componenti
– Hardware
– Software

Software applicativo
Software di base
Hardware
Hardware
Hardware: architettura

• L’architettura dell’hardware di un calcolatore


reale è molto complessa
• La macchina di Von Neumann è un modelo
semplificato dei calcolatori moderni
– Von Neumann progettò, nel 1945, il primo
calcolatore con programmi memorizzabili
anziché codificati mediante cavi e interrutori

ARCHITETTURA DI VON NEUMANN


• Modello tipico dell’architettura interna del
calcolatore
• 3 blocchi funzionali collegati da un BUS
(insieme di collegamenti elettrici) che consente il
trasferimento dell’informazione
Esecutore calcolatore
Requisiti funzionali

• La macchina di Von Neumann è composta di 4


tipi di componenti funzionali

• Capire ed eseguire le istruzioni


– unità centrale di elaborazione (CPU): la parte
che controlla e calcola
• Mantenere istruzioni e dati
– memoria di lavoro: la parte che ricorda
• Interagire col mondo esterno
– interfacce I/O: la parte che comunica
• Trasferimento dati tra le componenti
– bus: la parte che svolge funzioni di
trasferimento di dati e di informazioni di
controllo tra le varie componenti funzionali
Architettura di un computer
La macchina di Von Neumann

bus di sistema

Mem. Interfaccia Intefaccia


CPU centrale I/O I/O

Mem.
Schermo Secondaria
Esecuzione di un programma

• Il programma deve essere caricato nella memoria di


lavoro

• La CPU legge da memoria, decodifica ed esegue le


istruzioni del programma, operando sui dati
– Ciclicamente:
Estrai la prossima istruzione

Decodificala ed eseguila

• Al fine di leggere ed eseguire le istruzioni, la CPU


controlla e temporizza il funzionamento delle altre
unità tramite segnali del bus

• Le istruzioni devono essere espresse in codice


macchina, in un formato direttamente interpretabile
dalla CPU
– Elaborazioni
– Trasferimento dati

• Le variabili devono essere espresse in modo da


essere accessibili dalla CPU
– indirizzi nella memoria di lavoro come
riferimenti alle variabili
CPU
Sincronizzazione dei dispositivi

• La CPU ha il ruolo di master, ed impedisce alle


altre unità (slave) di accedere autonomamente
al bus

• In ogni trasferimento la CPU identifica la


sorgente e la destinazione dei dati, e
sincronizza i dispositivi che devono colloquiare
attraverso i segnali sul bus

• Il bus viene utilizzato per evitare qualsiasi


collisione tra i dati di competenza dei diversi
dispositivi (tutti contemporaneamente connessi
al bus)

• Es.: la CPU accede alla memoria per leggere un dato e


contemporaneamente da un dispositivo di input sono in
arrivo dati che devono transitare sullo stesso bus
Memoria di lavoro

• Insieme ordinato di parole che possono contenere


(memorizzare) informazioni (istruzioni e dati)
– tabella mono-dimensionale, i cui elementi sono le parole
di memoria
• ogni parola di memoria costituita da n elementi di
memoria binari (es. n=8, 16, 32, 64 bit)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1

• La posizione di ogni parola in memoria è identificata in


modo univoco da un numero intero positivo detto
indirizzo della parola di memoria
Memoria
Caratteristiche Principali

• Accesso casuale
• Composta da due tipi di memoria:
– RAM: parole modificabili (leggibili e scrivibili)
– ROM: parole solo leggibili, scritte in maniera
permanente dal costruttore, prima dell’installazione
del calcolatore
• Contiene programmi protetti come Il BIOS (Basic Input
Output System) che carica in memoria il sistema
operativo quando la macchina viene accesa

• Caratteristiche tecnologiche (RAM)


– Realizzata tramite circuiti a transistori
– Volatile: mantiene le informazioni solo se alimentata
– All’accensione il contenuto è una sequenza casuale di
0e1
– tempi di accesso ad ogni singola parola dell’ordine
delle decine di nanosecondi
– Accesso veloce rispetto alla memoria di massa (1
milione di volte più lenta - decine di millisecondi), ma
contiene un numero di parole inferiore
Memoria ROM

• Esistono diversi tipi (“Erasable”,


Programmable”, EPROM)

• I programmi (vedi BIOS) sono predefiniti dal


costruttore
– Costituiscono una via intermedia tra hardware e
software

FIRMWARE
Indirizzamento della memoria

• Per accedere ad una parola di memoria è


necessario fornire il suo indirizzo
– Posizione relativa della parola (numero
d’ordine) rispetto alla prima cella

• L’indirizzamento avviene tramite il Registro


Indirizzi della CPU

• Se k=n.ro di bit utilizzati per specificare


l’indirizzo, allora 2k è la dimensione dell’area di
memoria fisica indirizzabile
– es. con 23 bit di indirizzo, 8 Mega parole nello
spazio di indirizzamento
Operazioni in memoria

• Utilizzo del Registro Dati


• Lettura dalla memoria: carica il registro dati con
una parola di memoria
• Scrittura dalla memoria: deposita il contenuto
del registro in una parola di memoria

h=16 bit

Registro L S Registro
indirizzi dati

k=10 h=16

1023
Bus di Sistema

• E’ il sistema di comunicazione: consente il


trasferimento delle informazioni dalla memoria
di lavoro e dalle interfacce di I/O e viceversa

• Permette alla CPU di gestire e sincronizzare i


vari dispositivi

• Costituito da un numero adeguato di conduttori


o linee, ognuno dei quali trasporta il segnale
elettrico relativo ad un bit di informazione o
controllo (cioè di comando)
Bus

• Bus dati
• Bus indirizzi
• Bus controlli
– Esempio: lettura da memoria
• CPU carica indirizzo in AR e lo invia a RAM via
bus indirizzi; invia comando di lettura via bus
controlli
• RAM invia dato letto in DR via bus dati e segnala
a CPU operazione avvenuta via bus controlli

– Esempio: scrittura in memoria


• CPU carica indirizzo in AR e lo invia a RAM via
bus indirizzi; invia comando di scrittura via bus
controlli
• RAM acquisisce dato da DR via bus dati e
segnala a CPU operazione avvenuta via bus
controlli.
Partizione del Bus

L’insieme dei conduttori del bus può essere


suddiviso in tre insiemi:
• Bus Indirizzi: la configurazione binaria dell’indirizzo
della parola di memoria o della porta a cui accedere
– La CPU utilizza il registro indirizzi per
presentare la configurazione sul bus

• Bus dati: la codifica binaria dell’informazione da


trasferire
– l’informazione è fornita dalla memoria o da una
porta di ingresso (ciclo di lettura), oppure dalla
CPU (ciclo di scrittura)

• Bus di controllo: trasmette dall’unità master all’unità


slave un codice corrispondente all’operazione da
eseguire; dall’unità slave all’unità master informazioni
relative all’avvenuto espletamento dell’operazione
Ciclo del bus

La CPU gestisce i trasferimenti delle informazioni sul


bus. Ogni trasferimento di informazione avviene con
un ciclo del “bus”. I trasferimenti sono detti di lettura
e di scrittura.

•Lettura
–la CPU genera indirizzi e segnali di controllo ed è
la destinazione dell’informazione
•Scrittura
–la CPU genera indirizzi e segnali di controllo ed è
la sorgente dell’informazione
Trasferimenti
• Trasferimento tra memoria e CPU
– lettura da memoria (memoria --> CPU)
– scrittura in memoria (CPU --> memoria)
– sul bus devono essere presenti:
• l’indirizzo della parola interessata
• i segnali di controllo relativi al tipo di trasferimento
• il dato letto da (da scrivere in) memoria
• Trasferimento tra porte di I/O e CPU
– lettura da unità periferica (porta --> CPU)
– scrittura verso la periferica (CPU--> porta)
– sul bus devono essere presenti:
• l’indirizzo della porta (registro) della periferica
interessata
• i segnali di controllo relativi al tipo di trasferimento
• il dato letto dalla (da scrivere sulla) porta
• Segnali di controllo:
– WM (Write Memory): assume valore 1 per abilitare un’operazione
di scrittura in memoria
– RM (Read Memory): assume valore 1 per abilitare un’operazione
di lettura in memoria
– WO (Write Output): assume valore 1 per abilitare un’operazione di
scrittura su porta di uscita
– RI (Read Input): assume valore 1 per abilitare un’operazione di
lettura su porta di ingresso
Interfacce di ingresso/uscita
(Input/Output - I/O)

• Dispositivi circuitali che consentono al calcolatore di


scambiare informazioni con le unità periferiche
(dispositivi elettromeccanici)
– tastiera e mouse (in ingresso), video e stampante (in
uscita)
– viene definita unità periferica anche la memoria di
massa (es. disco fisso o l’unità a floppy), che è di
ingresso e uscita ma non comunica con l’esterno

• Costituite da porte di I/O e da circuiti ausiliari


– porte: registri (simili a parole di memoria) che
possono essere letti o scritti dalla CPU, e che
comunicano con il mondo esterno (periferiche) con
segnali in ingresso e in uscita
• Un’interfaccia è costituita dai seguenti elementi:
(schema semplificato):
– Registro dati periferica, collegato al bus dati
– Registro comando periferica, collegato al bus
controlli
– Informazione sullo stato della periferica: trasferita nel
registro di stato periferica della CPU e letta a
”comando” dall’unità di elaborazione (tramite il bus)
Interfacce di I/O
Registri

• Registro Dati Periferica (RDP):


– nelle interfacce di ingresso rappresenta il
“luogo fisico” in cui l’unità periferica
(elettromeccanica) fornisce i dati affinché
possano essere acquisiti (letti) dalla CPU
– nelle interfacce di uscita rappresenta il “luogo
fisico” da cui l’unità periferica riceve i dati che
sono stati generati (scritti) dalla CPU
• Registro Comandi Periferica (RCP)
– contiene le informazioni (in codifica binaria) che
determinano il modo di funzionamento della
periferica. Tali informazioni sono generate
(scritte) dalla CPU e utilizzate dalla periferica
• Registro di Stato Periferica
– contiene le informazioni relative allo stato di
funzionamento della periferica. Tali
informazioni vengono generate dalla periferica e
utilizzate dalla CPU
CPU
Struttura
• Le caratteristiche di un programma in codice
macchina derivano dall’architettura dei calcolatori e
dalla struttura della CPU
• Istruzioni
– Sono caricate in parole di memoria contigue
– L’indirizzo della parola di memoria che contiene
la prima istruzione è noto alla CPU
• Variabili
– in uno spazio di memoria diverso da quello che
contiene le istruzioni, parole riservate a
contenere i valori delle variabili (dati)
– identificate in modo univoco dall’indirizzo delle
parole di memoria ad esse destinate
• Il nome simbolico della variabile è
rappresentativo di tale indirizzo
– Il contenuto della parola di memoria è il valore
della variabile
– Il valore delle variabili dipende dall’esecuzione
• operazioni di lettura e assegnamento

Supponiamo che ogni istruzione in


linguaggio macchina e ogni variabile occupi
una sola parola di memoria
CPU
Struttura

Esecuzione sequenziale delle istruzioni (prelevamento di


una istruzione per volta)

• Program Counter (PC)


– registro che viene incrementato in modo da contenere
l’indirizzo della parola di memoria in cui è presente la
prossima istruzione da eseguire
• L’istruzione da eseguire è prelevata dalla memoria,
memorizzata nel Registro Istruzione e decodificata
(interpretata) dall’Unità di Controllo
• Esecuzione di un’istruzione: esecuzione di passi
elementari
– Generazione di segnali del bus di controllo per l’accesso a
memoria o a porta
– Generazione di segnali di controllo interni alla CPU per
l’esecuzione di operazioni aritmetiche o logiche
• Unità di controllo
– Genera segnali di controllo che comandano gli elementi
della CPU
• Unità Aritmetico Logica (ALU)
– L’elemento della CPU in grado di eseguire operazioni
• Registri di lavoro
– Mantengono i valori degli operandi che devono essere
utilizzati dall’ALU e i risultati prodotti
– L’unità di controllo genera anche i segnali interni alla CPU
per trasferire le informazioni tra i vari registri
CPU
CPU
Registri (1)

• Registro indirizzi: di appoggio tra la CPU e il bus di


indirizzi
– La codifica binaria dell’indirizzo di memoria o della porta di I/O
a cui si accede è caricata in questo registro
– Dimensione (n.ro di bit) pari a quella del bus indirizzi

• Registro Dati: di appoggio tra la CPU e il bus dati


– In lettura da memoria o da porta, memorizza il contenuto del
bus dati, prima del suo trasferimento in altri elementi della
CPU
– In scrittura contiene la codifica binaria da trasmettere tramite il
bus dati
– Dimensione: quella del bus dati

• Program Counter (PC): contiene l’indirizzo della prossima


istruzione da eseguire
– Collegato al registro indirizzi per la lettura da memoria
dell’istruzione da eseguire
– Può ricevere valori da altri registri della CPU
– Dimensione: quella del bus indirizzi
– I valori assunti dal PC scandiscono il Flusso di Esecuzione
• Esecuzione in sequenza: PC=PC+1
• Salti condizionati: PC forzato all’indirizzo
dell’istruzione destinazione del salto
Componenti della CPU
Registri (2)

• Registro Istruzione: contiene l’istruzione (in linguaggio


macchina) correntemente in esecuzione
– Caricato tramite bus dati ad ogni lettura di istruzione
• Formato istruzione in linguaggio macchina: 2 campi

CodOp Operando

– Codice operativo: identifica univocamente il tipo di


istruzione
• l’unità di controllo interpreta il valore del codice
operativo ed esegue l’istruzione corrente, generando
gli opportuni segnali di controllo interni ed esterni alla
CPU
– Operando: contiene il riferimento all’operando su cui
agisce l’istruzione
• Se l’operando è un dato, il riferimento è l’indirizzo
della parola di memoria riservato per il dato
• Se l’operando è un’altra istruzione (la prossima da
eseguire) il riferimento è la parola di memoria che
contiene tale istruzione
• Il campo operando è collegato sia al registro indirizzi
che al PC

• Dimensione del registro istruzione: quella del BUS dati


Componenti della CPU
Registri (3)

• Registi di lavoro: di supporto alle operazioni eseguite


all’interno della CPU
– Dimensione: quella del bus dati
– N.ro: dipende dalla CPU
• Accumulatore (A): uno dei registri di lavoro
– Quello in cui viene memorizzato il risultato di ogni operazione
eseguita dall’unità aritmetico-logica
• Unità Aritmetico-Logica (ALU): esegue operazioni
aritmetiche e logiche elementari
– Operazioni elementari: somma e sottrazione, a cui possono
essere ricondotte anche operazioni più complesse (prodotto,
divisione, confronto, …)
– Due operandi di ingresso, presentati alla ALU tramite due
registri di appoggio(operando1 e operando 2)
– Un risultato in uscita (memorizzato nell’accumulatore)
– Opportuni segnali dell’unità di controllo abilitano le varie
operazioni
Il ciclo “preleva-esegui”

1. Contenuto di PC Æ AR
2. Lettura da memoria centrale Æ DR
3. Trasferimento da DR Æ CIR
4. Incremento di PC
5. Esecuzione di DR
Preleva
Esegui
Esecuzione dei programmi

Esempio: calcolare espressione (a + b) * (c + d)


1. poni in memoria centrale, nelle celle 16, 17, 18
e 19 io valori di a, b, c, e d;
2. esegui l’addizione di a e b:
1. copia cella 16 in registro A;
2. copia cella 17 in registro B;
3. somma i due registri (l’operazione è eseguita
dalla ALU);
3. immagazzina risultato (ora in registro A) nella
cella 20;
4. esegui l’addizione di c e d:
1. copia cella 18 in registro A;
2. copia cella 19 in registro B;
3. somma i registri (operazione è eseguita dalla ALU);
5. esegui la moltiplicazione di (a + b) e (c + d):
1. copia in registro B cella 20;
2. moltiplica il contenuto dei due registri;
6. scrivi il risultato sul dispositivo di uscita:
1. memorizza registro A, nella cella 20;
2. scrivi cella 20 nel registro dati della periferica
7. Arresta l’esecuzione del programma
Il programma in linguaggio macchina