15/10/2015 Fondamenti di Informatica Antonio Camurri [email protected] Fondamenti di Informatica Modulo 1: Introduzione ai calcolatori Modulo 2: Codifica della informazione Modulo 3: Sistemi informatici multimediali Modulo 1 Introduzione ai calcolatori 1 15/10/2015 Calcolatore, Sistema di elaborazione delle informazioni, Computer Per iniziare a comprendere la struttura di un calcolatore, proviamo a immaginare un essere umano come una “macchina” in grado di ricevere, elaborare e produrre informazioni e azioni. Nel 1983 i ricercatori Card, Moran e Newell hanno proposto un modello di processore umano (Human Processor Model): Il loro scopo era studiare la Interazione Uomo-Macchina (Human-Computer Interaction), una delle principali discipline della Informatica. Approfondimento su Human-Computer Interaction: Dix, Finlay, Abowd, Beale (2004) “Interazione uomo-macchina”, McGraw-Hill Modello di processore umano (Human Processor Model) Card, Moran, Newell, The psychology of human-computer interaction, 1983 Modello di un essere umano come sistema di elaborazione delle informazioni: il modello di processore umano è una rappresentazione semplificata che descrive le dinamiche di elaborazione da parte dell'uomo quando si trova ad interagire con il computer. Modello di processore umano (Human Processor Model) sistema percettivo, elabora lo stimolo sensoriale proveniente dall'esterno; sistema motorio, gestisce e controlla le azioni sistema cognitivo, fornisce il procedimento necessario di elaborazione degli stimoli ricevuti attraverso i sensi per produrre risultati e azioni 2 15/10/2015 1. Struttura del calcolatore Che cosa è un computer? A prescindere dalle dimensioni e dal luogo in cui si trova, può essere definito come un elaboratore elettronico digitale • elaboratore in grado di immagazzinare ed elaborare dati in base ad una serie di istruzioni (il programma) • elettronico evidentemente utilizza componenti elettronici.. :-) • digitale elabora informazioni convertendole in segnali digitali basati sul sistema binario Che cosa è un computer? Il computer è uno strumento estremamente versatile: - Utilizzato in moltissimi campi: applicazioni industriali, in azienda, in casa, nella vita di tutti i giorni, negli ospedali, nella didattica, nelle arti e nella musica, nel gioco e nel tempo libero. - Impatto nella società - I costruttori hanno differenziato varie categorie di computer, ognuna adatta a rispondere a determinate esigenze 3 15/10/2015 Computer: tipologie • supercomputer Elevatissima capacità di elaborazione; calcolo parallelo; singole applicazioni • mainframe • minicomputer • personal computer • network computer • terminali Computer: tipologie • supercomputer • mainframe Funzioni centralizzate di elaborazione dati; grande numero di utenti (es. grandi aziende, servizi) • minicomputer • personal computer • network computer • terminali Computer: tipologie • supercomputer • mainframe • minicomputer Anni ‘60: primi elaboratori dal costo abbastanza ridotto da essere comprati da piccole aziende e organizzazioni • personal computer • network computer • terminali 4 15/10/2015 Computer: tipologie • supercomputer • mainframe • minicomputer • personal computer Utilizzo individuale: • desktop (da scrivania) • workstation (professionale) • notebook (portatile) • tascabili, palmari (dimensioni ridotte, funzioni ridotte) • network computer • terminali Computer: tipologie • supercomputer • mainframe • minicomputer • personal computer • network computer • terminali Terminali con capacità di calcolo e spesso anche di immagazzinamento dati Computer: tipologie • supercomputer • mainframe • minicomputer • personal computer • network computer • terminali Terminali “stupidi”, nessuna potenza di calcolo, sfruttano quella di un server cui si collegano. Server: computer che fornisce servizi di elaborazione dati ad altri computer, di solito meno potenti (client) 5 15/10/2015 Dimensione Capacità Costo • • • • • • • • Supercomputer Mainframe Mini-computer Workstation Personal Computer Notebook Network Computer Tablet, Smartphone Facilità d’uso Genericità Wearable, Pervasive, Disappearing, Ubiquitous, Mobile Computing • Riduzione di dimensioni, miniaturizzazione • Crescita delle capacità computazionali • Sviluppo di sensoristica • Sviluppo di reti informatiche wireless veloci • Riduzione dei costi Il computer è impiegato in modo capillare in moltissimi settori e nella vita quotidiana: - Trasporti (automobili, ad es ABS, computer di bordo) Supporto nel lavoro (ad es CAD, accesso a web da sistemi mobili) Social media Giochi, musica Elettrodomestici (smart home, domotica) Salute (terapia e riabilitazione) Nuove professioni e opportunità Nuovi problemi: etici, sicurezza, privacy, cyber-criminalità Struttura di un computer CPU Memoria primaria Memoria secondaria Dispositivi I/O Bus 6 15/10/2015 La CPU CPU Memoria primaria Memoria secondaria Dispositivi I/O Bus La CPU • Unità centrale di elaborazione (Central Processing Unit): un insieme di circuiti, detto microprocessore, che controlla l’attività del computer. • Il clock di una CPU, misurato in MHz o in GHz (ad esempio 2 GHz), è la frequenza con cui vengono eseguite le istruzioni elementari. • Compito della CPU è quello di leggere istruzioni e dati dalla memoria e di decodificare ed eseguire le istruzioni; il risultato dell’esecuzione di una istruzione dipende dal dato su cui opera e dallo stato interno della CPU stessa. • Esempi di CPU: Intel Core i3, i5, i7, AMD Athlon II, ... La CPU AMD Athlon II Intel Core i7 7 15/10/2015 Struttura della CPU Registri Unità di controllo Unità Logico Aritmetica Struttura della CPU L’unità centrale di elaborazione è costituita da: • un insieme di registri che sono degli spazi di memorizzazione accessibili ad una velocità superiore di quella della memoria principale; • una unità logico aritmetica (ALU) che esegue operazioni aritmetiche, logiche e confronti sui dati della memoria principale o dei registri; • una unità di controllo che esegue le istruzioni secondo quello che viene detto ciclo di accesso-decodifica-esecuzione. Ciclo Accesso, Decodifica, Esecuzione Si tratta di una sequenza di passi nella quale: 1. Si accede all’istruzione successiva portandola dalla memoria nell’apposito registro istruzione 2. Si decodifica il tipo dell’istruzione 3. Si individuano i dati usati dall’istruzione, che vengono portati negli opportuni registri 4. Si esegue l’istruzione 8 15/10/2015 La CPU:prestazioni Esistono diversi criteri per valutare la performance di un processore. Sono tutti più o meno discussi o discutibili. • Frequenza di clock (MHz o GHz) • Mips (millions instructions per second) • Flops (floating-point operations per second) • SPEC (Standard Performance Evaluation Corporation) real-world benchmarks • … La memoria CPU Memoria primaria Memoria secondaria Dispositivi I/O Bus Memorie: una gerarchia La memoria di un computer è organizzata in maniera gerarchica, in base alla velocità di accesso. Memorie più veloci sono anche più costose. • Memoria cache: molto veloce, piccole dimensioni, costosa • Memoria principale (primaria): veloce, medie dimensioni, accessibile • Memoria secondaria: lenta, notevoli dimensioni, economica 9 15/10/2015 La memoria cache • Memoria piccola, ma molto veloce, intermedia tra memoria primaria e CPU • I dati di uso più frequente sono mantenuti nella memoria cache per minimizzare i trasferimenti tra memoria primaria e CPU • Ci sono due tipi di memorie cache: – Cache interna al processore (~256KB) – Cache esterna al processore (~2MB) La memoria principale La memoria principale o primaria è quella cui ci si riferisce solitamente parlando di “memoria”. La memoria principale • La memoria principale è costituita da memoria di tipo RAM (Random Access Memory), che consente un rapido accesso ai suoi dati. • Una RAM consente l’accesso ai dati in essa contenuti senza dover rispettare un determinato ordine e con lo stesso tempo di accesso. • La memoria principale è una memoria volatile: allo spegnimento del computer i dati in essa contenuti vanno persi. 10 15/10/2015 Tipi di RAM • DRAM (Dynamic RAM): il tipo più diffuso, • altamente volatile, deve essere aggiornata continuamente, economica SRAM (Static RAM): può mantenere i dati finché è alimentata, molto più veloce e costosa della DRAM, viene utilizzata per realizzare la memoria cache La memoria principale • La memoria principale contiene il codice del programma in esecuzione e i dati che questo usa. • Codice e dati sono contenuti in un insieme di celle identificate da un indirizzo univoco, che ne consente l’individuazione. • Dato un indirizzo di memoria, le operazioni effettuabili sono: – lettura del contenuto della cella corrispondente e suo trasferimento verso il bus – scrittura del contenuto proveniente dal bus nella corrispondente cella di memoria Indirizzamento di memoria • Ogni cella della memoria è identificata da un numero, chiamato indirizzo di memoria. • In questo modo ogni dato all’interno della memoria presenta una precisa collocazione, ed è pertanto possibile recuperarlo, o decidere dove memorizzarlo, indicandone l’indirizzo. • Lo spazio di indirizzamento indica il massimo indirizzo di memoria rappresentabile. Indirizzi .. .. 34342 34343 34344 34345 34346 34347 34348 34349 .. .. Memoria 5 34 234 43 32 234 112 22 4 22 54 125 11 15/10/2015 Bit • All’interno della memoria e, in generale, del calcolatore l’informazione è rappresentata come sequenze di bit. • Il bit è l’unità elementare dell'informazione trattata da un elaboratore. • La rappresentazione logica del bit è costituita dai soli valori {0, 1}. • L’adozione della rappresentazione binaria si deve alla semplicità di realizzare fisicamente un elemento con due stati anziché un numero superiore, ed anche alla corrispondenza diretta con i valori logici vero e falso. Byte • Sequenze di bit sono raggruppate in entità più vaste, che contengono generalmente un numero di bit pari ad una potenza binaria, pari cioè a 2n; • Il più noto di tali raggruppamenti è il byte (chiamato anche ottetto), corrispondente ad 8 bit, che costituisce l’unità di misura più utilizzata in campo informatico. • Ad esempio le dimensioni della memoria si misurano in multipli del byte. • Una cella di memoria contiene una sequenza di byte, ad esempio quattro, detta parola (word). Multipli del byte e del bit Multipli del byte: Nome Kilobyte Megabyte Gigabyte Terabyte Simbolo kB MB GB TB Multiplo 103 106 109 1012 Multipli del bit: I più usati sono Kilobit e Megabit As esempio per definire la velocità di una connessione internet: 4Mbit/s significa una linea che riesce a comunicare fino a 4 megabit (4 milioni di bit) al secondo. 12 15/10/2015 Dimensioni della memoria • Le dimensioni della memoria principale variano a seconda del tipo di computer • Nei PC attuali le dimensioni tipiche della memoria principale vanno da 1 GB a 16 GB. Dimensioni dello spazio di indirizzamento • Nei computer attuali gli indirizzi di memoria sono rappresentati con almeno 32 bit, con cui si possono indirizzare 232 byte (circa 4 GB) • Lo spazio di indirizzamento è pertanto generalmente maggiore della memoria fisica realmente esistente nel computer. Tempi di accesso • Un’importante caratteristica della memoria è il suo tempo di accesso (tempo necessario per leggere o scrivere una parola) • Le memorie principali dei computer attuali sono molto veloci e i loro tempi di accesso sono di pochi nanosecondi (= 10-9 sec, un miliardesimo di secondo) 13 15/10/2015 Riassunto delle caratteristiche della memoria RAM La memoria RAM è: – ad accesso diretto (si può accedere a qualsiasi cella senza accedere alle altre) – veloce (accesso nell’ordine dei nanosecondi) – relativamente costosa – di dimensioni limitate – volatile (non può mantenere dati permanenti) Memorie ROM • La ROM (Read Only Memory) è un tipo di memoria che consente solamente l’operazione di lettura dei dati, poiché il suo contenuto viene permanentemente definito in fase di costruzione della memoria stessa. • È di tipo non volatile quindi il suo contenuto non viene perso se viene a mancare l'alimentazione. Tipi di ROM • PROM (Programmable Read Only Memory): ROM programmabili dall’utente una sola volta; • EPROM (Erasable Programmable Read Only Memory): programmabili dall’utente e cancellabili mediante esposizione ai raggi UV; • EAROM (Electrically Alterable Read Only Memory): ROM programmabili dall’utente e cancellabili elettricamente mediante tensioni più elevate rispetto a quelle di funzionamento normale; • EEPROM (Electrically Erasable Programmable Read Only Memory dette anche flash): stesso funzionamento delle EAROM, ma migliori. 14 15/10/2015 Tipi di ROM • Soltanto le vecchie ROM sono veramente di sola lettura. • Le flash ROM, aggiornabili via software, sono quelle di uso corrente. • Oltre che nei computer, le flash ROM sono molto usate nelle fotocamere digitali, nei lettori di musica portatili, nei telefoni cellulari, nei pendrive. BIOS • Tutti i computer contengono un chip di memoria elettronica non volatile e non modificabile (ROM). • Contiene un programma (detto Basic Input Output System, BIOS) per l’avviamento del computer e per altre operazioni fondamentali. La memoria secondaria • La memoria secondaria (o memoria di massa) è costituita da uno o più dispositivi capaci di contenere molti più dati della memoria principale, a discapito della velocità. • I dati contenuti nella memoria secondaria sono conservati in maniera permanente anche quando il computer viene spento. • Esempi di dispositivi di memoria secondaria sono: i dischi rigidi (hard disk), i dischetti (floppy disk), i CD e i DVD. 15 15/10/2015 La memoria secondaria Criteri per distinguere tra differenti tipologie di memorie secondaria: • Tecnologia impiegata • Capacità di memorizzazione • Velocità di accesso ai dati I dischi rigidi (hard disk) • Tecnologia impiegata: magnetica • Capacità di memorizzazione: fino a ~ 1 TB • Velocità di accesso ai dati: alta, nell’ordine delle decine di ms Utilizzo dei dischi rigidi Prima che un disco possa essere utilizzato per immagazzinare dati, sono necessari tre passaggi: • formattazione a basso livello • divisione in partizioni • formattazione ad alto livello 16 15/10/2015 Formattazione a basso livello • La formattazione a basso livello divide la superficie del disco in cerchi concentrici chiamati tracce. • Ciascuna traccia viene a sua volta suddivisa in segmenti chiamati settori. • Un settore costituisce lo spazio minimo di memorizzazione di un disco. • Di norma, la formattazione a basso livello viene effettuata una sola volta, in fabbrica. Struttura dei dischi Settori Tracce e cilindri Partizionamento • Il partizionamento divide il disco fisico in volumi logici. E’ un’operazione necessaria anche se si intende usare un unico volume. • Nei sistemi operativi Microsoft, ciascun volume viene identificato da una lettera dell’alfabeto (C:\, D:\, ecc.). 17 15/10/2015 Formattazione ad alto livello • Questo tipo di formattazione può essere eseguita dall’utente. • Spesso si esegue prima dell’installazione di un sistema operativo: la formattazione ad alto livello consiste infatti nella creazione delle strutture del file system specifico di un sistema operativo. • La formattazione tuttavia cancella l’indice dei file contenuti nel disco. Ai fini pratici, equivale a cancellare il contenuto del disco. Compact Disk (CD) • Tecnologia impiegata: ottica • Capacità di memorizzazione: tipicamente 650 MB • Velocità di accesso ai dati: misurata a multipli di 0.15 MB/s (1x). Ad esempio, 40x corrisponde a 6 MB/s. Digital Versatile Disk (DVD) • Tecnologia impiegata: ottica • Capacità di memorizzazione: da 4.7 a 17 GB • Velocità di accesso ai dati: misurata a multipli di 1.35 MB/s (1x), nove volte maggiore rispetto a un CD. 18 15/10/2015 Blu-ray Disk (BD) • Tecnologia impiegata: ottica • Capacità di memorizzazione: da 25 GB fino a 128 GB • Velocità di accesso ai dati: misurata a multipli di 4.5 MB/s (1x), fino a 54 MB/s. Unità a stato solido (SSD) • Tecnologia impiegata: elettrica • Capacità di memorizzazione: fino a 2 TB (2011) • Velocità di accesso ai dati: da 100 a 600 MB/s. • Al momento più costose degli Hard Disk. Il bus CPU Memoria primaria Memoria secondaria Dispositivi I/O Bus 19 15/10/2015 Il bus • Un bus è un canale attraverso il quale due o più dispositivi si scambiano informazioni. • Senza questo sistema, ogni componente del computer dovrebbe possedere un collegamento fisico distinto verso ognuno degli altri dispositivi (cosiddetti collegamenti punto-punto). • A differenza dei collegamenti punto-punto, il bus consente una maggiore configurabilità. • Il clock di un bus esprime la velocità con cui vengono scambiati i dati. Il bus Memorie Monitor Disco BUS CPU Il bus All’interno di un computer esistono più bus dati che rendono possibile il transito di quest’ultimi dalle periferiche alla memoria, dalla memoria ai processori, dai processori alle periferiche, dall’unità di controllo all’unità aritmetico logica, ecc. CPU RAM ROM PCI AGP SCSI USB 20 15/10/2015 Bus: una gerarchia • Bus del processore: il più veloce. • Bus della cache: in certe architetture, la cache è connessa ad un bus separato; altrimenti è connessa al bus della memoria. • Bus della memoria: collega la memoria centrale al processore. • Bus per l’input-output locale: schede video, schede di rete, memoria di massa. • Bus input-output standard: vecchio e lento, vi si possono trovare collegate schede audio e modem interni. Dispositivi di I/O CPU Memoria primaria Memoria secondaria Dispositivi I/O Bus Dispositivi di I/O • Sono tutti quegli apparati che servono per il trasferimento di dati fra il computer e il mondo esterno • Esempi di dispositivi di input (ingresso): tastiera, mouse, microfono, webcam, scanner, … • Esempi di dispositivi di output (uscita): monitor, stampante, altoparlanti, … • Esempi di dispositivi sia di input che di output: modem, scheda di rete, … 21 15/10/2015 Dispositivi di I/O • Molti dispositivi di I/O sono collegati al computer dall'esterno attraverso le cosiddette porte di I/O. • Tipiche porte di I/O sono la porta parallela, la porta seriale, la porta di rete, ecc. • Talvolta alcuni possono essere inseriti all'interno del computer stesso come schede. Porte di I/O Esempio di scheda: scheda audio 22 15/10/2015 Altri dispositivi di I/O Data gloves Head-Mounted Display (HMD) Computer Aided Virtual Environment (CAVE) Oltre i calcolatori tradizionali… Simulatori Applicazioni mediche Applicazioni per musei Oltre i calcolatori tradizionali… Arti performative teatro ICT per fruizione attiva di contenuti culturali www.casapaganini.org www.youtube.com/InfoMusLab Terapia e riabilitaizone 23 15/10/2015 Esempio: dentro un case Il case (o cabinet) è il contenitore, l’involucro in cui vengono montati i vari componenti di cui è composto un personal computer Silicon Graphics O2 PowerMac G4 La facilità di accesso alla parte interna può variare molto. Nei PowerMac è sufficiente manovrare una leva La forma del case può essere dettata, oltre che da motivi pratici, anche da considerazioni estetiche. Il parallelepipedo grigio non è d’obbligo! Case generico per PC Esempio: dentro un case Parte anteriore Alloggiamenti dischi Vista laterale Parte posteriore Scheda madre Alimentazione Esempio: dentro un case • • • • CPU RAM BIOS Controller integrati • SLOT per controller aggiuntivi porta parallela porta USB slot PCI slot AGP IDE floppy 24 15/10/2015 La scheda madre La scheda madre (motherboard) svolge funzioni di integrazione e comunicazione tra tutti i componenti del computer. Dalla scheda madre dipendono: • Organizzazione (forma e design) • Supporto per il processore • Supporto per le periferiche (numero e tipo di alloggiamenti) • Prestazioni (indirettamente e direttamente, attraverso il chipset) • Possibilità di aggiornamenti/espansioni Il clock della scheda madre • Componenti diversi del computer sono sincronizzati in base a clock diversi. • Sulla scheda madre esiste un circuito che genera il clock principale; un “tick” di questo clock rappresenta la più piccola unità di tempo durante la quale può venire eseguita un’elaborazione di qualche tipo. • Il clock principale è usato come base da altri circuiti (ad esempio la CPU) che ne generano multipli o sottomultipli, per regolare le operazioni di dispositivi più veloci o più lenti. Esempio: saper leggere la configurazione di un PC 25 15/10/2015 Il sistema operativo • Il sistema operativo è un programma che agisce da intermediario fra l’utente e l’hardware dell’elaboratore. • E’ responsabile del diretto controllo e della gestione efficiente dell’hardware dell’elaboratore. • Fornisce un ambiente nel quale l’utente è in grado di eseguire i programmi. Il sistema operativo • Principali funzioni di un sistema operativo: - Gestione dei processi - Gestione della memoria - Gestione del file system - Gestione dell’input/output da periferiche • Esempi di sistemi operativi: Windows, Linux. 2. Codifica dell’informazione 26 15/10/2015 Codifica • Una codifica è una regola per associare in modo univoco i valori di un dato da codificare con sequenze di simboli. • La corrispondenza definita dalla codifica è arbitraria, è una convenzione. • Essa deve pertanto essere nota e rispettata da chi genera e da chi utilizza i dati. • A tale scopo vengono definiti degli standard. Codifica binaria • In un calcolatore i dati sono rappresentati in forma binaria con sequenze di bit, ovvero sequenze di due soli simboli: 0 e 1. • Bisogna perciò poter associare univocamente ad ogni dato elementare (numeri, caratteri, …) una sequenza di bit che lo rappresenti. Codifica binaria • Alfabeto (insieme dei simboli utilizzabili) costituito da cifre 0 e 1. • Con N cifre binarie si possono codificare 2N configurazioni diverse e pertanto si possono rappresentare al più 2N valori distinti. • Per rappresentare M valori distinti sono necessarie N = log2M cifre binarie. 27 15/10/2015 Codifica binaria: esempi • Con 4 cifre binarie posso rappresentare 24 = 16 valori distinti. • Per rappresentare i 7 giorni della settimana, occorrono N = log27 = 3 cifre binarie. • Una possibile codifica è ad esempio: Lunedì 000 Venerdì 100 Martedì 001 Sabato 101 Mercoledì 010 Domenica 110 Giovedì 011 Codifica binaria dei numeri • Distinguiamo la rappresentazione per: – numeri naturali (interi positivi) – numeri interi con segno – numeri reali Numeri interi positivi • La codifica si basa sulla notazione posizionale o “pesata” adottata usualmente per i numeri codificati in decimale. • Nella notazione posizionale il valore numerico rappresentato da una cifra dipende dal valore della cifra e dalla sua posizione nel numero. • Data una base B, le cifre ck possono assumere i valori da 0 a B - 1. 28 15/10/2015 Numeri interi positivi • In notazione posizionale un numero X di N cifre si può esprimere in base B come somma di potenze della base B: • Ad esempio 132810 = 1 103 + 3 102 + 2 101 + 8 100 3568 = 3 82 + 5 81 + 6 80 = = 192 + 40 + 6 = 23810 Numeri interi positivi • Nel caso binario (base B = 2), una sequenza di bit bn-1...b1b0 rappresenta il numero: n 1 b 2 i 0 i i 2 n 1 bn 1 ... 4 b2 2 b1 b0 • Dati n bit è possibile rappresentare numeri da 0 a 2n-1 • Esempio (con 8 bit): 00001001 rappresenta il numero 9: 1*23+1*20 = 8 + 1 = 9 Esempio • Rappresentazione a 4 bit dei numeri interi positivi tra 0 e 15: Base 10 Base 2 Base 10 Base 2 0 0000 8 1000 1 0001 9 1001 2 0010 10 1010 3 0011 11 1011 4 0100 12 1100 5 0101 13 1101 6 0110 14 1110 7 0111 15 1111 29 15/10/2015 Codifica dei caratteri Qualunque codifica deve soddisfare: • 'a' < 'b' < ... < 'z' • 'A' < 'B' < ... < 'Z' • '0' < '1' < ... < '9' • Continuità dei codici delle successioni – 'a', 'b', ..., 'z' – 'A', 'B', ..., 'Z' – '0', '1', ..., '9' Nota: non è fissa la relazione tra maiuscole e minuscole o fra i caratteri non alfabetici Codifica dei caratteri • Codifica ASCII (American Standard Code for Information Interchange) – Comprende caratteri speciali, punteggiatura, a-z, A-Z, 0-9 – Utilizza 7 bit (128 caratteri) – I codici ASCII estesi usano 8 bit (256 caratteri) • Codifica UNICODE – Utilizza 16 bit (65536 caratteri) – I primi 128 caratteri sono gli stessi di ASCII – Gli altri corrispondono ad altri alfabeti (greco, cirillico,…) – Non copre i simboli (oltre 200.000) di tutte le lingue! Esempio: Codifica ASCII 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 NUL| 1 ^H | 9 ^P | 17 ^X | 25 SP | 33 ( | 41 0 | 49 8 | 57 @ | 65 H | 73 P | 81 X | 89 ` | 97 h |105 p |113 x |121 ^A ^I ^Q ^Y ! ) 1 9 A I Q Y a i q y | 2 | 10 | 18 | 26 | 34 | 42 | 50 | 58 | 66 | 74 | 82 | 90 | 98 |106 |114 |122 ^B ^J ^R ^Z " * 2 : B J R Z b j r z | 3 | 11 | 19 | 27 | 35 | 43 | 51 | 59 | 67 | 75 | 83 | 91 | 99 |107 |115 |123 ^C ^K ^S ^[ # + 3 ; C K S [ c k s { | 4 | 12 | 20 | 28 | 36 | 44 | 52 | 60 | 68 | 76 | 84 | 92 |100 |108 |116 |124 ^D ^L ^T ^\ $ , 4 < D L T \ d l t | | 5 | 13 | 21 | 29 | 37 | 45 | 53 | 61 | 69 | 77 | 85 | 93 |101 |109 |117 |125 ^E ^M ^U ^] % 5 = E M U ] e m u } | 6 | 14 | 22 | 30 | 38 | 46 | 54 | 62 | 70 | 78 | 86 | 94 |102 |110 |118 |126 ^F ^N ^V ^^ & . 6 > F N V ^ f n v ~ | 7 | 15 | 23 | 31 | 39 | 47 | 55 | 63 | 71 | 79 | 87 | 95 |103 |111 |119 |127 ^G ^O ^W ^' / 7 ? G O W _ g o w DEL 30 15/10/2015 Codifica esadecimale • La rappresentazione esadecimale consente di esprimere lunghe sequenze binarie in modo più compatto. • Ogni gruppo di 4 bit può infatti essere direttamente convertito nella corrispondente cifra esadecimale. • Parole di 16 o di 32 bit possono così essere espresse in modo più conveniente rispettivamente con 4 e 8 cifre esadecimali. Codifica esadecimale • Alfabeto costituito da 16 simboli. • Esempio: rappresentazione esadecimale dei numeri interi positivi tra 0 e 15: Base 10 Base 16 Base 10 Base 16 0 0 8 8 1 1 9 9 2 2 10 A 3 3 11 B 4 4 12 C 5 5 13 D 6 6 14 E 7 7 15 F Esempio • La rappresentazione esadecimale della parola di 16 bit 0110 1100 0011 1010 è 6C3A. • La rappresentazione esadecimale della parola di 32 bit 1110 0010 0001 1111 1101 1011 0000 0101 è E21FDB05 • Quando nello scrivere un programma occorre specificare i dati in forma binaria, spesso si usa la rappresentazione esadecimale. 31 15/10/2015 Software • Informalmente un programma può essere definito come una serie di operazioni elementari, eseguite in sequenza, che trasformano un insieme di dati di ingresso (input) in un insieme di dati di uscita (output). • L’insieme dei programmi e dei dati presenti su di un calcolatore ne costituiscono il software. Programmazione • La programmazione è l’attività di progettare e sviluppare programmi per un calcolatore. • Informalmente, è come se il programmatore “insegnasse” al calcolatore come svolgere un determinato compito. • Scopo della scrittura di un programma è la risoluzione automatica di un problema. • Il risultato della programmazione è un programma scritto in un linguaggio di programmazione. Progetto software • Di solito comporta i seguenti passi: – Formulare il problema (specifica dei requisiti) – Capire il problema e scomporlo in parti gestibili (analisi ) – Progettare una soluzione (algoritmo) – Implementare la soluzione (scrittura del codice) – Testare la soluzione e correggere eventuali errori (verifica, testing e debugging) – Tenere aggiornato il programma (manutenzione) 32 15/10/2015 Algoritmo • Un algoritmo per la risoluzione di un problema è una sequenza di passi discreti – di lunghezza finita – deterministici – ripetibili che producono la soluzione del problema. • Esempio: procedimenti per calcolare il risultato di espressioni aritmetiche o algebriche. Proprietà fondamentali degli algoritmi Proprietà necessarie, senza le quali un algoritmo non può essere definito tale: • i passi costituenti devono essere "elementari", ovvero non ulteriormente scomponibili (atomicità); • i passi costituenti devono essere interpretabili in modo diretto e univoco dall'esecutore, sia esso umano o artificiale (non ambiguità); • l'algoritmo deve essere composto da un numero finito di passi e richiedere una quantità finita di dati in ingresso (finitezza) • l'esecuzione deve avere termine dopo un tempo finito (terminazione); • l'esecuzione deve portare a un risultato univoco (effettività). Algoritmi: proprietà «rompere le uova» può essere considerato legittimamente un passo elementare di un «algoritmo per la cucina» (ricetta), ma non potrebbe esserlo anche «aggiungere sale quanto basta», dato che l'espressione «quanto basta» è ambigua, e non indica con precisione quali passaggi servano per determinare la quantità necessaria. Un passo come «preparare un pentolino di crema pasticcera» non può considerarsi legittimo perché ulteriormente scomponibile in sotto-operazioni (accendere il fuoco, regolare la fiamma, mettere il pentolino sul fornello, ecc.) e anche perché contenente ambiguità (non specifica quanto grande deve essere il pentolino, quanto deve essere riempito di crema e così via). Al contrario, «continuare a mescolare a fuoco vivo fino a quando il composto non assume colore bruno» è un'istruzione accettabile di tipo iterativo, che comporta un numero finito di operazioni (le rimestate) sebbene tale numero non sia conoscibile a priori, perché dipendente da ciò che è chiamato input (il grado di umidità della farina nel composto, il vigore della fiamma, ecc.). All'istruzione non elementare di preparazione della crema potrebbe, però, essere associato a un opportuno rimando a un'altra sezione del ricettario, che fornisca un sotto-algoritmo apposito per questa specifica operazione. Questo suggerisce che, per comodità d'implementazione, gli algoritmi possano essere modulari, ovvero orientati a risolvere specifici sotto-problemi, e gerarchicamente organizzati. Inoltre, una ricetta che preveda la cottura a microonde non può essere preparata da un esecutore sprovvisto dell'apposito elettrodomestico; questo rimanda al problema della realizzabilità degli algoritmi, ovvero della loro compatibilità con le risorse materiali e temporali a disposizione. Infine, possono esistere più algoritmi validi per risolvere uno stesso problema, ma ognuno con un diverso grado di efficienza. 33 15/10/2015 Algoritmi: generalità Algoritmo = «procedimento di risoluzione di un problema». In questo contesto, i «problemi» sono caratterizzati da dati di ingresso (input) variabili, su cui l'algoritmo opererà per giungere alla soluzione. Esempio di «problema»: calcolo del massimo comune divisore fra due numeri; i dati di ingresso, variabili di volta in volta, sono i due numeri in questione. Questo potrebbe apparire come una «famiglia di problemi»: il problema di calcolare il massimo comune divisore fra 10 e 15, il problema di calcolarlo fra 40 e 60, fra 35 e 95, ecc. Nella informatica si identificano con la parola «problema» l'intera famiglia e con «istanza» ciascuno dei quesiti specifici ottenuti fissando due particolari valori. Data questa premessa, un algoritmo risolve un problema se per qualunque istanza del problema esso produce in un tempo finito la soluzione desiderata, ovvero un certo risultato o dato in uscita (output). Algoritmi: generalità Se questa idea aveva già una certa importanza per il calcolo matematico, l'avvento dell'informatica l'ha arricchita di una nuova importanza, ed è infatti con l'informatica che il termine «algoritmo» ha iniziato a diffondersi. Difatti, se per ottenere un certo risultato (risolvere un certo problema) esiste un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e conduce sempre all'obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito a un computer, semplicemente introducendo l'algoritmo in questione in un programma scritto in un opportuno linguaggio comprensibile al calcolatore. Linguaggi per descrivere algoritmi Un algoritmo viene tipicamente descritto attraverso diagramma di flusso (flowchart) o ricorrendo a uno pseudocodice. Il teorema di Böhm-Jacopini afferma che qualunque algoritmo può essere implementato utilizzando tre sole strutture: - Sequenza - Selezione o Struttura condizionale - Ciclo o Iterazione 34 15/10/2015 Sequenza La sequenza è la normale elencazione di istruzioni perché vengano eseguite una di seguito all'altra nell'ordine in cui sono state scritte dal programmatore Sequenza: esempio Problema: Dato il valore di X letto da tastiera, calcolare: Y = 5 X + 3. 1. 2. 3. 4. Ricevo da tastiera il valore di X Moltiplico X per 5 (sia Z il risultato) Sommo 3 a Z (sia Y il risultato) Visualizzo su schermo Y L’algoritmo è costituito da una sequenza di 4 istruzioni. X, Y, Z sono le variabili: caselle di memoria dove memorizzo dati temporaneamente. Selezione o Struttura condizionale Selezione (o Struttura condizionale): struttura di controllo del flusso di esecuzione di un programma che determina, in base alla verifica di una condizione logica, quale fra due sequenze o blocchi di istruzioni eseguire 35 15/10/2015 Semplici esempi di algoritmi Problema: Dato il valore di X, calcolare la radice quadrata di X+5. 1. Ricevo da tastiera il valore di X 2. Sommo 5 a X (sia Y il risultato) 3a. se Y è positivo o nullo, calcolo la sua radice quadrata e la visualizzo 3b. se Y è negativo, visualizzo il messaggio «è impossibile calcolare la radice quadrata» 3a e 3b sono un esempio di selezione Y≥ 0 ? si no Ciclo o Iterazione Ciclo (o iterazione): blocco di istruzioni che vengono ripetutamente eseguite fino a che una certa condizione cambia di stato. Esempio: leggo da tastiera un numero, se è <0 ripeto la lettura, fino a quando il numero letto diventa >0. Calcolo quindi la sua radice quadrata. 1. do 2. 3. Ricevo da tastiera il valore di X while ( X > 0 ); calcola la radice quadrata di X (sia Y il risultato) visualizza Y su schermo Linguaggi di programmazione • Nella fase di programmazione, un algoritmo verrà tradotto in linguaggio di programmazione a opera di un programmatore dando vita al programma che sarà eseguito dal calcolatore, dopo un'ulteriore traduzione in linguaggio macchina. • Per scrivere il programma che realizza un algoritmo, il programmatore deve usare un linguaggio di programmazione. • Un algoritmo viene tradotto dal programmatore in un linguaggio di programmazione costituito, informalmente, da parole e simboli e da un insieme di regole per combinarli. • A differenza dei linguaggi naturali, le regole dei linguaggi di programmazione (linguaggi formali) sono rigide, per garantire l’assenza di ambiguità. 36 15/10/2015 Linguaggi di programmazione • Se il programma rispetta le regole del linguaggio, può essere tradotto (compilato) in linguaggio macchina, e quindi eseguito dal computer. • Il compilatore è il programma che traduce una serie di istruzioni scritte in un linguaggio di programmazione (codice sorgente) in linguaggio macchina (codice oggetto). • I linguaggi che seguono questo approccio si dicono linguaggi compilati. Linguaggi di programmazione • Altro approccio: linguaggi interpretati. • Un interprete è un programma che esegue altri programmi. • Un linguaggio interpretato è un linguaggio di programmazione le cui istruzioni vengono tradotte una per una in linguaggo macchina ed eseguite da un interprete. • L’esecuzione di programmi scritti in un linguaggio interpretato è di solito meno efficiente rispetto ai linguaggi compilati. • Nei linguaggi compilati il programma viene tradotto in linguaggio macchina una volta per tutte, nei linguaggi interpretati ogni istruzione viene ad ogni esecuzione tradotta in linguaggio macchina ed eseguita. 37