Lucidi - Dipartimento di Informatica

Informatica Generale
Marzia Buscemi
[email protected]
Ricevimento: Giovedì ore 16.00-18.00,
Dipartimento di Informatica, stanza 306-PS
o per posta elettronica
Pagina web del corso:
http://www.di.unipi.it/~buscemi/IG07.htm
(sommario delle lezioni in fondo alla pagina)
1
Finora abbiamo visto...
Algoritmo
Codifica in un linguaggio di
programmazione (C, Java, etc)
Programma
Compilatore
Eseguibile
2
Oggi vedremo...
Algoritmo
Programma
Input : programma
traduttore
Eseguibile
Output : rappresentazione comprensibile
alla macchina
3
Traduzione
 I traduttori sono programmi particolari
che provvedono a convertire il codice di
programmi scritti in un dato linguaggio
di programmazione (sorgenti) nella
corrispondente rappresentazione in
linguaggio macchina (programmi
oggetto o eseguibili)
4
Traduzione
codice sorgente (scritto
in qualche linguaggio
di alto livello)
x = y +2
traduttore
2
codice oggetto (“eseguibile”)
00010100 11001011
00010110 00000010
00010111 11001111
indirizzo di y
indirizzo di x
5
Due tipi di traduttori
 Interpreti

traducono ed eseguono direttamente ciascuna
istruzione del programma sorgente, istruzione
per istruzione
programma
interprete
valore
 Compilatori

accettano in input l’intero programma e
producono in output la rappresentazione
dell’intero programma in linguaggio macchina
programma
compilatore
programma
6
Due tipi di traduttori 2
 Interpreti
 la traduzione avviene tante volte quante
sono le istruzioni del programma; ad
ogni attivazione dell’interprete su una
particolare istruzione, segue l’esecuzione
dell’istruzione
 Compilatori
 per ogni programma, la traduzione
avviene una sola volta prima
dell’esecuzione
7
Esempio
L’istruzione while E do C è interpretata
così:
1. l’espressione E in codice macchina viena
valutata
2. Se E è falsa, il comando termina e si
prosegue dall’istruzione successiva
3. Se E è vera si interpreta l’istruzione C (si
traduce e si esegue ogni sottoistruzione)
4. Alla fine si ritorna a 1.
PS. L’output di un interprete è il risultato dell’esecuzione del programma
e non un programma da eseguire
8
Interprete vs compilatore
Quale tra le due soluzioni è la migliore?
 compilazione:


migliori prestazioni (la traduzione viene
effettuata una volta sola)
processi di ottimizzazione (compilazione
sull’intero programma)
 interprete:
 in caso di modifiche, consente di
eseguire il programma non appena il
codice sorgente sia stata aggiornato
9
Processo di compilazione
programma
sorgente
codice oggetto
analisi
semantica
alberi
sintattici
pre-processing
generazione
codice macchina
codice
“pre-processato”
analisi
lessicale
alberi sintattici
“annotati”
analisi
sintattica
elementi
sintattici
10
Esempio
// la seguente istruzione calcola il
valore di una certa espressione
aritmetica
x := a*2 + b*(x*3)
1.
2.
3.

La linea di codice sopra è riconducibile a una categoria
sintattica? (sì, è un assegnamento)
il codice è valido o presenta degli errori?
determinare il significato, cioè quali operazioni deve
eseguire l’elaboratore
Dapprima si divide la linea in elementi sintattici
(token), poi si trasformano questi elementi in
istruzioni del linguaggio e si effettuano i controlli
“semantici”, infine si traducono le istruzioni in
linguaggio macchina
11
Esempio: pre-processing
// la seguente istruzione calcola
il valore di una certa
espressione aritmetica
x := a*2 + b*(x*3)
i commenti al codice
vengono rimossi
x := a*2 + b*(x*3)
12
Esempio: analisi lessicale
x := a*2 + b*(x*3)
i caratteri vengono
raccolti in elementi
sintattici
<id>x assign <id>a mult <int>2 plus
<id>b mult lpar <id>x mult <int>3 rpar
13
Esempio: analisi sintattica
<id>x assign <id>a mult <int>2 plus <id>b mult
lpar <id>x mult <int>3 rpar
gli elementi sintattici
vengono organizzati
in una struttura ad albero
che descrive l’ordine in
cui devono essere eseguite
le operazioni (dal basso
verso l’alto)
assign
plus
x
mult
mult
mult
a
2
b
x
3
14
Esempio: analisi semantica
assign:int,int
assign
x:int
plus
x
mult
mult
mult:
int,int
mult
a
2
plus:int,int
b
mult:int,int
mult:int,int
a: int
2
x
3
b:int
3
x:int
Gli elementi dell’albero sintattico vengono etichettati con i tipi
corrispondenti alle operazioni e agli operandi e si effettuano dei
controlli di compatibilità su questi tipi
15
Processo di traduzione in Java
programma
sorgente (.java)
compilatore
codice oggetto
codice byte-code
(.class)
Java Virtual
Machine
specifica per ciascun
calcolatore
Es. Gli applet contengono codice byte-code e non risiedono
permanentemente su un calcolatore, ma vengono tradotti e
interpretati dalla JVM della macchina su cui sono copiati
16
Linking e esecuzione
 Librerie: raccolte di programmi-oggetto
che forniscono particolari funzionalità
(funzioni matematiche, etc.)
 Linking: collega i diversi file-oggetto
(librerie + programmi oggetto generati dai
sorgenti scritti dal programmatore) in un
unico programma eseguibile
programmi
sorgenti
compilatore
codici
oggetto
linker
librerie
programma
eseguibile
17
La struttura hardware
18
Ritorniamo alla …. struttura
generale di un calcolatore
 Il calcolatore di Von Neumann
Memoria
(RAM,dischi, etc)
Mantiene
Dati e Programmi
Processore
(CPU)
E’ un esecutore capace
di interpretare i singoli passi
richiesti dai programmi
(istruzioni elementari)
Sottosistema
di Interfaccia
Permette di comunicare
dati e programmi alla
macchina e di ottenere i
risultati (tastiera, micr.,
stampante, schermo, ) 19
Struttura di un calcolatore 2
RAM
(memoria centrale)
Processore
bus
Linee dati, indirizzi e controllo
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
schermo
dischi
mouse
modem
20
Struttura di un calcolatore
3
Sequenza di parole (un array …)
indirizzi
0
1
2
3
4
RAM
(memoria centrale)
Processore
.
.
.
bus
Linee dati, indirizzi e controllo
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
schermo
dischi
mouse
modem
21
Struttura di un calcolatore
4
Sequenza di parole (un array …)
indirizzi
0
1
2
3
4
Valore da trasferire
RAM
(memoria centrale)
Processore
Dove trasferirlo
.
.
.
Direzione di
trasferimento, unità
coinvolte etc.
bus
Linee dati, indirizzi e controllo
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
schermo
dischi
mouse
modem
22
Struttura di un calcolatore
RAM
(memoria centrale)
5
Processore
bus
Linee dati, indirizzi e controllo
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
Interfaccia
di I/O
schermo
dischi
mouse
modem
23
Esecuzione: esempio
 Esempio: come si realizza l’operazione
x=y+2 :
LOAD Y, R1
ADD 2, R1
STORE R1, X
assembler
R1
memoria
Legge il valore in Y
e lo scrive in R1
17
Registro interno del
processore (variabile
temporanea su cui lavorare)
Y
34
X
222
Indirizzi di due
parole di memoria
che rappresentano
le variabili intere x e y
24
Esecuzione: esempio
 Esempio x=y+2
LOAD Y, R1
ADD
2, R1 Aggiunge 2 a R1
STORE R1, X
2
memoria
Y
34
X
222
assembler
R1
34
Registro interno del
processore (variabile
temporanea su cui lavorare)
Indirizzi di due
parole di memoria
che rappresentano
interi
25
Esecuzione: esempio
 Esempio x=y+2 (assembler)
LOAD Y, R1
ADD
2, R1
STORE R1, X
Y
assembler
R1
Scrive il contenuto
di R1 nella parola
di indirizzo X
36
Registro interno del
processore (variabile
temporanea su cui lavorare)
X
3
memoria
34
222
Indirizzi binari di due
parole di memoria
che rappresentano
interi
26
Esecuzione: esempio
 Esempio x=y+2
LOAD Y, R1
ADD
2, R1
STORE R1, X
R1
36
4
memoria
Y
34
X
36
Situazione finale della
memoria
27
Esecuzione: linguaggio
macchina
 Traduzione binaria (in
linguaggio macchina)
di
memoria
Y
LOAD Y, R1
ADD
2, R1
STORE R1, X
 Prima di tutto
dobbiamo decidere
quale è il vero indirizzo
di X e Y
01101
11100
X
28
Esecuzione: linguaggio
macchina 2
 Codifica binaria di
LOAD 01101, R1
ADD
2, R1
STORE R1, 11100
 Ogni operazione si codifica secondo
un formato stabilito da chi costruisce
l’hw

un formato semplificato è
Codice operativo
Modo 1
Op1
Modo 2
Op2
29
Esecuzione: linguaggio
macchina 3
 Vediamo i vari campi del formato :
Codice operativo
Modo1
Op1
Modo2
Op2
è la codifica dell’operazione
da eseguire
es:
ADD
LOAD
STORE
0001
0110
0111
30
Esecuzione: linguaggio
macchina 4
 Vediamo i vari campi del formato :
Codice operativo
Modo1
Op1
Modo2
Op2
è la codifica primo operando
dice a cosa si riferisce OP1
es:
se MODO1 = 00 l’operando è nel registro
interno del processore
(e OP1 è il numero del registro)
se MODO1 = 01 l’operando è in memoria
(e OP1 è l’indirizzo)
se MODO1 = 10 l’operando è immediato, cioè
OP1 è direttamente il valore
31
dell’operando
Lo stesso vale per il secondo operando!
Esecuzione: linguaggio
macchina 5
 Tipicamente la codifica di una
istruzione è lunga come una parola
(word) o multipli della parola per
poterla leggere dalla memoria in
modo più efficiente :

es : con parole di 4 byte (32 bit)
Codice operativo
4bit
Modo1
2bit
Op1
Modo2
Op2
12bit
2bit
12bit
32
Esecuzione: linguaggio
macchina 6
 Problema …..
 es : con 12 bit posso indirizzare ‘solo’
212 parole di memoria centrale (RAM) !
Codice operativo
4bit
Modo1
2bit
Op1
Modo2
Op2
12bit
2bit
12bit
Cioè posso avere al massimo una RAM di
4K parole … se ne ho di più (oggi si
arriva a 128M e siamo sempre in
aumento …) devo inventarmi codifiche
diverse….
33
Esecuzione: linguaggio
macchina 7
MODI
00 registro
01 memoria
10 immediato
CODICI OPERATIVI
ADD
0001
LOAD
0110
STORE 0111
 Codifica binaria di
LOAD 01101, R1
ADD
2, R1
STORE R1, 11100
Codice operativo
4bit
Modo1
2bit
Op1
Modo2
Op2
12bit
2bit
12bit
0110
01
01101
00
00001
load
0001
10
00010
01
00001
add
0111
00
00001
01
11100
store
34
Il processore
 Adesso vediamo come è strutturato il
processore per riuscire ad eseguire i
programmi in linguaggio macchina che
abbiamo appena visto
 Dati e programmi sono codificati in
binario e risiedono in Memoria Centrale
(RAM) ad opportuni indirizzi
35
Il processore: struttura base
M
e
m
o
r
i
a
c
e
n
t
r
a
l
e
PC
Bus controllo
Bus
indirizzo
Bus dati
Operazione
M
A
R
Esegui
IR
Unità di controllo
Registro/i coinvolti
M
D
R
R0
R1
R2
...
R16
ALU
Registri
generali
clock
Esito
Processore
36
Il processore: struttura base 2
 I registri sono celle di memoria:
 PC (program counter) indica l’indirizzo di
memoria della prossima istruzione da
eseguire
 IR (instruction register) contiene copia della
codifica dell’istruzione da eseguire
 MAR, MDR (Memory Address Register,
Memory Data Register) contengono
l’indirizzo della cella di memoria che
vogliamo leggere/scrivere (MAR) ed i dati
da/per la memoria (MDR)
 R0,R1 ... sono registri generali che servono
per memorizzare valori durante i calcoli
37
Il processore: struttura base 3
 CU (Unità di controllo): gestisce la
successione delle operazioni da
svolgere, sincronizzando le attività
 ALU (Unità aritmetico logica): effettua
operazioni di tipo aritmetico e logicobooleano (+,-,and,or …)
 Clock: è un segnale periodico fatto di
uni e zero che viene distribuito a tutti i
circuiti sincroni del processore (vedi
dopo)
38
Il processore
 Esegue il seguente ciclo
ininterrottamente :
1. (fetch) legge una nuova istruzione da
eseguire dalla memoria centrale
2. (decode) risale alla operazione richiesta
decodificando la rappresentazione
binaria
3. (execute) porta a termine l’operazione
richiesta
39
Un esempio : ADD 2, R1 (fetch) 1
Indirizzo della istruzione
memoria
Bus
controllo
40 000..01
Bus
indirizzo
Bus dati
40
M
A
R
PC
Esegui
IR
Parte controllo
Registro/i coinvolti
M
D
R
R0
R1
R2
...
R16
codifica
Operazione
ALU
Registri
generali
Esito
Processore
40
Un esempio : ADD 2, R1 (fetch) 2
Indirizzo della istruzione
memoria
Leggi!
41
40 000..01
Operazione
PC
Esegui
IR
Parte controllo
40
Bus
indirizzo
Bus dati
MAR
M
D
R
Registro/i coinvolti
R0
R1
R2
...
R16
codifica
ALU
Registri
generali
Esito
Processore
41
Un esempio : ADD 2, R1 (fetch) 3
memoria
41
40 000..01
Operazione
PC
Esegui
IR
Parte controllo
000110000100100001
Bus
indirizzo
MAR
Bus dati
MDR
Registro/i coinvolti
R0
R1
R2
...
R16
ALU
Registri
generali
Esito
Processore
42
Un esempio : ADD 2, R1 (dec)
memoria
41
40 000..01
add
PC
Esegui
IR
Parte controllo
000110000100100001
Bus
indirizzo
MAR
Bus dati
MDR
Registro/i coinvolti
R0
R1
R2
...
R16
ALU
Registri
generali
Esito
Processore
43
Un esempio : ADD 2, R1 (exe) 1
memoria
41
40 000..01
add
PC
Esegui
IR
Parte controllo
000110000100100001
Bus
indirizzo
MAR
Bus dati
MDR
Registro/i coinvolti
00010
R1
R2
...
R16
ALU
Registri
generali
Esito
Processore
44
Un esempio : ADD 2, R1 (exe) 2
memoria
41
40 000..01
add
PC
Esegui
IR
Parte controllo
000110000100100001
Bus
indirizzo
MAR
Bus dati
MDR
Registro/i coinvolti
00010
34
R2
...
R16
ALU
Registri
generali
Esito
Processore
45
Un esempio : ADD 2, R1 (exe) 3
memoria
41
40 000..01
PC
IR
Parte controllo
000110000100100001
Bus
indirizzo
MAR
Bus dati
MDR
Registro/i coinvolti
00010
36
R2
...
R16
ALU
Registri
generali
Esito
Processore
46
Il clock: periodo e frequenza
 L’esecuzione è sincrona,
cioè esiste un segnale di ‘inizio della
sottooperazione’ (detto impulso o tick, in
quanto generato dal clock) distribuito a tutti
i circuiti sequenziali sincroni.
 Il periodo di clock è l’intervallo di tempo tra
due successivi impulsi.
 La frequenza con cui viene inviato il tick è
misurata in ‘numero di impulsi al secondo’
(Hz) [1 GHz = un milione di impulsi al
secondo]
 Importante: il tempo di esecuzione di una
istruzione si misura in cicli di clock, cioè in
quanti impulsi di clock sono necessari perché
la CPU la completi. Quindi:
maggiore frequenza  maggiore velocità di CPU

47