Parte 2 Software Considerazione... • Se l’utente inserisce dati e ottiene risultati significa che aveva un problema che qualcuno ha risolto per lui • Chi ha risolto il problema? Il computer? NO! Informatica - A.A. 2010/2011 - Software 2.1 1 …quindi… • Il problema è stato risolto da un essere umano che: – ha trovato la soluzione – ha “spiegato” la soluzione al computer • Il computer ha poi eseguito la soluzione in modo eccezionalmente veloce (se confrontato alla velocità umana) Il computer non risolve problemi, ma esegue velocemente le soluzioni che ha trovato l’uomo Informatica - A.A. 2010/2011 - Software 2.2 Algoritmi: come “trovare” soluzioni • Algoritmo Sequenza finita di mosse che risolve in un tempo finito un problema (o una classe di problemi) – E’ un metodo sistematico per risolvere un problema. Es. ♦ lo svolgimento di operazioni aritmetiche il processo di spedizione di una cartolina ♦ la ricerca di un numero telefonico ♦ il metodo per determinare quando il puntatore del mouse clicca su un pulsante virtuale ♦… ♦ – Gli algoritmi devono essere non ambigui, essere costituiti da un insieme finito di passi e terminare in un tempo finito – E’ l’uomo che risolve problemi (inventa algoritmi) Informatica - A.A. 2010/2011 - Software 2.3 2 Programmi: come “spiegare” al computer le soluzioni trovate • “Traduzione” di un algoritmo attraverso un insieme ordinato di frasi (“istruzioni”), descritte in un linguaggio di programmazione, che specificano le azioni da compiere in modo formale che sia interpretabile dal computer, il tutto allo scopo di risolvere un problema • L’azione di scrittura di programmi prende il nome di PROGRAMMAZIONE, CODIFICA o IMPLEMENTAZIONE • Quindi un PROGRAMMA è un testo scritto secondo la sintassi (alfabeto+regole grammaticali) e la semantica (significato da dare alle frasi) di un linguaggio di programmazione Informatica - A.A. 2010/2011 - Software 2.4 Elaborazione delle soluzioni: ciclo Fetch-Decode-Execute • L’esecuzione di ciascuna istruzione da parte della CPU consta dei seguenti passi: 1. Legge una istruzione dalla memoria centrale (Fetch) 2. Si predispone alla lettura della prossima istruzione 3. Decodifica l’istruzione (Decode) 4. Legge dalla memoria gli eventuali parametri (operandi) dell’istruzione 5. Esegue l’istruzione (Execute) 6. Torna al passo 1 per l’esecuzione dell’istruzione successiva Informatica - A.A. 2010/2011 - Software 2.5 3 Algoritmi e programmi sono diversi • La programmazione consiste nello scrivere i passi di un algoritmo in uno specifico linguaggio (es., Java, C, Fortran, …) • Esecuzione di un programma – per avviare un programma solitamente si può “cliccare” sulla sua icona (ad es., Word, Explorer, Firefox) – SI dice al computer di caricare il programma in memoria principale e di far eseguire il programma dalla CPU Informatica - A.A. 2010/2011 - Software 2.6 Cos’è il software? • “Il Software è un insieme di programmi che permettono ad un calcolatore di eseguire determinate funzionalità” • Un PROGRAMMA è un’entità statica (descritta in un dato LINGUAGGIO) che specifica: – l’insieme di istruzioni che il calcolatore deve eseguire – la sequenza in cui devono essere eseguite • Nel momento in cui un PROGRAMMA VIENE MANDATO IN ESECUZIONE, si ha l’attivazione di un PROCESSO • Il processo è l'entità utilizzata dal sistema operativo per rappresentare una specifica esecuzione di un programma. E’ quindi un'entità dinamica, che dipende dai dati che vengono elaborati, e dalle operazioni eseguite su di essi. Informatica - A.A. 2010/2011 - Software 2.7 4 I ruoli UTENTE Formulazione di un problema Individuazione di un algoritmo Metodo risolutivo (progetto) Programma (esecuzione) DATI Linguaggio di Programmazione (codifica) INFORMATICO (Sviluppo applicazioni) INFORMATICO (Tecnico) Informatica - A.A. 2010/2011 - Software 2.8 Sinonimi comunemente adottati • Programmi • Applicazioni • Servizi software • Anche se non sono proprio sinonimi, nell’uso comune sono considerati come tali • Hanno, in effetti, la comune caratteristica di essere implementazioni di algoritmi per computer Informatica - A.A. 2010/2011 - Software 2.9 5 Esecuzione di un programma • L'esecuzione delle azioni nell'ordine specificato dall'algoritmo consente di ottenere, a partire dai dati di ingresso, i risultati che risolvono il problema UTENTE Applicazioni DATI INPUT RISULTATI Sistema Operativo OUTPUT Hardware Computer Informatica - A.A. 2010/2011 - Software 2.10 Principali componenti software • Due grandi famiglie di software – Software di sistema: Sistema operativo – Software applicativo: Applicazioni Informatica - A.A. 2010/2011 - Software 2.11 6 Motivazioni • Qual è l’obiettivo di un sistema costituito da diversi “strati” (hardware, software di sistema, software applicativo) ben definiti e separati? Avere un sistema a livelli, dove lo strato superiore mascheri quello inferiore Perché? Qual è il vantaggio? Informatica - A.A. 2010/2011 - Software 2.12 Perché costruire un “sistema a livelli”? OBIETTIVO RIVOLTO AGLI “UTILIZZATORI” “Virtualizzazione” far apparire la realtà in modo diverso (tipicamente più semplice e/o più gradevole) L’hardware ha molte virtù (veloce, miniaturizzato), ma non è né semplice né gradevole! Quindi farlo risultare tale è un problema molto complesso per i progettisti informatici Quindi, un sistema a livelli (“modulare”) consente ai progettisti di semplificare la soluzione del problema complesso di progettare, realizzare e successivamente modificare un sistema informatico e renderlo facilmente utilizzabile da chiunque (o quasi …) Informatica - A.A. 2010/2011 - Software 2.13 7 Componenti di un Sistema di Elaborazione + Utente Hardware Software UTENTE … APPLICAZIONI Sistema Operativo ? Controller SCSI Controller Keyboard Controller Mouse Controller PCI Bus Controller Floppy Controller ATAPI SCSI Bus Tastiera Mouse PCI Bus Floppy CD-ROM Informatica - A.A. 2010/2011 - Software 2.14 NOTA • Sono stati introdotti 4 termini importanti (e non banali): – Software – Programma – Linguaggio (di programmazione) ♦ Ne esistono tantissimi. Alcuni noti linguaggi di alto livello: C, Java, Fortran. [NO, NO, NO: HTML!!!] – Processo Informatica - A.A. 2010/2011 - Software 2.15 8 Quanti sono gli applicativi software? • Esistono tantissimi tipi di software – – – – – – per calcolo scientifico per videoscrittura per memorizzazione e recupero dati per comunicazione per svago … • Per ogni tipo di software, esistono innumerevoli applicativi software prodotti da “fonti” molto varie – – – – – – Multinazionali del software: IBM, Microsoft, EDS, … Grandi software house Gruppi di sviluppatori “free software” Gruppi di ricerca per prototipi Singole persone (per interesse o svago personale) … Informatica - A.A. 2010/2011 - Software 2.16 Esempi • Software per l’elaborazione testi – creazione, modifica e stampa di un documento: Word, Editor, OpenOffice, Latex • Foglio elettronico – tabella di valori disposti in righe e colonne: Excel, Lotus, … • Software per Database – sistema per l’archiviazione ed il recupero efficiente di dati in formato digitale: Access, Oracle, MySQL, … • Software per presentazioni – creazione di testi/immagini per la creazione di diapositive e prospetti: PowerPoint, Acrobat, … Informatica - A.A. 2010/2011 - Software 2.17 9 Esempi (cont.) • Software per la comunicazione – creazione, invio e ricezione di posta elettronica: Outlook, Eudora, Pine, ... – Navigazione su Web: Explorer, Firefox, … • Software per il calcolo – Simbolico e/o numerico: MatLab, … • Software di utilità – Antivirus, antispyware, … • Cos’è un virus informatico? E’ parte del software anche lui… Informatica - A.A. 2010/2011 - Software 2.18 La rappresentazione delle informazioni Informatica - A.A. 2010/2011 - Software 2.19 10 Scelta della rappresentazione • Di solito è una scelta convenzionale • A volte ci sono vincoli da rispettare • Nel caso dei computer il vincolo è la rappresentazione binaria (o digitale) di tutte le informazioni (testo, immagini, video, suoni, ...) • L’alfabeto di base con cui il computer codifica ogni informazione consiste di due soli simboli: “0” e “1” Informatica - A.A. 2010/2011 - Software 2.20 Codifica di tutta l’informazione su computer • I programmi operano su dati • Sia i dati sia i programmi devono risiedere in memoria centrale (RAM) per poter essere eseguiti • Sia i dati sia i programmi sono codificati in modo opportuno per il computer • CODIFICA BINARIA: insiemi di 0 e 1 Informatica - A.A. 2010/2011 - Software 2.21 11 Esempi di segnali binari levetta: alta/bassa contatto: aperto/chiuso lampadina: accesa/spenta tensione elettrica: High/Low cristallo liquido: trasparente/opaco corrente elettrica: presente/assente Informatica - A.A. 2010/2011 - Software 2.22 Motivo della scelta di solo 2 simboli • Corrispondenza col mondo reale: i due simboli possono corrispore, ad esempio – al passaggio/non passaggio di corrente attraverso un cavo conduttore – ai due diversi stati di polarizzazione di una sostanza magnetizzabile – ai due stati di carica elettrica di una sostanza – al passaggio/non passaggio di luce attraverso un cavo in fibra ottica • Ragioni prevalentemente di tipo tecnologico Informatica - A.A. 2010/2011 - Software 2.23 12 Bit • L'entità minima di informazione in un calcolatore si chiama bit (binary digit – cifra binaria) – Può assumere solo due valori, cioè può permettere la rappresentazione di due informazioni associate ad uno dei due stati “0” e “1” • Per poter rappresentare più informazioni devo usare più bit mettendoli in sequenza Informatica - A.A. 2010/2011 - Software 2.24 Esempio: sequenza di due bit • Con 2 bit possiamo rappresentare quattro configurazioni (22): 00 01 10 11 • E’ possibile far corrispondere quattro informazioni a tante cose. Es., – le prime quattro lettere dell'alfabeto – oppure i numeri da 1 a 4 – oppure i colori, oppure altre cose ... 00 a 1 verde 01 b 2 rosso 10 c 3 giallo 11 d 4 blu Informatica - A.A. 2010/2011 - Software 2.25 13 Codifica dell’informazione • Processo secondo cui si fa corrispondere ad un’informazione una configurazione di cifre binarie • E’ importante ricordare quante informazioni riesco a codificare avendo un certo numero di bit: – – – – – Con 1 bit codifico 2 informazioni Con 2 bit ne codifico 4 Con 3 bit ne codifico 8 ... Con n bit codifico 2n informazioni Informatica - A.A. 2010/2011 - Software 2.26 Byte • In informatica assume particolare importanza un’aggregazione di 8 bit, che prende il nome di byte • Simbologia: b bit B byte • Poiché un byte è fatto di 8 bit un byte consente di codificare 256 informazioni (ad esempio, tutti i 111 elementi della tavola periodica) Informatica - A.A. 2010/2011 - Software 2.27 14 Unità di misura • Multipli di bit o di byte 1 KiloByte = 1.024 ~ 103 byte x1024 = 1 MegaByte = 1.048.576 ~ 106 byte x1024 = 1 GigaByte = 1.073.741.824 ~ 109 byte x1024 = 1 TeraByte = 1.099.511.627.776 ~ 1012 byte x1024 = 1 PetaByte = circa un biliardo ~ 1015 byte • Abbreviazioni Kb = Kilobit Mb = Megabit Gb = Gigabit (per banda di rete) KB = KiloByte MB = MegaByte GB = GigaByte (per memoria del computer) Informatica - A.A. 2010/2011 - Software 2.28 Codifica dei caratteri alfanumerici • L'insieme dei caratteri alfabetici (anglosassoni), numerici, di punteggiatura, le parentesi e gli operatori aritmetici può essere codificato usando 7 bit (128 configurazioni) • Per poter interagire e scambiarsi dati in modo comprensibile, è necessario usare la stessa codifica • Quindi, è necessario “mettersi d’accordo” per definire un metodo standard per effettuare la codifica Informatica - A.A. 2010/2011 - Software 2.29 15 Codice ASCII • E’ il metodo di codifica più diffuso fra produttori di hardware, software e dispositivi di rete • ASCII = American Standard Code for Information Interchange • Nota: non è l'unico! • Abbastanza diffuso anche EBCDIC = Extended Binary Coded Decimal Interchange Code • Un codice “completo” (perché rappresenta caratteri dalle lingue di tutto il mondo) è UNICODE, a 16 bit Informatica - A.A. 2010/2011 - Software 2.30 Esempio di codifica ASCII standard (usa 7 bit) • • • • • • 0100001 0100110 0110000 0111110 1000001 1100001 ! & 0 > A a • I numeri, così come le lettere, sono consecutivi Sono però insiemi separati Informatica - A.A. 2010/2011 - Software 2.31 16 Codice ASCII standard – 7 bit 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 000 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 001 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 010 ! “ # $ % & ‘ ( ) * + , . / 011 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 100 @ A B C D E F G H I J K L M N O 101 P Q R S T U V W X Y Z [ \ ] ^ _ 110 ° a b c d e f g h i j k l m n o 111 p q r s t u v w x y z { | } ~ DEL Per ottenere la codifica a 7 bit, si legge prima il numero della colonna e poi quello di riga Informatica - A.A. 2010/2011 - Software 2.32 Codifica di una parola • Parola = sequenza di caratteri • Codifica della parola = sequenza delle codifiche dei singoli caratteri • ES: parola “cane” • c a n e • 01100011 01100001 01101110 01100101 • Esistono anche simboli per lo spazio bianco, il simbolo di fine riga, ... • Si possono rappresentare testi complessi Informatica - A.A. 2010/2011 - Software 2.33 17 Codifica dei numeri • Col codice ASCII posso codificare anche le cifre decimali da “0” a “9” • Parola = sequenza di caratteri • Numero = sequenza di cifre • Es: 324 si potrebbe rappresentare come • 00110011 00110010 00110100 3 2 4 Informatica - A.A. 2010/2011 - Software 2.34 Codifica dei numeri - continua • Ma usare la codifica ASCII per i numeri è una rappresentazione non efficiente perché i primi quattro bit sono uguali e, soprattutto, non è adatta per eseguire le operazioni aritmetiche sui numeri • Esiste un modo molto più naturale per codificare i numeri che prende spunto dal sistema di numerazione tradizionale, che è un sistema decimale e posizionale Informatica - A.A. 2010/2011 - Software 2.35 18 Sistema di numerazione: decimale e posizionale • Usa 10 cifre [0..9] • Ogni cifra ha un valore che dipende dalla posizione che occupa all’interno del numero • La rappresentazione “645” (la cifra 6 seguita dalla cifra 4 seguita dalla cifra 5) denota, nel sistema decimale, il numero 645 • Il numero 645 ha in realtà l’interpretazione seguente: – 6 centinaia, 4 decine, 5 unità – 6*(102) + 4*(101) + 5*(100) = 600+40+5 = 645 Informatica - A.A. 2010/2011 - Software 2.36 Esempio: sistema decimale Il numero 135 decimale può essere rappresentato come segue: B = 10 n=3 base numero cifre cifra 1 3 5 posizione 2 1 0 10 1 10 0 peso 10 2 (ricordare che si parte da 0) 1 • 10 2 + 3 • 101 + 5 •100 = 135 Informatica - A.A. 2010/2011 - Software 2.37 19 Sistema di numerazione decimale • In generale la rappresentazione: cncn-1...c1c0 in cui ogni cifra ci è compresa fra 0 e 9, denota: c0 * 100 c1 * 101 ... cn-1 * 10n-1 cn * 10n + + + (ossia c0 unità) (ossia c1 decine) ... Informatica - A.A. 2010/2011 - Software 2.38 Rappresentazione binaria • E’ una codifica “posizionale” che invece di usare 10 cifre, ne usa solo 2 • Quindi, tutti i numeri vengono codificati usando le due cifre “0” e “1” e uno schema posizionale in cui si usa la base 2 invece della base 10 • cncn-1...c1c0 in cui ogni cifra ci vale 0 o 1, denota: c0 * 20+c1 * 21+...+cn-1 * 2n-1+cn * 2n • Esempio: 1110(base 2) denota: 1*23+1*22 +1*21+0*20+= 8+4+2+0 = 14 (base 10) Informatica - A.A. 2010/2011 - Software 2.39 20 Esempio: Sistema binario Valore decimale corrispondente al numero binario 1101 ? cifra2 1 1 0 1 peso 23 22 21 20 valore 1•8 1•4 0•2 1•1 11012 = 1 • 23 + 1 • 22 + 0 • 21 + 1 • 20 = 1310 Informatica - A.A. 2010/2011 - Software 2.40 Da base decimale a binaria: numeri interi • Per ottenere il valore binario di un numero intero codificato nel sistema decimale si procede utilizzando un metodo iterativo di successive divisioni per 2 • Il resto delle divisioni fornisce le cifre del numero binario (a partire dalla meno significativa) 2610 26 Cifra a destra (meno significativa) 0 2 13 1 2 6 2 0 (26) 10= (11010)2 3 2 1 1 Cifra a sinistra (più significativa) Informatica - A.A. 2010/2011 - Software 2.41 21 Massimo numero rappresentabile? • Sappiamo che con quattro cifre decimali è possibile rappresentare tutti i numeri fra 0 e 9999 in quanto il numero successivo (10000) richiederebbe una quinta cifra (non disponibile) • In informatica si parla di overflow: quando un numero “esce” dal numero di cifre destinate alla rappresentazione • Date n cifre decimali, è possibile rappresentare i numeri da 0 a 10n-1 Esempio (n=4): 9999 = 10000-1 = 104-1 Informatica - A.A. 2010/2011 - Software 2.42 Massimo numero in binario • Le stesse considerazioni del sistema decimale valgono anche per il sistema binario prendendo come base il numero 2 al posto del numero 10 • Quindi, date n cifre binarie, è possibile rappresentare i numeri da 0 a 2n-1 • Ricordare: nel momento in cui si fissa il numero di bit destinati alla rappresentazione di un numero, si fissa anche il massimo numero rappresentabile Informatica - A.A. 2010/2011 - Software 2.43 22 Sistemi di numerazioni ottale ed esadecimale • Quando per la rappresentazione di un numero si utilizzano molte cifre binarie può convenire usare altri sistemi di numerazione • I sistemi ottale ed esadecimale sono utilizzati principalmente per rappresentare in modo più compatto i numeri binari • I simboli del sistema Ottale sono 8: { 0, 1, 2, 3, 4, 5, 6, 7} • I simboli del sistema Esadecimale sono 16: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } • Si scelgono basi “potenza di 2” perché le regole di conversione da/a numero binario sono molto semplici ed efficienti Informatica - A.A. 2010/2011 - Software 2.44 Corrispondenza ottale binaria Tabella di conversione [0]8 = [0000]2 [1]8 = [001]2 [3]8 = [011]2 [4]8 = [100]2 [6]8 = [110]2 [7]8 = [111]2 [2]8 = [010]2 [5]8 = [101]2 Per verificare la corrispondenza si può far riferimento al valore decimale Es. [6]8 = [6*80]10 = [6]10 [110]2 = [1*22+1*21+0*20] 10 = [6]10 Informatica - A.A. 2010/2011 - Software 2.45 23 Conversioni di base • Binario -> Ottale • Per passare dalla codifica Binaria a quella Ottale, si raggruppano le cifre binarie a gruppi di 3 a partire da destra e le si sostituiscono con una cifra del sistema ottale (aggiungere 0 a sinistra se il numero di cifre binarie non è multiplo di 3) • Esempio : 111 001 0102 = 7128 • Ottale -> Binario • Per passare dalla codifica Ottale a quella Binaria, si sostituisce ad ogni cifra ottale la corrispondente codifica binaria (composta da 3 cifre). • Esempio : 3028 = 011 000 0102 Informatica - A.A. 2010/2011 - Software 2.46 Corrispondenza esadecimale binaria Tabella di conversione [0]16 = [0000]2 [1]16 = [0001]2 [2]16 = [0010]2 [3]16 = [0011]2 [4]16 = [0100]2 [5]16 = [0101]2 [6]16 = [0110]2 [7]16 = [0111]2 [8]16 = [1000]2 [9]16 = [1001]2 [A]16 = [1010]2 [B]16 = [1011]2 [C]16 = [1100]2 [D]16 = [1101]2 [E]16 = [1110]2 [F]16 = [1111]2 Informatica - A.A. 2010/2011 - Software 2.47 24 Conversioni di base (2) • Binario -> Esadecimale • Per passare dal codice Binario a quello Esadecimale, si raggruppano le cifre a gruppi di 4 a partire da destra e le si sostituiscono con una cifra del sistema esadecimale (aggiungere 0 a sinistra se il numero di cifre binarie non è multiplo di 3) • Esempio: 1001 0001 11112 = 91F16 • Esadecimale -> Binario • Per passare dal codice Esadecimale a quello Binario, si sostituisce ad ogni cifra esadecimale la corrispondente configurazione binaria (composta da 4 cifre). • Esempio: A7F16 =1010 0111 11112 Informatica - A.A. 2010/2011 - Software 2.48 Codifica dei primi 16 numeri interi Decimale Binario 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Informatica - A.A. 2010/2011 - Software 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Ottale 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 Esadecimale 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.49 25 Esempi Esempio 1 Codifica del numero 12510 = 1111101 2 In codice Ottale: In codice Esadecimale: 1 111 101 111 1101 7D 175 Esempio 2 Decimale 5 12 78 149 Binario Ottale Esadecimale Informatica - A.A. 2010/2011 - Software 2.50 Esempi Esempio 1 Codifica del numero 12510 = 1111101 2 In codice Ottale: 1 111 101 In codice Esadecimale: 111 1101 7D 175 Esempio 2 Decimale 5 12 78 149 Informatica - A.A. 2010/2011 - Software Binario 101 1100 1001110 10010101 Ottale 5 14 116 225 Esadecimale 5 C 4E 95 2.51 26 Oltre i numeri interi positivi • Con il metodo di codifica esaminato, è possibile rappresentare qualunque numero intero positivo rientra nel numero di bit disponibili a rappresentarlo • Tuttavia, esiste la necessità di rappresentare anche altri tipi di numeri, quali: – Numeri interi negativi: -34 -23456 ... – Numeri frazionari positivi: 234,45 79,001 ... – Numeri frazionari negativi: -234,45 -79,001 ... • Si usano altri metodi di codifica (più complessi) che non sono argomento di questo corso Informatica - A.A. 2010/2011 - Software 2.52 27