INFORMATICA 1
Lezione 2
(Linguaggi di programmazione
ed Elementi di architettura del computer)
Livello di Astrazione per la Codifica
di un Algoritmo
• Si può risolvere un problema senza prima fissare un insieme di
“azioni”, di “mosse elementari” possibili per l’elaboratore?
– No, bisogna prima scendere al livello della macchina, per conoscerne le
caratteristiche
– Ma quale macchina?
• È corretto impostare la soluzione a partire da tali “mosse elementari”?
– SI, per risolvere il problema con efficienza
– NO, se la macchina di partenza ha mosse di livello troppo basso
• Bisogna risalire ad un più adeguato livello di
ASTRAZIONE (processo di aggregazione di informazioni e
dati e di sintesi di modelli concettuali che ne enucleano le
proprietà rilevanti escludendo i dettagli inessenziali)
Informatica 1 - Michele Colajanni, 2003
29
1
PER LA CODIFICA DI UN ALGORITMO…
• Bisogna conoscere la sintassi di un linguaggio di
programmazione
• Bisogna conoscere la semantica di un linguaggio di
programmazione
• Bisogna conoscere un ambiente di
programmazione
Quale linguaggio? Quale ambiente di programmazione?
Informatica 1 - Michele Colajanni, 2003
30
Linguaggi di programmazione
• Un linguaggio di programmazione è una notazione
formale per descrivere algoritmi
• Un programma è la “codifica” o “implementazione” di
un algoritmo in un linguaggio di programmazione
Ma abbiamo visto che non tutti i programmi codificano algoritmi …
• Un programma si compone di più istruzioni scritte nel
linguaggio di programmazione.
• Quali parole chiave vi sono in un linguaggio?
• Quali sono i meccanismi di combinazione delle parole chiave?
• E soprattutto, a quale macchina si riferisce?
Informatica 1 - Michele Colajanni, 2003
31
2
Astrazione: come si vede la “macchina”
Informatica 1 - Michele Colajanni, 2003
32
Una parentesi sull’architettura del computer
(che in seguito sarà ripresa con più dettagli)
Memoria centrale
“Architettura di Von
Neumann”
(Princeton, fine anni ’40)
CPU
• CPU = Central Processing Unit
• Memoria: Contiene sia il programma (da eseguire) sia i
dati su cui dovrà operare il programma
Informatica 1 - Michele Colajanni, 2003
33
3
Architettura di un computer
memoria centrale
disco
È costituita da quattro elementi funzionali fondamentali:
• Unità Centrale di Elaborazione o Processore
(CPU - Central Processing Unit)
• Memoria Centrale
• Unità di I/O (ingresso / uscita)
• Bus di sistema
Informatica 1 - Michele Colajanni, 2003
34
Architettura di un computer
• La CPU contiene i dispositivi elettronici in grado di acquisire,
interpretare ed eseguire il programma trasformando i dati. Le
istruzioni sono eseguite in sequenza. Contiene registri, tra
cui alcuni speciali:
– PC: indirizza l’istruzione corrente
– IR: contiene l’istruzione corrente
• La memoria centrale contiene sia le istruzioni sia i dati
(informazioni per eseguire un programma).
• Le unità di I/O consentono uno scambio di informazione fra
l'elaboratore e l'esterno (ingresso/uscita, memorie di massa).
• Il bus di sistema collega questi elementi funzionali.
Fornisce il supporto fisico per la trasmissione dei dati tra i
vari elementi.
Informatica 1 - Michele Colajanni, 2003
35
4
Funzionamento di un computer
(Ciclo “fetch-decode-execute”)
• Le istruzioni del programma trasferiscono i dati
(utilizzando il Bus) e modificano il contenuto dei registri
• Ciascuna istruzione del programma viene prelevata dalla
Memoria centrale per eseguita dalla CPU. Ciascuna
istruzione richiede l’esecuzione dei seguenti passi:
1. Carica l’istruzione da memoria in IR (Instruction Register)
(Fetch)
2. Incrementa PC (Program Counter)
3. Decodifica l’istruzione (Decode)
4. Se l’istruzione usa un dato in memoria calcolane l’indirizzo
5. Carica l’operando in un registro
6. Esegui l’istruzione (Execute)
7. Torna al passo 1. Per l’esecuzione dell’istruzione
successiva
Informatica 1 - Michele Colajanni, 2003
36
Automa esecutore
• Un automa capace di ricevere dall’esterno una descrizione
dell’algoritmo richiesto, cioè capace di interpretare un
linguaggio (linguaggio macchina)
Metodo risolutivo
(ALGORITMO)
DATI
Automa
Esecutore
RISULTATI
Come realizzare l’automa?
• Mediante congegni meccanici
– macchina aritmetica (1649) di Blaise Pascal
– macchina analitica di Charles Babbage (1792-1871)
• Mediante un modello matematico
– funzionale (Hilbert, (1842-1943), Church, Kleene)
– operazionale (Turing, 1912-1954)
– sistemi di riscrittura (Post, Markov,...)
Informatica 1 - Michele Colajanni, 2003
37
5
Linguaggio macchina
• E’ il linguaggio di un computer
• Il linguaggio macchina è direttamente eseguibile
dall'elaboratore, senza alcuna intermediazione
• Computer con architetture interne (CPU) differenti hanno
linguaggi macchina differenti
• Pertanto, un programma scritto nel linguaggio macchina di
un computer non è eseguibile su di un computer con
un’architettura differente
(Si dice che non è portabile!)
Informatica 1 - Michele Colajanni, 2003
38
Linguaggi di alto livello
• Si basano su una “macchina” le cui “mosse” non sono
quelle della macchina hardware
→ realizzano una “macchina virtuale”
• Supportano concetti ed astrazioni
• Promuovono metodologie per agevolare lo sviluppo del
software da parte del programmatore
• Hanno capacità espressive molto superiori rispetto a
quelle del linguaggio macchina
• Esistono centinaia di linguaggi di programmazione!
(anche se pochi sono in uso)
Informatica 1 - Michele Colajanni, 2003
39
6
Linguaggi di alto livello (cont.)
Informatica 1 - Michele Colajanni, 2003
40
Categorie di linguaggi ad alto livello
Ogni categoria determina uno specifico stile di programmazione!
Informatica 1 - Michele Colajanni, 2003
41
7
Evoluzione dei linguaggi
Informatica 1 - Michele Colajanni, 2003
42
Perché esistono tanti linguaggi?
• Contesto applicativo:
–
–
–
–
Scientifico: Fortran
Gestionale: Cobol
Sistemi Operativi: C
Applicazioni di rete: Java
• Modello di partenza:
Informatica 1 - Michele Colajanni, 2003
43
8
Ambiente di programmazione
• È l'insieme degli strumenti (tool) che consentono la
codifica, la verifica e l'esecuzione di nuovi
programmi (fasi di sviluppo)
Sviluppo di un Programma
– Affinché un programma scritto in un qualsiasi linguaggio
di programmazione ad alto livello sia comprensibile (e
quindi eseguibile) da un calcolatore, occorre tradurlo
dal linguaggio di programmazione originario al
linguaggio comprensibile al calcolatore (linguaggio
macchina)
– Questa operazione viene normalmente svolta da speciali
programmi, detti traduttori
Informatica 1 - Michele Colajanni, 2003
44
Processo di traduzione
Programma
main()
{ int A;
...
A=A+1;
if ...
Traduzione
00100101
...
11001..
1011100 ...
I traduttori convertono il testo dei programmi scritti in un
particolare linguaggio di programmazione (programmi
sorgenti) nella corrispondente rappresentazione in
linguaggio macchina (programmi eseguibili)
Informatica 1 - Michele Colajanni, 2003
45
9
Tipi di Traduttori
Due categorie di traduttori:
• Compilatori traducono l’intero programma (senza
eseguirlo!) e producono in uscita il programma convertito
in linguaggio macchina
• Interpreti traducono ed eseguono immediatamente ogni
singola istruzione del programma sorgente
Quindi,
• Nel caso del compilatore, lo schema traduzione-esecuzione viene
percorso una volta sola prima dell'esecuzione
• Nel caso dell’interprete, lo schema traduzione-esecuzione viene
attraversato tante volte quante sono le istruzioni che compongono il
programma
Ad ogni attivazione dell'interprete su di una particolare istruzione
segue l'esecuzione dell'istruzione stessa.
Informatica 1 - Michele Colajanni, 2003
46
Compilatore e Interprete
Informatica 1 - Michele Colajanni, 2003
47
10
Compilatore e Interprete (cont.)
• Sebbene in linea di principio un qualsiasi linguaggio possa
essere tradotto sia mediante compilatori sia mediante
interpreti, nella pratica si tende verso una
differenziazione già a livello di linguaggio:
– Tipici linguaggi interpretati: Basic, Javascript, Perl, ...
– Tipici linguaggi compilati: C, Fortran, Pascal, ADA, …
(NOTA: Java costituisce un caso particolare)
• L'esecuzione di un programma compilato è più veloce
dell'esecuzione di un programma interpretato
• Un programma interpretato è più portabile di un
programma compilato
(portabile = può essere eseguito su piattaforme diverse)
Informatica 1 - Michele Colajanni, 2003
48
Ambiente di programmazione
• Editor: serve per creare file che contengono testi (cioè sequenze di
caratteri). In particolare, l’editor consente di scrivere il programma
sorgente.
• Compilatore: opera la traduzione di un programma sorgente scritto in un
linguaggio ad alto livello in un programma oggetto direttamente eseguibile
dal calcolatore.
• Linker (“collegatore”): nel caso in cui la costruzione del programma
oggetto richieda l’unione di più moduli (compilati separatamente), provvede
a collegarli per formare un unico programma eseguibile.
• Debugger (“spulciatore”): consente di eseguire passo-passo un
programma, controllando via via quel che succede, al fine di scoprire ed
eliminare errori non rilevati in fase di compilazione.
• Interprete: traduce ed esegue direttamente ciascuna istruzione del
programma sorgente, istruzione per istruzione.
È alternativo al compilatore.
Informatica 1 - Michele Colajanni, 2003
49
11
Sviluppo ed esecuzione di un programma
CODIFICA
Programma in
linguaggio
macchina
0001000100
00101110…
….
Programma
sorgente
main()
{int a,b;
...
Programma
eseguibile
1101000100
01111110…
1001111011
01111110…
100111101
01111110…
100111101.
….
Libreria
1101000.
00101110
...…
EDITOR
COMPILATORE
ERRORE
LINKER
ERRORE
ESECUZIONE
DEBUGGER
ERRORE
Informatica 1 - Michele Colajanni, 2003
50
Parole chiave della lezione
• Architettura di un computer
– “Macchina di Von Neumann
– Memoria centrale, CPU, Bus, Registri
• Funzionamento di un computer
– Ciclo “fetch-decode-execute”
• Linguaggi di programmazione
– Linguaggio macchina
– Linguaggi ad alto livello
• Traduttori
– Compilatore
– Interprete
Informatica 1 - Michele Colajanni, 2003
51
12