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