Richiami di informatica e programmazione
Il calcolatore E una macchina usata per Analizzare Elaborare Collezionare precisamente e velocemente una grande quantità di informazioni. Non è creativo Occorre fornirgli una lista precisa e finita di azioni da compiere, cioè un algoritmo
Dentro al calcolatore Hardware Software tutto ciò che nella macchina è strettamente fisico (parti elettroniche, circuitali, meccaniche, etc.) I dati (foto digitali, testi, ) Gli strumenti informatici che servono per elaborare i dati (visualizzatori di immagini, editor di testi, videogiochi )
La componente fondamentale dell hardware: il circuito
La componente fondamentale dell informazione: il bit C. E. Shannon (1916-2001) Ogni tipo di informazione (numeri, musica, immagini, testo, istruzioni ) può essere codificato come sequenza di 0 e 1. (A mathematical theory of communication, Bell System Technical Journal, 1948) Il bit (binary digit) è l unità di misura dell informazione
Unità di misura dell informazione Multipli del bit 8 bit = 1 byte 16 bit = 1 word 2 10 byte = 1 KB (circa 1000 byte) 2 20 byte = 1 MB (circa 1 milione di byte) 2 30 byte = 1 GB (circa 1 miliardo di byte) 2 40 byte = 1 TB (circa 1000 miliardi di byte)
La codifica dei dati e degli algoritmi
Codifica di dati: il testo Tabelle che, ad un determinato numero fanno corrispondere un simbolo alfanumerico. Codici: numeri binari da 1 a 127 (ASCII standard) da 128 a 255 (ASCII esteso) Nuovo standard: Unicode
Codice ASCII standard
Codice ASCII esteso
La codifica dei dati: le immagini Suddivisione dell immagine in pixel
Scala di grigi Ad ogni tono è associato un codice. 63=11111 11 12 34 23 34 34 12 13 34 11 12 34 56 56 57 58 0 13 61 60 0=00000
Immagini RGB
Immagini RGB 10 21 34 23 34 35 12 13 34 11 60 58 56 56 57 58 6 54 61 60 11 12 34 23 34 34 12 13 34 11 12 34 56 56 57 58 0 13 61 60 8 9 10 21 3 10 11 16 34 11 12 44 46 56 58 58 10 45 44 51
Codifica degli algoritmi: i programmi Anche le istruzioni, per essere comprese dal calcolatore, devono essere espresse come sequenze di numeri binari Per definizione, un programma è un algoritmo codificato E un entità statica (le istruzioni di un programma, una volta codificate, non sono più modificate)
Esecuzione dei programmi: i processi esecuzione delle istruzioni necessarie per produrre i risultati desiderati dall utente a partire dai dati forniti inizialmente Un programma durante la sua esecuzione viene detto processo E un entità dinamica (dipende per esempio dai dati forniti) Dati Calcolatore Risultati Programma
Struttura del calcolatore
Macchina di von Neumann
Macchina di von Neumann Memoria centrale: dispositivo in grado di immettere, conservare ed estrarre informazioni Contiene i programmi Contiene i dati necessari all esecuzione dei programmi CPU: contiene gli elementi circuitali necessari al funzionamento dell elaboratore. Esegue i programmi che risiedono nella memoria centrale in modo sequenziale Dispositivi di Input/Output: permettono la comunicazione e il trasferimento dei dati (monitor, stampanti,...).
Codifica binaria sia del contenuto che dell indirizzo La memoria Fisicamente è costituita da un insieme di elementi ciascuno dei quali può assumere due soli stati fisici rappresentabili dai simboli 0 e 1 (circuiti) individuati da un indirizzo ( etichetta ) 0 1 2 3 4 5 6 7 CPU 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Memoria
Osservazione Fissato un numero di cifre N, quale è il massimo numero intero in una certa base che possiamo rappresentare su N cifre? Base 10 Base 2 9 9 9 9 1 1 1 1
La memoria Indirizzo Memoria 0 1 Dimensione massima della memoria 2 3.... 2 N -1 Ampiezza della memoria
Dimensione della memoria Se N è il numero di cifre binarie disponibili per rappresentare un indirizzo, l intervallo di indirizzi utilizzabili su un calcolatore è [0..2 N-1 ] per un totale di 2 N celle di memoria. Tale valore è chiamato dimensione massima di memoria o spazio di indirizzamento di un calcolatore.
La memoria centrale è: Un insieme finito di locazioni (celle) di uguali dimensioni; Ogni cella consta di n bit; Ogni cella è caratterizzata da un indirizzo e dal contenuto; Mentre il bit è l unità fondamentale di informazione, la cella è l unità fondamentale di memoria; L informazione, che comprende sia i dati che i programmi, risiede nella memoria.
La CPU Unità logico-aritmetica (ALU Arithmetic and Logic Unit) E il sottosistema che esegue operazioni matematiche e logiche come l addizione, la sottrazione ed il confronto. E dotata di registri = locazioni dove memorizzare temporaneamente i dati e i risultati delle operazioni. Unità di controllo (UC) Realizza ogni funzione per reazione a un preciso comando (istruzione). La direzione dei compiti è formulata dall'utente mediante un programma, che risiede in memoria codificato in forma binaria
L Unità di Controllo L UC esegue in continuazione il ciclo dell istruzione: 1. Legge dalla memoria l istruzione da eseguire 2. Decodifica l istruzione (ovvero determina il da farsi) 3. Esegue l istruzione mandando il comando appropriato all ALU, alla memoria, e ai dispositivi di I/O Questi 3 passi vengono ripetuti di continuo finché si raggiunge l ultima istruzione del programma.
Istruzioni in linguaggio macchina Le istruzioni che possono essere decodificate ed eseguite dall' unità di controllo di un calcolatore codificate in forma binaria, detta anche linguaggio macchina. Le istruzioni in questo linguaggio hanno il formato: CODICE OPERATIVO CODICE DATO(o DATI)
Esempio: somma di due numeri Somma il dato nella cella di indirizzo 54 con quello nella cella di indirizzo 376 e memorizza il risultato nella cella 376 Carica il contenuto della cella 54 in un registro Carica il contenuto della cella 376 in un altro registro e somma il contenuto dei registri Sovrascrivi il risultato nella cella 376
Op. Code (8 bit) Operando (indirizzo a 16 bit) Significato 00101110 0000000000110110 Leggi cella 54 Memoria 00001001 0000000101111000 Carica e Somma cella 376 00010001 0000000101111000 Scrivi in cella 376 0 1 0 0 1 1 0 0 1 53 0 0 0 1 1 0 0 0 ALU 54 55 56 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 0 0 0 1 REGISTRI 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 + = 376 01 0 10 0 0 0 0 1 377 0 0 0 1 0 0 0 1
I programmi e la programmazione
Classificazione dei programmi SOFTWARE APPLICATIVO SOFTWARE DI SISTEMA FIRMWARE HARDWARE
Software di sistema: il sistema operativo Rende appropriatamente utilizzabili le risorse fisiche presenti in un sistema informatico. Comando 01010101 S.O. HW Risultato 01010101
Funzioni del SO Permette agli utenti di accedere alle funzionalità del sistema operativo mediante opportune parole-chiave o comandi. Consente all utente di attivare i programmi. Gestisce la memoria, la CPU e i dispositivi di I/O. Gestisce le operazioni di recupero, eliminazione, modifica, copia dei dati Organizzazione dei dati in files: contenitori logici individuati da un nome, a loro volta raggruppati in cartelle secondo una struttura ad albero
Programmi applicativi Word processing (WP): trattamento di testi, dalla battitura alla correzione, all impaginazione e alla stampa (MICROSOFT WORD) Foglio elettronico: elaborazione di dati, soprattutto di tipo numerico e loro organizzazione in tabelle e grafici (MICROSOFT EXCEL) Gestore di dati e archivi (database): archiviare e gestire informazioni in modo efficiente e razionale Pacchetti grafici ( Computer Aided Design CAD) Pacchetti applicativi aziendali: elaborazione fatture, gestione magazzino Librerie scientifiche matematiche e statistiche.
Programmazione Come si costruisce un programma? Tradurre un algoritmo in istruzioni eseguibili per il calcolatore, ossia in linguaggio macchina.
Programmazione in linguaggio macchina Occorre conoscere i codici operativi delle istruzioni e gli indirizzi dei dati in memoria. Il programmatore deve scrivere una sequenza di cifre binarie Inconvenienti I programmi in linguaggio macchina sono molto lunghi, poco leggibili, non portabili (ogni cpu ha un suo linguaggio) Devono essere noti gli indirizzi dei dati in memoria e i codici delle istruzioni Difficile modifica del programma Difficile localizzazione degli errori
Esempio: somma di due numeri Op. Code (8 bit) Operando (indirizzo a 16 bit) Significato 00101110 0000000000110110 Leggi 53 00001001 0000000101111000 Somma 376 00010001 0000000101111000 Scrivi in 376
Programmazione in assembly Il linguaggio assembly si basa sulla corrispondenza del codice operativo delle istruzioni a parole chiave e sulla possibilità di associare i dati a nomi simbolici (variabili) Esempio: somma di due numeri. LINGUAGGIO MACCHINA Significato LINGUAGGIO ASSEMBLY 00101110 0000000000110110 Leggi 53 LOAD X 00001001 0000000101111000 Somma 376 ADD Y 00010001 0000000101111000 Scrivi in 376 STORE Y
Programmazione in assembly Si suddivide in due fasi Sorgente LOAD, X ADD, Y STORE, Y Scrittura del file sorgente, ossia di un file di testo che contiene le parole chiave corrispondenti alle istruzioni dell algoritmo Fase di assemblaggio, ossia la traduzione del sorgente in linguaggio macchina che viene effettuata da un apposito programma, detto assembler, fornito dal costruttore Assemblatore Programma 001011100000000000110 110000010010000000101 111000000100010000000 101111000
Programmazione in assembly vantaggi: il programmatore può non conoscere gli indirizzi dei dati in memoria e i codici di rappresentazione delle istruzioni facile modifica del programma e localizzazione degli errori svantaggi: programma non portabile corrispondenza 1 a 1 tra istruzione in assembler e in linguaggio macchina
Programmazione in linguaggi evoluti Come l assemby si basano sull utilizzo di parole chiave, con le quali il programmatore scrive il codice sorgente. A differenza dell assembly, ad una istruzione di un linguaggio evoluto possono corrispondere più istruzioni in linguaggio macchina La traduzione in linguaggio macchina viene effettuata da un programma traduttore Esempio: somma di due numeri. Sorgente Y=X + Y Traduttore Programma 001011100000000000110 110000010010000000101 111000000100010000000 101111000
Linguaggi evoluti Vantaggi Programmi portabili Non è richiesta la conoscenza dell hardware del calcolatore o della rappresentazione delle istruzioni a livello macchina Linguaggi orientati alla natura del problema da risolvere Fortran: problemi scientifici Cobol: problemi gestionali Basic, Pascal, Logo: scopi didattici C: costruzione sistemi operativi, compilatori, interpreti Prolog: intelligenza artificiale
Programmazione in linguaggi evoluti Il programmatore deve conoscere la sintassi del linguaggio, ossia le parole chiave e la relativa modalità di utilizzo I linguaggi si suddividono in 2 categorie in base alle caratteristiche del traduttore linguaggi compilati linguaggi interpretati
Linguaggi compilati (Fortran, C,...) Fase di editing (scrittura del file sorgente) Fase di traduzione (compilazione) File sorgente Compilatore Programma Dati Fase di esecuzione Programma Risultati
Linguaggi interpretati (Matlab) File sorgente Dati Fase di traduzione ed esecuzione Interprete Segnalazione di eventuali errori Risultati