Fondamenti di Informatica Introduzione al corso Prof. Venturino Taggi e prof. Alfredo Accattatis, slide (rielaborate) del prof. Emiliano Casalicchio accattatis@ing.uniroma2.it taggi@ing.uniroma2.it
Concetti chiave: Codifica Possiamo interpretare gli 0 e 1 nella memoria del computer come più ci piace. Possiamo trattarli come numeri. Possiamo codificare informazioni in questi numeri Perfino il fatto più volte accennato che il computer comprenda numeri è una interpretazione Usiamo le tensioni sui fili per codificare 0 e 1, ognuno definisce un byte che possiamo, a nostra volta, interpretare come numero decimale A proposito: perché interpretiamo questa stringa di bit come 74? 2
3 La codifica può essere stratificata in un qualsiasi numero di livelli Codifica ASCII dei caratteri A codificato come 65 B codificato come 66 Se esiste un byte che contiene il numero 65, e decidiamo che è un carattere voilà diventa una A! Possiamo costruire una serie di numeri per definire un testo 77, 97, 114, 107 sta per Mark 60, 97, 32, 104, 114, 101, 102, 61 sta per <a href= (HTML)
Strati di codifica 4 Un numero è solo un numero Se bisogna considerarlo un carattere, ci sarà un software (o hardware) che lo farà Per esempio, che associa il numero 65 con la rappresentazione grafica del carattere A Se bisogna considerarlo come parte di un documento HTML ci sarà un software preposto allo scopo (browser)..che capisce che <A HREF= è l inizio di un link La parte che comprende l HTML comunica con la parte che a sua volta interpreta che 65 è una A
Multimedia e unimedia Ma lo stesso byte che contiene il valore 65 potrebbe essere interpretato come Suono (una piccolissima parte p. es. 1/44100 di secondo) La quantità di colore rosso di un singolo punto di una immagine La quantità di colore rosso di un singolo punto di una immagine che è un singolo fotogramma di un film Usiamo software e hardware per gestire tutti questi strati Come decidere il significato di un numero e come organizzare i numeri per rappresentare I dati desiderati? Tramite le strutture dati I dati da organizzare in strutture possono essere numerosi Per rappresentare tutti I punti di una schermata tipica possono volerci milioni di byte: esempio : 1280x800 = 102400 punti normalmente si usano 24 bit (3 byte) per punto ossia 3*1024000 = 3072000 byte Ogni secondo di musica in un CD occupa 44100x2 byte 5
Architettura di un sistema informatico L architettura di un sistema informatico descrive come interagiscono hardware e software. Ciascuno strato (livello di astrazione) è una generalizzazione di alcune caratteristiche di funzionamento del sistema. 6
Linguaggi di programmazione La codifica permette di scambiare informazioni con il computer attraverso un «vocabolario» dati, formule, procedimenti, Il linguaggio di programmazione permette di istruire il computer allo svolgimento di certe operazioni (algoritmo) app, pacchetto software, Tipologie di linguaggi di programmazione: Prima generazione (I): linguaggi macchina Seconda generazione (II): linguaggio assembly Terza generazione (III): C,C++, fortran, Basic Quarta generazione (IV): Java, Matlab 7
Linguaggi di programmazione e livelli di astrazione Si usano linguaggi diversi per differenti livelli di astrazione Linguaggio macchina (I) 0100 0000 0000 1000 0100 0000 0000 1001 0000 0000 0000 1000 Linguaggio assembly (II) LOAD X ADD Y STORE Z Linguaggio di alto livello (III, IV) def fun(): a = 0; print a+5 Sequenza di istruzioni binarie eseguibili direttamente dalla CPU Istruzioni in corrispondenza diretta (1-a-1) con le istruzioni binarie ma espresse in formato simbolico Machine independent: non è legato al tipo di hardware e sistema operativo 8
Linguaggio di programmazione Formalizzato da Sintassi (regole grammaticali) Semantica (significato) Vocabolario Key words Variables Una frase in linguaggio naturale può essere grammaticalmente corretta ma non avere significato: L erba scrive il gatto 9
Sequenza di realizzazione di un programma Java Language Program Progettazione e stesura del codice sorgente 0100 0000 0000 1000 0100 0000 0000 1001 0000 0000 0000 1000 10
Esecuzione di un programma Input: Codice eseguibile + Dati di elaborazione 000000 00000 00101 0001000010000000 000000 00100 00010 0001000000100000 100011 00010 01111 0000000000000000 100011 00010 10000 0000000000000100 101011 00010 10000 0000000000000000 101011 00010 01111 0000000000000100 000000 11111 00000 0000000000001000 Processor (CPU) Devices Control Memory Input Datapath Output 11
Esecuzione di un programma Codice e dati caricati in memoria Processor (CPU) Control Datapath Memory 000000 00000 00101 0001000010000000 000000 00100 00010 0001000000100000 100011 00010 01111 0000000000000000 100011 00010 10000 0000000000000100 101011 00010 10000 0000000000000000 101011 00010 01111 0000000000000100 000000 11111 00000 0000000000001000 Devices Input Output 12
Esecuzione di un programma FETCH : Il processore preleva l istruzione Processor (CPU) Control Datapath Memory 000000 00000 00101 0001000010000000 000000 00100 00010 0001000000100000 100011 00010 01111 0000000000000000 100011 00010 10000 0000000000000100 101011 00010 10000 0000000000000000 101011 00010 01111 0000000000000100 000000 11111 00000 0000000000001000 Devices Input Output 13
Esecuzione di un programma DECODE : La CPU decodifica le istruzioni Control Datapath Processor (CPU) 000000 00100 00010 0001000000100000 Memory Devices Input Output 14
Esecuzione di un programma EXEC : La CPU esegue l istruzione, eventualmente interagendo con la memoria per caricare operandi e registrare risultati Control Datapath Processor (CPU) 000000 00100 00010 0001000000100000 contents Reg #4 ADD contents Reg #2 results put in Reg #2 Memory Devices Input Output 15
Esecuzione di un programma Fetch Exec Decode 16
Esecuzione di un programma Quando il programma termina, i risultati vengono inviati al dispositivo di output Processor Memory Devices Control Input Datapath 00000100010100000000000000000000 00000000010011110000000000000100 00000011111000000000000000001000 Output 00000100010100000000000000000000 00000000010011110000000000000100 00000011111000000000000000001000 17