start informazioni e calcolatori Piero Gallo – Pasquale Sirsi Competenze nRiconoscere le tecniche di rappresentazione dei dati all’interno di un computer nSviluppare capacità operative in merito alla rappresentazione di dati testuali, numerici e multimediali Abilità nConvertire numeri decimali in basi diverse nOperare con i numeri binari nRappresentare i dati in standard ASCII e UNICODE nRappresentare i numeri interi e reali secondo appositi standard Architettura del computer Il computer Il computer tratta dati o informazioni? Rappresentazione delle informazioni La memoria centrale e i bus Il codice Architettura della memoria centrale Codifica e decodifica dell’informazione La CPU (Central Processing Unit) Rappresentazione delle informazioni alfanumeriche Linguaggio macchina e formato delle istruzioni L’esecuzione delle istruzioni Le porte e le periferiche nComprendere le tecniche grafiche per immagini raster e vettoriali nInquadrare le tecniche di digitalizzazione audio e video Conoscenze nSistemi di numerazione diversi dal decimale nConversioni in basi diverse nAritmetica binaria nSegnali analogici e digitali nRappresentazione di dati testuali, numerici e multimediali nStandard IEEE754 per la codifica di numeri reali nGrafica raster e vettoriale nTecniche di compressione di dati multimediali nDigitalizzazione di immagini e video Rappresentazione binaria dei numeri Rappresentazione dei numeri reali Le memorie di massa Cache, supporti USB, dischi ottici Codifica dell’informazione multimediale Aritmetica del computer La codifica delle immagini Come contavano i nostri antenati I sistemi di compressione Sistemi addizionali e sistemi posizionali La compressione delle immagini I sistemi di numerazione decimale e binario Grafica raster e grafica vettoriale nComprendere il concetto di dato multimediale Codifica dell’informazione numerica e alfanumerica onversione da binario C a decimale e da decimale a binario ritmetica binaria: A somma e prodotto ritmetica binaria: A sottrazione e divisione Il sistema ottale Il sistema esadecimale I formati grafici delle immagini bitmap Il formato JPEG e la geometria frattale La grafica tridimensionale e il rendering L’audio digitale I principali formati audio Il video digitale Storia dell’informatica Dagli albori al 1822 Dall’Ottocento al Novecento Dagli anni Cinquanta agli anni Settanta Dagli anni Ottanta a oggi Il computer Prepariamoci a compiere un viaggio interessante: l’esplorazione del computer. Vedremo come è composta questa macchina misteriosa e che cosa fanno i programmi una volta caricati su di essa. Prima di procedere, cerchiamo di capire che cos’è un computer. Il computer o elaboratore è una macchina costituita da dispositivi di diversa natura (meccanici, elettrici, ottici e così via) in grado di elaborare dati in modo automatico, veloce, sicuro ed efficiente. Le caratteristiche essenziali sono la rapidità e l’affidabilità. Chiariamo alcuni termini usati nella definizione. Abbiamo detto che il computer: • è una macchina, cioè un dispositivo privo di intelligenza autonoma, come l’automobile; • è elettronico: il suo funzionamento si basa su componenti di tipo elettronico; • è un elaboratore di dati: eseguendo le istruzioni di un programma, è capace di ricevere dati dall’esterno, operare su di essi e fornire i risultati dell’elaborazione, sollevando così l’uomo da compiti noiosi, ripetitivi e complessi. Se vogliamo che il computer risolva un problema, quindi, dobbiamo fornirgli i dati su cui lavorare e una sequenza ordinata di istruzioni (cioè il programma) che elabori i dati ricevuti e fornisca i risultati. DATI RISULTATI PROGRAMMI Ne consegue che: il computer è una macchina programmabile, cioè una macchina che può essere utilizzata per problemi diversi, in grado di interpretare ed eseguire una serie di ordini impartiti dall’esterno. Non dimentichiamo che il computer è una macchina. L’elaborazione dei dati avviene eseguendo le istruzioni contenute nei programmi, attraverso le sue componenti fisiche. Parleremo, quindi, di sistema di elaborazione per sottolineare il fatto che l’elaborazione avviene grazie all’interazione di risorse diverse. In questo corso di studi ci occupiamo del personal computer (o semplicemente PC), ossia di un particolare tipo di macchina, molto utilizzata in ambito lavorativo e domestico. 2 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER Hardware e software Un computer svolge i suoi compiti utilizzando le proprie risorse, che possono essere raggruppate in due grandi categorie: hardware e software. • Le risorse hardware sono la parte fisica del computer, cioè l’insieme delle componenti meccaniche, elettriche, elettroniche, magnetiche e ottiche. Il termine inglese hardware, che letteralmente significa “ferramenta”, è composto da hard che significa “duro” e ware che significa “componente”. • Le risorse software sono, invece, la parte logica del computer, cioè l’insieme di tutti i programmi che ci consentono di gestire il sistema. Il termine inglese software è composto da soft che significa “soffice” e ware che, come sappiamo, significa “componente”. Esistono anche dispositivi che sono sia hardware che software. Essi costituiscono il firmware, che non possiamo definire una vera e propria categoria, bensì qualcosa di intermedio fra hardware e software. Possiamo dire che il firmware è costituito da una serie di istruzioni software memorizzate (cablate) all’interno di memorie ROM (di cui parleremo in seguito) e non modificabili dall’utente. Probabilmente, il firmware più conosciuto in campo informatico è quello della scheda madre, abitualmente chiamato BIOS e responsabile del corretto avviamento del computer. La macchina di von Neumann I moderni sistemi di elaborazione oggi in commercio non sono tutti uguali, anzi presentano notevoli differenze in termini di velocità, prestazioni, memorie. Nonostante questo, la maggior parte di essi presenta una caratteristica comune: il loro hardware rispecchia il modello ideato da John von Neumann nel -1946, che riportiamo nella seguente figura. MEMORIA CENTRALE UNITÀ DI INPUT UNITÀ DI OUTPUT UNITÀ CENTRALE (CPU) Secondo tale modello, un sistema per l’elaborazione elettronica dei dati è composto da un insieme di unità funzionali, ognuna delle quali ha compiti ben precisi: • le unità di input sono predisposte per l’immissione delle istruzioni dei programmi e dei dati su cui tali programmi dovranno operare; • le unità di output permettono al sistema di comunicare con l’esterno, ossia di comunicare i risultati dell’elaborazione compiuta; • la memoria centrale conserva dati e istruzioni; • l’unità centrale, detta CPU (Central Processing Unit), ha il compito di eseguire le istruzioni, i calcoli aritmetici e logici e di controllare tutto il sistema. La macchina di von Neumann era caratterizzata dalla presenza di una sola unità centrale: un computer basato su questo modello viene chiamato elaboratore seriale. Esistono, poi, altre architetture di elaboratori (array processor, pipeline, multiprocessor e così via) basate su altri modelli e utilizzate in settori specifici. Prima di analizzare la macchina di von Neumann è doveroso fare una riflessione. Parlando delle unità abbiamo spesso utilizzato il termine “dati”. Ma il computer tratta dati o informazioni? ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 3 Il computer tratta dati o informazioni? I concetti di dato e di informazione sono da alcuni considerati diversi, da altri sovrapponibili. Per una nostra scelta didattica li considereremo diversi, in modo da rendere più semplice l’approccio all’argomento. Analizziamo dunque queste differenze, cominciando con un esempio. Supponiamo che un insegnante, sfogliando il suo registro personale, trovi un foglio sul quale è riportato il simbolo 8. Le domande che si può porre sono le seguenti: “Che cosa volevo indicare con questa cifra? Che cosa rappresenta? Può rappresentare un voto? Oppure il numero di compiti che mi restano da correggere? O forse il numero delle interrogazioni?”. Le risposte possibili sono infinite. Attenzione però: se l’insegnante avesse trovato la cifra 8 nella griglia di valutazione dello studente Rossi, non avrebbe esitato a pensare: “Rappresenta il voto assegnato allo studente Rossi”. Da questo esempio possiamo affermare che la cifra 8 rappresenta il dato e tutte le varie ipotesi formulate dall’insegnante costituiscono le possibili interpretazioni relative a quel dato. Facciamo un altro esempio: Supponiamo che, dopo una rapina in una gioielleria, un testimone vada dalla polizia e dica: “Ho visto un rapinatore salire su un’automobile targata XXZZ”. Questo dato può costituire un’informazione se non si è già trovata l’automobile utilizzata nella rapina. Consideriamo, invece, che lo stesso testimone vada dalla polizia e affermi: “XXZZ”. In questo caso il poliziotto potrebbe chiedere: “Cosa vuoi? Hai qualche problema? Cosa vuoi dire con XXZZ?”. È chiaro che un dato da solo non genera informazione, se non è evidente il suo significato. Il dato, quindi, è una conoscenza elementare che, presa individualmente e fuori da un preciso contesto, non ha alcun valore. L’informazione, invece, è il dato elaborato, ossia l’incremento di conoscenza che deriva dall’interpretazione di un dato. Secondo questa distinzione, un dato diviene informazione solo quando viene esattamente interpretato. Di conseguenza, per essere ritenuto un’informazione, un dato deve essere arricchito da indicazioni ausiliarie che permettano di attribuirgli un’interpretazione. Tornando all’esempio precedente, il numero 8 non rappresenta per l’insegnante un’informazione importante. Può diventarlo soltanto se si attribuisce al numero un significato, utilizzando una precisa chiave di interpretazione, così come accade per il poliziotto con le lettere XXZZ. INFORMAZIONE DATI 4 START – INFORMAZIONI E CALCOLATORI CONOSCENZA ARCHITETTURA DEL COMPUTER Il computer non interpreta i dati, non attribuisce loro significati precisi, come invece fa la mente umana: per una macchina elettronica i dati sono soltanto semplici simboli! Per questo motivo possiamo affermare che: il computer tratta i dati, l’uomo tratta le informazioni. I dati si presentano alla nostra osservazione in varie forme: • numeri (il peso di una persona, il voto di un compito in classe); • caratteri alfabetici (il titolo di un film, il nome di un cane); • caratteri alfanumerici (il numero di una targa, un codice fiscale, una parola chiave per accedere a un videogioco); • immagini (una foto, un manifesto); • grafici (un istogramma, una piantina topografica, un elettrocardiogramma); • suoni (una sirena, l’allarme di un’auto, il suono della sveglia); • luci (un semaforo, un faro); • gesti (un saluto, un abbraccio, un bacio). Numeri e caratteri sono dati semplici (o primitivi), perché sono relativamente semplici da raccogliere e analizzare; gli altri sono dati complessi, in quanto derivanti dalla fusione di più dati semplici. In particolare, dati complessi quali suoni, animazioni, filmati prendono il nome di dati multimediali: di tale tipologia ci occuperemo a lungo in questo corso, per la sua importanza nell’informatica dei nostri giorni. L’attività che si occupa del trattamento dei dati per trasformarli in informazioni prende il nome di elaborazione. ELABORAZIONE Raccolta dei dati Archiviazione Produzione di informazioni Concentrandoci sulle nuove tecnologie informatiche e della comunicazione, è importante distinguere tra dati analogici e dati digitali. Gli ultimi decenni hanno visto la nascita e lo sviluppo di nuovi dispositivi elettronici quali computer, computer tascabili, videogame che oggi affiancano in molte famiglie radio, televisioni e videocamere. In ognuno di questi dispositivi i dati da elaborare e trasmettere sono rappresentati fisicamente da segnali elettrici. In un sistema analogico il segnale da elaborare è continuo: un orologio analogico, quello con le lancette, rappresenta tutti gli istanti del tempo, senza salti. In un sistema digitale i segnali da elaborare sono discreti, cioè non assumono tutti i valori di un intervallo, ma procedono a salti: un orologio digitale rappresenta il tempo a salti di minuti o di secondi, o anche di frazioni più piccole. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 5 La memoria centrale e i bus La memoria centrale (detta anche memoria principale o memoria di lavoro) è un dispositivo elettronico in grado di contenere tutte le informazioni necessarie per l’elaborazione (dati, istruzioni del programma da eseguire, risultati intermedi e finali). È quindi coinvolta continuamente durante il processo di elaborazione. In memoria è possibile: • scrivere i dati provenienti dalle varie componenti del computer; la scrittura è un’operazione distruttiva, ossia lo scrivere un’informazione comporta la distruzione di quella precedentemente contenuta nella stessa posizione; • conservare informazioni, per averle sempre disponibili durante l’elaborazione; • leggere l’informazione memorizzata, senza rischio di distruggerla; la lettura non è distruttiva, in quanto viene prelevata una copia dell’informazione letta. Possiamo immaginare la memoria come un dispositivo composto da migliaia di circuiti elettrici, che possono assumere solo due stati fisici a cui si associano i simboli 0 e 1. Essi sono detti cifre binarie o, semplicemente, bit (binary digit). La memoria centrale, quindi, è composta da celle (o posizioni di memoria) adiacenti, di uguale dimensione, che possono contenere un dato scritto in forma binaria. Per rappresentare un carattere qualsiasi (cifra, lettera, simbolo e così via), però, un singolo bit non basta; per questo si usano configurazioni di otto bit dette byte (binary term). Il byte assume particolare importanza in quanto permette di rappresentare un carattere alfabetico, numerico o un simbolo speciale. Pertanto, una parola di dieci lettere occupa dieci byte, una di quattro ne occupa quattro e così via. Il byte viene assunto come unità di misura della capacità della memoria. Per comodità si usano spesso multipli del byte. La configurazione appena più grande del singolo byte prende il nome di parola (o word) e riveste un ruolo di primaria importanza, in quanto la lunghezza della parola (cioè il numero di bit di cui è composta) definisce la dimensione della cella standard di sistema. Le parole sono composte da un numero di bit multiplo di otto (16, 32 o 64 bit) e in corrispondenza di ciò si parla di “sistemi a 16 bit”, “sistemi a 32 bit” e così via. Più alto è il numero di bit che compongono la parola, maggiore è, in genere, la velocità del computer. Questo perché nell’elaboratore il trasferimento delle informazioni tra la memoria centrale e la CPU avviene in parallelo, ossia i bit che compongono una parola vengono trasmessi contemporaneamente. Usando parole più lunghe, diminuiscono gli accessi in memoria che la CPU deve eseguire quando necessita di un determinato numero di bit, e conseguentemente aumenta la velocità del computer. La tabella riportata qui mostra le unità di misura della memoria, multipli del byte. Unità di misura Byte Corrisponde a 8 bit KiloByte (KB) 2 byte 1024 byte MegaByte (MB) 210 KB 1 048 576 byte GigaByte (GB) 210 MB 1 073 741 824 byte TeraByte (TB) 210 GB 1 099 511 627 776 byte 10 PetaByte (PB) 210 TB HexaByte (HB) 210 PB 6 START – INFORMAZIONI E CALCOLATORI Le celle di memoria sono numerate progressivamente partendo da zero. Il numero che le contraddistingue, espresso naturalmente come sequenza di bit, viene detto indirizzo ed è molto importante, infatti l’accesso a un’informazione contenuta nella memoria è possibile solo tramite l’indirizzo della cella che la contiene. Il numero di bit utilizzati per identificare gli indirizzi definisce la dimensione dello spazio di indirizzamento, cioè il numero di celle di memoria direttamente indirizzabili. Generalmente la memoria di un elaboratore è indirizzabile a livello di byte, ma quando la parola è composta da più di un byte (cioè da 16, 32 o 64 bit), viene indirizzata mediante l’indirizzo del suo primo byte di destra o di sinistra (in base alle convenzioni in uso). Alla luce di questi concetti possiamo affermare che la parola è per il computer la più piccola unità di informazione significativa e indirizzabile. ARCHITETTURA DEL COMPUTER I bus Come viaggiano le informazioni all’interno della macchina? Il collegamento fisico tra le varie unità funzionali di un computer è realizzato da un insieme di linee dette bus; esso è costituito da una serie di collegamenti hardware (è simile a un gruppo di fili), uno per bit, su cui viaggiano tutti i dati che vengono scambiati tra l’unità centrale, la memoria e le unità di input/output. In un sistema di elaborazione si trovano tre bus principali: il bus degli indirizzi (address bus), il bus dei dati (data bus) e il bus di controllo (control bus). • Il bus degli indirizzi trasporta l’indirizzo necessario per reperire una cella di memoria o un’unità di I/O. L’unico dispositivo abilitato a inviare informazioni su questo bus, che è unidirezionale, è la CPU. Il bus degli indirizzi è logicamente composto da tanti fili quanti sono i bit che compongono l’indirizzo. • Il bus dei dati viene utilizzato per lo scambio di informazioni tra i vari dispositivi. È bidirezionale, in quanto l’invio di dati non è di sola pertinenza della CPU. Inoltre è logicamente composto da tanti fili quanti sono i bit che compongono la parola utilizzata come unità di trasferimento (ad esempio 16, 32 bit). • il bus di controllo, anch’esso bidirezionale, è utilizzato per sincronizzare la trasmissione e per permettere lo scambio di segnali di controllo tra le varie unità (segnali di lettura o scrittura, segnale di inizio o fine trasmissione, segnale di unità libera o occupata e così via). Il suo scopo principale è, pertanto, di coordinare e controllare il traffico di tutte le informazioni viaggianti sugli altri due bus. Il numero di fili che compongono questo bus è variabile: più linee lo compongono, maggiore è il numero di informazioni che può trasportare. BUS DEGLI INDIRIZZI UNITÀ DI I/O MEMORIA CENTRALE CPU BUS DI CONTROLLO BUS DEI DATI La struttura a bus illustrata nella figura precedente prende il nome di architettura unibus. Spesso, per raggiungere velocità più elevate, le case costruttrici adottano altre architetture basate sulla presenza di coppie distinte di bus degli indirizzi e di bus dei dati: una coppia si dedicherà agli accessi in memoria, l’altra agli accessi ai dispositivi di I/O. Questa architettura, riportata nella figura seguente, prende il nome di architettura multibus e offre la possibilità di colloquiare con le unità di I/O mentre stanno avvenendo accessi in memoria. I computer odierni utilizzano strutture di bus e di controller molto più sofisticate sia per gli accessi in memoria RAM, sia per gli altri dispositivi di I/O. BUS DEGLI INDIRIZZI DI I/O UNITÀ DI I/O BUS DEI DATI DI I/O BUS DEGLI INDIRIZZI DI MEMORIA CPU MEMORIA CENTRALE BUS DEI DATI DI MEMORIA ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 7 Architettura della memoria centrale Le celle della memoria sono numerate progressivamente, ma non disposte in successione. Sono organizzate in una matrice quadrata, come nella seguente figura. DECODIFICATORE DELLE COLONNE 0 1 2 3 4 5 6 7 DECODIFICATORE DELLE RIGHE 0 1 2 3 4 5 6 7 Cella selezionata Colonna Riga 4 5 INDIRIZZO (in binario 100) (in binario 101) A ogni intersezione tra le colonne e le righe si trovano le celle di memoria. L’indirizzo di memoria, quindi, è composto da due parti: la prima a destra individua la riga e la restante parte individua la colonna. La figura seguente rappresenta l’interpretazione di un indirizzo di 8 bit. 15 14 13 12 11 10 9 8 Indirizzo di colonna 7 6 5 4 3 2 1 0 Indirizzo di riga Altre componenti logiche della memoria centrale indispensabili per poter realizzare il dialogo con la CPU sono i registri. I registri sono piccole e veloci memorie, generalmente composte da 1, 8, 16, 32 o 64 bit, che svolgono funzioni ben precise e vengono utilizzate in determinate fasi dell’elaborazione. I registri della memoria centrale sono i seguenti. • MAR (Memory Address Register). È il registro degli indirizzi di memoria e contiene l’indirizzo della cella di memoria in cui la CPU deve scrivere o da cui deve leggere un dato. La lunghezza di questo registro è pari alla lunghezza dell’indirizzo stesso. • MDR (Memory Data Register). È il registro dei dati di memoria e contiene la parola che deve essere scritta o quella appena letta. La capacità di questo registro è, quindi, pari alla lunghezza della parola. • CONTR. Questo registro contiene appositi messaggi provenienti dalla memoria stessa e dalle altre unità. Ad esempio, dopo un accesso, la memoria imposta in questo registro un messaggio di “pronto”, mentre le altre unità, quando richiedono l’utilizzo della memoria, caricano in esso un messaggio di lettura o di scrittura. Vediamo, ora, come avvengono tecnicamente la lettura e la scrittura di un dato. Quando la CPU necessita di un dato, invia al MAR, sul bus degli indirizzi, l’indirizzo della cella di memoria che intende leggere. Contemporaneamente la CPU invia al CONTR, sul bus di controllo, il messaggio di lettura. Una volta ricevuti questi ordini, la memoria si posiziona sulla cella riportante l’indirizzo indicato dal MAR, legge il dato e lo deposita nel registro MDR, poi imposta nel registro CONTR un messaggio di pronto e invia il tutto sugli appositi bus. La lettura è così compiuta. 8 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER La scrittura, invece, inizia con l’invio alla memoria, da parte della CPU, del dato che dovrà essere memorizzato, dell’indirizzo della cella che lo dovrà contenere e del segnale di scrittura. Tali informazioni sono inviate alla memoria per mezzo degli appositi bus e depositate nei registri preposti. Terminato il trasferimento, la memoria analizza il registro CONTR e provvede a registrare il dato presente nel MDR nella cella il cui indirizzo è riportato nel MAR. A registrazione avvenuta, la memoria trasmetterà, sul bus di controllo, il messaggio di pronto. MAR Bus degli indirizzi Classificatore indirizzi Memoria centrale MDR Bus dei dati L’insieme di azioni appena descritto (necessario per poter compiere un’operazione di lettura o di scrittura) prende il nome di ciclo di memoria e il tempo necessario per realizzarlo si chiama tempo di accesso e, negli attuali elaboratori, è dell’ordine dei nanosecondi (1 nanosecondo = 1 miliardesimo di secondo). La memoria centrale è generalmente costituita da tre memorie: • la memoria RAM (Random Access Memory = memoria ad accesso casuale); • la memoria ROM (Read Only Memory = memoria a sola lettura); • la memoria CACHE o memoria tampone. La memoria RAM è la memoria di lavoro sinora descritta; come ben sappiamo, offre la possibilità di leggere e scrivere dati e istruzioni necessari per l’esecuzione di un programma. È ad accesso casuale perché in essa ogni informazione può essere letta o scritta in un tempo che non dipende dalla posizione in cui l’informazione stessa è registrata. In questo tipo di memoria il tempo di accesso è costante. La RAM è una memoria velocissima, ma è volatile, cioè perde il suo contenuto quando viene interrotta l’alimentazione elettrica, a causa del tipo di materiale impiegato per la sua realizzazione. La memoria ROM è di sola lettura. In essa sono memorizzate permanentemente le istruzioni che la CPU deve leggere e interpretare per poter svolgere tutti i suoi compiti. Tale memorizzazione avviene all’atto della fabbricazione. Più semplice e meno costosa della RAM, la ROM viene programmata dalle ditte produttrici di hardware e il suo contenuto non può più essere cancellato o modificato: può solo essere letto. Per questa caratteristica la memoria ROM è adatta a contenere programmi particolari, quali, ad esempio, quelli necessari per l’inizializzazione del sistema, ossia tutti quei programmi che vengono eseguiti al momento dell’avviamento della macchina. Esistono due fondamentali tipi di ROM: la ROM mascherata, della quale abbiamo parlato poc’anzi, e la ROM programmabile, detta PROM (Programmable ROM), sulla quale l’utente può sempre leggere le informazioni memorizzate, ma può scrivere una sola volta per mezzo di apposite apparecchiature, dette programmatori di PROM. Poiché questa memoria è programmabile una sola volta, eventuali errori commessi in fase di programmazione non possono essere corretti; per poter cambiare il programma memorizzato, è necessario utilizzare un’altra PROM. Per ovviare a questo inconveniente, sono state realizzate le EPROM (Erasable PROM) sulle quali, invece, l’utente grazie ai programmatori di EPROM può scrivere ripetutamente, sfruttando le potenzialità dell’energia elettrica (per memorizzare) e dei raggi ultravioletti (per cancellare). Si tratta, quindi, di un “ibrido” tra RAM e PROM. La memoria CACHE è una particolare memoria RAM caratterizzata da un’elevatissima velocità. È utilizzata come memoria intermedia tra CPU e memoria centrale, per aumentare la velocità e le prestazioni del computer. Essenzialmente è una memoria di transito con accesso molto rapido e viene utilizzata per memorizzare i dati temporanei usati più frequentemente, rendendoli disponibili senza doverli prelevare ogni volta dalla memoria RAM che è decisamente meno veloce. A questo punto possiamo affermare che tempo di accesso, capacità, lunghezza della parola, velocità e metodi di accesso sono i parametri fondamentali che caratterizzano le memorie. CPU Memoria cache Memoria centrale Unità I/O ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 9 La CPU (Central Processing Unit) La CPU (Central Processing Unit) rappresenta il nucleo di tutto il sistema di elaborazione ed è responsabile dell’esecuzione e del controllo dei processi: per tale motivo, viene anche chiamata processore centrale. Questo importantissimo processore (ma non è l’unico) viene realizzato, proprio come la memoria centrale, su un chip di silicio. A causa della ridottissima dimensione, viene chiamato microprocessore o microchip. Microprocessore e CPU non sono proprio la stessa cosa, anche se, in pratica, coincidono fisicamente: con il termine microprocessore, infatti, ci riferiamo all’oggetto che si trova nel computer (e ormai in tantissimi altri dispositivi, dalle automobili alle macchine fotografiche agli impianti HI-FI), mentre con CPU ci riferiamo alla funzione svolta da tale oggetto. La CPU ha il compito di: • • • • provvedere alla registrazione in memoria centrale dei dati e delle istruzioni dei programmi; riconoscere e interpretare le istruzioni del programma da eseguire; eseguire le operazioni logiche e aritmetiche; controllare tutte le operazioni necessarie per eseguire il processo di elaborazione e gestire il traffico di informazioni con l’esterno. Questa unità funzionale è composta da: • un’unità di controllo detta CU (Control Unit); • un’unità aritmetico-logica detta, generalmente, ALU (Arithmetic Logic Unit); • alcuni registri. Questi elementi sono collegati tra loro da un bus interno sul quale viaggiano le informazioni. La figura seguente rappresenta la schematizzazione più dettagliata della macchina di von Neumann. Nella figura a pagina seguente, invece, è riportata la schematizzazione della struttura di una CPU. Nella struttura dell’unità centrale di elaborazione riportata nella figura abbiamo utilizzato il termine interfaccia. MEMORIA CENTRALE ROM RAM CPU UNITÀ DI INPUT UNITÀ DI CONTROLLO ALU UNITÀ DI OUTPUT L’interfaccia è qualunque elemento hardware o software che consente il collegamento fisico e/o logico tra dispositivi diversi. È un’interfaccia, quindi, sia il cavo che permette di collegare il video all’elaboratore, sia il dispositivo che consente il trasferimento dei dati dalla CPU ai bus. Ma anche i linguaggi di programmazione e i prodotti software sono interfacce: consentono infatti il dialogo uomo-macchina, permettendo all’utente di sfruttare le potenzialità del computer senza doverne conoscere le caratteristiche tecniche. 10 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER L’unità di controllo (Control Unit: CU) L’unità di controllo (o di governo) ha il compito di gestire e sovrintendere al funzionamento di tutte le unità del computer e all’esecuzione di tutti i processi da compiere per eseguire i programmi residenti in memoria centrale. Questa unità è composta da: • un registro dell’istruzione corrente (IR = Instruction Register) che contiene l’istruzione che la CU deve eseguire; • un registro contatore di programma (PC = Program Counter) che contiene l’indirizzo di memoria in cui si trova l’istruzione successiva a quella che la CU sta eseguendo (cioè quella il cui codice è contenuto nel registro IR); • alcuni registri generali, comodi per avere sempre disponibili dati che potranno essere utili durante l’esecuzione del programma, ad esempio dati o risultati intermedi, che permettono un notevole risparmio di tempo; • il registro Stack Pointer (SP), utilizzato per gestire una zona di memoria con la tecnica della pila (LIFO); quest’area di memoria sarà utilizzata per salvare e recuperare non solo dati, ma anche la situazione del processore dopo l’arrivo e la gestione di un segnale di interruzione; • un decodificatore, che ha il compito di decodificare (ossia di interpretare) l’istruzione contenuta nel registro IR al fine di riconoscerne il tipo; • un temporizzatore (clock), cioè un oscillatore al quarzo che genera una serie di impulsi a frequenza regolare, utilizzato per sincronizzare l’invio di tutti i segnali generati dalla CU. Con questi dispositivi, la CU è in grado di svolgere le sue principali funzioni: • prelevare le istruzioni del programma da eseguire registrate in memoria centrale; • interpretare, volta per volta, le istruzioni lette; • eseguire le istruzioni attivando e controllando le unità coinvolte nell’esecuzione. L’unità aritmetico-logica (Arithmetic Logic Unit: ALU) All’unità aritmetico-logica spetta il compito di eseguire, sotto la continua supervisione della CU, le operazioni aritmetiche e logiche sui dati provenienti dalla memoria. L’ALU svolge il suo compito attraverso i seguenti elementi. • Una rete logica di calcolo, costituita da: – un circuito addizionatore per eseguire le operazioni aritmetiche operante con due parole in ingresso e una in uscita, codificate in formato binario; – alcuni circuiti per eseguire le operazioni logiche elementari (AND, OR, NOT), lo shift, la determinazione del segno di un numero e il confronto. • Uno o più registri accumulatori (AC), utilizzati per contenere temporaneamente i dati provenienti dalla memoria centrale. Tramite questi registri vengono eseguiti materialmente i calcoli • Un registro di stato (SR = Status Register) con il quale comunica alla CU informazioni sul tipo di risultato ottenuto dopo l’esecuzione dell’operazione. Questo registro è composto da un insieme di bit (flag), a ognuno dei quali è attribuito un significato particolare. I bit di stato più comuni sono i seguenti: – C (bit di carry), chiamato anche bit di riporto: contiene il valore binario 1 se nell’operazione eseguita dall’ALU c’è stato un riporto; – N (bit di segno), chiamato anche bit di negatività: contiene 1 se il risultato dell’operazione terminata è negativo; – Z (bit di zero): contiene 1 se il risultato dell’operazione conclusa è a zero; – O (bit di overflow): contiene 1 se nell’operazione conclusa c’è stato un trabocco; – P (bit di parità): contiene 1 se il risultato dell’operazione è costituito da un numero pari di cifre 1. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 11 Linguaggio macchina e formato delle istruzioni Le istruzioni di un programma da eseguire, residente in memoria centrale, sono codificate in linguaggio macchina, unico linguaggio comprensibile alla CPU. Il linguaggio macchina è composto da un insieme di istruzioni macchina (espresse utilizzando il codice binario). Tali istruzioni svolgono ciascuna una funzione elementare, eseguibile direttamente dalla CPU. Per poter eseguire il programma è necessario che tutte le istruzioni macchina che lo compongono siano contenute nella memoria centrale in parole adiacenti. Per quanto riguarda la natura funzionale delle istruzioni, queste possono essere divise in cinque gruppi, cioè l’insieme minimo di classi di istruzioni eseguibili dalla CPU. • Istruzioni di input/output dei dati: con queste istruzioni si opera sui dispositivi che trasferiscono i dati dalle unità di input alla memoria centrale del computer (o da quest’ultima alle unità di output). Ad esempio: “Leggi N” oppure “Stampa N”. • Istruzioni aritmetico-logiche: con queste istruzioni si eseguono le operazioni di calcolo (come l’addizione o la divisione) e le operazioni logiche (AND, OR, NOT e così via). • Istruzioni di controllo e di salto: con queste istruzioni si interviene per alterare la sequenza di un programma in fase di esecuzione, saltando senza che si verifichi alcuna condizione verso un altro punto del programma (salto incondizionato), oppure saltando un determinato gruppo di istruzioni in conseguenza del risultato di un test (salto condizionato). Ad esempio, un’istruzione di salto condizionato potrebbe essere: “Vai a eseguire l’istruzione 200 se il dato nella posizione di memoria x è positivo”. • Istruzioni per lo spostamento dei dati: con queste istruzioni si spostano i dati all’interno della memoria centrale. Ad esempio: “Sposta il dato contenuto nella posizione di memoria 4500 alla posizione 5000” (assegnazione). • Istruzioni di riordino o di controllo macchina: con queste istruzioni non si opera direttamente per l’esecuzione di un programma, ma per ripristinare le condizioni del computer. Ad esempio “Riavvolgi il nastro n° 3”. La lunghezza di un’istruzione macchina può variare da computer a computer, in quanto ognuno ha il proprio linguaggio macchina. In generale, ogni istruzione macchina può avere una lunghezza pari a un multiplo della parola di memoria. Per quanto riguarda la forma, ogni istruzione macchina si può suddividere in due campi: • un campo codice operativo, che identifica il tipo di operazione da eseguire; • un campo operandi, che contiene i dati o gli indirizzi dei dati o, ancora, riferimenti a registri sui quali sarà eseguita l’operazione descritta dal codice operativo. Il campo operandi può essere composto da più campi ma, generalmente, non sono mai più di tre. CODICE OPERATIVO CODICE OPERATIVO 12 OPERANDI OPER. 1 OPER. 2 ... OPER. N Molto spesso sono soltanto uno o due o, addirittura, nessuno. In assenza di operandi, l’istruzione sarà composta, naturalmente, dal solo codice operativo. Nel caso di tre operandi, invece, il terzo indica, normalmente, dove porre il risultato. START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER Riportiamo un esempio di istruzione a tre operandi. Supponiamo che l’istruzione da eseguire, scritta in pseudolinguaggio, sia la seguente: C←A+B Naturalmente, i dati contenuti nelle variabili A e B sono contenuti in memoria centrale in apposite celle. Supponiamo che l’indirizzo della cella contenente la variabile A sia 1010 e quello della variabile B sia 1011. Un esempio di istruzione macchina che realizza tale istruzione potrebbe essere la seguente: “Somma il dato contenuto nella cella di memoria avente indirizzo 1010 al dato contenuto nella cella di indirizzo 1011 e poni il risultato nella cella di memoria di indirizzo 1101” dove 1101 è l’indirizzo della cella di memoria che ospiterà il contenuto della variabile C. Se immaginiamo che il codice operativo dell’operazione somma sia 0101, l’istruzione macchina potrebbe essere così rappresentata: 0101 1010 1011 1101 Dall’esempio si evince che, spesso, per eseguire un’istruzione macchina, la CU è costretta a eseguire un insieme di passi elementari: nella nostra somma, infatti, la CU ha dovuto dapprima prelevare i due dati, poi effettuare la somma, poi, ancora, memorizzare il risultato. Quindi, per eseguire un’istruzione in linguaggio macchina occorre eseguire un determinato numero di operazioni, che devono essere necessariamente descritte per mezzo di istruzioni elementari direttamente eseguibili dai componenti hardware del computer. In passato, l’esecuzione di un’istruzione veniva svolta dalla CU per mezzo di una rete di circuiti logici. In particolare, veniva assegnata a ogni istruzione macchina una rete di circuiti logici che eseguivano e controllavano tutte le operazioni elementari necessarie per eseguire l’istruzione in questione. In questi casi si parlava di elaboratori a logica cablata. Questi elaboratori erano contraddistinti da una comprensibile rigidità e da una notevole limitazione delle prestazioni. Con l’evolversi della tecnologia e con l’attenta osservazione che la maggior parte delle operazioni elementari erano comuni a molte istruzioni macchina, nacque una nuova logica di esecuzione delle istruzioni, basata sulla tecnica di microprogrammazione. Secondo questa tecnica, le istruzioni macchina non sono più le istruzioni di livello più basso; ne esistono infatti altre di livello ancora più basso (le istruzioni elementari), dette microistruzioni, che vengono registrate all’interno di una memoria ROM. In questo caso, l’esecuzione di un’istruzione sarà effettuata attivando il microprogramma (cioè un gruppo di microistruzioni) appositamente predisposto. I microprogrammi memorizzati permanentemente in una memoria ROM costituiscono, come già sappiamo, il firmware della macchina. I computer che eseguono le istruzioni, sfruttando tale tecnica si dicono a logica programmata. I computer di oggi sono a logica programmata e risultano, evidentemente, più potenti e dotati di maggiore flessibilità. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 13 L’esecuzione delle istruzioni È ormai chiaro che l’elaborazione delle istruzioni di un programma consiste nell’esecuzione, da parte della CU, di una precisa successione di passi elementari: • prelevamento dalla memoria centrale dell’istruzione che deve essere eseguita (fase di fetch); • interpretazione dell’istruzione, ossia determinazione del “cosa deve svolgere l’istruzione” (fase di decode); • esecuzione dell’istruzione (fase di execute). A tal proposito: – e l’istruzione è di input, la CU comanda ai dispositivi preposti di introdurre i dati in memoria centrale; – se l’istruzione è di output, la CU comanda alle unità di output di inviare all’esterno i dati registrati nella memoria centrale; – se l’istruzione è di elaborazione, la CU comanda il prelevamento dei dati dalla memoria centrale e li invia all’ALU, alla quale impartisce compiti per l’elaborazione. Poi provvederà a registrare il risultato ottenuto nella memoria centrale. Vediamo come avviene l’esecuzione del programma e quali sono le risorse coinvolte. 1. L’esecuzione del programma inizia sempre con l’assegnazione al registro PC dell’indirizzo della prima istruzione in memoria centrale. 2. L’indirizzo di memoria contenuto nel registro PC viene trasferito nel registro MAR e inviato alla memoria tramite il bus degli indirizzi. 3. La memoria preleva l’istruzione, il cui indirizzo è specificato nel MAR, e carica il registro MDR. Può succedere che, a causa della lunghezza dell’istruzione, ne venga prelevata solo una parte. Essa deve contenere il codice operativo, per poter risalire all’istruzione e poterne prelevare la parte rimanente. 4. Il contenuto del registro MDR viene inviato alla CPU per mezzo del bus dei dati e, giunto a destinazione, viene depositato nel registro IR. 5. Il decodificatore provvede a interpretare il codice operativo dell’istruzione presente nel registro IR per “capire” il tipo di operazione richiesta e identificare il microprogramma necessario per eseguirla. Successivamente, incrementa il registro PC in modo da aver pronto l’indirizzo della successiva istruzione da eseguire. Poiché le istruzioni che compongono il programma vengono memorizzate una dopo l’altra in celle di memoria contigue (secondo l’ordine di esecuzione sequenziale), l’indirizzo di ogni istruzione viene ricavato dall’indirizzo dell’istruzione precedente, più la sua lunghezza. Ad esempio: 10 5 15 istruzione 1 istruzione 2 istruzione 3 10 20 25 40 6. Terminate tutte le operazioni preliminari, la CU, in base al tipo di operazione, attiva il microprogramma preposto a eseguirla. Se l’istruzione prevede dei calcoli, viene richiesto l’intervento dell’ALU, che provvederà anche a prelevare dalla memoria centrale gli operandi e a depositarli nei registri accumulatori. 7. Terminata l’esecuzione, i risultati presenti nei registri accumulatori vengono trasferiti in memoria centrale. 8. E ora si ricomincia con la successiva istruzione! Si riparte dal punto 2. 14 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER L’intero procedimento viene chiamato ciclo di istruzione ed è realizzato attraverso più microoperazioni. L’esecuzione delle microoperazioni avviene per passi detti cicli macchina, costituiti da una sequenza di operazioni elementari che la CU deve eseguire ogni volta che deve accedere in memoria o alle unità di I/O. Ogni singolo ciclo macchina deve avvenire in modo regolare. Per questo tutti i segnali inviati dalla CU per l’attivazione di qualunque dispositivo vengono impartiti in sincrono con un orologio interno alla macchina: il clock. A ogni colpo di clock, viene inviato un segnale e quindi viene compiuta una microistruzione. Per questo motivo il ciclo macchina viene anche chiamato ciclo di clock. Utilizzando una metafora possiamo affermare che, se la CPU rappresenta il “cervello” del computer, il clock ne è, sicuramente, il “cuore”. Il clock è un orologio molto veloce: non può essere paragonato ai nostri orologi da polso! La sua frequenza, infatti, è dell’ordine dei mega/gigahertz, ossia di milioni/miliardi di cicli al secondo. Ad esempio, la frase “Un computer lavora a 3 GHz” ci dice che in un secondo vengono eseguiti 3 miliardi di cicli di clock. stop Questa frequenza è un importantissimo indice della velocità del computer. Mediamente, però, per poter eseguire alcuni tipi di operazioni sono necessari più colpi di clock: per questo motivo, possiamo anche misurare la velocità del computer in MIPS (Millions of Instructions Per Second = “milioni di istruzioni per secondo”). È evidente che il numero di colpi di clock è quasi sempre superiore al numero di istruzioni da eseguire e, per questo motivo, la velocità espressa in MIPS è sempre inferiore a quella espressa in GHz. leggi scrivi UNITÀ DI CONTROLLO PC bus controllo MEMORIA CENTRALE bus indirizzi IR MAR MDR bus dati PSW registro registro ... registro stato ALU esegui operazione UNITÀ CENTRALE DI ELABORAZIONE ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 15 Le porte e le periferiche Il computer è composto anche da altre unità, dette unità di I/O indicate come periferiche, in quanto sono dispositivi (device) esterni all’unità centrale. Il loro compito è quello di fungere da collegamento tra il computer (inteso come memoria e CPU) e il mondo esterno (l’utente). Un computer usa, generalmente, più periferiche di diverso tipo, ognuna delle quali ha un suo compito particolare: alcune si preoccupano dell’introduzione delle informazioni (input), altre permettono la visualizzazione dei risultati dell’elaborazione (output), altre ancora permettono di trasmettere o di memorizzare permanentemente dati e programmi. Ogni periferica necessita di un’interfaccia per gestire lo scambio dei dati con la CPU. L’interfaccia è composta da dispositivi hardware e software. I dispositivi hardware sono le interfacce di I/O e i controller, mentre il dispositivo software viene detto driver di periferica. Le interfacce di I/O sono serie di circuiti specifici per ogni dispositivo periferico che consentono di interconnettere quest’ultimo con il modulo base. Permettono, quindi, di instaurare un “dialogo” tra la periferica e la CPU. Il collegamento delle periferiche avviene tramite cavi connettori che si inseriscono per mezzo di apposite prese, dette porte. Dal punto di vista della modalità di trasmissione, le porte si distinguono in seriali e parallele. Nelle porte seriali i dati viaggiano, come dice la parola stessa, in serie, uno dopo l’altro. Nelle porte parallele i dati viaggiano in gruppi. Anche i cavi connettori sono seriali o paralleli e sono fisicamente diversi tra loro, in modo da non consentire il collegamento di un cavo parallelo a una porta seriale e viceversa. Un particolare tipo di porta parallela è la porta SCSI (Small Computer System Interface), che consente di collegare più dispostivi insieme, ad esempio dischi fissi e periferiche ad alta velocità. Un particolare tipo di porta seriale, invece, è la porta MIDI (Musical Instrument Digital Interface), che permette di collegare al computer vari tipi di strumenti musicali. La porta FireWire (IEEE 1394) è una porta di comunicazione molto veloce (può arrivare a 800 MB/s) solitamente utilizzata per trasferire dati dalle fotocamere e dalle videocamere digitali. Anche questa interfaccia consente il collegamento delle periferiche quando il computer è già acceso (hotplug). La PCMCIA (Personal Computer Memory Card International Association), un’associazione commerciale che comprende più di quattrocento società produttrici di materiale hardware e software, ha sviluppato lo standard per le PC card. Si tratta di speciali adattatori, del formato di una carta di credito, per PC e altri sistemi elettronici. Lo speciale tipo di connettore studiato per i PC portatili è rappresentato dalla porta PCMCIA. Le schede PCMCIA possono contenere modem, espansioni di memoria, porte, hard disk e altro. Tra gli obiettivi di questo tipo di schede vi è l’interscambiabilità tra le PC card e altri sistemi, come, ad esempio, distributori automatici o macchine fotografiche digitali. 16 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER Il formato di connessione USB (Universal Serial Bus) sostituisce le porte seriali, più lente, e supporta un collegamento a cascata di numerose periferiche, fino a 127 dispositivi in sequenza sulla stessa porta. Ciò consente di evitare l’utilizzo di slot interni al PC. L’USB è un formato di connessione che supporta l’hotplug, cioè consente di collegare e scollegare “a caldo”, ovvero a computer acceso, dispositivi che vengono automaticamente riconosciuti dal computer grazie alla funzione plug & play. Una porta USB 1.1 può trasferire dati a una velocità massima di 12 MB/s, mentre il più recente standard USB 2.0 è in grado di trasferire dati a una velocità massima di 480 MB/s (simile a FireWire). Questo formato è del tutto compatibile con la precedente versione USB 1.1; ciò significa che le periferiche USB 2.0 possono essere collegate e funzioneranno normalmente, seppure alla velocità delle USB 1.1. Per sfruttare interamente le potenzialità di USB 2.0, le periferiche devono essere abilitate per questa tecnologia e collegate a una porta USB 2.0. La porta a infrarossi (IRDA) è una porta seriale senza fili che funziona grazie ai raggi infrarossi, proprio come i telecomandi dei televisori. È bidirezionale e raggiunge una velocità di trasmissione bassa (9600 bit al secondo). È utile per collegare tastiere e mouse o altre apparecchiature che non necessitano di alta velocità. I miglioramenti apportati a questa porta hanno consentito di aumentarne la velocità fino a 4 Mbps. Il trasferimento dei dati è possibile solo se le porte “si vedono” e la loro distanza non supera i 2-3 metri. Un’alternativa alla tecnologia a raggi infrarossi è rappresentata da BLUETOOTH, che consente di collegare diversi dispositivi (ad esempio cellulari, stampanti, notebook o computer desktop dotati della stessa tecnologia) a una distanza di 10 metri senza fili e alla velocità di 1 Mbps senza la necessità che i dispositivi siano orientati tra di loro per poter funzionare in maniera corretta. Una caratteristica interfaccia di I/O, che merita un accenno, è la scheda video. Si tratta di un vero e proprio processore dedicato alla gestione del video. La qualità di questi dispositivi dipende dalla quantità di pixel che riescono a visualizzare e dalla velocità di elaborazione delle immagini. I moduli di interfaccia contengono in genere una particolare memoria, detta buffer (o memoria di transito) sulla quale transitano i dati in ingresso e in uscita. Il buffer viene utilizzato per rendere asincrona la comunicazione tra CPU e periferiche. Chiariamo quest’ultimo concetto: la CPU in genere è il dispositivo più veloce presente in un sistema di elaborazione; se dovesse trasferire i dati a una periferica e aspettare che questa termini l’operazione, vi sarebbe un notevolissimo incremento di tempi morti e un conseguente calo delle prestazioni del computer. Con l’ausilio dei buffer, il problema viene risolto. Quando, ad esempio, la CPU invia i dati di output a una stampante, li memorizza nel suo buffer, in modo da svincolarsi da questa operazione e continuare il suo lavoro. Se il buffer si riempie e restano ancora dei dati da trasferire, allora la CPU è costretta ad arrestare il suo lavoro e attendere che si svuoti la parte di buffer necessaria a contenere i dati non ancora inviati (in seguito vedremo anche come la CPU risolve questo problema). Nei moduli di interfaccia, inoltre, sono presenti porte di I/O che permettono il collegamento fisico con il sistema dei bus attraverso gli slot. In sintesi, quindi, l’interfaccia ha il compito di collegare il sistema dei bus al buffer, per poter realizzare il trasferimento dei dati. La porta di rete (Ethernet) serve per collegare il computer direttamente a una rete di computer senza l’utilizzo del modem. La presa utilizzata è la RJ45, oramai uno standard di fatto. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 17 Le memorie di massa Le memorie di massa, o memorie ausiliarie, sono quelle sulle quali è solo possibile conservare dati e programmi: da esse non può dipendere alcun tipo di elaborazione. Quindi, per poter elaborare dei dati o per poter eseguire programmi registrati su una memoria di massa, occorre dapprima trasferirli nella memoria centrale, unica memoria sulla quale la CPU è in grado di operare. Alla luce di quanto detto, siamo ora in grado di completare il modello di von Neumann. MEMORIE DI MASSA MEMORIA CENTRALE ROM RAM CPU UNITÀ DI INPUT UNITÀ DI CONTROLLO ALU UNITÀ DI OUTPUT Queste memorie presentano le seguenti caratteristiche: • • • • • conservano permanentemente i dati; possono contenere grandissime quantità di informazioni; sono memorie trasportabili; sono meno costose della memoria centrale; sono più lente della memoria centrale. I dispositivi di memoria di massa più comuni sono le memorie magnetiche e le memorie ottiche. I dispositivi magnetici sono costituiti da un supporto piano ricoperto di materiale ferromagnetico, sul quale è possibile memorizzare le informazioni magnetizzando apposite areole (l’equivalente delle celle di memoria). Queste ben si prestano alla memorizzazione di segnali digitali, in quanto possono assumere due stati in base alla direzione del campo magnetico: pertanto, uno stato rappresenterà l’1, l’altro lo 0. La registrazione avviene mediante una testina composta da un traferro, sul quale è avvolto a spirale un filo conduttore. A seconda del verso con cui passa la corrente, il percorso a spirale genera un campo magnetico, effettuando in questa maniera una memorizzazione permanente. Il passaggio delle areole sotto la testina avviene mediante un movimento meccanico a velocità costante del supporto di memorizzazione. La stessa testina si preoccupa anche di leggere i dati memorizzati: per questo motivo la chiameremo testina di lettura/scrittura. Tutte le memorie di massa magnetiche hanno in comune i seguenti parametri: • velocità di movimento del supporto di memorizzazione misurata in pollici/sec; • densità di memorizzazione misurata in bit/pollice; • velocità di trasferimento misurata in bit/sec, pari al prodotto dei due parametri precedenti. 18 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER Tipici supporti magnetici di memorizzazione di massa sono i nastri e i dischi. Il disco è un supporto di memorizzazione di massa costituito da un piatto accuratamente levigato, le cui facce sono ricoperte di sostanza magnetica. L’unità di memorizzazione, invece, è composta da un dispositivo dotato di testine, all’interno del quale il disco ruota velocemente attorno a un asse. Tale dispositivo è chiamato drive e comunica con l’unità centrale grazie al proprio controller. La superficie del disco è composta da tantissime areole magnetizzabili, nelle quali vengono memorizzate le informazioni binarie per mezzo dell’apposita testina di lettura/scrittura. Quanto più piccole sono le areole, tanto più grande sarà la capacità del disco. Le areole si trovano su apposite piste circolari concentriche, denominate tracce, su cui i dati vengono memorizzati sequenzialmente. Ogni traccia è suddivisa in un numero fisso di settori separati da zone neutre, dette gap. I settori diventano sempre più piccoli andando dall’esterno verso l’interno. La quantità di informazioni memorizzabili, però, è sempre la stessa: cambia solo la densità di memorizzazione. I dischi si classificano in: • fissi (hard disk); • rimovibili (floppy disk, flash disk e così via). L’hard disk è costituito da una pila di dischi di alluminio (disk-pack), disposti uno sopra l’altro a un’opportuna distanza, che ruotano intorno a uno stesso asse verticale con velocità uniforme (dell’ordine di circa 7200 giri al minuto). Sono rinchiusi all’interno di un contenitore ermetico, nel quale è presente un braccio a forma di pettine, sulle cui estremità si trovano le testine di lettura/scrittura. L’insieme di tutte le tracce a una fissata distanza dall’asse viene detto cilindro. Ogni singolo braccio meccanico è mobile, ossia ogni braccio contiene una testina di lettura/scrittura per ogni faccia del disco; parleremo quindi di hard disk a testine mobili. Il tempo necessario per poter accedere a un settore, l’unità minima di memoria che può essere letta o scritta, viene chiamato tempo di accesso, si misura in millisecondi (msec) ed è dato dalla somma di: • tempo di posizionamento (o tempo di seek), ossia il tempo necessario affinché la testina si posizioni sulla traccia contenente il settore interessato; il tempo impiegato dipende anche dall’ampiezza dello spostamento (aumenta a mano a mano che ci avviciniamo alle tracce più interne: 1-20 msec); • tempo di latenza, ossia il tempo di attesa necessario affinché il settore interessato passi sotto la testina di lettura/scrittura; tale tempo dipende dalla velocità di rotazione dei dischi e, in media, è uguale al semiperiodo di rotazione dei dischi (0,2-0,6 msec). La velocità di trasferimento è la quantità di byte trasferiti da o verso la memoria di massa e si misura in MB/sec. I dischi magnetici sono supporti di memorizzazione di massa detti ad accesso diretto o casuale, in quanto è possibile posizionarsi direttamente su una singola informazione, a prescindere dalla sua posizione fisica e da tutte quelle che la precedono. È sufficiente conoscere numero di faccia, traccia e settore. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 19 Cache, supporti USB, dischi ottici La cache di disco Per migliorare le prestazioni del sistema, e in particolare per accelerare l’accesso ai dati, la CPU sfrutta la cosiddetta cache di disco, ossia un’area dell’hard disk all’interno della quale vengono memorizzati i dati che la CPU sta per utilizzare. Quando viene letto un settore, i dati contenuti nei settori vicini vengono trasferiti nella cache: in questo modo si evita di rimettere in funzione il disco fisso per reperire questi dati che, presumibilmente, saranno letti successivamente. Il disco fisso può anche essere utilizzato dalla CPU per simulare la memoria RAM. La CPU sfrutta parte del disco come memoria centrale quando devono essere mantenuti aperti più programmi contemporaneamente, o devono essere manipolate grandi quantità di dati che la RAM non è sufficiente ad accogliere. Quest’area dell’hard disk viene detta memoria virtuale. I supporti USB La mania degli USB Flash Disk, detti anche pen drive, che hanno rimpiazzato i vecchi floppy disk, ha contagiato davvero tutti: si tratta di piccoli e pratici dispositivi dotati di connettore USB che permettono di archiviare dati e programmi. I sistemi operativi più recenti possono leggere e scrivere queste memorie senza installare i driver. Inizialmente erano poco più piccoli di un evidenziatore e con capienza variabile fra gli 8 e i 16 MB, ma la nuova generazione si è evoluta moltissimo, e in uno spazio poco più grande di due fiammiferi permette di archiviare da 64 MB a vari GB di dati, più che sufficienti per avere con sé tutto il materiale che si desidera. I supporti ottici Un ultimo gruppo di dispositivi fisici dedicati all’archiviazione delle informazioni sfrutta le cosiddette tecnologie ottiche. Un CD è un semplice pezzo di plastica policarbonata largo circa 12 cm e alto circa 1,2 millimetri. Su di esso è incisa una lunga traccia a spirale che parte dal centro e arriva all’esterno del disco. La caratteristica di avere la spirale che parte dal centro (contrariamente ai dischi in vinile utilizzati in campo musicale) e procede verso l’esterno, permette di avere CD più piccoli dello standard (per esempio i mini-CD, o i CD a forma di carta di credito). La struttura a spirale consente inoltre di massimizzare le prestazioni per l’accesso sequenziale a scapito dell’accesso diretto. La superficie della spirale è formata da una sequenza di aree piane (land). Durante la creazione di un CD, la traccia viene deformata con piccolissimi buchi (bump) creati sulle aree piane. Creando i bump sulla spirale non si fa altro che scrivere i singoli bit di ogni byte: 0 (land) e 1 (bump). Una volta che il pezzo di policarbonato è stato inciso con milioni di bump, uno strato di alluminio riflettente viene stampato per coprirli e proteggerli. Uno strato di acrilico e infine l’etichetta completano il tutto. Per quanto riguarda la lettura, i bit “ottici” sono letti da una testina che emette un fascio di luce (laser) che, durante la rotazione, colpisce le singole aree. Il bump si comporta come uno specchio, per cui la luce incidente viene riflessa e raccolta da un dispositivo sensibile alla luce (diodo fotorilevatore). Il land, invece, cioè l’area piana, non si comporta come uno specchio e, quindi, la luce incidente è diffusa dai rilievi in tutte le direzioni e pertanto non viene rilevato alcun segnale riflesso. 20 START – INFORMAZIONI E CALCOLATORI ARCHITETTURA DEL COMPUTER Etichetta Acrilico Alluminio 125 nm Plastica policarbonata 1,2 mm La velocità di trasferimento dati di un lettore ottico è espressa in byte/carattere al secondo. I primi lettori avevano una velocità di 150 KB al secondo e questo valore è divenuto il riferimento per rappresentare le velocità maggiori. Tali velocità sono indicate con i simboli 2x, 8x, 50x e così via e indicano il multiplo di quella di riferimento; corrispondono, rispettivamente, a 300, 1200, 7500 KB al secondo. Essendo strutturati con una traccia a spirale, i CD sono in grado di massimizzare le prestazioni per l’accesso sequenziale a scapito dell’accesso diretto. • CD-ROM (Compact Disc Read Only Memory). Sono dischi ottici a sola lettura e, come tali, non riscrivibili. Possono memorizzare grandissime quantità di informazioni (anche 2 GB). Per questo motivo vengono utilizzati per contenere intere enciclopedie, film, disegni, prodotti multimediali, che permettono all’utente di chiedere e ricevere informazioni sotto forma di immagini, testi, suoni, animazioni. • CD-WORM (Write Once Read Many). Su questi dischi è possibile effettuare l’operazione di scrittura, ma soltanto nelle parti vuote, servendosi di un particolare dispositivo, detto masterizzatore. È possibile, quindi, memorizzare sequenzialmente e non è possibile alcuna operazione di modifica o cancellazione. Per tali motivi vengono utilizzati soltanto per catalogare e archiviare informazioni non soggette a modifiche. Sono noti come CD-R (dall’inglese Compact Disc-Recordable). La loro capacità varia da 650 a 700 MB, ma possono contenere più di spazio se, durante la masterizzazione, si attiva il processo di over-burn. Esistono anche CD-R che hanno capacità da 800 e 900 MB, ma non sono molto diffusi. Un’ulteriore caratteristica dei CD-R è la velocità di scrittura, che variare da 1x a 52x. I CD-R possono essere scritti in una sola volta o in più riprese (multisessione), ma non possono essere cancellati o riscritti. • CD-WMRA (Write Many Read Always). Sono dischi ottici utilizzati come un normale disco magnetico, in grado, quindi, di consentire la scrittura e l’aggiornamento delle informazioni presenti. Sono conosciuti come CD riscrivibili (CDRW – CD Rewritable) e consentono, quindi, di modificare i dati anche dopo la prima masterizzazione È possibile riscrivere 650 MB di dati per circa 1000 volte. Escludendo la possibilità di cancellare completamente un disco, per il resto i CD-RW sono molto simili ai normali CD-R e, come tali, sono soggetti alle stesse restrizioni: ad esempio, è possibile aggiungere sessioni a un CD registrato, ma non si può scrivere in modo selettivo e, inoltre, le sessioni devono essere chiuse prima di essere lette nei lettori CD-ROM o nei riproduttori. • DVD (Digital Versatile Disc). Sono utilizzati per le correnti applicazioni multimediali (immagini fisse, animate, film e così via); hanno una capacità da 4,7 a 17 GB e hanno quasi del tutto sostituito le videocassette. I DVD, oltre a essere più capienti dei CD, sono caratterizzati anche da una velocità maggiore. Basti pensare che la minima velocità di trasmissione dati di un DVD è nove volte maggiore di quella di un CD; di conseguenza, un lettore DVD da 1x è praticamente equivalente a un lettore CD da 8x. Più esattamente, 1x per un lettore DVD equivale a 1350 kB/s, mentre 1x per un lettore CD equivale a 150 kB/s. Per leggere questi supporti è necessario un apposito lettore. Un lettore per DVD legge anche i normali CD. Un ultimo supporto di memorizzazione a tecnologia ottica è il MOD (Magneto Optical Disk), o semplicemente MO. Ne esistono di tre misure: 3,5 pollici (come i vecchi floppy), 5,25 pollici e 12 pollici. La capacità cresce con le dimensioni. L’uso di questi dischetti estraibili è piuttosto raro, in genere i dischi magneto-ottici vengono impiegati in batterie di dischi interni (tipo hard disk), che possono arrivare a sfiorare la capacità di 1 terabyte. ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 21 Come contavano i nostri antenati Il concetto di numerazione si riferisce al problema fondamentale di rappresentare i numeri, che sono infiniti, con un numero finito di segni: le cifre. L’uomo fin dalle origini della storia ha avvertito la necessità di contare e per farlo utilizzava gli strumenti che aveva a disposizione: mani, pietre, bastoncini. I cumuli di pietre erano mezzi troppo precari per la conservazione di informazioni, perciò l’uomo preistorico talvolta registrava i numeri incidendo intaccature su un bastone o su un osso. Molti anni fa in Cecoslovacchia è stato ritrovato un osso di lupo che presenta cinquantacinque intaccature profondamente incise in due serie: venticinque nella prima e trenta nella seconda; all’interno di ciascuna serie le intaccature sono distribuite in gruppi di cinque. Già da questo esempio si comprende che l’idea di numero è molto più antica di quanto possiamo immaginare, più antica dei progressi tecnologici come l’uso dei metalli. L’idea di numero precede la nascita della civiltà e della scrittura, nel senso comune del termine, infatti sono stati ritrovati resti archeologici a cui è riferibile un significato numerico, come l’osso di lupo appena descritto, che risalgono a circa 30.000 anni fa. Con il passare del tempo, spinto dal bisogno di ampliare le sue possibilità di conteggio, l’uomo cominciò a pensare all’uso di simboli ai quali assegnare un valore particolare. Pensiamo agli antichi Egizi. Comprendere il mistero della numerazione geroglifica egiziana fu piuttosto semplice. Gli Egizi riuscivano a incidere sulla pietra numeri superiori al milione. Un unico trattino verticale rappresentava l’unità, un archetto capovolto indicava 10, un laccio simile a un punto interrogativo rappresentava 100, un fiore di loto 1000, un dito piegato 10000, un barbio (simile a un girino) 100000 e una figura inginocchiata (forse il dio dell’infinito) 1000000. Numero 1 Simbolo 10000 10 100 Numero 100000 1000000 1000 Mediante la ripetizione di questi simboli si poteva scrivere, per esempio, il numero 3673 in questo modo: Mentre il numero 4622 veniva scritto come: 22 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Simbolo Talvolta le cifre più piccole venivano collocate a sinistra, altre volte venivano disposte verticalmente. I simboli stessi potevano essere orientati in senso contrario: il laccio, per esempio, poteva essere convesso verso destra o verso sinistra. Questo era un primo esempio di sistema di numerazione in base dieci. Gli antichi Romani utilizzavano sette simboli, a ognuno dei quali attribuivano un particolare valore: I 1 V 5 X 10 L C D M 50 100 500 1000 Tutti gli altri numeri venivano ottenuti con opportune combinazioni di simboli che simulavano la somma algebrica. Per esempio, il numero 7 si otteneva come: 5+1+1 ossia V+I+I = VII Il numero 1762 veniva rappresentato nel seguente modo: 1000+500+100+100+50+10+1+1 ossia: M+D+C+C+L+X+I+I = MDCCLXII Il numero 1952, infine, si otteneva come: 1000+(1000–100)+50+1+1 ossia: M+(CM)+L+I+I = MCMLII E infine, pensiamo ai Greci. In Grecia pare vi fossero due sistemi principali di numerazione: uno noto come il sistema attico (o erodianico), l’altro detto sistema ionico (o alfabetico). Entrambi erano fondati sulla base dieci. Il sistema attico è più primitivo ed era basato su un semplice schema iterativo proprio come quello che abbiamo riscontrato nella numerazione geroglifica egiziana. In questo sistema i numeri da uno a quattro erano rappresentati da trattini verticali ripetuti. Per il numero cinque si usava un nuovo simbolo: la prima lettera P (o G) della parola cinque, pente, rappresentata dal simbolo G. Per indicare i numeri dal sei al nove, il sistema attico aggiungeva al simbolo G dei trattini che indicavano le unità. Per esprimere le potenze intere positive della base venivano adottate le lettere iniziali delle corrispondenti parole numeriche: D per deca (dieci), H per hekaton (cento), X per khilioi (mille) e M per myrioi (diecimila). Fatta eccezione per la forma dei simboli, il sistema attico era molto simile a quello romano, ma aveva un vantaggio rispetto a quest’ultimo: mentre i Romani utilizzavano simboli diversi per indicare 50 e 500, i Greci li scrivevano mediante la combinazione delle lettere che indicavano 5, 10 e 100: usavano quindi: (cioè 5 volte 10) per indicare 50 e (cioè 5 volte 1000) per indicare 5000 Di un certo interesse era anche il sistema vigesimale degli antichi Maya, che utilizzava come base dei calcoli il numero 20, cioè la somma delle dita dei mani e dei piedi. La conchiglia era il simbolo dello zero; il punto equivaleva a uno; la barra (––) a 5. Questo sistema di numerazione, di tipo posizionale e non additivo come quello romano, permetteva di calcolare somme molto grandi. Si trattava in effetti di un sistema certamente migliore di quelli egiziano e greco-romano, tanto che i conquistatori spagnoli rimasero impressionati dalla rapidità con cui i Maya erano in grado di contare i semi di cacao, senza disporre di misure di capacità o peso, che vendevano uno a uno in quantità varianti da 400 a 8.000. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 23 Sistemi addizionali e sistemi posizionali Sistemi addizionali e sistemi posizionali Cominciamo dalla definizione di sistema di numerazione. Si definisce sistema di numerazione un insieme di simboli e di regole che permettono di rappresentare i numeri e possibilmente alcune operazioni che si possono effettuare su di essi. Per definire un sistema di numerazione è necessario indicare: • un insieme di simboli detti cifre; • una sintassi, cioè un insieme di regole che specificano come costruire i vari numeri. Per comprendere la differenza tra sistemi addizionali e sistemi posizionali, considera con attenzione quanto segue. Abbiamo visto che nella numerazione romana si utilizzano tra gli altri i simboli I, V, X, L, C, mentre nella nostra abituale numerazione decimale i simboli sono esattamente 10, ossia: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. I simboli quindi sono diversi, ma è altrettanto importante il fatto che sono diverse le regole in base alle quali si scrivono i numeri (sintassi). Per renderci conto di questo facciamo alcuni semplici esempi. Consideriamo il numero romano XXXII. Tenendo conto che i Romani sottintendevano il segno di addizione, possiamo dire che corrisponde al numero: X+X+X+I+I= 32. Consideriamo, ora, le due scritture: IX e XI Sappiamo che IX rappresenta il numero naturale 9, mentre XI rappresenta il numero 11. È noto infatti che, nel sistema di numerazione adottato dai Romani, il simbolo I, se è posto prima di un altro simbolo, sottrae una unità, mentre se è posto dopo un altro simbolo aggiunge una unità al simbolo che lo precede. Riprendiamo, ora, il numero XXXII. Se pensassimo di tradurlo simbolo per simbolo in cifre arabe otterremmo: X 10 X 10 X 10 I 1 I 1 con un valore numerico completamente diverso. Come mai? Qui entra in gioco la differenza di sintassi. Osserviamo allora che il sistema di numerazione romano è additivo o addizionale. In un sistema addizionale la regola per rappresentare un numero è relativamente semplice: il valore di ciascun simbolo viene sommato se immediatamente alla sua destra compare un simbolo di valore inferiore o uguale (oppure se è l’ultimo), altrimenti viene sottratto. Il sistema additivo, però, non è esente da possibili ambiguità e quindi potenziale confusione, come si nota subito quando ci si trova davanti a numeri quali XIX, che potrebbe essere interpretato come: X+I+X =21 oppure come: X+(I – X) =19 valore che effettivamente gli viene attribuito, o anche: X+I – X =? Viene spontaneo pensare che questo tipo di sistema non sia poi tanto comodo. 24 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Un altro svantaggio dei sistemi di questo tipo risiede nelle dimensioni delle rappresentazioni che si ottengono (in termini di quantità di simboli impiegati): i simboli hanno un valore fissato indipendentemente dalla posizione che occupano e quindi la codifica di un numero ha una lunghezza proporzionale al numero stesso. Il sistema addizionale è stato molto usato nel passato, anche se, come abbiamo appena detto, era caratterizzato da notevoli svantaggi. La svolta decisiva che condusse all’introduzione dei sistemi posizionali avvenne intorno all’anno 500 d.C. grazie al matematico indiano Aryabhata, che riprese l’idea dell’astronomo babilonese Naburian (400 a.C.) e introdusse il concetto di numero zero. Fino ad allora, infatti, nessuno si era preoccupato di contare “zero cose”, ossia nulla. Dopo attenta analisi su che cosa rappresentasse questo numero, e una volta compresa la sua grande utilità, gli Arabi lo introdussero nell’Occidente permettendo, così, il passaggio dai sistemi addizionali ai nostri sistemi posizionali o pesati. In un sistema di numerazione posizionale una stessa cifra (0, 1, 2, 3...) assume valori diversi (cioè ha un peso diverso) a seconda della posizione che occupa all’interno di un numero. Un sistema di numerazione posizionale è definito da: • una base b che indica il numero di simboli utilizzato per rappresentare tutti i numeri (per esempio, base 2, base 10, base 16 e così via) e quante unità dell’ordine inferiore servono per formare una unità dell’ordine immediatamente superiore; • un insieme c di cifre distinte (naturalmente l’insieme è costituito da b cifre distinte. Nel sistema a base 5, per esempio, avremo 5 cifre distinte, in quello a base 8 ne avremo 8 e così via). Ogni cifra può assumere un valore compreso tra 0 e b – 1. A ognuna di queste cifre possono essere assegnati due valori: uno che dipende esclusivamente dalla forma della cifra, e che pertanto potremmo chiamare valore facciale, e uno legato alla posizione della cifra nel numero, a partire dalla virgola verso destra o verso sinistra, al quale si dà appunto il nome di valore posizionale; • un insieme di regole necessarie per poter interpretare il numero, per contare e per eseguire le operazioni. Ogni numero si esprime come somma dei prodotti di ciascuna cifra per la base elevata all’esponente che rappresenta la posizione della cifra stessa. Vediamo alcuni esempi: 7 70 700 77 777 7,7 7,77 rappresenta sette unità (valore facciale) =7*10 rappresenta settanta unità =7*100 rappresenta settecento unità =70+7=7*10+7 =700+70+7=7*100+7*10+7 =7+ 7 10 =7+ 7 + 7 10 100 Abbiamo dunque scritto sette numeri usando sempre lo stesso simbolo dal valore facciale equivalente a sette unità, però il valore del numero rappresentato cambia a mano a mano che varia la posizione della cifra 7. Così dal valore di sette unità siamo passati a settanta e successivamente a settecento. Poi, da settantasette siamo passati a settecentosettantasette e infine abbiamo rappresentato 7+sette decimi di unità e 7+sette decimi di unità+sette centesimi di unità. Per concludere possiamo dire che nel sistema posizionale, proprio perché esiste una regola per passare da una cifra alla precedente e alla seguente, ogni numero, per quanto grande, può essere scritto con pochi simboli elementari, il numero dei quali dipende dal sistema di numerazione prescelto. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 25 I sistemi di numerazione decimale e binario Il sistema di numerazione decimale Aristotele, uno dei più innovativi e prolifici uomini di cultura del mondo antico, notò che l’uso della base decimale per il sistema di numerazione si doveva al fatto che siamo nati con dieci dita dei piedi e dieci dita delle mani. Il sistema di numerazione decimale, o sistema in base 10, è un sistema posizionale e utilizza le seguenti dieci cifre decimali: 0 1 2 3 4 5 6 7 8 9 Queste cifre, opportunamente combinate, permettono di rappresentare qualsiasi numero. I numeri superiori a 9 vengono formati con più di una cifra. Prendiamo in esame il numero 238. Sappiamo bene che la cifra 8 rappresenta le unità, la cifra 3 le decine e la cifra 2 le centinaia. Ma attenzione: dire 3 decine o 30 unità non è forse la stessa cosa? E dire 2 centinaia o 200 unità non è anche la stessa cosa? Da questo esempio si ricava una regola di base: a mano a mano che ci spostiamo verso sinistra, il valore di una cifra viene ricondotto alle unità moltiplicandolo per il suo peso, ossia moltiplicandolo per 10 elevato a un esponente pari alla posizione occupata: Posizione 6 5 4 3 2 1 Peso 106 105 104 103 102 101 Valore milioni centinaia decine migliaia centinaia decine del peso di migliaia di migliaia 0 100 unità Nel numero 238, quindi, il numero 3 ha il suo valore intrinseco che è, appunto, 3, ma ha un valore posizionale di 3*101. Analogamente, il 2 ha il suo valore intrinseco 2, ma ha un valore posizionale di 2*102. A questo punto possiamo dire che il numero 238 può essere espresso nel seguente modo: 2*102 + 3*101 + 8*100 = 2*100 + 3*10 + 8*1 = 200 + 30 + 8 = 238 Ora analizziamo il numero 1258,64. In questo caso ci troviamo di fronte a un numero composto da un parte intera e da una decimale. Per esprimere i valori delle singole cifre dobbiamo servirci anche della tabella seeguente, che riporta i pesi delle cifre poste alla destra della virgola decimale: Posizione Peso Valore del peso 1 10-1 decimi 2 10-2 centesimi 3 10-3 millesimi 4 5 6 -4 -5 10 10 10-6 decicentimilionesimi millesimi millesimi A questo punto il numero può essere espresso nel seguente modo: 1*1000+2*100 +5*10 +8*1 +6*1/10 +4*1/100 = 1000 +200 +50 +8 +0,6 +0,04 = 1258,64 In generale, quindi, possiamo scrivere ogni numero come combinazione di potenze di 10: numero = cn*10n+cn–1*10n–1+...+c0*100+c–1*10–1+c–2*10–2 ... dove: • c0 ... cn possono avere i valori da 0 a 9; • 10 è la base. 26 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Generalizzando la formula e indicando con b la generica base otteniamo: numero = cn*b n+cn–1*b n–1+...+c0*b 0+c–1*b –1+c–2*b–2 ... Tale forma costituisce la cosiddetta notazione polinomiale o espansa, così chiamata proprio perché viene evidenziato il valore di ogni cifra. Il sistema di numerazione binario All’interno di un computer la rappresentazione di tutte le informazioni è di tipo numerico. La base di rappresentazione è di tipo binario, cioè si basa su un sistema di numerazione che è costituito da due soli simboli 0 e 1 dette cifre binarie o bit, termine derivante dalla contrazione di Binary Digit. Questa circostanza deriva dal fatto che le macchine elettroniche numeriche sono costituite da unità fisiche elementari, le quali sono in grado di operare con due soli livelli stabili. Un numero binario è un numero composto da una sequenza di 0 e di 1, e i pesi associati a queste due cifre sono, naturalmente, potenze della base 2. Posizione ... 6 5 4 3 2 1 0 Peso ... 26 25 24 23 22 21 20 . . 1 2–1 2 2–2 3 2–3 4 2-4 5 2-5 ... ... Benché 0 e 1 siano simboli che possono appartenere sia al sistema di numerazione decimale che a quello binario, non c’è ambiguità nella rappresentazione, purché sia definito a priori su quale base si sta operando. Infatti, il numero 1101 nel sistema decimale esprime una quantità numerica diversa rispetto al sistema binario. Il numero 735 non pone questa ambiguità, poiché il sistema binario non dispone dei simboli 7, 3, e 5, ma potrebbe rappresentare un numero in una base contenente 8 diversi simboli (da 0 a 7). Per evitare dubbi e ambiguità, all’interno di una formalizzazione rigorosa è corretto rappresentare ogni numero esplicitando la base utilizzata, come in: 1101(2) e 735(10). stop All’interno di un numero, la cifra più a sinistra (cioè quella elevata alla potenza più alta) viene detta cifra più significativa o bit più pesante, mentre la cifra più a destra (cioè quella elevata alla potenza più bassa) è detta cifra meno significativa o bit più leggero). La numerazione naturale si ottiene, analogamente a quanto avviene nel sistema decimale e similmente a tutte le altre basi, per mezzo di una successione ordinata di tutti i simboli disponibili (due nel sistema binario, dieci nel sistema decimale) a partire dalla posizione meno significativa; una volta esauriti i simboli in tale posizione si aumenta di una unità la posizione successiva e si ricomincia la successione dei simboli dall’inizio: Questa sequenza di numeri binari, ciascuno costituito da tre cifre binarie (3 bit), consente di generare 8 diverse combinazioni. Perciò, se includiamo lo zero, con 3 soli bit potremmo contare fino a 7 unità. Ciò conduce alla regola generale secondo la quale disponendo di un numero N di cifre binarie è possibile rappresentare 2N combinazioni e quindi rappresentare come massima quantità positiva il numero 2N–1. Per esempio, con 16 bit si possono ottenere 216 = 65536 combinazioni diverse e quindi esprimere come massima quantità positiva il numero 65535. 3 cifre in base 10: 8 cifre in base 2 (1 byte): 16 cifre in base 2 (2 byte): 32 cifre in base 2 (4 byte): da 0 a da 0 a da 0 a da 0 a 999 = 103–1 255 = 28–1 65535 = 216–1 4294967295 = 232–1 In generale, pertanto, con N cifre in base b possiamo rappresentare bN valori compresi tra 0 e bN–1. Maggiore è il numero di bit a disposizione per la rappresentazione di un numero e maggiore è l’ampiezza dell’intervallo di rappresentazione da 0 a bN–1. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 27 Conversione da binario a decimale e da decimale a binario Conversione da binario a decimale Per conoscere il valore decimale di un numero binario basta esprimerlo in notazione espansa, quindi: moltiplichiamo ciascuna cifra binaria per il suo corrispondente peso e sommiamo alla fine i prodotti ottenuti. Facciamo un esempio utilizzando la seguente tabella: 2n 1 2 4 8 16 32 64 128 256 512 1024 n 0 1 2 3 4 5 6 7 8 9 10 2–n 1.0 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 Nel seguito utilizzeremo spesso il punto decimale al posto della virgola decimale, perché quando si realizzano programmi al computer generalmente occorre procedere in questo modo. Determiniamo il valore decimale del numero binario 100101: 1*25+0*24+0*23+1*22+0*21+1*20= 1*32+0+0+1*4+0+1=32+4+1=37 Quindi 100101(2) = 37(10) Ora determiniamo il valore decimale del numero binario 11111110 1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20= 1*128+1*64+1*32+1*16+1*8+1*4+1*2+0 = 128+64+32+16+8+4+2=254 Quindi 11111110(2) =254(10) stop 28 È prassi comune esprimere verbalmente i numeri binari come sequenze di cifre 0 e 1, quindi il numero 1101 non si legge “millecentouno” (come si farebbe normalmente se la base fosse decimale), bensì “uno uno zero uno”. START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Conversione da decimale a binario Per convertire un numero decimale intero in un numero binario è possibile utilizzare il metodo delle divisioni successive, fondato sulla seguente regola: Si divide il numero N da convertire per due e il resto (che naturalmente può essere soltanto 1 o 0) rappresenta la prima cifra meno significativa del numero binario corrispondente. Successivamente si divide il quoziente ottenuto per due e si ottiene un resto che rappresenta la seconda cifra meno significativa. Si ripete il procedimento fino a quando il quoziente sarà uguale a zero. Come abbiamo già visto, la significatività di una cifra dipende dal suo peso; quindi, all’interno di un numero, la cifra meno significativa è quella che ha il valore posizionale più basso, mentre la cifra più significativa, ovviamente, è quella caratterizzata dal valore posizionale più elevato. Per esempio, nel numero binario 1001100111 avremo: Cifra più significativa Cifra meno significativa 1001100111 Ora trasformiamo il numero decimale 18 nel suo corrispondente binario: 18 9 4 2 1 : : : : : 2 = 2 = 2 = 2 = 2 = 9 4 2 1 0 resto 0 resto 1 resto 0 resto 0 resto 1 Cifra meno significativa Cifra più significativa 10010 Quindi 18(10)=10010(2). Ora trasformiamo il numero decimale 137 nel suo corrispondente binario: 137: 68 : 34 : 17 : 8 : 4 : 2 : 1 : 2 = 2 = 2 = 2 = 2 = 2 = 2 = 2 = 68 34 17 8 4 2 1 0 resto 1 resto 0 resto 0 resto 1 resto 0 resto 0 resto 0 resto 1 Cifra meno significativa Cifra più significativa 10001001 Quindi 137(10)=10001001(2). Un ultimo esempio, trasformiamo il numero decimale 127 in binario: 127: 63 : 31 : 15 : 7 : 3 : 1 : 2 = 2 = 2 = 2 = 2 = 2 = 2 = 63 31 15 7 3 1 0 resto 1 resto 1 resto 1 resto 1 resto 1 resto 1 resto 1 Cifra meno significativa Cifra più significativa 1111111 Quindi 127(10)=1111111(2). ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 29 app.// Conversione da binario a decimale e da decimale a binario Convertiamo il numero binario 100101.101 nel suo corrispondente decimale Il numero da trasformare presenta una parte decimale. Nessun problema! L’unica differenza consiste nel fatto che occorre tenere conto che per i numeri decimali le potenze del 2 sono negative. Quindi: 100101.101(2) = ???(10) ? 1*25 + 0*24 + 0*23 + 1*22 + 0*21 + 1*20 + 1*2–1 + 0*2–2 + 1*2–3 = 1*32 + 0 + 0 + 1*4 + 0 + 1 + 1*1/2 + 0 + 1*1/8 = 32 + 4 + 1 + 1/2 + 1/8 = 32 + 4 + 1 + 0,5 + 0,125 = =37.625 Quindi 100101.101(2) = 37.625(10). Convertiamo il numero binario 111101.1011 nel suo corrispondente decimale 111101.1011(2) = ???(10) ? 1*25 + 1*24 + 1*23 + 1*22 + 0*21 + 1*20 + 1*2–1 + 0*2–2 + 1*2–3 + 1*2–4 = 1*32 + 1*16 + 1*8 + 1*4 + 0 + 1*1 + 1*1/2 + 0 + 1*1/8 + 1*1/16 = 32 + 16 + 8 + 4 + 1 + 1/2 + 1/8 + 1/16 = 32 + 16 + 8 + 4 + 1 + 0,5 + 0,125 + 0.0625 = = 61.6875 Quindi 111101.1011(2) = 61.6875(10). Convertiamo il numero decimale 845 nel suo equivalente binario Ognuno di noi può utilizzare qualsiasi metodo per eseguire la divisione per 2. In precedenza, per esempio, abbiamo effettuato delle divisioni in colonna. Potremmo effetuare la divisione nel modo più classico, oppure servirci di una tabella: sono tutti metodi validi, puoi scegliere quello che più ti sembra comodo. Nel seguente esempio eseguiamo la divisione nel modo classico e tramite una tabella. 845(10) = ?????(2) 845 2 1 422 2 0 211 2 1 105 2 1 52 2 0 26 2 0 13 2 1 6 2 0 3 2 1 1 30 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Dividendo 845 422 211 105 52 26 13 6 3 1 Divisore 2 2 2 2 2 2 2 2 2 2 Quoziente 422 211 105 52 26 13 6 3 1 0 Resto 1 0 1 1 0 0 1 0 1 1 845(10)=1101001101(2) Convertiamo il numero decimale 0.53125 nel suo equivalente binario In questo caso utilizziamo il metodo delle moltiplicazioni successive. Il prodotto ottenuto sarà anch’esso composto da una parte intera e da una decimale. La parte intera, che potrà essere soltanto 1 o 0, rappresenta il nostro bit, mentre la parte decimale continuerà a essere moltiplicata per due. I bit ottenuti saranno scritti uno di seguito all’altro nello stesso ordine in cui sono ottenuti, cioè da sinistra a destra. Il procedimento termina quando da una moltiplicazione si ottiene un prodotto privo di parte decimale (cioè con parte decimale uguale a zero). Tuttavia, se questo non avviene (pensa ai numeri periodici), possiamo bloccare il procedimento dopo aver eseguito un determinato numero di moltiplicazioni. In questo caso, naturalmente, il numero binario ottenuto sarà solo un’approssimazione del numero decimale. Convertiamo il numero decimale 0.53125 nel suo equivalente formato binario. 0.53125 0.0625 0.125 0.25 0.5 * 2 = 1.0625 * 2 = 0.125 * 2 = 0.25 * 2 = 0.5 * 2 = 1.0 la parte intera è 1 la parte intera è 0 la parte intera è 0 la parte intera è 0 la parte intera è 1 la parte decimale è 0. Il numero binario corrispondente è, quindi, 0.10001(2). Ora proviamo a convertire in binario il numero decimale 0.63. 0.63 0.26 0.52 0.04 0.08 0.16 0.32 ... * 2 = 1.26 * 2 = 0.52 * 2 = 1.04 * 2 = 0.08 * 2 = 0.16 * 2 = 0.32 * 2 = 0.64 la parte intera è 1 la parte intera è 0 la parte intera è 1 la parte intera è 0 la parte intera è 0 la parte intera è 0 la parte intera è 0 Come puoi notare, la parte decimale continua a risultare diversa da zero costringendoci a eseguire ulteriori moltiplicazioni. In situazioni di questo tipo conviene stabilire a priori un numero massimo di moltiplicazioni da effettuare. Quindi, se supponiamo di considerare solo cinque bit, l’equivalente numero binario di 0.63(10) sarà 0.10100(2). Convertiamo 0.10100(2) in decimale e vediamo a quale numero corrisponde. 1*2–1 + 0*2–2 + 1*2–3 + 0*2–4 + 0*2–5 = 1*1/2 + 0 + 1*1/8 + 0 + 0 = 1/2 + 1/8 = 0.625 Abbiamo ottenuto 0.625 e non 0.63. L’errore è dato dalla seguente differenza: 0.63 – 0.625 = 0.005 Ci siamo avvicinati moltissimo al numero dato, 0.63, e se avessimo fatto ancora qualche altra moltiplicazione, l’approssimazione sarebbe stata sempre migliore. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 31 ex.] Conversione da binario a decimale e da decimale a binario 1 Trasforma i seguenti numeri binari nel loro corrispondente decimale: • 11001100(2) = ___________(10) 1*27 + …………………………………………………………………………… 128 + ………………………………………………………………………….. • 10101010(2) = ___________(10) 1*27 + …………………………………………………………………………… 128 + ………………………………………………………………………….. • 11110000(2) = ___________(10) 1*27 + …………………………………………………………………………… 128 + ………………………………………………………………………….. 2 Trasforma i seguenti numeri binari nel loro corrispondente decimale: • 01010100(2) = ___________(10) ……………………………………………………………………………………. …………………………………………………………………………………….. • 00000110(2) = ___________(10) ……………………………………………………………………………………. ……………………………………………………………………………………. • 11100110(2) = ___________(10) ……………………………………………………………………………………. ……………………………………………………………………………………. 3 Trasforma i seguenti numeri binari nel loro corrispondente decimale: • 1100.11(2) = ___________(10) ……………………………………………………………………………………. ……………………………………………………………………………………. • 11110.111(2) = ___________(10) ……………………………………………………………………………………. ……………………………………………………………………………………. • 11100.101(2) = ___________(10) ……………………………………………………………………………………. ……………………………………………………………………………………. 4 Trasforma il numero binario 110001 nel suo equivalente decimale utilizzando il metodo di seguito descritto. Con la seguente tabella è facilmente calcolabile il valore decimale di un numero in notazione binaria: Notazione esponenziale Numerazione decimale calcolato Cifre binarie da trasformare 32 ... (212) (211) (210) (29) (28) (27) (26) (25) (24) (23) (22) (21) (20) ... 2048 1024 512 256 128 64 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER 32 16 8 4 2 1 Esempio pratico: dato il numero 110001(2), calcola il suo equivalente in notazione decimale. Notazione esponenziale Numero decimale calcolato ... ... (26) 64 Cifre binarie da trasformare (25) 32 (24) 16 (23) 8 (22) 4 (21) 2 (20) 1 1 1 0 0 0 1 1+16+32=49d Numero decimale: (il 2, il 4 e l’8 sono corrispondenti agli zeri, quindi non vengono conteggiati). 5 Utilizzando il metodo appena descritto, converti il numero binario 1110111(2) nel suo equivalente decimale: Notazione esponenziale Numero decimale calcolato Cifre binarie da trasformare 1110111(2) = ………………………..(10) 6 Trasforma il numero decimale 147(10) nel suo equivalente binario: Dividendo Divisore Quoziente Resto 147(10) = ……………….(2) 7 Trasforma il numero decimale 212(10) nel suo equivalente binario: Dividendo Divisore Quoziente Resto 212(10) = ……………….(2) ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 33 Aritmetica binaria: somma e prodotto Le regole che caratterizzano l’aritmetica binaria sono analoghe alle regole ben conosciute che valgono nel sistema decimale, con il necessario adattamento dovuto all’uso di due soli simboli 0 e 1. Trovi nel seguito le tabelle con tali regole (addizione, moltiplicazione e sottrazione binaria) con alcuni esempi esplicativi su ciascuna operazione. La somma Il procedimento (algoritmo) dell’operazione di somma non cambia qualunque sia la base considerata. Naturalmente le regole da imparare nel caso di una base b sono relative alle sole b2 possibili combinazioni delle cifre da 0 a b–1. Così le 100 regole della base 10 si riducono a 4 nella base 2: stop 0+0 = 0 0+1 = 1 1+0 = 1 1+1 = 0 con riporto 1 + 0 1 0 0 1 1 1 10 Ovvero 0 con riporto di 1 Nell’ultima regola si vede la semplificazione portata dalla base 2: a parità di significato (valore), un numero scritto in base 2 è molto più lungo dell’equivalente scritto in base 10, ma le regole per eseguire la somma sono di gran lunga più semplici. Per il computer questo è essenziale, infatti la velocità della macchina permette di non preoccuparsi eccessivamente della lunghezza dei numeri, mentre le regole per la somma delle coppie di cifre sono legate ai circuiti elettronici che devono eseguirle, e tali circuiti risultano senz’altro più semplici quando occorre realizzare soltanto 4 regole anziché 100. Per la somma di due numeri positivi di lunghezza K possono essere necessari K+1 bit. Se sono disponibili solo K cifre si genera un errore di overflow (termine inglese che significa “trabocco”). Proviamo a sommare i numeri binari 111011 e 1011. Riporto Risultato 1 1 1 1 1 1 0 0 Binario 1 1 1 1 0 1 0 0 0 0 1 1 1 0 + = Overflow Approfondiamo il caso dell’errore di overflow a cui abbiamo fatto cenno in precedenza. Si verifica overflow quando, a partire da due numeri ciascuno di n bit, si ottiene una somma che ha bisogno di (n+1) bit. Consideriamo la base dieci: con tre cifre decimali si possono rappresentare i numeri compresi tra 0 e 999. Il numero successivo (1000) richiede una quarta cifra che, però, non abbiamo. In questo caso si dice che c’è un problema di overflow: si genera un errore perché il numero 1000 non può essere rappresentato. Poiché il numero 999 può essere scritto come 103–1 (ossia 1000–1), possiamo enunciare la seguente regola: con N cifre decimali si possono rappresentare i numeri da 0 a 10N–1. 34 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Facciamo un esempio. Sappiamo che alla rappresentazione decimale si possono applicare le operazioni aritmetiche; vogliamo però usare solo tre cifre decimali. Per questo motivo le successive operazioni di somma produrranno risultati formalmente corretti, ma non rappresentabili con tre cifre: 325 6 12 678 560 999 +158= 483 + 98= 104 + 45= 57 +421= 1099 +923= 1483 + 1= 1000 Ora consideriamo la base due: con tre cifre binarie si possono rappresentare i numeri compresi tra 0 e 23–1 (ossia 8–1). Possiamo enunciare la seguente regola: con N cifre binarie si possono rappresentare i numeri da 0 a 2N–1. Facciamo un esempio: supponiamo di voler effettuare la somma di 5 e 4 in formato binario su 3 bit. Dopo aver effettuato la conversione, eseguiamo la somma. Abbiamo: 101 + 100 = Overflow 1 001 Il prodotto Analogo all’operazione di somma è il prodotto. Anche in questo caso l’operazione si riduce al prodotto di ciascuna coppia di cifre. Nel caso della base 2 tutto si riduce a ricordare l’esiguo numero di 2*2=4 regole, che sono: 0*0 = 0 0*1 = 0 1*0 = 0 1*1 = 1 × 0 1 0 0 0 1 0 1 In definitiva: • il prodotto per zero dà sempre come risultato zero; • il prodotto per 1 dà sempre come risultato il numero stesso. Ora moltiplichiamo i due numeri binari: 0101 e 0010: 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 1 1 0 0 -0 × = + = Come nel sistema decimale, anche nel sistema binario la moltiplicazione è assimilabile a una sequenza di somme del moltiplicando per se stesso tante volte quante sono indicate dal moltiplicatore. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 35 ex.] Aritmetica binaria: somma e prodotto 1 Esegui la somma fra i numeri binari 101 e 111: 1 0 1 + 1 1 1 = ––––––––––––––––– (riporti) 2 Esegui la somma fra i numeri binari 10111 e 11110: 1 0 1 1 1 + 1 1 1 1 0 = –––––––––––––––––––––––––––– (riporti) 3 Esegui la somma fra i numeri binari 1101 e 111: 1 1 0 1 + 1 1 1 = ––––––––––––––––––––––-–- (riporti) 4 Esegui la somma fra i numeri binari 101010 e 1010: 1 0 1 0 1 0 + 1 0 1 0 = ––––––––––––––––––––––––––––––––– (riporti) 5 Esegui la somma fra i numeri binari 1111 e 10101: (riporti) 1 1 1 1 + 1 0 1 0 1 = –––––––––––––––––––––––––––– 6 Correggi la seguente somma: 1 0 1 0 0 1 1 + 1 1 0 0 0 1 1 = –––––––––––––––––––––––––––––––––––––––––––– 1 1 1 1 0 0 1 0 7 Esegui la somma fra i numeri binari 110011 e 111111: 1 1 0 0 1 1 + 1 1 1 1 1 1 = ––––––––––––––––––––––––––––––––– (riporti) 8 Esegui la somma fra i numeri binari 100011 + 1001 + 11011: 1 0 0 0 1 1 + 1 0 0 1 + 1 1 0 1 1 = ––––––––––––––––––––––––––––––––– 36 START – INFORMAZIONI E CALCOLATORI (riporti) ARITMETICA DEL COMPUTER 9 Osserva le seguenti moltiplicazioni tra numeri binari e poi svolgi quelle proposte. Esempio 1. Esegui la moltiplicazione fra i numeri binari 1101 e 101: (riporti) 1 1 0 1 × 1 0 1 = ––––––––––––––––––––––––––––– 1 1 1 1 (riporti) 1 1 0 1 + 0 0 0 0 + 1 1 0 1 ––––––––––––––––––––––––––––– 1 0 0 0 0 0 1 Esempio 2. Esegui la moltiplicazione fra i numeri binari 1011 e 1011: (riporti) 1 1 0 1 × 1 0 1 1 = ––––––––––––––––––––––––––––– 1 1 1 1 (riporti) 1 0 1 1 + 1 0 1 1 + 0 0 0 0 + 1 0 1 1 ––––––––––––––––––––––––––––– 1 1 1 1 0 0 1 10 Verifica che la seguente operazione 11011 × 101 sia stata eseguita correttamente: 1 1 0 1 1 × 1 0 1 = ––––––––––––––––––––––––––––––––– 1 1 0 1 1 + 0 0 0 0 0 + 1 1 0 1 1 ––––––––––––––––––––––––––––––––– 1 0 0 0 1 1 1 1 11 La moltiplicazione può anche essere svolta servendosi delle somme. La regola è la seguente: ogni cifra 1 del moltiplicatore fa scorrere a sinistra le cifre del moltiplicando, aggiungendo tanti 0 quanti ne richiede la sua posizione. Tutti i numeri così ottenuti vengono sommati tra loro. Esempio: se devo moltiplicare 23 × 12, che convertiti in binario si presentano così: 1 0 1 1 × 1 1 0 0 = ––––––––––––––––––––––––––––– 1 0 1 1 1 0 0 0 × 1 0 1 1 1 0 0 = ––––––––––––––––––––––––––––––––––––– 1 0 0 0 1 0 1 0 0 Moltiplicando Moltiplicatore Posizione 0 del moltiplicatore Posizione 1 Posizione 2 Posizione 3 3 posti 2 posti ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 37 Aritmetica binaria: sottrazione e divisione La sottrazione Per quanto possa sembrare strano, i computer non sono in grado di sottrarre, ma solo di addizionare. Sottrarre un numero, però, equivale ad addizionare un numero negativo. Per effettuare la sottrazione tra due o più numeri binari bisogna tenere in considerazione le seguenti regole: 0–0 = 0 1–1 = 0 1–0 = 1 0–1 = 1 con prestito di 1 – 0 1 0 0 1 1 1 0 Sottraendo Con prestito di 1 Minuendo Facciamo un semplice esempio. Dati A = 101101 e B = 11010, otteniamo: 1 1 A 1 0 1 1 0 1 – B 1 1 0 1 0 = ---------------------------A–B 1 0 0 1 1 Partendo da destra, 1 meno 0 è 1 senza bisogno di prestiti; o meno 1 richiede, invece, un prestito di 1 dalla sinistra e quindi otteniamo 10 da cui, sottraendo 1, otteniamo 1; la cifra successiva, avendo prestato 1 a destra diventa 0 che sottratta a 0 restituisce 0; 1 meno 1 dà 0 e così, iterativamente, fino al termine dell’operazione. Per quanto possa sembrare strano, i computer non sono in grado di sottrarre, ma solo di addizionare. Sottrarre un numero, però, equivale ad addizionare un numero negativo. Il computer, che lavora con 0 e 1, non può mettere un segno meno davanti a un numero: per poterlo fare deve complementare a due il numero stesso. Il complemento sarà trattato in modo appropriato nelle prossime unità; per ora ti basti sapere che il complemento a due consiste nel trasformare tutte le cifre del numero: gli 1 diventano 0 e gli 0 diventano 1. Poi, al numero ottenuto si somma 1. Ecco un esempio: 5 – 0 1 0 1 – 3 = 0 0 1 1 = ---- 2 Riporto 0 1 0 1 + 1 1 0 1 = ---------------1 0 0 1 0 Ora facciamo un esempio con il sistema decimale. Se dobbiamo sottrarre 6 da 13, procediamo nel seguente modo: • facciamo il complemento a 10 (perché stiamo usando il sistema decimale) del minuendo (6), ottenendo 4; • sommiamo il complemento (4) al sottraendo (13) ottenendo 17; • togliamo da quest’ultimo il 10 (sempre perché stiamo usando il sistema decimale) e otteniamo come risultato 7, infatti 13–6=7. Ora riportiamo lo stesso esempio, ma questa volta usando il sistema binario: • • • • 38 il numero 13 diventa 1101, il numero 6 diventa 0110; il complemento a 2 (binario) del numero 0110 (6) è 01010; sommiamo questo numero al sottraendo: 01010+01101=10111 (23); togliamo da quest’ultimo il numero 10000 (sarebbe 16 decimale perché 24=16, l’esponente è 4 perchè stiamo usando 4 cifre) e otteniamo 00111 (7). START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Hai notato? Invece di effettuare l’ultima sottrazione, basta togliere la cifra più significativa dal numero ottenuto sommando il complemento e il sottraendo. Infatti: complemento+sottraendo=10111, togliamo la cifrà più significativa e otteniamo 0111; Se quest’ultima cifra è 1 il risultato è positivo, se è 0 il risultato è negativo. La divisione La divisione binaria di due numeri A e B si calcola in modo analogo alla divisione decimale, ottenendo un quoziente Q e un resto R tali che A = B × Q + R. In pratica la divisione binaria si riduce a una successione di sottrazioni, come puoi vedere nel procedimento descritto di seguito. Procedimento per la divisione binaria 1. Si considerano tante cifre del dividendo quante sono le cifre del divisore; se il nu- mero binario espresso dalle cifre del dividendo considerate è minore del divisore, si considera, se esiste, un’ altra cifra del dividendo; se, invece, non esiste, significa che il quoziente Q è 0 e che il resto R è dato dal dividendo. 2. Una volta eseguito il passo precedente, si scrive 1 come cifra più significativa del quoziente e si sottrae il divisore alle cifre considerate del dividendo. 3. Al risultato del passo precedente si aggiunge la cifra immediatamente più a destra del dividendo; se il numero binario così ottenuto è maggiore del divisore si scrive 1 come ulteriore cifra del quoziente e si sottrae da esso il divisore; se, invece, il numero binario è minore del divisore, si scrive 0 nel quoziente. Si aggiunge un’altra cifra del dividendo al numero, se esiste, e poi si scrive 1 come ulteriore cifra del quoziente e si effettua la sottrazione. 4. Il passo precedente viene effettuato finché sono disponibili cifre del dividendo. Quando le cifre del dividendo sono esaurite, il risultato dell’ultima sottrazione è il resto R della divisione. Vediamo subito un esempio che consente di chiarire meglio il concetto. Proviamo a effettuare la seguente divisione: 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 Si considerano le cifre 110 del dividendo; il numero 110 è maggiore del divisore 101; si scrive 1 come prima cifra del quoziente e si calcola la differenza, ottenendo come risultato 1. Si abbassa la cifra 1 del dividendo, ottenendo così 11, che è minore del divisore; si scrive 0 nel quoziente e si abbassa un’altra cifra del divisore ottenendo 111; si scrive 1 come ulteriore cifra del quoziente e si effettua la sottrazione che dà come risultato 10. Si abbassa la cifra 0 dal dividendo e si ottiene 100, che è minore di 101; si scrive 0 come cifra meno significativa del quoziente. Non esistono altre cifre del dividendo e il procedimento termina. 1010 è il quoziente, mentre 100 è il resto della divisione. Come riprova abbiamo: 1 0 1 0 × 1 0 1 = ------------------1 0 1 0 1 0 1 0 – – ------------------1 1 0 0 1 0 + 1 0 0 = ------------------1 1 0 1 1 0 quoziente × divisore + resto = dividendo ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 39 ex.] Aritmetica binaria: sottrazione e divisione 1 Esegui la sottrazione fra i numeri binari 1101 e 1011. 1 1 0 1 – 1 0 1 1 = ––––––––––––– (prestiti) 2 Esegui la sottrazione fra i numeri binari 10101 e 1011. (prestiti) 1 0 1 0 1 – 1 0 1 1 = –––––––––––––––– 3 Esegui la sottrazione fra i numeri binari 11000 e 111. (prestiti) 1 1 0 0 0 – 1 1 1 = –––––––––––––––– 4 Esegui la sottrazione fra i numeri binari 101101 e 11010. (prestiti) 1 0 1 1 0 1 – 1 1 0 1 0 = ––––––––––––––––––– 5 Osserva attentamente il seguente esercizio, che utilizza un nuovo modo di eseguire una sottrazione tra due numeri binari. Esegui le seguenti sottrazioni usando il complemento a 2. • 01011 – 0100000 PROCEDIMENTO • La sottrazione A–B può essere eseguita sommando ad A il complemento a 2 di B. SOLUZIONE: Il complemento a 2 di 0100000 è 1100000. 0 1 0 1 1 + 1 1 0 0 0 0 0 –––––––––––––––––––––– 1 1 0 1 0 1 1 (11) + (–32) –––––––––– (–21) 1101011 è un numero negativo in complemento a 2. Il suo valore assoluto è 0010101, ovvero 21. Quindi il risultato è –21. Utilizzando questo metodo, prova a effettuare le sottrazioni riportate negli esercizi precedenti verificando se ottieni lo stesso risultato. 40 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER 6 Osserva attentamente la seguente divisione tra due numeri binari e la successiva prova di verifica. Esegui la divisione fra i numeri binari 11011 e 11: 1 1 0 1 1 – – 0 – 1 1 1 1 1 1 0 0 1 (4°) 11: 11 = 1 con resto 0 (3°) 1: 11 = 0 con resto 1 (2°) 0: 11 = 0 con resto 0 (1°) 11: 11 = 1 con resto 0 Dunque 11011 : 11 = 1001 con resto 0, ovvero 1001 × 11 = 11011; facciamo la verifica: 1 0 0 1 × 1 1 = –––––––––––––––– 1 0 0 1 + 1 0 0 1 –––––––––––––––– 1 1 0 1 1 Ora esegui la seguente divisione: 11001 : 101 = con resto = 7 Osserva attentamente la seguente divisione tra due numeri binari e la successiva prova di verifica. Esegui la divisione fra i numeri binari 1101011 e 1011: 1 1 0 1 0 1 1 1 0 1 1 ---------– – 1 0 0 1 1 1 0 1 1 ------------------– 1 0 0 0 1 0 1 1 1 0 0 1 (4°) 10011: 1011 = 1 con resto 1000 (3°) 1001: 1011 = 0 con resto 1001 (2°) 100: 1011 = 0 con resto 100 (1°) 1101: 1011 = 1 con resto 10 Dunque 1101011 : 1011 = 1001 con resto 1000, ovvero 1011 × 1001 + 1000 = 1101011; Facciamo la verifica: 1 0 1 1 × 1 0 0 1 = ––––––––––––– 1 1 (riporti) 1 0 1 1 + 0 0 0 0 + 0 0 0 0 + 1 0 1 1 –––––––––––––––––––––– 1 1 0 0 0 1 1 e sommando il resto: 1 1 0 0 0 1 1 + 1 0 0 0 = ---------------------1 1 0 1 0 1 1 Ora esegui la seguente divisione: 111101 : 111 = con resto = ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 41 Il sistema ottale Il sistema di numerazione posizionale ottale (o sistema in base 8) utilizza le seguenti 8 cifre per rappresentare tutti i numeri: 0 1 2 3 4 5 6 7 Un numero ottale, quindi, è composto da una sequenza di cifre comprese tra 0 e 7, e i pesi associati a queste cifre sono, naturalmente, potenze di 8. Posizione ... Peso ... 6 5 4 3 2 1 0 86 85 84 83 82 81 80 . . 1 8-1 2 8-2 3 8-3 4 8-4 5 8-5 ... ... Il numero ottale successivo a 7 (cioè il numero decimale 8) è 10, quello ancora successivo (cioè il decimale 9) è 11, e così via. La conversione di un numero ottale nel suo equivalente decimale, e viceversa, avviene utilizzando le stesse regole descritte nei paragrafi precedenti. Le conversioni Passiamo quindi alle conversioni. Vediamo come convertire un numero ottale nel suo corrispondente decimale. Convertiamo il numero 253.4(8) in decimale servendoci della precedente tabella. 2 * 82 + 5 * 81 + 3 * 80 + 4 * 8–1 = 2 * 64 + 5 * 8 + 3 * 1 + 4 * 1/8 = 128 + 40 + 1 + 0.5 = 171.5 Quindi 253.4(8) = 171.5(10) Proviamo ora il procedimento inverso: convertire un numero decimale nel suo corrispondente ottale. Il numero decimale 22894.26 può essere convertito in ottale nel seguente modo: Dividendo 22894 2861 357 44 5 Divisore 8 8 8 8 8 Quoziente 2861 357 44 5 0 Resto 6 5 5 4 5 Quindi 228944(10) = 54556(8). Ora convertiamo la parte decimale: 0.26 × 8 = 2.08la parte intera è 2 0.08 × 8 = 0.64la parte intera e 0 0.64 × 8 = 5.12la parte intera è 5 0.12 × 8 = 0.96la parte intera è 0 0.96 × 8 = 7.68la parte intera è 7 Ci fermiamo. Il risultato finale è il seguente: 22894.26(10) = 54556.20507(8) 42 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Le conversioni da ottale a binario e da binario a ottale sono immediate. Infatti, se tieni presente che 8 = 23 e che, di conseguenza, qualsiasi cifra ottale è codificabile in binario con tre bit, è facile affermare che: • per convertire un numero ottale nel suo equivalente binario è sufficiente sostituire a ogni cifra ottale il gruppo di tre bit corrispondente alla sua rappresentazione binaria; • per convertire un numero binario nel suo equivalente ottale è sufficiente raggruppare a tre a tre tutte le cifre del numero binario, partendo da quella meno significativa, e sostituire a ogni gruppo la cifra ottale equivalente. Convertiamo il numero ottale 2614(8) in binario. Per facilitare il calcolo possiamo servirci della seguente tabella: Cifra ottale 0 1 2 3 4 5 6 7 2 Corrispondente binario 000 001 010 011 100 101 110 111 6 1 4 010 110 001 100 Otteniamo che il numero binario corrispondente a 2614(8) è 10110001100(2). Proviamo ora a convertire il numero binario 1101000111(2) . Cominciamo col raggruppare a tre a tre tutte le cifre partendo da quella meno significativa (cioè la prima da destra). Avremo: 1 101 000 111 Come puoi notare, l’ultimo gruppo è composto da una sola cifra: aggiungiamo due zeri in modo da formare un altro gruppo di tre. 001 101 000 111 E ora convertiamo: 001 101 000 111 1 5 0 7 Quindi 1101000111(2) = 1507(8) Se il numero binario avesse avuto una parte frazionaria, il raggruppamento a tre a tre sarebbe avvenuto: • dal punto ottale verso sinistra per la parte intera; • dal punto ottale verso destra per la parte frazionaria. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 43 Il sistema esadecimale In questo sistema di numerazione posizionale la base è 16, pertanto occorrono 16 cifre per poter rappresentare i numeri. Precisamente: 0 1 2 3 4 5 6 7 8 9 A B C D E F Avendo a disposizione solo dieci cifre numeriche, sono state inserite sei lettere dell’alfabeto alle quali è stato associato un preciso valore: infatti la lettera A rappresenta il numero 10, la lettera B il numero 11 e così via fino alla lettera F che rappresenta il numero 15. Dopo la lettera F i numeri esadecimali, come al solito, cominciano a essere composti da due cifre: quindi 10 rappresenterà il 16 decimale, 11 il 17 decimale e così via. Le conversioni Per convertire un numero decimale nel suo equivalente esadecimale possiamo utilizzare il rapido metodo delle divisioni successive. Convertiamo il numero decimale 34728 nel suo equivalente esadecimale. Dividendo 34728 2170 135 8 Divisore 16 16 16 16 Quoziente 2170 35 8 0 Resto 8 10 7 8 Quindi 34728(10) = 87A8(16) Naturalmente, se il numero fosse stato frazionario avremmo dovuto convertire anche la sua parte frazionaria, utilizzando allo scopo il metodo delle moltiplicazioni successive. Per convertire un numero esadecimale nel suo corrispondente decimale adottiamo l’espressione in notazione espansa. Convertiamo il numero esadecimale B95D in decimale. Avremo: B * 163 + 9 * 162 + 5 * 161 + D * 160 = 11 * 4096 + 9 * 256 + 5 * 16 + 13 * 1 = 45056 + 2304 + 80 + 13 = 47453(10) Le conversioni da binario a esadecimale e da esadecimale a binario sono praticamente immediate e rispecchiano il concetto riportato nella parte in cui abbiamo trattato il sistema ottale. Infatti, se pensi che il numero 16(10), ossia la base del sistema esadecimale e, quindi, il numero di cifre di cui si serve, è uguale a 24(16), è chiaro che le cifre esadecimali si possono esprimere in binario con quattro bit. Da ciò segue che: • per convertire un numero esadecimale nel suo equivalente binario è sufficiente sostituire a ogni cifra esadecimale il gruppo di quattro bit corrispondente alla sua rappresentazione binaria; • per convertire un numero binario nel suo equivalente esadecimale è sufficiente raggruppare a quattro a quattro tutte le cifre del numero binario partendo da quella meno significativa e sostituire a ogni gruppo la cifra esadecimale equivalente. 44 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Convertiamo il numero esadecimale FA72(8) in binario. Per facilitare il calcolo possiamo servirci della seguente tabella. Cifra esadecimale 0 1 2 3 4 5 6 7 8 9 A B C D E F F Corrispondente binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 A 7 2 1111 1010 0111 0010 Otteniamo immediatamente che il numero binario corrispondente a FA72(16) è 1111101001110010(2). Proviamo ora a convertire il numero binario 1001101000111(2). Cominciamo con il raggruppare a quattro a quattro tutte le cifre partendo da quella meno significativa (cioè la prima da destra). Avremo: 1 0011 0100 0111 L’ultimo gruppo è composto da una sola cifra, quindi dobbiamo aggiungere tre zeri in modo da formare un altro gruppo di quattro. 0001 0011 0100 0111 E ora convertiamo: 0001 0011 0100 0111 1 3 4 7 Quindi 1001101000111(2) = 1347(16) Proviamo, infine, con un numero frazionario. Convertiamo il numero binario 11110010.110111 in esadecimale. In questo caso il raggruppamento a quattro a quattro deve avvenire: • dal punto esadecimale verso sinistra per la parte intera; • dal punto esadecimale verso destra per la parte frazionaria. ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 45 LAVORARE CON TESTA 1 8 Come contavano gli Egiziani? Nel loro sistema di numerazione i Romani utilizzavano: a dieci simboli b sette simboli c d 2 Su quale sistema di numerazione erano fondati i sistemi attico e ionico? dieci b sedici c In un sistema di numerazione la sintassi indica: a un insieme di azioni utili per stabilire come effettuare le operazioni tra i numeri b un insieme di simboli utili per costruire i numeri c ha il valore posizionale più alto ha il valore posizionale più basso Per effettuare il complemento a uno di un numero binario: a si scambiano gli 1 con gli 0 e viceversa e si aggiunge 1 b si scambiano gli 1 con gli 0 e viceversa e si sottrae 1 si scambiano gli 1 con gli 0 e viceversa si inverte solo l’ultima cifra effettuare il complemento a due di un numero 10 Per binario: un insieme di cifre con le quali costruire i numeri d a si effettua il complemento a uno e poi si aggiunge uno b si effettua la conversione in modulo e segno e poi si aggiunge uno c un insieme di regole che specificano come costruire i vari numeri si effettua la conversione in modulo e segno e poi si invertono gli 1 con gli 0 e viceversa d Quali sono le differenze tra sistemi di numerazione addizionali e sistemi posizionali? partendo da destra (dalla cifra meno significativa) si lasciano invariati i bit fino a incontrare il primo 1, invertendo tutti gli altri 11 Perché è così importante il complemento a due? In un sistema posizionale, il valore facciale di una cifra è legato: a alla posizione che la cifra occupa all’interno del numero b alla forma della cifra c si effettua una somma con dei numeri binari, 12 Quando in che cosa consiste il problema dell’overflow? 13 Stabilisci se la seguente affermazione è vera o falsa. al valore dell’intero numero d non esiste il valore facciale di una cifra, ma solo il suo valore posizionale Per convertire un numero ottale nel suo equivalente binario è sufficiente sostituire a ogni cifra ottale il gruppo di tre bit corrispondente alla sua rappresentazione binaria.------------------------------------------- v f In un sistema di numerazione in base b caratterizzato da N cifre possiamo rappresentare: 14 Stabilisci se la seguente affermazione è vera o falsa. a bN valori compresi tra 0 e bN–1 b b*N valori compresi tra 0 e bN–1 c N valori compresi tra 0 e bN–1 d 46 si trova più a destra d 4 7 b c 3 6 9 otto Che cosa si intende con sistema di numerazione? 5 si trova più a sinistra due d a d otto simboli a All’interno di un numero, la cifra più significativa è quella che: c nove simboli PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE b/N valori compresi tra 0 e bN–1 START – INFORMAZIONI E CALCOLATORI ARITMETICA DEL COMPUTER Per convertire un numero binario nel suo equivalente esadecimale è sufficiente raggruppare a quattro a quattro tutte le cifre del numero binario partendo da quella meno significativa e sostituire a ogni gruppo la cifra esadecimale equivalente.------------- v f training 1 Scrivi in notazione polinomiale i seguenti numeri decimali: 134 1190 445 1101 445 110 2 Quali sono gli insiemi di cifre usati nei sistemi n base 6 e 9? 3 Quanti numeri binari si possono rappresentare con 8 bit? 4 Verifica se le seguenti corrispondenze sono vere: a 1100102 = 5010 b 11112 = 1710 c a 11101012 = 10210 b 110112 = 2710 0.111001 c 7 Calcola il corrispondente decimale dei seguenti numeri binari frazionari: 0.010101 b 0.110111 c 123 198 17 9 Calcola il corrispondente binario dei seguenti numeri decimali: 1098 256 1086 899 787 10 Calcola il corrispondente binario dei seguenti numeri decimali frazionari: 0.12 0.234 0.27 0.56 11 Calcola il corrispondente binario dei seguenti numeri decimali frazionari: 0.78 0.656 0.222 0.159 12 Converti i seguenti numeri decimali negativi in binario utilizzando il complemento a 2: –58 –97 553 –122 776 346 7034 67 15 Calcola i numeri decimali equivalenti ai seguenti numeri ottali: 0.45 13A 0.7 A32BCD 66.04 56.13 DF8 5CE6F ABD B4A6 AB1F 18 Calcola i numeri decimali equivalenti ai seguenti numeri esadecimali: 0.AD 0.54 15D.A4 19 Calcola i numeri esadecimali equivalenti ai seguenti numeri decimali: 7546 90765 8 Calcola il corrispondente binario dei seguenti numeri decimali: 103 –111 3453 79965 9975 20 Calcola i numeri esadecimali equivalenti ai seguenti numeri decimali: 0.010110 10 750 0.6 0.10110 a –100 14 Calcola i numeri decimali equivalenti ai seguenti numeri ottali: 54AB 6 Calcola il corrispondente decimale dei seguenti numeri binari frazionari: b –253 17 Calcola i numeri decimali equivalenti ai seguenti numeri esadecimali: 11100011102 = 23710 0.00100 –159 16 Calcola i numeri decimali equivalenti ai seguenti numeri esadecimali: 1000012 = 3910 a 13 Converti i seguenti numeri decimali negativi in binario utilizzando il complemento a 2: 0.57 5 Verifica se le seguenti corrispondenze sono vere: c PROVE APERTE PER LA VERIFICA DELLE ABILITÀ –92 –12 11122 5643 8756 21 Senza effettuare le conversioni dei seguenti numeri binari interi, stabilisci se i corrispondenti decimali sono pari o dispari: a 1100010 b 1110011 c 1100 d 111111100011 22 Senza effettuare le conversioni dei seguenti numeri binari interi, stabilisci se i corrispondenti decimali sono divisibili per una potenza del 2. In caso affermativo indica anche la potenza: a 111001 b 1000 c 1100110 d 1100 –120 ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI 47 Rappresentazione delle informazioni I dati appartengono a diverse categorie. Partendo da un primo criterio è facile osservare che nella nostra quotidianità abbiamo a che fare con: • dati che simboleggiano oggetti concreti o reali (per esempio una sedia); • dati che simboleggiano oggetti astratti o concetti (per esempio il concetto di amore o l’oggetto astratto numero 3). Rifletti: per l’oggetto concreto sedia si può realizzare una rappresentazione grafica tale da consentire il riconoscimento a qualsiasi individuo; ciò non accade, invece, per il concetto di amore, che, pur potendosi rappresentare graficamente (per esempio con un cuore) potrebbe dar adito ad ambiguità. Questo non accade per la sedia, la cui rappresentazione è universalmente riconosciuta. Anche il numero tre viene espresso graficamente con il simbolo arabo 3. In sostanza, che cosa abbiamo fatto? Abbiamo associato a un concetto o a un oggetto una sua rappresentazione simbolica. In termini più rigorosi possiamo affermare quanto segue: La rappresentazione è una legge m che associa a un oggetto concreto o a un concetto una sequenza di simboli presi da un opportuno alfabeto. Dominio Sedia Codominio m(sedia) = m(amore) = Amore Tre m(tre) = Informazioni 3 Simboli Il problema ora è quello di rappresentare queste informazioni all’interno di un computer. Da quanto detto sinora è ovvio che non è possibile rappresentare le informazioni viste poc’anzi con i simboli che abbiamo associato, dovremo utilizzarne altri. Abbiamo visto che tutto ciò che viene fornito al computer è immediatamente tradotto in precise sequenze di 0 e di 1, ma per quale motivo la macchina utilizza soltanto due simboli? La risposta è semplice: per motivi di efficienza. Rifletti. Il numero tre può avere varie rappresentazioni: quella romana (III) oppure quella classica araba (3), poiché la funzione di rappresentazione (m) non è univoca. 48 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Per rappresentare un dato all’interno di un computer occorre scegliere un metodo efficiente, nel senso che tale rappresentazione deve essere facilmente: • memorizzabile; • trasmissibile; • elaborabile. A titolo di esempio, analizziamo il numero romano VIII: tale rappresentazione è efficiente nella memorizzazione, perché si usano pochi simboli, però non è efficiente in fase di elaborazione, perché le operazioni aritmetiche con i numeri romani sono tutt’altro che semplici. Pensa ai giapponesi che utilizzano ideogrammi composti da decine di migliaia di simboli, oppure al vecchio ma sempre attuale alfabeto Morse, composto da soli due simboli (il tratto e il punto). Ognuno dei due sistemi ha vantaggi e svantaggi: per esempio, se si vuole esprimere un concetto abbastanza complesso quale “ti voglio molto bene” potrebbe bastare un ideogramma, mentre con l’alfabeto Morse occorre una sequenza di punti e linee, ma sicuramente tale sequenza sarà molto più precisa di quanto non possa esserlo l’ideogramma. È proprio per questo motivo, cioè per evitare ambiguità nell’interpretazione di ogni simbolo, che nel computer si utilizzano solo i simboli 0 e 1. Vedremo come si rappresentano informazioni numeriche e alfanumeriche, ma ciò che ci preme sottolineare sin d’ora è che, a prescindere dal tipo, tutte le informazioni saranno rappresentate mediante numeri. Dato e informazione Stiamo per affrontare lo studio di come i dati vengono rappresentati all’interno di un computer. Prima di iniziare, poniamoci una domanda: è corretto parlare di rappresentazione dei dati o rappresentazione dell’informazione? Esiste una differenza tra dato e informazione? Scopriamolo insieme. Dal dizionario De Mauro Paravia, l’informazione è un “elemento o dato che permette di venire a conoscenza di qualcosa” (definizione generale), un “qualsiasi messaggio inviato secondo un determinato codice da un [...] trasmettitore a un ricevente” (definizione scientifica). In sintesi possiamo affermare che: L’informazione riguarda i dati, si codifica tramite un codice e fornisce conoscenza. Analizziamo questa importante definizione. I dati consistono di fatti, per esempio: 125/70 mmHg. L’informazione è costituita da dati che assumono significato in un certo contesto, per esempio: la pressione è 125/70 mmHg (ossia 125 la massima e 70 la minima). La conoscenza definisce le relazioni tra diversi tipi di informazioni, per esempio: se la pressione di un paziente è superiore a 135/95 mmHg in tre diverse occasioni, allora il paziente ha una pressione sanguigna alta. Sistemi esperti Sistemi informativi Conoscenza Informazione Database Dati CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 49 Il codice In precedenza abbiamo detto che l’informazione si codifica tramite un codice: vediamo che cosa significa ciò. Affinché un dato diventi informazione, deve essere interpretato tramite un codice, secondo il contesto di riferimento. Storicamente i primi codici furono il Morse, del 1840, seguito dal linguaggio delle bandiere usato in marina. Una sequenza di punti e linee non è informazione, se non riusciamo a interpretarla! È necessario conoscere il codice. Un codice comprende due componenti distinte: un alfabeto per descrivere come rappresentare il dato e una semantica per descrivere come interpretarlo. Alfabeto del codice Morse C Informazione Dato 28 0 1 2 8 2 3 7 9 4 6 5 Alfabeto un numero intero Semantica Codice 50 I A Semantica del codice Morse O Un esempio di codice si ha anche nelle domande di un questionario, come nel seguente esempio. Che cos’è l’informatica? a. Lo studio del calcolatore. b. La scienza che studia l’informazione. c. Saper scrivere programmi. Per questa domanda, l’alfabeto è costituito dai simboli “a”, “b” e “c”, mentre la semantica associata è il testo della risposta. Tramite questo codice, quindi, specifichiamo come un dato (per esempio “b”) debba essere interpretato come “La scienza che studia l’informazione.” affinché fornisca informazione Formalmente, un alfabeto è un insieme di simboli. Una parola è una sequenza di tali simboli. Nell’esempio della figura, l’alfabeto relativo all’età di un uomo (alfabeto decimale) è l’insieme dei simboli {0, 1, 2, ..., 8, 9}. Il dato “28” è rappresentato nell’alfabeto decimale dalla parola composta dalla sequenza di 2 e 8. Bit e byte Così come si utilizza il metro per misurare le distanze e il grammo per stabilire il peso di un corpo, allo stesso modo anche il mondo dell’informatica ha una propria unità di misura, impiegata nello specifico per misurare la quantità di informazioni. Proprio come il metro dispone di vari multipli (fra cui il più usato è sicuramente è il chilometro), allo stesso anche l’unità di misura informatica avrà bisogno di unità multiple che consentano di esprimere in forma più compatta quantità molto elevate: è più pratico utilizzare “100 chilometri” oppure START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA “100.000 metri”? Ma le analogie non finiscono qui: se esiste il “chilometro al secondo” per le velocità, allo stesso modo il mondo dei computer ha avuto la necessità di realizzare unità di misura composte per trattare problemi simili. L’unità di misura “naturale” dell’informazione è il bit, ossia una cifra binaria, che è considerato come la più piccola quantità di informazione concepibile per un computer. Ma come può un computer che gestisce solamente il concetto di 0 e 1 trattare anche numeri più grandi di zero e uno e caratteri alfanumerici concreti? Semplicemente utilizzando una particolare codifica di memorizzazione, cioè codificando in sequenze di 0 e 1 qualsiasi altro simbolo! La più importante sequenza di 0 e 1 è composta da 8 bit e prende il nome di byte; è in grado di assumere 28 = 256 possibili valori (da 0 a 255). Come abbiamo appena visto, esprimere una grandezza in bit oppure in byte è indifferente; del resto è la stessa cosa affermare che una distanza misura 100 centimetri oppure 1 metro: la sostanza è la stessa, cambia solo l’unità di misura di riferimento. Per consuetudine si preferisce utilizzare il byte per misure spaziali (“Questo documento occupa 5.000 byte”, oppure “Questa memoria ha una capienza di 64.000.000 di byte”) e il bit per misure di velocità (“Questo collegamento a Internet permette di trasferire 56.000 bit al secondo”). È importante ricordare che, per il trattamento dei dati, i computer operano su configurazioni composte da un numero fisso di byte, chiamate parole o word. La dimensione delle parole può essere di: Word da 16 bit • 1 byte (8 bit); 1 byte 1 byte • 2 byte (16 bit); • 4 byte (32 bit); Word da 32 bit • 8 byte (64 bit). 1 byte 1 byte 1 byte 1 byte Word da 64 bit 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte Il tempo per elaborare una parola è convenzionalmente costante, quindi la lunghezza della parola rappresenta un importantissimo indice per la velocità di calcolo e la potenza di un computer. Gli attuali sistemi di elaborazione gestiscono enormi quantità di dati codificati in binario. Pensa semplicemente a quanti dati sono memorizzati sul disco fisso del tuo computer! Il byte, quindi, è troppo piccolo per misurare queste enormi quantità. Servono i multipli. Prefisso Si legge Multiplo del byte Fattore moltiplicativo Valore approssimativo (byte) K Kilo 103 210 =1.024 Mille M Mega 106 220 = 1.048.576 Un milione G Giga 109 230 = 1.073.741.824 Un miliardo T Tera 1012 240 = 1.099.511.627.776 Un bilione (mille miliardi) P Peta 1015 250 = 1.125.899.906.842.624 Un biliardo E Exa 1018 260 = 1.152.921.504.606.846.976 Un trilione Z Zetta 1021 270 = 1.180.591.620.717.411.303.424 Un triliardo Y Yotta 1024 280 = 1.208.925.819.614.629.174.706.176 Un quadrilione Nella tabella precedente puoi osservare che: 1M=1K*K 1G=1K*M 1T=1K*G I fattori moltiplicativi sono tutti potenze di 2, ma per semplicità si adotta anche la convenzione di utilizzare potenze di 10. Quindi, quando diciamo che un sistema di elaborazione è in grado di memorizzare 100 GB di dati, significa che può memorizzare circa 100 miliardi di byte. Attenzione a non confondere il simbolo K informatico (il K maiuscolo) con il k minuscolo impiegato per esempio in fisica, che vale 103 (cioè 1000). CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI stop 51 Codifica e decodifica dell’informazione Ora cerchiamo di consolidare i nuovi concetti appresi. È ormai evidente che l’alfabeto interno della macchina è rappresentato dai due simboli (0 e 1) del sistema binario, mentre l’utente colloquia con la macchina utilizzando allo scopo un alfabeto esterno composto da: • • • • 26 lettere maiuscole dell’alfabeto; 26 lettere minuscole dell’alfabeto; 10 cifre decimali; caratteri vari (simboli di valuta, segni di interpunzione, simboli matematici e così via). Come abbiamo visto, accostando opportunamente i simboli di un alfabeto è possibile costruire delle parole. Disponendo di un solo bit si possono rappresentare due simboli; con due bit se ne possono rappresentare 4, con tre bit 8, con 4 bit 16 e così via, secondo la formula Y = 2X. Ciò significa che disponendo di X bit possiamo rappresentare Y caratteri, pari a 2 elevato all’esponente X. Verifichiamo la formula realizzando il bit con una lampadina, che quando è accesa chiamiamo 1 e quando è spenta chiamiamo 0. Vogliamo, per esempio, rappresentare le 26 lettere dell’alfabeto più i segni ! ? / % ( ). Cominciamo con l’utilizzare una sola lampada. Abbiamo due soli valori a disposizione: 1 (accesa) e 0 (spenta). Conveniamo, allora, che disponendo di una sola lampadina possiamo rappresentare la lettera A quando è accesa e la lettera B quando è spenta. E gli altri segni? Riproviamo aggiungendo un’altra lampada. Con entrambe le lampade possiamo formare quattro combinazioni acceso–spento: 00, 10, 01, 11, alle quali associamo i caratteri A, B, C, D. Ancora non basta. Continuiamo prendendo un’altra lampadina, la terza, che ci porta a configurare 8 caratteri, perchè 23 = 8, dalla lettera A alla lettera H. Continuiamo ancora: con 5 lampade arriviamo a configurare i 32 caratteri che volevamo. 00 = A 10 = B 01 = C 11 = D Tornando al discorso appena introdotto sui due alfabeti, per avere una “conversazione” con il computer è necessario che vi sia una corrispondenza biunivoca tra i due: a ogni simbolo dell’al000 = A 001 = B 010 = C 100 = D 52 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA 101 = E 110 = F 011 = G 111 = H fabeto esterno dovrà corrispondere uno e un solo simbolo di quello interno. Tale corrispondenza l’abbiamo chiamata codice. Quando introduciamo delle informazioni all’interno del computer, utilizziamo simboli dell’alfabeto esterno: questi, però, prima di poter essere memorizzati ed elaborati, dovranno essere tradotti nei corrispondenti simboli dell’alfabeto interno. Viceversa, i risultati dell’elaborazione dovranno essere tradotti in caratteri dell’alfabeto esterno, prima che il computer possa comunicarli. La traduzione da alfabeto esterno ad alfabeto interno viene detta codifica, mentre la traduzione inversa viene detta decodifica. A questo punto potremmo anche dire che all’interno del computer tutte le informazioni sono rappresentate in codice. Ogni computer ha un suo codice particolare, diverso (in parte o completamente) da quello di altri elaboratori. La scelta del codice di un computer è ispirata a criteri di ottimizzazione costruttiva, come accade per esempio per le rappresentazioni dei numeri, dove adottare un certo tipo di codice significa semplificare enormemente i circuiti dell’unità di calcolo e di controllo. Prima di descrivere in dettaglio i principali codici utilizzati dal computer, è necessario chiarire un’importante differenza. In precedenza abbiamo detto che accostando opportunamente i simboli dell’alfabeto è possibile ottenere delle parole. Parole del nostro alfabeto esterno, quindi, potrebbero essere: mamma informatica ciao 20149 20a30 Analizziamo la parola 20149: potrebbe rappresentare un codice di un cliente, un numero telefonico, un codice di avviamento postale, la targa di una moto o, ancora, l’importo di una bolletta. Con questo vogliamo dire che non tutti i dati espressi con simboli numerici rappresentano, effettivamente, numeri: affinché possano essere considerati tali, infatti, deve essere possibile effettuare operazioni aritmetiche su di essi. Nel nostro particolare caso, quindi, la parola 20149 è un numero solo se rappresenta, per esempio, l’importo di una bolletta. Questa distinzione è importantissima, in quanto ci consente di distinguere i metodi di codifica dei numeri in due grandi categorie: • metodi che rappresentano il valore numerico; • metodi che rappresentano le cifre. I metodi che rappresentano il valore considerano il valore di quell’insieme di simboli (informazioni numeriche), mentre quelli che rappresentano le cifre “vedono” il numero solo come un insieme di simboli (informazioni alfanumeriche). CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 53 Rappresentazione delle informazioni alfanumeriche L’unica soluzione che si può adottare per la rappresentazione di informazioni di tipo non numerico (caratteri alfabetici, cifre, segni diacritici e caratteri speciali) è quella di codificare ogni carattere con una particolare configurazione binaria. Con un byte si può rappresentare un carattere alfabetico qualsiasi, una cifra o un simbolo speciale. Disponendo di 8 bit possiamo ottenere 28 caratteri diversi, cioè 256. Avendo a disposizione ben 256 caratteri, ogni casa costruttrice di hardware potrebbe costruire un apposito codice di caratteri realizzabili. Grazie a un accordo tra tutti i produttori di hardware è stato però realizzato un codice di riferimento, il codice ASCII (American Standard Code for Information Interchange), che in inglese si pronuncia askey, mentre in italiano può essere pronunciato anche asci. Il codice ASCII nacque a 7 bit, ma poi venne portato a 8 bit (ASCII esteso). 54 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Questo codice mantiene l’ordinamento alfabetico, in quanto, se un carattere precede un altro, il suo codice, considerato come un numero binario, è minore. In base a questo codice, per rappresentare la parola CASA occorrono 4 byte e la rappresentazione in memoria è la seguente: 01000011 C 01000001 A 01010011 S 01000001 A Non ci credi? Un’esperienza concreta per focalizzare questo concetto è quella di aprire Blocco note, digitare la stringa ciao! e poi salvare il documento: quanto sarà grande il file così generato? Si tratta di cinque caratteri, ognuno pari a un byte per quanto visto poco fa... quindi in totale 5 byte. E se volessimo conoscere la stessa grandezza espressa in termini di bit? Ricordando che un byte è pari a 8 bit, basta moltiplicare 5 byte×8 bit=40 bit. Possiamo dire indifferentemente, quindi, che il nostro documento occupa 5 byte oppure 40 bit. Questo codice viene utilizzato prevalentemente su personal computer. Come puoi notare dalla figura precedente, i primi 32 caratteri hanno un aspetto singolare: sono i cosiddetti caratteri di controllo, che non fanno parte dell’alfabeto visualizzabile (stampabile), ma provocano effetti specifici (spostamenti verticali e orizzontali su video e cancellazione di caratteri, e così via) oppure vengono interpretati come caratteri di significato speciale (fine di una sequenza di caratteri, separatore e così via). Se osservi bene la figura che riporta il codice ASCII noterai che la codifica dei caratteri numerici e alfabetici è rigorosamente crescente: grazie a questo ordinamento è possibile operare confronti tra singoli caratteri e stringhe come se fossero numeri. L’introduzione di memorie sempre più capaci e la necessità di codificare molti altri caratteri ha portato allo sviluppo di un nuovo codice: l’UNICODE, che mette a disposizione dell’utente 216 = 65536 caratteri. Con questo codice è possibile codificare le lettere e le cifre delle principali lingue del mondo, anche di quelle che utilizzano ideogrammi come il giapponese e il cinese. Questo codice è di estrema importanza poiché permette di operare su dati e programmi provenienti da tutto il mondo. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 55 Rappresentazione binaria dei numeri Numeri interi senza segno Per rappresentare un numero intero senza segno si utilizza la conversione dalla rappresentazione decimale in quella a base 2 (sistema binario puro), dettagliatamente descritta nella parte dedicata all’aritmetica dei computer. Numeri interi con segno Per rappresentare un numero relativo è necessario disporre di un’informazione sul segno. Nel sistema decimale la rappresentazione più comune è quella modulo e segno, a cui siamo abituati sin dalle elementari e che consiste nell’utilizzare il segno + per gli interi positivi e il segno – per quelli negativi. Nel sistema binario naturalmente si può usare lo stesso metodo, premettendo il segno + o il segno – alla rappresentazione in base 2 del numero (sistema binario puro). Considerato che il segno può essere positivo o negativo (e quindi può assumere solo due valori), tale informazione nella rappresentazione binaria può essere associata a uno specifico bit. Si assume, quindi, che il valore 0 rappresenti il segno + (numero positivo), mentre il valore 1 rappresenti il segno – (numero negativo). In pratica, disponendo di N bit, si utilizzeranno N–1 bit per rappresentare il valore del modulo (ossia del valore assoluto del numero) e 1 bit per rappresentare il segno. Tale rappresentazione prende appunto il nome di rappresentazione in modulo e segno. Per esempio, se disponiamo di soli 3 bit, il primo bit a sinistra sarà impiegato per esprimere il segno e i restanti 2 bit per il modulo. Così, delle 23 = 8 combinazioni, 4 avranno uno 0 a sinistra e 4 un 1 a sinistra: Positivi +0 +1 +2 +3 000 001 010 011 Negativi 100 –0 101 –1 110 –2 111 –3 In questo modo avremmo per i numeri positivi la successione 0, 1, 2, 3 e analogamente, per i numeri negativi, la successione 0, –1, –2, –3. C’è un evidente ambiguità nella rappresentazione dello zero, poiché sono possibili due diverse rappresentazioni dello stesso numero (+0, –0). È come se esistesse uno zero positivo e uno zero negativo! Per eliminare questa ambiguità si ricorre a una rappresentazione in complemento a due, che consiste nel rappresentare i numeri negativi attraverso un’operazione di complementazione del corrispondente positivo. In generale, l’operazione di complementazione si effettua cambiando gli 1 con 0 e vice versa. Sono possibili due forme di complementazione: complementazione a uno e complementazione a due. Per motivi di ordine pratico relative a operazioni di calcolo si preferisce l’operazione di complementazione a due. Per ottenere il complemento a due di un numero si procede nel seguente modo: • si effettua il complemento a 1 del numero stesso, che consiste nel cambiare gli 0 in 1 e viceversa; • si somma il valore 1 al complemento a uno. Facciamo un esempio. Se consideriamo ancora 3 bit, il numero 010 rappresenta +2. Per ottenere il valore corrispondente negativo procederemo così: 010numero positivo (+2) 101complemento a 1 (gli 0 vengono cambiati in 1 e viceversa) 1 somma 1 110numero negativo in complemento a 2 (–2) È importante ricordare che, se c’è un riporto nel bit di segno, questo non viene considerato. 56 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Non ci crederai, ma esiste un metodo ancora più semplice per ottenere il complemento a 2 di un numero: consiste nel lasciare invariati i bit del numero a partire da destra fino al primo 1, invertendo tutti gli altri. Per esempio, il complemento a 2 del numero binario 10100100 è 01011100, infatti a partire da destra (dalla cifra meno significativa) lasciamo invariati i bit fino a incontrare il primo 1, mentre tutti gli altri li invertiamo. stop Attraverso la complementazione a 2, nel caso di 3 bit possiamo rappresentare la seguente sequenza: Valore +3 +2 +1 +0 –1 –2 –3 –4 Rappresentazione in complemento a 2 011 010 001 000 111 110 101 100 Avendo a disposizione 4 bit si potranno rappresentare più numeri, come riportato nella seguente tabella: Valore +7 +6 +5 +4 +3 +2 +1 +0 –1 –2 –3 –4 –5 –6 –7 –8 Rappresentazione in complemento a 2 0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000 Possiamo fare due importanti osservazioni. La prima riguarda il tipo di disposizione circolare dei numeri binari: a partire dallo 0 verso l’alto la numerazione si raccorda tra il massimo positivo (+3) e il massimo negativo (–4). La seconda osservazione, ben più rilevante, è che attraverso la rappresentazione in complemento a 2 non c’è simmetria, dal momento che il massimo numero negativo è di una unità superiore (in valore assoluto) al corrispondente numero positivo. Questo è il prezzo che si deve pagare per non avere nessuna ambiguità nella rappresentazione dei numeri relativi. Dati N bit, la rappresentazione in complemento a 2 consentirà una numerazione bipolare i cui valori estremi (positivi e negativi) sono rispettivamente: –2N–1 e +2N–1–1 Per esempio, disponendo di 16 bit complessivi e volendo rappresentare numeri relativi si avranno come limiti estremi –32768, +32767. Questa apparente limitazione dovuta all’asimmetria non porta ad alcun inconveniente nella pratica. Naturalmente il procedimento di complementazione è ancora applicabile per ottenere il corrispondente positivo di un numero negativo dato. La rappresentazione in complemento a due è molto diffusa e una certa classe di dati numerici viene rappresentata secondo tale formato. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 57 app.// Rappresentazione binaria dei numeri Rappresentiamo in complemento a 2 su 4 cifre i numeri +3 e –6 +3 è positivo ed è rappresentato come 0011. –6 è negativo, per cui procediamo nel seguente modo: • il numero binario corrispondente è 0110; • il complemento bit a bit è 1001; • sommiamo 1 e otteniamo il complemento a 2 cioè 1010. Rappresentiamo in modulo e segno e complemento a 2 su 10 bit i numeri –31 e –109 Prendiamo in esame il numero decimale –31 e vediamo come procedere: Il numero binario corrispondente al numero decimale 31 è Dovendolo scrivere su 10 bit dobbiamo aggiungere cinque zeri alla sinistra del numero; avremo quindi Per la rappresentazione in modulo e segno dobbiamo partire dalla rappresentazione binaria del valore assoluto del numero e impostare a 1 il bit del segno, quindi Per giungere alla rappresentazione in complemento a 2 basta partire dalla rappresentazione binaria del valore assoluto del numero e invertire tutti i bit partendo dal primo 1 (escluso) che incontriamo, quindi 11111 0000011111 1000011111 1111100001 Esaminiamo ora il numero –109: Il numero binario corrispondente al numero decimale 109 è Dovendolo scrivere su 10 bit dobbiamo aggiungere tre zeri alla sinistra del numero; avremo quindi Per la rappresentazione in modulo e segno dobbiamo partire dalla rappresentazione binaria del valore assoluto del numero e impostare a 1 il bit del segno, quindi Per giungere alla rappresentazione in complemento a 2 basta partire dalla rappresentazione binaria del valore assoluto del numero e invertire tutti i bit partendo dal primo 1 (escluso) che incontriamo, quindi 1101101 0001101101 1001101101 1110010011 Rappresentiamo in complemento a 2 su 5 bit alcuni numeri decimali Consideriamo i seguenti numeri: Numero decimale +11 –8 +1 –1 +10 –10 58 START – INFORMAZIONI E CALCOLATORI Numero binario 01011 01000 00001 00001 01010 01010 Complemento a 1 Complemento a 2 10111 11000 11110 11111 10101 10110 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA A quali numeri decimali corrispondono i seguenti numeri binari rappresentati in modulo e segno e in complemento a 2? 100110 11110 111 0101 PROCEDURA • In modulo e segno elimina il bit del segno e calcola il valore assoluto in notazione decimale. Il risultato sarà il valore assoluto se il bit di segno è 0, oppure il corrispondente numero negativo se il bit di segno è 1. • In complemento a 2, se il bit di segno è 1, calcola la rappresentazione binaria del valore assoluto del numero invertendo tutti i bit partendo dal primo 1, escluso, che incontri leggendo la stringa binaria da destra verso sinistra. Calcola quindi il valore assoluto in notazione decimale. Il risultato sarà il corrispondente numero negativo. Se invece il bit di segno è 0, allora il numero è positivo e basta calcolarne la rappresentazione decimale senza invertire i bit. SOLUZIONE 100110 è negativo perché il bit del segno vale 1. In modulo e segno il valore assoluto è 000110 = 6, quindi il risultato è –6. In complemento a 2 il valore assoluto diventa 011010 = 26, quindi il risultato ottenuto è –26. 11110 è negativo perché il bit del segno vale 1. In modulo e segno il valore assoluto è 01110 = 14, quindi il risultato è –14. In complemento a 2 il valore assoluto diventa 00010 = 2,quindi il risultato è –2. 111 è negativo perché il bit del segno vale 1. In modulo e segno il valore assoluto è 011 = 3, quindi il risultato è –3. In complemento a 2 il valore assoluto diventa 001 = 1, quindi il risultato è –1. 0101 è positivo perché il bit del segno vale 0. In modulo e segno il valore assoluto è 0101 = 5, quindi il risultato è 5. In complemento a 2 il risultato è lo stesso ottenuto per modulo e segno, ovvero 5. Scriviamo i seguenti numeri decimali nelle varie codifiche in binario puro, modulo e segno, complemento a 1, complemento a 2, tutte su 7 bit Decimale Binario puro 15 –15 –19 –27 –63 –64 1111 –1111 –10011 –11011 –111111 –1000000 +63 +64 111111 1000000 +127 1111111 –45 –101101 Modulo e segno 0001111 1001111 1010011 1011011 1111111 Non rappresentabile 0111111 Non rappresentabile Non rappresentabile 1101101 Complemento Complemento a1 a2 0001111 00001111 1110000 1110001 1101100 1101101 1100100 1100101 1000000 1000001 Non 1000000 rappresentabile 0111111 0111111 Non Non rappresentabile rappresentabile Non Non rappresentabile rappresentabile 1010010 1010011 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 59 ex.] Rappresentazione binaria dei numeri 1 Converti i numeri decimali (6, –6) in binario puro, modulo e segno, complemento a 1, complemento a 2, su 4 bit. Binario puro +6_______________________________________ –6_______________________________________ Modulo e segno +6_______________________________________ –6_______________________________________ Complemento a 1 +6_______________________________________ –6_______________________________________ Complemento a 2 +6_______________________________________ –6_______________________________________ 2 Converti i numeri decimali (9, –9) in binario puro, modulo e segno, complemento a 1, complemento a 2, su 4 bit. Binario puro +9_______________________________________ –9_______________________________________ Modulo e segno +9_______________________________________ –9_______________________________________ Complemento a 1 +9_______________________________________ –9_______________________________________ Complemento a 2 +6_______________________________________ –6_______________________________________ 3 Rappresenta in modulo e segno e complemento a 2 i seguenti numeri negativi su 8 bit: –28, –44, –126 Il numero binario corrispondente al numero decimale –28 è Dovendolo scrivere su 8 bit dobbiamo aggiungere ______ zeri alla sinistra del numero: avremo, quindi Per la rappresentazione in modulo e segno dobbiamo partire dalla rappresentazione binaria del valore assoluto del numero e impostare a 1 il bit del segno, quindi Per giungere alla rappresentazione in complemento a 2 basta partire dalla rappresentazione binaria del valore assoluto del numero e invertire tutti i bit partendo dal primo 1 (escluso) che incontriamo, quindi 60 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Il numero binario corrispondente al numero decimale 44 è Dovendolo scrivere su 10 bit dobbiamo aggiungere _______ zeri alla sinistra del numero: avremo, quindi Per la rappresentazione in modulo e segno dobbiamo partire dalla rappresentazione binaria del valore assoluto del numero e impostare a 1 il bit del segno, quindi Per giungere alla rappresentazione in complemento a 2 basta partire dalla rappresentazione binaria del valore assoluto del numero e invertire tutti i bit partendo dal primo 1 (escluso) che incontriamo, quindi Il numero binario corrispondente al numero decimale 126 è Dovendolo scrivere su 10 bit dobbiamo aggiungere _______ zeri alla sinistra del numero: avremo, quindi Per la rappresentazione in modulo e segno dobbiamo partire dalla rappresentazione binaria del valore assoluto del numero e impostare a 1 il bit del segno, quindi Per giungere alla rappresentazione in complemento a 2 basta partire dalla rappresentazione binaria del valore assoluto del numero e invertire tutti i bit partendo dal primo 1 (escluso) che incontriamo, quindi 4 Scrivi i seguenti numeri decimali nelle varie codifiche in binario puro, modulo e segno, complemento a 1, complemento a 2, tutte su 8 bit. Decimale Binario puro Modulo e segno Complemento a 1 Complemento a 2 –10 +25 –59 –47 –35 +31 –37 5 Converti in modulo e segno e in complemento a 2 i seguenti numeri interi con segno: –32, –31, +15, +16, –46, –18, –4, +31. Indica, per ognuno, il numero di bit necessari per rappresentarlo. Decimale Binario puro Modulo e segno Complemento a 1 Complemento a 2 –10 +25 –59 –47 –35 +31 –37 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 61 Rappresentazione dei numeri reali Rappresentazione in virgola fissa Una possibile codifica dei numeri reali è quella in virgola fissa (fixed point) in cui si stabilisce un numero di cifre a disposizione per la parte intera, un numero a disposizione per la parte frazionaria e un bit per rappresentare il segno. È detta a virgola fissa poiché la posizione della virgola (o punto decimale) è stabilita una volta per tutte, ovvero i posti per rappresentare le cifre dopo la virgola sono prefissati e quindi la virgola viene pensata sempre allo stesso posto. Segno 7 bit per rappresentare la parte intera 8 bit per rappresentare la parte frazionaria Qui è idealmente localizzata la virgola Per esempio: +1,25 si rappresenta come +0000001.00011001 –8,0 si rappresenta come –0001000.00000000 Il numero minimo rappresentabile con questo formato è: Nmin= – 1111111.11111111 = –(27 –1),(28 –1) Il numero massimo è: Nmax= + 1111111.11111111 = +(27 –1),(28 –1) Come abbiamo visto per gli interi, anche per i numeri reali ci riferiamo sempre a un sottoinsieme. Nella rappresentazione in virgola fissa i numeri sono rappresentati con una certa approssimazione. Per esempio, 5,37 (periodico) 5,373737373737... assumerebbe la rappresentazione in virgola fissa: +0000005.37373737 che ha un numero di cifre decimali inferiore a quelle reali. Analogamente, il numero irrazionale 2=1,414213562... verrebbe troncato a: +0000001.41421356. Quindi occorre prestare attenzione, perché espressioni come 1/3+1/3+1/3=1, perfettamente valide in matematica, non sono generalmente valide se eseguite su un computer; infatti 1/3 verrebbe approssimato in +00000000.33333333 e quindi la somma delle tre frazioni dell’espressione darebbe per risultato +00000000.99999999, che è diverso da 1. Il sistema a virgola fissa, essendo basato su un numero di posti fisso per la rappresentazione delle cifre dopo la virgola, può comportare la perdita più o meno grave di numerose cifre significative e ha, quindi, campi di applicazione specifici. 62 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Rappresentazione in virgola mobile (floating point) Per risolvere gli inconvenienti della rappresentazione in virgola fissa è stata studiata la rappresentazione in virgola mobile (floating point), diventata poi quella più usata dai costruttori di computer. L’idea è quella di far variare dinamicamente (floating in inglese significa mobile, fluttuante) la posizione della virgola. In questo caso il numero viene espresso secondo la notazione scientifica, cioè scisso in due parti: 1. la mantissa, che rappresenta un numero compreso tra 0,100000... e 0,99999...; 2. l’esponente, che indica la potenza di 10 per cui occorre moltiplicare la mantissa al fine di ottenere il numero che si intende rappresentare. Consideriamo il numero 8,41. Per esprimerlo in notazione scientifica dobbiamo procedere con un’operazione di normalizzazione, che consiste nel portare il punto decimale immediatamente a sinistra della prima cifra diversa da zero della mantissa: il punto quindi si muove verso l’inizio della prima parte del numero, moltiplicandolo per un opportuno esponente. Il numero 8,41 normalizzato diventa: 0.841 × 10 che, a sua volta, può essere espresso come: 0.841 × 101 = 0.841E+1 dove la lettera E sta per “10 elevato all’esponente” (+1). Questa notazione è molto comoda per rappresentare numeri grandi; per esempio, la massa della terra, che si dovrebbe scrivere nella consueta notazione come: 6 000 000 000 000 000 000 000 000 kg in notazione scientifica si esprime come: 0.6 × 1025 = 0.6E+25 Generalizzando, il criterio per rappresentare un numero in forma normalizzata è il seguente: ogni numero può essere rappresentato come prodotto di un numero decimale e di una potenza di 10, in modo tale che la parte intera del numero decimale risulti sempre uguale a 0 e la prima cifra decimale risulti sempre diversa da 0. Per ottenere questo risultato, l’esponente di 10 è calcolato secondo la seguente regola: se il numero dato è in valore assoluto maggiore di 1, l’esponente è positivo e uguale al numero delle cifre intere; se il numero dato è in valore assoluto minore di 1, l’esponente è negativo e uguale al numero degli zeri dopo la virgola. Vediamo qualche esempio: 812 = 0.812E+3 –812 = –0.812E+3 –0.007 = –0.7E–2 Osserviamo che il numero 0 non può obbedire a questa regola e occorre quindi stabilire la sua forma normalizzata, per esempio: 0,0. Oggigiorno non sono più i singoli progettisti o produttori di sistemi a stabilire il codice da usare per la rappresentazione floating point dei numeri all’interno di un sistema di calcolo. La soluzione di questo problema ha ormai raggiunto un livello di maturità tale da consentire a organismi internazionali di definire degli standard a cui tutti i progettisti e costruttori si devono adeguare. In particolare, lo standard più diffuso è quello stabilito dall’IEEE (Institute of Electrical and Electronics Engineering) e identificato dalla sigla 754. Questo standard prevede due formati di rappresentazione, uno in “precisione normale” codificato su 32 bit e uno in “doppia precisione” codificato su 64 bit. Inoltre lo standard prevede che: • la mantissa venga rappresentata in modulo e segno; • l’esponente (o caratteristica) venga rappresentato in modo polarizzato. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 63 app.// Rappresentazione dei numeri reali Abbiamo detto che lo standard IEEE 754 prevede 32 bit per rappresentare un valore in virgola mobile a precisione singola. I 32 bit a disposizione saranno così organizzati: Segno: 0 – positivo 1 – negativo Esponente (8 bit) Mantissa (23 bit) In particolare: • 1 bit per il segno; • 8 bit di esponente polarizzato biased 127 (detto anche in eccesso 127); • 23 bit di parte frazionaria (mantissa). 31 30 S 23 22 Esponente 0 Mantissa All’interno di questi 32 bit, quindi, sarà inserita una successione di cifre binarie il cui valore sarà quello del numero reale. Rappresentiamo in singola precisione il numero reale decimale 43,6875(10) I passi da svolgere sono i seguenti. 1. CALCOLARE IL SEGNO DEL NUMERO Per il segno è necessario inserire 1 se il numero è negativo e 0 se è positivo. Nel nostro caso, essendo il numero positivo, il valore da inseire nel bit riservato al segno è 0. 31 30 23 22 0 0 S Esponente Mantissa 2. TRASFORMARE IL NUMERO SENZA SEGNO IN FORMA BINARIA Utilizzando il metodo delle divisioni successive, convertiamo la parte intera 43 in binario. Otterremo: Dividendo 43 21 10 5 2 1 64 START – INFORMAZIONI E CALCOLATORI Divisore 2 2 2 2 2 2 Quoziente 21 10 5 2 1 0 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA Resto 1 1 0 1 0 1 Quindi 43(10) = 101011(2). Procediamo, ora, con la conversione della parte decimale 0,6875, servendoci del metodo delle moltiplicazioni successive: 0,6875 × 2 = 1,375 0,375 × 2 = 0,75 0,75 × 2 = 1,5 0,5 × 2 = 1,0 parte intera 1 parte intera 0 parte intera 1 parte intera 1 Quindi la parte frazionaria 0,6875(10) = 1011(2). Complessivamente, 43,6875(10) = 101011.1011(2). 3. NORMALIZZARE IL NUMERO BINARIO OTTENUTO Spostiamo la virgola verso sinistra lasciando solo un 1 a sinistra. Otteniamo: 1.010111011 × 25 4. COMPLETARE LA MANTISSA FINO A COPRIRE TUTTI I BIT A DISPOSIZIONE Stiamo rappresentando un numero reale in precisione singola, quindi abbiamo a disposizione 23 bit per la mantissa. Dobbiamo inserire in coda al numero ottenuto (cioè alla sua destra) tanti zeri fino a completare i 23 bit. Otteniamo, quindi: 1.01011101100000000000000 31 30 23 22 0 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S Esponente Mantissa 5. CONVERTIRE L’ESPONENTE L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a 5. Secondo lo standard IEEE 754, l’esponente deve essere polarizzato nel senso che al valore dell’esponente originario occorre sommare un certo valore fisso chiamato bias. Nel caso di numeri in precisione singola, il bias è pari a 127. Abbiamo, quindi, 5 + 127 = 132(10) = 10000100(2). 31 30 0 S 23 22 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Esponente Mantissa Ricapitoliamo. Convertiamo il numero decimale 4568,1875 in floating point su 32 bit. Effettuo il cambiamento di base 4568,187510 1000111011000.0011 Normalizzo la mantissa 1000111011000.0011 × 212 Esprimo l’esponente in eccesso 127 12 + 127 = 139 –> 10001011 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rappresento i dati con il corretto numero di bit CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 65 app.// Rappresentazione dei numeri reali Rappresentiamo, ora, un valore negativo in virgola mobile a precisione singola (32 bit). Il numero da rappresentare è –11,375(10). 1. CALCOLARE IL SEGNO DEL NUMERO Per il segno è necessario inserire 1 se il numero + negativo e 0 se è positivo. Nel nostro caso, essendo il numero negativo, inseriamo 1. 31 30 23 22 0 1 S Esponente Mantissa 2. TRASFORMARE IL NUMERO SENZA SEGNO IN FORMA BINARIA Utilizzando il metodo delle divisioni successive, convertiamo la parte intera 43 in binario. Dividendo 11 5 2 1 Divisore 2 2 2 2 Quoziente 5 2 1 0 Resto 1 1 0 1 Quindi 11(10)=1011(2) Procediamo ora con la conversione della parte decimale 0,375: 0,375 x 2 = 0,75 0,75 x 2 = 1,5 0,5 x 2 = 1,0 parte intera 0 parte intera 1 parte intera 1 Quindi la parte frazionaria 0,375(10) = 011(2). Complessivamente, 11,375(10) = 1011.011(2) 3. NORMALIZZARE IL NUMERO BINARIO OTTENUTO Spostiamo la virgola verso sinistra lasciando solo un 1 a sinistra. Otteniamo: 1.011011 * 23 4. COMPLETARE LA MANTISSA SINO A COPRIRE TUTTI I BIT A DISPOSIZIONE Siamo in precisione singola per cui abbiamo a disposizione 23 bit per la mantissa. Dobbiamo inserire in coda al numero ottenuto tanti zeri sino a completare i 23 bit. Otteniamo, quindi: 1.01101100000000000000000 31 30 23 22 1 S 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Esponente Mantissa 5. CONVERTIRE L’ESPONENTE L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a 3 a cui occorre sommare il bias 127. Abbiamo, quindi, 3 + 127 = 130(10) = 10000010(2). 66 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA 31 30 1 23 22 0 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S Esponente Mantissa Rappresentiamo il numero reale –0,005(10) Questa volta velocizziamo le operazioni considerato che, oramai, dovrebbero essere chiare. Per quanto riguarda il segno sappiamo che è pari a 1 poiché il numero è negativo. 31 30 23 22 0 1 S Esponente Mantissa Nella trasformazione del numero decimale in binario ci dobbiamo occupare solo della parte frazionaria (e quindi del sistema delle moltiplicazioni successive) poiché la parte intera è pari a zero. Procedendo con le moltiplicazioni otteniamo il seguente numero binario: 0,005(10) = 0.0000000101000111101011100001010(2). Per normalizzare il numero dobbiamo portare la virgola in posizione immediatamente successiva al primo 1. A differenza dei precedenti esercizi, questa volta dobbiamo andare verso destra di otto posizioni per cui la forma normalizzata sarà caratterizzata da un esponente negativo del 2: 1.01000111101011100001010 * 2-8 La mantissa non necessita di alcun completamento poiché le cifre sono proprio pari a 23. 31 30 23 22 1 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0 S Esponente Mantissa Occupiamoci, ora, dell’esponente. L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a -8 a cui, sappiamo, dobbiamo sommare il bias 127. Abbiamo, quindi, –8+127 = 119(10) = 01110111(2) La rappresentazione ottenuta è: 31 30 1 S 23 22 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0 Esponente Mantissa LA RAPPRESENTAZIONE DEI NUMERI IN PRECISIONE DOPPIA Per quanto riguarda la precisione doppia occorre solo tener presente che i 64 bit a disposizione sono così strutturati: • 1 bit per il segno; • 11 bit per l’esponente polarizzato biased 1023 • 52 bit per la mantissa. 63 62 S 0 52 51 Esponente Mantissa I calcoli sono analoghi a quelli visti per la precisione singola, con la sola variante del bias che, in questo caso, è pari a 1023. È evidente che la precisione doppia è utilizzata quando si vogliono rappresentare numeri con molte cifre. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 67 ex.] Rappresentazione dei numeri reali 1 Rappresenta in virgola mobile a precisione singola (32 bit) il numero –49,526(10) 1. Calcola il segno del numero. 31 30 S 23 22 Esponente Mantissa 2. Trasforma il numero senza segno in forma binaria. Convertiamo la parte intera _______ in binario. Dividendo 49 24 Divisore 2 Quoziente 24 Resto 1 Quindi ___________(10) = _________________(2) Procediamo, ora, con la conversione della parte decimale ____________ servendoci del metodo delle moltiplicazioni successive: _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ …… Quindi la parte frazionaria ________________(10) = __________________(2) Complessivamente, _______________(10) = ______________________(2) 3. Normalizza il numero binario ottenuto. ________________________________________________________________ 4. Completa la mantissa sino a coprire tutti i bit a disposizione. 31 30 S 23 22 Esponente 0 Mantissa 5. Converti l’esponente. L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a ___ a cui occorre sommare (o sottrarre?) ______. Abbiamo, quindi, _______________________. 31 30 S 68 0 START – INFORMAZIONI E CALCOLATORI 23 22 Esponente 0 Mantissa CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA 2 Rappresenta in virgola mobile a precisione singola (32 bit) il numero 625,00137(10) 1. Calcola il segno del numero. 31 30 S 23 22 Esponente Mantissa 2. Trasforma il numero senza segno in forma binaria. Convertiamo la parte intera _______ in binario. Dividendo Divisore Quoziente Resto Quindi ___________(10) = _________________(2) Procediamo, ora, con la conversione della parte decimale ____________ servendoci del metodo delle moltiplicazioni successive: _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ _________ x 2 = ___________ parte intera _____ …… Quindi la parte frazionaria ________________(10) = __________________(2) Complessivamente, _______________(10) = ______________________(2) 3. Normalizza il numero binario ottenuto. ________________________________________________________________ 4. Completa la mantissa sino a coprire tutti i bit a disposizione. 31 30 S 23 22 Esponente Mantissa 5. Converti l’esponente. L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a ___ a cui occorre sommare (o sottrarre?) ______. Abbiamo, quindi, _______________________. 31 30 23 22 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 69 LAVORARE CON TESTA 1 2 3 Che cosa indichiamo con il termine rappresentazione? Qual è la differenza tra dato e informazione? All’interno del seguente elenco individua l’elemento che non caratterizza un codice: c d a b alfabeto sintassi semantica grammatica In base al seguente alfabeto: {a, e, i, o, u} come definiresti il concetto di parola? 5 6 Che cos’è un bit? una configurazione di 16 bit una configurazione di 32 bit c una configurazione di 8 bit d una configurazione di 2 bit Quante configurazioni diverse possono essere realizzate con un byte? 32 c 8 9 256 Che cos’è una parola di memoria? a Una configurazione composta da un numero fisso di byte b Una configurazione composta esclusivamente da 2 o 4 byte c Una configurazione composta da 8 o 16 byte d Una configurazione composta da un numero variabile di byte I computer colloquiano se esiste una ___________________________ tra i due: ad ogni simbolo dell’alfabeto _____________ dovrà corrispondere ________________ solo di quello ____________. Tale corrispondenza viene detta ____________________. v f 15 Ila complemento a 2 di 1100100 è 0010110 0011000 c 0011100 d 0011101 b La rappresentazione in complemento a 2 di un numero è l’opposto della rappresentazione dello stesso in complemento a 1 consiste la rappresentazione dei numeri 17 Inrealichein cosa virgola fissa? 18 Come è strutturato un numero in notazione scientifica? tra i seguenti è la rappresentazione corretta in 19 Quale formato scientifico del numero 2745? 1.2745 E +3 0.2745 E +4 c 0.2745 E +1 d 0.2745 E -4 b bit prevede lo standard IEEE 754 per i numeri 20 Quanti in precisione singola? bit prevede lo standard IEEE 754 per i numeri 21 Quanti in precisione doppia? standard IEEE 754 prevede che per i numeri in 22 Lo precisione singola l’esponente venga codificato polarizzato biased 127. Cosa significa? START – INFORMAZIONI E CALCOLATORI f a Completa la seguente frase: L’alfabeto interno della macchina è rappresentato dai ____________ del sistema _______________, mentre l’utente colloquia utilizzando un alfabeto esterno composto da ___________________________ _____________________________________ 70 v 16 Stabilisci se la seguente affermazione è vera o falsa: 128 d Il codice ASCII serve per codificare solo i caratteri alfabetici e segni diacritici---------------------- che cosa consiste la rappresentazione dei numeri in 14 Inmodulo e segno? Per quale tipologia di numeri si usa? b b b Il codice UNICODE mette a disposizione dell’utente 65536 caratteri---------------------------------------- a 8 nella sua versione estesa è un codice a 7 bit codifica ogni carattere con una particolare configurazione binaria c codifica 256 caratteri d non prevede il bit di parità a 13 Stabilisci se la seguente affermazione è vera o falsa: Un byte è a 10 In cosa consiste la fase di decodifica dell’informazione? 11 Il codice ASCII 12 Stabilisci se la seguente affermazione è vera o falsa: 4 7 PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA training PROVE APERTE PER LA VERIFICA DELLE ABILITÀ 1 Rappresenta la frase “Studio informatica” nel codice ASCII. 12 Verifica con tre esempi che il complemento a 2 del complemento a 2 di un numero è proprio il numero di partenza. 2 Rappresenta la frase “Ciao a tutti” nel codice ASCII. 13 Rappresenta i numeri decimali 3 e –3 nella forma complemento a 2 usando: 3 Considera la seguente sequenza di bit e determina la codifica ASCII: • 4 bit • 6 bit 1100 0011 1001 0100 1000 0100 1001 0110 • 8 bit 4 Rappresenta i numeri interi compresi tra –5 e +5 nella forma valore assoluto con segno con 4 bit. 5 Rappresenta nella forma valore assoluto con segno con 6 bit i seguenti numeri: –13 27 14 Rappresenta i numeri decimali: 5 –25 –7 8 Rappresenta nella forma in complemento a 1 con 6 bit i numeri decimali descritti nell’esercizio n. 4. • 8 bit 15 Scrivi i seguenti numeri decimali: 25 –2, +9, 84 –84 124 nelle varie codifiche in: • modulo e segno • complemento a 1 • complemento a 2 –9 10 Rappresenta in modulo e segno su 6 bit i seguenti numeri: +14, –25 • binario puro 9 Rappresenta in complemento a due su 6 bit i seguenti numeri: +9, nella forma complemento a 2 usando: • 6 bit 7 Rappresenta i numeri compresi tra –7 e 7 nella forma complemento a 1 con 4 bit. –2, 20 • 4 bit 6 Rappresenta nella forma complemento a 2 con 6 bit i numeri decimali descritti nell’esercizio n. 4. +14, 15 tutte su 7 bit. 16 Scrivi i seguenti numeri decimali: –9 100 11 Rappresenta i seguenti numeri decimali: –75 –123 125 64 200 –200 110 –110 nelle varie codifiche in: • binario puro nelle seguenti codifiche: • modulo e segno • forma complemento a con 8 bit; • complemento a 1 • forma complemento a 2 con 10 bit; • complemento a 2 • forma valore assoluto con segno con 12 bit. tutte su 8 bit. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 71 training PROVE APERTE PER LA VERIFICA DELLE ABILITÀ 17 Scrivi i seguenti numeri decimali: 25 Scrivi i numeri corrispondenti alle seguenti rappresentazioni in formato scientifico: –11 –2 –111 112 –113 0.23E4 0.5E9 0,711E-4 nelle varie codifiche in: 26 Scrivi i numeri corrispondenti alle seguenti rappresentazioni in formato scientifico: • binario puro • modulo e segno 0.555E-1 0.81E-6 0.747E5 • complemento a 1 • complemento a 2 27 Rappresenta i seguenti numeri decimali in precisione singola secondo lo standard IEEE 754: tutte su 8 bit. –12,56 18 Scrivi i seguenti numeri decimali: 45,25 –234,875 67,75 –83,8125 nelle varie codifiche in: • binario puro • modulo e segno 12,12 –12,12 1,22222 –100,101 • complemento a 2 tutte su 8 bit. 19 Rappresenta i seguenti numeri decimali in virgola fissa: –12,3 25,21 –31,01 +5 –21 +126 –100 200 –200 2,852 119,6754 0,00000001 100,100 22222,222 23 Normalizza i seguenti numeri decimali: 117,385 9,6754 0,0000456 10,000005 1,00000001 24 Normalizza i seguenti numeri decimali: 0.00000000000111 111111.111 72 START – INFORMAZIONI E CALCOLATORI • virgola mobile in singola precisione • virgola mobile in doppia precisione • virgola fissa • virgola mobile in singola precisione • virgola mobile in doppia precisione 22 Normalizza i seguenti numeri decimali: 0.00000110 100.000 30 Rappresenta il numero reale 23,56 in: 31 Rappresenta il numero reale –11,13 in: 21 Esprimi i seguenti numeri decimali in una rappresentazione binaria su 8 bit con eccesso 127: 100 in codifica binaria secondo lo standard IEEE 754 (in singola precisione a 32 bit). • virgola fissa 20 Esprimi i seguenti numeri decimali in una rappresentazione binaria su 8 bit con eccesso 127: 0 in codifica binaria secondo lo standard IEEE 754 (in singola precisione a 32 bit). 29 Esprimi i seguenti numeri decimali: • complemento a 1 -0,004 28 Esprimi i seguenti numeri decimali: –200 –201 –203 –201 –200 0,003 32 A quali numeri decimali corrispondono i seguenti numeri binari rappresentati in modulo e segno e in complemento a 2? • 100110 • 11110 • 111 • 0101 (Come procedere: • In modulo e segno elimina il bit del segno e calcola il valore assoluto in notazione decimale. Il risultato sarà il valore assoluto se il bit di segno è 0, oppure il corrispondente numero negativo se il bit di segno è 1. CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA training • In complemento a 2, se il bit di segno è 1, calcola la rappresentazione binaria del valore assoluto del numero invertendo tutti i bit partendo dal primo 1, escluso, che si incontra leggendo la stringa binaria da destra verso sinistra. • Calcola quindi il valore assoluto in notazione decimale. Il risultato sarà il corrispondente numero negativo. Se invece il bit di segno è 0, allora il numero è positivo e basta calcolarne la rappresentazione decimale senza invertire i bit.) 33 Quale valore reale in virgola mobile IEEE 754 è rappresentato dalla seguente sequenza di bit? 1 01100000 01000000000000000000000 (Qualche suggerimento: il segno è evidente, converti in decimale il valore dell’esponente e sottrai 127, converti in decimale la mantissa. Una volta ottenuti i valori decimali, normalizza la mantissa, aggiungici uno, e, infine, moltiplica tra loro i valori del segno, dell’esponente e della mantissa. 34 Dati i seguenti numeri binari floating point, dove il primo bit rappresenta il segno, i successivi 8 bit la caratteristica con eccesso t=127 e i restanti 23 bit la mantissa, determina il numero in base 10 rappresentato. A = 11000000101000000000000000000000 (sol: -5) B = 01000001110011000000000000000000 (sol: 25.5) PROVE APERTE PER LA VERIFICA DELLE ABILITÀ 35 Sia data la seguente stringa di 12 cifre binarie: 101101110000 Trova il valore della stringa interpretata come: a intero senza segno b intero negativo in complemento a due Converti in base 8 i valori assoluti dei numeri ricavati nei casi (a) e (b), e sommali. 36 Trova la codifica floating-point su 32 bit (standard IEEE 754) di 12,610 ed esprimila in notazione esadecimale: 12,610 = 1100,10012 Bisogna normalizzare la mantissa 1,10010012 * 23 , quindi E = 3 Segno +, quindi il bit 31 della codifica deve essere posto a 0Codifica degli 8 bit relativi all’esponente e: e = E + 127 , quindi e = 3 + 127 = 130 in binario 100000102 Per quanto riguarda la mantissa bisogna ricordare che essa è periodica, per cui nei 23 bit riservati si inserisce, partendo da sinistra verso destra, la parte non periodica della mantissa, poi la parte periodica. Quest’ultima è replicata fino al riempimento di tutti i bit a disposizione, quindi: 10010011001100110011001 in definitiva: 01000001010010011001100110011001 in esadecimale: 0100.0001.0100.1001.1001.1001.1001.1001 4 1 4 9 9 9 9 9 4149999916 CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI 73 La codifica delle immagini Attraverso l’informazione digitale anche le immagini e i suoni sono stati trasformati in numeri (in lunghe sequenze di 0 e 1, che il computer è in grado di elaborare). Per il testo è più facile comprendere i meccanismi che favoriscono l’elaborazione da parte del computer, poiché il testo scritto è costruito accostando fra loro delle unità discrete (i singoli caratteri), selezionate all’interno di un alfabeto limitato. Dati multimediali come immagini e suoni apparentemente potrebbero invece sembrare analogici, cioè composti da informazioni di tipo “continuo” (pensa ai toni di grigio, alla frequenza, alle tonalità di colore e così via). Come si fa a codificare le infinite differenze e sfumature di un’immagine o di un suono? Per comprendere in che modo il problema sia stato risolto, partiamo da una semplice riflessione. Le immagini che appaiono su un televisore o sul monitor di un computer risultano di norma semplici da interpretare: è semplice identificare forme, riconoscere un attore; ma se ci avviciniamo molto al video, possiamo notare che quella che a una certa distanza appare un’immagine ben definita, nitida e continua, si trasforma in un’immagine sgranata, composta da tanti piccoli puntini luminosi e colorati: i pixel (termine inglese che, come sappiamo, corrisponde alla contrazione dei due termini picture elements). Tutto ciò è assolutamente normale, poiché le immagini che vediamo sui monitor sono in realtà il risultato dell’accostamento dei tanti singoli segnali luminosi emessi da ogni pixel. L’impressione di nitidezza e continuità dipende esclusivamente dalla griglia di pixel: quanto più è fitta, ossia quanti più pixel ci sono in un centimetro o in un pollice, tanto migliore sarà l’impressione di un’immagine nitida e continua (vedi la figura a fianco). Per ottenere la codifica digitale dell’immagine è necessario rappresentare i vari pixel mediante numeri. Come per il testo, quindi, è necessario utilizzare una tavola di corrispondenza che, in questo caso, invece di riportare l’associazione tra numeri e caratteri, contenga una corrispondenza tra numeri e colori, o tra numeri e gradazioni di colore, a seconda del formato utilizzato. Agli inizi degli anni Ottanta nacquero i primi PC in grado di elaborare la grafica: utilizzavano griglie molto larghe, tanto che i pixel sullo schermo più che minuscoli puntini erano quadrati abbastanza visibili e i colori che si potevano utilizzare erano esclusivamente il bianco e nero, o al massimo 8/16 colori diversi. L’effetto non era assolutamente soddisfacente: grafica grezza, eccessivamente lineare, pochi colori. È sufficiente dare uno sguardo a queste immagini e confrontarle con quelle incredibilmente realistiche degli attuali videogiochi per rendersi conto dei progressi compiuti nel campo della grafica computerizzata e dell’enorme aumento di peso in bit. I primi computer riuscivano a gestire una griglia di 80 colonne per 60 righe, quindi di 4800 pixel (80 × 60 = 4800). Limitando i colori al bianco e al nero, era possibile rappresentare ogni pixel mediante un solo bit: in particolare l’1 per rappresentare il nero e lo 0 per il bianco. Avendo a disposizione 4800 bit, si riusciva a codificare un’immagine in bianco e nero, ma era comunque poco per avere un’immagine ben definita. Aumentando il numero di bit otteniamo una griglia più fine e abbiamo a disposizione un maggior numero di colori (in termini tecnici si parla di aumento della profondità di colore o profondità di bit). Possiamo anche usare alternativamente queste due possibilità. Supponiamo di voler aumentare il numero di colori: se per ogni pixel decidiamo di utilizzare un byte anziché un solo bit, invece di utilizzare solo il bianco e il nero possiamo codificare ben 256 colori diversi (con 8 bit è possibile utilizzare 28 = 256 combinazioni di 0 e 1). 74 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Parlare di immagini a 256 colori o 8 bit significa, quindi, che la palette di colori (l’insieme dei colori utilizzati) è codificata nel modo appena descritto. Se avessimo utilizzato 2 byte (16 bit), avremmo avuto a disposizione ben 65536 colori diversi, e così via. Supponiamo, ora, di voler aumentare sia il numero dei colori, sia l’ampiezza della griglia. È evidente che l’aumento della risoluzione, vale a dire della nitidezza dei dettagli dell’immagine, che viene misurata in punti per pollice (DPI: Dots Per Inch) e l’incremento del numero dei colori comportano un notevole aumento del numero di bit occorrenti per rappresentare un’immagine. Immaginiamo di utilizzare una griglia molto diffusa per i PC, quella che prevede una risoluzione di 800 colonne per 600 righe, e di assegnare a ogni pixel 32 bit (che ci permetteranno di specificare oltre 16 milioni di tonalità di colore). Con tali impostazioni, per rappresentare un’immagine a tutto schermo occorrono 800 × 600 × 32 = 15.360.000 bit. La seguente tabella fornisce informazioni sull’occupazione in byte di diversi tipi di oggetti: dando uno sguardo puoi renderti conto della notevole quantità di memoria occorrente e, di conseguenza, di come deve essere rapido il trasferimento dalla memoria secondaria a quella centrale, in modo da avere una gestione efficiente. Occupazione di memoria Oggetto Byte impegnati Pagina di testo circa 2 kB Foto in bianco e nero (dimensione A4: 21 cm × 29,7 cm) circa 8 MB Foto a colori ad alta definizione (dimensione A4) circa 40 MB 1h e 30’ di film non compresso in qualità televisiva circa 30 GB 1h e 30’ di film ad alta definizione in qualità digitale standard professionale (non compresso) circa 1000 GB I dati utilizzati in questa tabella sono relativi a parametri professionali e hanno valore indicativo per gli ordini di grandezza coinvolti. Per avere dati più dettagliati si deve far riferimento a parametri più specifici. Chiariamo: dire, ad esempio, che un’immagine ha 16 milioni di colori non significa che questi siano effettivamente tutti visibili. Può esserne visualizzato anche uno solo, però la profondità di colore disponibile consente di ottenere immagini fino a 16 milioni di colori. Prima di concludere, diamo un accenno alle tecniche di rappresentazione dei colori. I metodi frequentemente utilizzati sono il sistema RGB e il sistema CMYK. Il sistema con cui si creano i colori nel monitor si basa sulle stesse proprietà fondamentali della luce che si trovano in natura: i colori si possono ricavare dal rosso (R), dal verde (G per green) e dal blu (B). Questo concetto è alla base del modello RGB. I colori citati sono detti primari e la loro somma produce il bianco. Il sistema CMYK – ciano (C), magenta (M), giallo (Y per yellow) e nero (K per black) – si basa, invece, sui cosiddetti “colori pigmento” (un oggetto riceve tutto lo spettro di luce, ne assorbe una parte e ne riflette una “fetta”: quest’ultima raggiunge l’occhio che così vede il colore). La sovrapposizione dei colori ciano, magenta, giallo e nero produce il colore nero. Quando si opera sul monitor si usa il sistema RGB, mentre quando l’immagine deve essere inviata a un centro di stampa litografica è opportuno operare una separazione in quadricromia, convertendo dal sistema RGB al sistema CMYK. Nel sistema RGB si assegna un valore d’intensità a ogni pixel compreso fra 0 (nero) e 255 (bianco) per ognuna delle componenti RGB di un’immagine a colori. Ad esempio, un colore rosso luminoso può avere un valore R di 246, un valore G di 20 e un valore B di 50. Quando i valori di tutte le tre componenti sono uguali, si ottiene una sfumatura di grigio. Quando il valore di tutte le componenti è 255, si ottiene il bianco puro, mentre quando il valore di tutte le componenti è 0, si ottiene il nero puro. Le immagini RGB usano tre colori per riprodurre fino a 16,7 milioni di colori sullo schermo; sono immagini a tre canali, per cui contengono 24 (8 × 3) bit per pixel. Nelle immagini CMYK, il bianco puro si ottiene quando tutte le quattro componenti hanno valore percentuale pari a 0 (0%). Rosso (R) RGB Blu (B) Bianco Verde (G) Ciano (C) CMYK Giallo (Y) Nero (K) Magenta (M) CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 75 I sistemi di compressione Le immagini digitali ad alta definizione richiedono una quantità enorme di byte per poter essere memorizzate. Per ridurre lo spazio occupato in memoria, l’unica soluzione è comprimere i dati (cioè evitare di memorizzare i dati ripetuti, detti ridondanze) e decomprimerli prima del loro utilizzo. La compressione è indispensabile o quasi (in modo particolare nelle immagini destinate al web) per ridurre la quantità di dati che devono essere trasmessi via modem. Negli anni sono stati sviluppati vari algoritmi di compressione, che vengono utilizzati durante la fase di salvataggio delle immagini sulle memorie di massa. Il processo attraverso il quale si comprimono i file prende il nome di codifica, mentre quello attraverso il quale si decomprimono assume il nome di decodifica. L’insieme dei processi di codifica e decodifica definisce l’algoritmo di compressione. In generale, un algoritmo di compressione dei dati è una tecnica per ridurre il più possibile lo spazio occupato da un file. Sono stati ideati molteplici protocolli di compressione e alcuni di essi, che con l’uso si sono rivelati più efficaci, sono diventati degli standard. Sigle quali TIFF, GIF, JPEG sono entrate a far parte del linguaggio comune, particolarmente di quello utilizzato dagli utenti Internet o dai grafici. Queste sigle, e altre che ci accingiamo a studiare, rappresentano specifici formati di file grafico e indicano anche, in alcuni casi, un algoritmo di compressione. Si definisce formato di file grafico il modo in cui i dati grafici vengono memorizzati in un file dal programma. Per memorizzare le immagini, dalle comuni fotografie in bianco e nero ai veri e propri filmati, si usano vari formati di file; per ridurre le dimensioni dei file, si usano diversi algoritmi di compressione. Gli algoritmi di compressione vengono suddivisi in tre grandi categorie, ognuna delle quali permette di utilizzare specifiche tecniche di compressione (codec = compressione/decompressione): • algoritmi a codifica entropica (compressione lossless); • algoritmi a codifica sorgente o tecnica (compressione lossy); • algoritmi a codifica ibrida (compressione ibrida). La compressione lossless è un processo mediante il quale il file viene compresso assicurando l’integrità del suo contenuto. Con la sua espansione, infatti, viene garantito il ritorno al file originale, identico in tutto e per tutto, senza alcuna perdita di informazioni. Questi algoritmi garantiscono una codifica fedele, completamente reversibile e applicabile a qualunque tipo di dato. Non essendoci perdita di dati originali in fase di compressione, questa tecnica trova largo utilizzo nel trattamento di immagini nelle quali non è accettabile alcuna perdita di informazioni e si vuole ottenere fedeltà assoluta del file trasportato, ad esempio per le radiografie mediche. Un algoritmo lossless è tanto migliore quanto più riesce a comprimere. Molti programmi di compressione lossless utilizzano un metodo conosciuto come algoritmo LZW (Lempel-Ziv Welch). La logica su cui si basa questo algoritmo è quella di ricercare all’interno del file sottoposto a compressione dei sottoinsiemi di dati ridondanti e di convertirli in blocchi di caratteri di lunghezza inferiore; il processo viene eseguito in modo inverso in fase di decompressione. La compressione lossy è un processo che non assicura la conservazione integrale del contenuto del file, nel senso che i dati che devono essere compressi non possono poi essere riespansi in modo da ottenere un file esattamente uguale a quello originale. Si tratta quindi di una codifica non fedele e specifica per determinati tipi di dati. 76 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Un algoritmo di compressione lossy provoca una perdita di dati, scartando i particolari meno importanti. Se si comprime un file con un algoritmo lossy e poi lo si decomprime, si otterrà un file simile all’originale, ma non uguale. Questa tecnica consente un elevato tasso di compressione (si va da un rapporto 1:5 a 1:90, a seconda di quanti dati si vogliono perdere) e viene solitamente applicata a file (audio, video, immagini) i cui dati sono rivolti ai sensi umani (vista, udito). In questo caso, infatti, i ricettori finali (occhi, orecchi) non sono in grado di apprezzare quelle variazioni che, in termini di spazio, occupano diversi byte in memoria, e che quindi possono essere eliminate senza determinare una compromissione dei dati nella loro globalità. Una compressione che superi un rapporto di 1:10 comincia però a mostrare, anche all’occhio e all’orecchio umano, delle differenze. stop Diamo uno sguardo alle seguenti immagini: È difficilissimo, se non impossibile, percepire le sottili differenze; apparentemente, infatti, le immagini sono assolutamente identiche. L’immagine a sinistra ha una profondità di colore a 8 bit, quella a destra a 6 bit, quindi la prima può contenere 28 colori, la seconda solo 26. Considerato che l’immagine a destra utilizza una quantità di colori inferiore rispetto all’immagine sinistra, ha anche una dimensione decisamente inferiore rispetto quest’ultima. Altre differenze che non è facile riscontrare sono la luminosità delle immagini a colori e la tinta: la prima è distinguibile, la seconda non tanto, o meglio si ha una maggiore sensibilità nel percepire i contorni o i contrasti. È stato scientificamente dimostrato, infatti, che l’occhio umano è molto più sensibile alla luminosità che non alla tinta. Queste osservazioni sono alla base della tecnica di compressione lossy delle immagini, ma è bene ricordare, ancora, che una maggiore compressione comporta necessariamente una perdita definitiva di dati. Alla luce di queste informazioni, è facile intuire che per un file binario eseguibile è senz’altro necessaria una compressione con algoritmi lossless, mentre per un file audio può essere indicata una compressione lossy. La compressione ibrida è una combinazione di tecniche lossless e lossy: la loro interazione consente di ottenere il maggior grado di compressione e di efficienza. Un algoritmo che rientra in questa categoria è lo standard di compressione delle immagini JPEG (che tratteremo più avanti). Attualmente esistono sul mercato svariati algoritmi che offrono un’ottima compressione dei dati per tutte le piattaforme: basti ricordare Winzip per Windows e Gzip per Linux. Questi programmi, in genere, non utilizzano un solo metodo di compressione, ma ne combinano due o tre per ottenere un risultato migliore. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 77 La compressione delle immagini Abbiamo visto che la compressione lossy consiste nel rimuovere dalle immagini tutti quei dati che non sono visibili all’occhio umano. Tenendo conto del tipo di informazione da comprimere, i programmi di compressione utilizzano due tecniche diverse: • la compressione intraframe (o compressione spaziale), usata soprattutto per immagini statiche; • la compressione interframe (o compressione temporale), usata nei filmati. Gli algoritmi basati sulla compressione spaziale (o intraframe) eliminano i dati ridondanti all’interno del singolo fotogramma (frame). Un semplice algoritmo di compressione spaziale potrebbe essere il seguente: se tre o più pixel adiacenti hanno lo stesso livello di grigio (la stessa gradazione nelle immagini a colori), invece di scrivere la sequenza: 112 112 112 112 112 112 112 132 132 132 132 132 si potrebbe scrivere: 007 112 005 132 dove il primo numero indica la quantità di pixel (e quindi di byte) che hanno il valore 112, il terzo numero indica la quantità di pixel (byte) che hanno il valore 132. Così facendo si risparmiano 8 byte di memoria. Naturalmente, quando il file verrà aperto, dovrà essere filtrato da un apposito algoritmo inverso di espansione. Gli algoritmi basati sulla compressione temporale (o interframe) partono da un fotogramma di riferimento (key frame) ed eliminano le ridondanze dei fotogrammi successivi. Così facendo, memorizzano solo le differenze rispetto al fotogramma precedente (difference frame). stop In un fotogramma con una palla che rimbalza, verrà memorizzato per intero solo il primo fotogramma, mentre per i successivi saranno memorizzati solo i dati relativi allo spostamento della palla. Alcuni algoritmi di compressione Esaminiamo ora alcuni algoritmi di compressione. Esempio: Per comprimere la seguente stringa numerica: 6666666666666666666639444444443555555222222288889999966666666664444445201111166666 66666 è possibile compilare il seguente “dizionario”: 78 A = 6666666666 B = 444444 C = 555555 D = 2222222 E = 8888 F = 99999 G = 11111 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Sostituendo, si ottiene la stringa: AA39B443CDEFAB520GA Algoritmo a codifica di stringa (lossless). è una tecnica applicata proficuamente per i tipi di dati nei quali sono presenti sottostringhe comuni. La compressione si ottiene semplicemente compilando un dizionario di sottostringhe, ognuna delle quali verrà sostituita da una opportuna sequenza univoca (ovviamente più corta) nel file compresso. Il file compresso dovrà contenere sia la stringa compressa sia il dizionario delle abbreviazioni; la compressione più vantaggiosa si ha quando più stringhe uguali si ripetono nel testo (come A e B). Pensando a una foto, o comunque a un’immagine, è immediato comprendere quanto sia facile trovare delle sequenze di bit della stessa tonalità di colore, mentre nei file audio le sequenze di 0 possono essere interpretate come il silenzio audio. Esempio: La seguente stringa: 111111111111111556666660000000000888899999 può essere compressa nel seguente modo (il numero prima di # rappresenta l’elemento ripetuto, il numero posto dopo il # indica quante volte compare nella stringa): 1 # 15 5 # 2 6 # 6 0 # 10 8 # 4 9 # 5. Run-Length Encoding – RLE (lossless). È una tecnica molto elementare, la cui forza è imperniata sulla presenza, nei dati da sottoporre a compressione, di ampie successioni di bit uguali. La compressione avviene sostituendo la sequenza di bit uguali con un carattere speciale e un numero che ne suggerisca la lunghezza. Algoritmo a codifica statistica (lossless). In questa categoria rientrano l’algoritmo di Huffman e quello di Lempel-Ziv Welch (LZW), due fra gli algoritmi di compressione più utilizzati. In particolare, l’algoritmo di Lempel-Ziv Welch (LZW) è una tecnica di compressione di tipo lossless supportata da diversi formati grafici. È molto utile per comprimere immagini che contengono ampie aree caratterizzate da un’unica tonalità di colore. Arriva anche a dimezzare le dimensioni del file (dipende, comunque, dal contenuto). Anche questo algoritmo si basa sulla logica di sostituzione delle sequenze più lunghe con altre più corte: la differenza rispetto al metodo precedente consiste nel fatto che la determinazione delle sequenze da sostituire viene eseguita basandosi su analisi statistiche. Algoritmo a codifica differenziale (lossy). Per comprendere questo algoritmo facciamo un esempio: supponiamo di voler comprimere una sequenza di valori espressi in matrici (relativi a un file audio, video o multimediale) e di essere al corrente che i valori adiacenti variano poco l’uno dall’altro. Per esempio, ipotizziamo che il valore posto nella posizione i della stringa sia 3456 e il valore posto in i + 1 sia compreso tra 3456 – 128 e 3456 + 128. Se tutti i numeri sono espressi utilizzando 24 bit (come avviene comunemente nei file di immagini), è ammissibile esprimere la sequenza con numeri di soli 8 bit, considerando soltanto il numero i + 1 come la somma del valore del precedente i con la differenza tra i e i + 1. In questo modo si utilizzano solo 8 bit al posto di 24 per ogni numero della sequenza, con un risparmio di 16 bit (2/3 in meno). A prima vista sembrerebbe che questa codifica sia di tipo lossless, ma non è così, poiché si ha una perdita di dati quando due valori adiacenti differiscono più di quanto possa essere espresso con 8 bit (ossia 127 nei numeri con segno e 255 in quelli senza segno). Questa tecnica non può essere applicata a tutti i file, nel senso che non tutti i tipi di dati sono adatti a essere compressi con questo algoritmo: in particolare, i dati che prevedono sbalzi troppo elevati subiscono un’esorbitante perdita di informazione. Algoritmo a trasformazioni (lossy). Un tipo di trasformazione si può avere, per esempio, nelle immagini. Supponiamo di avere la matrice 3 x 3 riportata qui a fianco, che rappresenta un livello di colore RGB in un’immagine: la compressione può essere ottenuta sottraendo a tutte le celle successive alla prima, in alto nella tabella, il valore di questa. Si utilizza una compressione statistica per variare il numero di bit utilizzati. 155 155 146 –6 152 –3 153 –2 153 –2 152 –3 154 –1 156 +1 157 +1 CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 79 Grafica raster e grafica vettoriale Esistono due tipi di grafica: • grafica a punti o raster (bitmap graphics); • grafica vettoriale (object-oriented graphics). Nella grafica bitmap l’immagine è una griglia rettangolare (chiamata tecnicamente raster) di pixel colorati: è un po’ come un mosaico in cui le singole tessere corrispon- dono ai pixel. Nella memoria del computer vengono conservati i singoli pixel relativi all’immagine bitmap. Considerato che anche il video è un dispositivo raster, questo tipo di grafica ben si presta alla visualizzazione su video. Le immagni bitmap sono dipendenti dalla risoluzione: ciò significa che, quando si crea un file, occorre specificare una risoluzione. Cambiare risoluzione significa modificare la qualità dell’immagine. In alcuni casi la grafica bitmap non è molto vantaggiosa. Per esempio, nel caso di un ingrandimento o zoom, la risoluzione diviene particolarmente bassa e di conseguenza la qualità dell’immagine peggiora considerevolmente. La grafica bitmap o raster viene impiegata particolarmente nei settori dedicati all’elaborazione delle immagini e permette di lavorare sui singoli pixel: così facendo, si possono ottenere effetti simili a quelli della pittura e della grafica tradizionale (pennello, matita, carboncino, gessetto). I programmi di fotoritocco, infatti, funzionano proprio in questo modo. Cambiando le dimensioni di un’immagine bitmap, la qualità peggiora a mano a mano che l’immagine viene ingrandita o ridotta. In questo secondo caso, il computer è costretto a restituire il singolo pixel come una “media” di quelli originali, mentre nel caso dell’ingrandimento è costretto a “inventare” dei pixel che prima non esistevano: nel primo caso l’immagine si presenta impastata, mentre nel secondo sgranata. Ciò significa che, purtroppo, si hanno limiti notevoli nella manipolazione di un’immagine bitmap. Nella grafica vettoriale, invece, un’immagine è vista come un raggruppamento di oggetti grafici (punti, linee, rettangoli, ovali e così via), ognuno dei quali viene tradotto in formule matematiche che contengono tutte le istruzioni necessarie per poterlo tracciare. Per esempio, per i segmenti vengono memorizzate solo le coordinate del punto iniziale e di quello finale, mentre per un cerchio si memorizzano solo le coordinate del centro e la lunghezza del raggio. La colorazione avviene mediante l’attribuzione diretta del colore alle linee e alle aree chiuse, per cui risulta precisa e netta. Ogni singolo oggetto componente l’immagine è assolutamente indipendente e, come tale, può essere spostato, modificato o eliminato senza influenzare in alcun modo gli altri oggetti dell’immagine. Dal momento che ogni oggetto viene rappresentato in memoria per mezzo di una funzione matematica, per riprodurre l’immagine su un dispositivo raster (come un monitor) occorre trasformarla in pixel: tale operazione è definita rasterizzazione. Il procedimento opposto, cioè la trasformazione di immagini raster in immagini vettoriali, viene detto vettorializzazione. È facile rasterizzare le immagini vettoriali, cioè trasformarle in bitmap, mentre è molto complesso il procedimento inverso: pochissimi sono infatti i programmi in commercio che consentono di trasformare bitmap (ad esempio immagini digitalizzate allo scanner) in vettoriali. La grafica vettoriale (a oggetti) è, quindi, un altro modo di produrre effetti grafici con il computer. I programmi di CAD (Computer Aided Design) sono software che utilizzano la grafica vettoriale. 80 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE La descrizione matematica di ogni oggetto che compone il disegno viene memorizzata in un database interno di oggetti grafici. Attraverso questa tecnica, tutti gli oggetti possono essere manipolati (ingranditi, rimpiccioliti, colorati, ruotati e così via). senza alcuna perdita di qualità. Inoltre, cambiando le dimensioni di un’immagine vettoriale, la qualità viene conservata, perché vengono modificate sul piano solo le linee e le curve: per questo motivo si dice che le immagini vettoriali sono scalabili e indipendenti dalla risoluzione (resolution independent). stop I programmi di grafica vettoriale consentono di vedere l’immagine in due diverse modalità: • visualizzazione wireframe; • visualizzazione shaded. Il modello di visualizzazione wireframe (che letteralmente significa “modello in fil di ferro”) consente di vedere esclusivamente le linee che compongono l’immagine ed è molto utilizzato per poter trattare più agevolmente l’immagine stessa. L’interno dell’immagine rimane di fatto trasparente (sembrando costruito con il fil di ferro, ecco il motivo del nome). Per vedere la rappresentazione realistica dell’oggetto finale, si ricorre a immagini bidimensionali chiamate texture, che vengono applicate ai poligoni dell’oggetto tridimensionale, oppure alla visualizzazione shaded, in modo da attribuire un’ombreggiatura (shaded in italiano significa ombreggiato). L’operazione di applicazione di una texture a un poligono prende il nome di texturing o texture mapping. Wireframe Shaded Texture mapping CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 81 I formati grafici delle immagini bitmap La memorizzazione di un’immagine bitmap comporta la scrittura di due tipi di informazioni: • i valori dei pixel; in particolare, per determinare e ottenere un colore: –la scala di grigio richiede un valore; –il metodo RGB richiede tre valori; –il metodo CMYK richiede quattro valori; –il metodo Lab richiede tre valori; • le metainformazioni. Per le immagini a 8 bit i valori dei pixel vanno da 0 a 255, mentre per le immagini a 16 bit l’intervallo di valori va da 0 a 65535. In base al modo in cui sono organizzate le metainformazioni si hanno diversi formati grafici bitmap. Li esaminiamo sommariamente nel seguito. BMP È il formato grafico di tipo bitmap di Microsoft Windows e supporta immagini fino a 24 bit. Viene utilizzato da programmi come Paint; le immagini caratterizzate da questo formato possono essere usate come sfondo per il desktop di Windows. La particolarità di questo formato, che ne ha decretato il successo, è la velocità con cui le immagini vengono lette o scritte su disco. Tale velocità, infatti, è notevolmente superiore rispetto ad altri tipi di file, in particolar modo sulle macchine più lente. Nelle immagini bitmap non compresse la rappresentazione dei dati all’interno della memoria RAM è praticamente simile, se non addirittura identica, a quella dei dati presenti su disco: in questo modo il processore non è obbligato ad eseguire gravosi calcoli durante le operazioni di codifica e di decodifica. Eventuali limitazioni e ritardi sono dovuti solo all’hardware del drive. La compressione è opzionale, ma generalmente è impostata secondo l’algoritmo di tipo lossless RLE descritto in precedenza. TIFF Il TIFF (Tag Image File Format) è il più usato, flessibile e affidabile metodo per la memorizzazione di immagini bitmap di qualità in bianco e nero, a scala di grigio, a scala di colore (a colori RGB, CMYK, Lab e altri ancora). È un formato supportato dalla quasi totalità delle applicazioni. Un file TIFF può essere di ogni dimensione (in pixel) e di ogni profondità di bit. Può essere salvato con o senza compressione: nel caso in cui venga compresso, viene utilizzata la compressione LZW, che è di tipo lossless. Oltre ai dati dei pixel, il formato TIFF può contenere qualsiasi metainformazione (le più comuni sono la risoluzione, la compressione, il modello di colore, il tracciato di scontorno e così via) in specifiche locazioni di memoria denominate tag. Il formato TIFF era stato inizialmente creato per divenire un formato raster standard: aveva infatti tutte le caratteristiche per poter essere applicato in un ampio ventaglio di applicazioni. Nonostante ciò, alcune applicazioni introducono appositi tag proprietari con i quali è possibile impedire l’apertura dei file da altre applicazioni. Esistono due versioni di TIFF, una destinata a macchine Windows e una a macchine Macintosh. Pur essendo molto simili tra loro, la differenza sostanziale sta nell’ordinamento dei byte: nei file per Windows i byte iniziano con le cifre meno significative, mentre in quelli per Macintosh con quelle più significative. È comunque possibile utilizzarli su entrambi i sistemi. Un file in formato TIFF si può convertire in quasi tutti i formati grafici. 82 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE GIF Il GIF (Graphics Interchange Format) è un formato standard di memorizzazione di file grafici di tipo bitmap a scala di colore (quindi, in questo caso, RGB) con un massimo di 256 colori (o grigi). Questo formato è stato realizzato da CompuServe, uno dei primi Internet provider, per diffondere attraverso la Rete immagini grafiche compresse, ottenendo così un’elevata rapidità. È probabilmente il formato grafico più usato al mondo, poiché è dominante su Internet e nelle librerie shareware. Il formato GIF funziona bene sui grafici cosiddetti “al tratto”, loghi, fumetti, sia in bianco e nero che a colori poiché utilizza una compressione lossless (precisamente, l’algoritmo usato è quello LZW). Ciò significa che nessun pixel dell’immagine originale viene perduto. Esso, però, non è altrettanto valido per le fotografie e le immagini sfumate, per le quali è meglio usare il formato JPEG. In particolare, il formato GIF offre le seguenti possibilità utili nella realizzazione di pagine web. • Uno qualsiasi dei colori dell’immagine può essere considerato trasparente, in modo che attraverso le aree di tale colore sia visibile lo sfondo su cui l’immagine viene visualizzata (GIF trasparenti); • L’immagine è memorizzata con una struttura tale che consente la sua visualizzazione durante il caricamento in Rete. Il dettaglio aumenta a mano a mano che l’immagine viene caricata (GIF interlacciate). La figura, invece di essere caricata e visualizzata in un singolo passaggio, necessita di diversi passaggi per poter essere visualizzata in modo ottimale. Prima, quindi, viene mostrata sfuocata, poi, piano piano, l’immagine viene gradualmente riempita e resa sempre più nitida, fino a essere completata. Questo è un punto di forza del formato GIF, perché l’utente collegato a Internet può vedere l’immagine “comporsi” mentre viene scaricata e avere un’idea del contenuto della stessa. Può, così, interrompere il caricamento prima del termine, risparmiando tempo se, ad esempio, l’immagine non è quella che cerca. • È possibile inserire in un unico file diverse immagini, in modo da realizzare animazioni di cui si può specificare la temporizzazione (GIF animate). Le prime due possibilità sono disponibili sin dalla prima versione del formato (GIF87a), la terza, invece, è stata introdotta nella versione GIF89a. PNG Il formato PNG (Portable Network Graphics) nasce poiché il formato GIF, che era lo standard per la trasmissione delle immagini in Rete, a seguito del brevetto dell’algoritmo di compressione che utilizza non può più essere usato gratuitamente da chi scrive software. Questo formato, che si pronuncia “ping”, riesce a gestire immagini da 1 a 48 bit e utilizza una compressione di tipo lossless. Possiede, inoltre, alcune caratteristiche tipiche delle immagini GIF, come la trasparenza e l’interlacciamento. L’utilizzo di questo formato è stato in principio limitato; ciò a causa del fatto che solo pochi software erano in grado di scrivere o leggere tali immagini. Col tempo, tutti i maggiori programmi di grafica e di navigazione hanno accettato il formato PNG, che così ha trovato più largo utilizzo. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 83 Il formato JPEG e la geometria frattale Il formato JPEG JPEG (Joint Photographic Experts Group) è un formato standard di compressione dei file grafici di tipo bitmap. Il suo nome deriva dal comitato dell’ISO (International Standard Organization), che ne ha definito le specifiche. Il formato JPEG (si pronuncia “geipeg”) è stato realizzato per memorizzare immagini a colori o a toni di grigio di scene fotografiche naturali (in modo compresso) basandosi su elaborazioni ma tematiche dell’immagine digitalizzata. È un ottimo formato per la memorizzazione di fotografie, quadri, disegni molto sfumati con un elevato numero di colori (fino a 16.777.216) o a toni di grigio, ma non è l’ideale per fumetti, disegni al tratto, logo, lettering dove, come abbiamo visto, risulta più valido il formato GIF. Il formato JPEG tratta solo immagini statiche, ma esiste un altro standard correlato, MPEG, per i filmati (immagini in movimento). Il formato JPEG viene mediamente utilizzato con un rapporto di compressione compreso fra 1:5 e 15:1, ma può arrivare molto oltre. Il metodo di compressione utilizzato da questo formato è di tipo lossy, il che significa che, per diminuire la dimensione dell’immagine, alcuni pixel devono essere eliminati, per poi essere ricostruiti (ma non esattamente uguali) in fase di decompressione. Di conseguenza, l’immagine risultante non sarà più esattamente uguale a quella originale. Ma c’è di più! Se si manipola un’immagine JPEG e si risalva in JPEG, potrebbe verificarsi un’ulteriore perdita di pixel. Se si modifica un file JPEG solo localmente e lo si salva utilizzando lo stesso livello di qualità con cui era stato salvato la prima volta, si avrà un degrado dell’immagine irrisorio o addirittura nullo, poiché verrà modificata solo la parte corretta. In tutti gli altri casi, però (ad esempio il taglio di una porzione di immagine), l’algoritmo di compressione viene riapplicato e l’immagine perde nuovi pixel. Il formato JPEG è stato progettato in modo che i pixel eliminati siano quelli meno visibili all’occhio umano che, infatti, è meno sensibile alle piccole variazioni di colore che alle piccole variazioni di luminosità. Se si trovano due pixel caratterizzati da una minima variazione di luminosità vengono conservati, ma se si trovano due pixel con una minima variazione di colore ne viene mantenuto solo uno. Nonostante tutto, JPEG non usa un metodo fisso di compressione. Si può avere, infatti, una compressione lossy cosiddetta “dosata”, nel senso che l’utente, in fase di memorizzazione dell’immagine, può specificare il fattore di compressione desiderato, con un unica limitazione: maggiore è il valore di tale fattore (quindi più piccolo è il file che si ottiene), maggiore è il deterioramento dell’immagine. Questa variante, che consente di scegliere il fattore di compressione, è nota come JPEG progressivo, che fornisce diverse rappresentazioni della stessa immagine, corrispondenti a diversi fattori di compressione: a fattori sempre maggiori corrisponde una qualità via via più bassa. Una forma più recente di JPEG, chiamata JPEG progressivo, conferisce alle immagini JPEG la stessa gradualità di visualizzazione delle immagini GIF interlacciate; al pari di queste ultime, le immagini JPEG progressive impiegano spesso un tempo maggiore per il trasferimento nella pagina web rispetto alle JPEG standard, ma offrono al lettore un’anteprima più rapida. 84 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE La geometria frattale Lo scienziato Benoit B. Mandelbrot all’inizio degli anni Cinquanta si chiese se le incantevoli forme presenti in natura rispondessero soltanto alla legge del caso o, per quanto articolate e complesse, non obbedissero a qualche legge universale. Attraverso i suoi studi, e in particolare per mezzo di un diagramma che prese il suo stesso nome, Mandelbrot dimostrò che specifiche geometrie si manifestavano e si riproponevano sia esaminando la realtà in scala estremamente grande, sia osservandola in scala estremamente piccola. Comprese che esistevano degli oggetti (che chiamò appunto frattali) che, indipendentemente dal punto di vista e dall’ingrandimento utilizzato, ripresentano sempre le stesse forme, in quanto ogni parte è rappresentativa del tutto. Proviamo a realizzare una comune immagine frattale, nota come fiocco di neve di von Koch. Il procedimento è molto semplice: • si prende un segmento, lo si taglia in 3 parti uguali e si sostituisce quella centrale con due segmenti uguali a quello eliminato; • si ripete l’operazione con ciascuno dei quattro segmenti ottenuti e si continua a ripeterla per un numero infinito di volte. Dopo un numero infinito di iterazioni si ottiene una curva frattale che, come tutte le curve di questo tipo, è dotata di avvincenti proprietà matematiche, spesso facili da intuire ma, altrettanto spesso, difficili da dimostrare. Se il nome “fiocco di neve” può apparire non particolarmente adatto alla curva riportata nella figura precedente, è sufficiente osservare ciò che si ottiene applicando il medesimo procedimento ai lati di un triangolo per cambiare idea. Un altro classico esempio di curva frattale è rappresentato dalla costa marina: se riflettiamo, infatti, i contorni costieri presentano sempre un flessibile sistema di punte e insenature, a qualsiasi altezza e grandezza li si osservi. È questa un’altra proprietà dei frattali, che Mandelbrot chiamò autosomiglianza: ingrandendo un qualsiasi tratto di curva si visualizza un insieme di particolari ricco e complesso che somigliano ciascuno al tratto stesso. Questo procedimento di “zoom” può procedere all’infinito. Da queste analisi derivano due curiose caratteristiche delle curve frattali: • pur essendo continue, non ammettono una tangente unica in alcun punto; • presi due punti della curva, anche vicinissimi tra loro, la distanza fra essi (misurata lungo la curva) è sempre infinita. Grazie all’impiego degli attuali computer, e abbinando questi algoritmi a procedure ricorsive, si possono generare delle armonie spaziali estremamente complesse. Le figure frattali, pur potendo apparire a prima vista come immagini astratte, ricalcano in qualche modo gli stessi processi che regolano il mondo che ci circonda e, quindi, risultano ai nostri occhi modelli familiari. Ricordiamo, infine, che i frattali sono tipicamente grafica vettoriale. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 85 La grafica tridimensionale e il rendering La grafica vettoriale può essere bidimensionale o tridimensionale. In un’immagine tridimensionale ogni forma è costituita da una struttura di poligoni. Per dare a tale struttura l’aspetto di un solido si ricorre a varie tecniche che, attraverso l’aggiunta o la sottrazione di colori, oppure mediante la “limatura” di bordi, consentono di attribuire all’immagine effetti luce/ombra o di dare risalto a elementi dell’immagine stessa. Vediamo quali sono queste tecniche e quali effetti producono. Anti-aliasing L’anti-aliasing è un procedimento grafico mediante il quale è possibile eliminare o attenuare la “seghettatura” che appare sugli schermi raster nei bordi dei poligoni, nelle linee curve e in quelle oblique, così come gli errori di clipping (quando oggetti posizionati dietro dei poligoni si vedono comunque) o problemi dovuti a oggetti che si spostano in maniera anomala. L’anti-aliasing, quindi, aumenta in maniera sensibile la qualità e il realismo della scena. Osserviamo la seguente figura. a) b) c) d) Nell’immagine a possiamo vedere delle righe caratterizzate da un bordo dentellato, dovuto alla risoluzione. Il problema della “dentellatura” delle immagini è detto aliasing. L’immagine b, invece, ci mostra le stesse righe, ma “ammorbidite” e rese più regolari incorporando dei colori intermedi tra il colore dell’immagine e quello dello sfondo (le immagini c e d mostrano lo stesso effetto amplificato). L’aggiunta di questi colori intermedi si chiama anti-aliasing. Alcuni programmi per la creazione di immagini raster aggiungono automaticamente l’anti-aliasing alle immagini, in modo da migliorarne immediatamente la qualità. Un problema dell’anti-aliasing è che se, successivamente, l’immagine viene spostata su un altro sfondo, poiché i colori intermedi dipendono esclusivamente da quest’ultimo, si vedono degli aloni intorno all’immagine. Alfa blending L’alfa blending è una funzione utilizzata per attribuire un effetto di trasparenza a superfici e sostanze. In termini più generici, il programmatore ha la possibilità di assegnare ai singoli pixel un altro valore di colore diverso dai tradizionali rosso, verde e blu (RGB). Con l’ausilio di questa quarta tonalità, il processore grafico sfuma (blending significa proprio l’azione dello “sfumare”) l’oggetto, che così appare trasparente, pur conservando la sua caratteristica di tangibilità. È molto utilizzata per creare effetti ghiaccio o vetro, ma anche per creare i classici effetti fumo e nebbia. 86 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Gouraud shading Il Gouraud shading è una funzione attraverso la quale è possibile intercalare, cioè mediare i colori all’interno dei poligoni costituenti l’immagine. Più in generale, il colore di ciascun poligono viene miscelato con la luce (che può essere anch’essa colorata) che va a colpire il poligono stesso: il risultato è un effetto di profondità e una smussatura degli spigoli vivi. Morphing Il morphing (potremmo tradurlo con metamorfosi, poiché è l’abbreviazione di metamorphosing) è una tecnica che consiste essenzialmente nella trasformazione di un oggetto in un altro. Gli oggetti possono essere di varia natura (fotogrammi, immagini, elementi tridimensionali). Per ognuno di essi vi sono speciali programmi che permettono di realizzare tale trasformazione. La sua prima applicazione in 3D risale al videoclip di Michael Jackson dal titolo Black or White. Nelle ultime scene di tale clip, infatti, si assiste a una metamorfosi che coinvolge i volti di alcuni giovani che, scuotendo la testa, “cambiano faccia”. Per quanto riguarda il cinema, invece, il primo esperimento di morphing 3D risale a Willow, un film di Ron Howard. Il morphing ha sostituito la tecnica della dissolvenza, dando la possibilità di creare metamorfosi molto più naturali. Se si osserva la sequenza di trasformazione fotogramma per fotogramma, si può notare che ognuno di essi si differenzia sempre di più dalla figura di partenza, sino ad assumere le caratteristiche del soggetto finale. Il segreto per un buon risultato è che i soggetti delle due immagini abbiano una certa affinità di dimensione, posizione e sfondo, in modo da ottenere un’animazione quanto più realistica possibile. Il rendering I programmi per il disegno tecnico, detti anche programmi di CAD (Computer Aided Design), sono utilizzati da ingegneri e architetti per la progettazione di abitazioni, circuiti elettronici, automobili, aerei e così via. Permettono di disegnare gli oggetti sin nei minimi particolari e di osservarli da diverse angolazioni, al fine di poter apportare tutte le modifiche necessarie. I lavori realizzati con i programmi CAD vengono visualizzati con l’ausilio di appositi programmi di rendering. Questi particolari programmi consentono di riprodurre l’oggetto realizzato in modo assolutamente realistico. Osservando questi disegni si ha come la sensazione di osservare gli oggetti dal vivo: i giochi di luce, le ombre, le prospettive riflettono appieno la realtà in cui l’oggetto si trova o sarà collocato. Il concetto di rendering, infatti, è proprio questo: rappresentare in modo più o meno fedele un oggetto in fase di progettazione, affinché l’osservatore sia in grado di percepire forma, proporzioni, colori e superfici dell’oggetto progettato dal designer. Ciò avviene grazie ad alcuni aspetti: • la corretta prospettiva che i vari programmi riescono a riprodurre; • le ombre ottenute con l’attento e ponderato posizionamento delle luci virtuali; • gli effetti derivanti dall’uso di obiettivi virtuali, per ottenere immagini simili a quelle di un teleobiettivo; • la riproduzione dei materiali (texture), con gli effetti di brillantezza, rifrazione e opacizzazione delle superfici. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 87 L’audio digitale L’audio Fin dalle origini l’uomo ha cercato varie soluzioni per facilitare la propagazione del suono utilizzando diversi dispositivi artificiali che aumentassero l’efficienza di questa trasmissione. La maggiore concentrazione era riservata alla ricerca di un metodo che consentisse di far attraversare al suono spazi maggiori senza essere troppo contaminato da disturbi (detti anche rumori). Una volta risolto questo problema ci si è concentrati sul modo per memorizzare il suono su supporti di memorizzazione che ne permettessero, oltre che il trasporto nello spazio, anche quello nel tempo, ossia che ne permettessero una memorizzazione permanente. Furono usati molti artifizi tecnologici, fino all’invenzione del telefono (a opera dell’italiano Meucci), che permetteva di trasformare i segnali sonori in segnali elettrici che contenevano tutte le informazioni (o quasi) del segnale sonoro originale, ma che potevano essere più facilmente (e più velocemente) trasportate nello spazio (tramite fili elettrici in un primo tempo e successivamente anche tramite onde elettromagnetiche con l’invenzione della radio da parte di Guglielmo Marconi). Nel corso degli anni le innovazioni riguardanti il trattamento del suono sono state numerose e con l’avvento del computer si è giunti anche a un suo “trattamento informatico”: la cosiddetta digitalizzazione del suono. La musica e i video sono sempre più diffusi: pensiamo ai lettori DVD, che hanno ormai soppiantato i videoregistratori. E la musica? La si ascolta dai CD, dalle musicassette, dalla radio, dalla televisione o scaricata da Internet in formato MP3 (parleremo meglio di questo formato più avanti). La musica e il computer sono uniti da un connubio oramai inscindibile: basti pensare che il personal computer ha assunto il ruolo di un vero e proprio strumento musicale, grazie a particolari programmi detti sequencer, che utilizzano diverse tecnologie per registrare, programmare e riprodurre musica, lasciando all’operatore il massimo potere decisionale e creativo. Qui e nel seguito analizzeremo sommariamente le principali tecnologie informatiche al servizio della musica e dei video. L’audio digitale Per quanto riguarda i suoni, la trasformazione del dato analogico in dato digitale prende il nome di campionamento. Il campionamento si basa su un processo di segmentazione (quanto più perfetto possibile) dell’onda sonora di partenza. È possibile rappresentare in molti modi un’onda sonora, ma la rappresentazione più comoda è attraverso una funzione, simile a quella mostrata nella figura qui accanto. Nel campo del suono, la qualità che si riesce a ottenere attraverso la digitalizzazione è molto elevata; basti pensare a quella dei CD o DVD musicali, che non ha nulla a che vedere con quella degli obsoleti dischi di vinile (nei quali l’informazione sonora era registrata in formato analogico). Inoltre, la duplicazione di un brano codificato in formato digitale avviene in modo assolutamente fedele, ossia non esiste il pericolo di una perdita di qualità: la copia sarà perfettamente uguale all’originale, dato che vengono copiati dati numerici. 88 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE La stessa cosa non può essere detta per il suono analogico, dove la copia introduce inevitabilmente disturbi e distorsioni, che comportano un peggioramento della qualità sonora. La scheda audio e il campionamento del suono Nell’era multimediale la scheda audio assume una valenza sempre crescente all’interno dei computer. La scheda audio è il dispositivo del computer preposto alla gestione del suono. Essa contiene dei convertitori in grado di trasformare i segnali da analogici in digitali, affinché possano essere utilizzati dai vari programmi e, viceversa, da digitali in analogici, affinché possano essere ascoltati. Le schede più sofisticate presentano ingressi e uscite digitali in modo da evitare la conversione e migliorare la qualità del suono. Le schede dispongono, inoltre, di: • un sintetizzatore, capace di generare suoni; • un processore di segnale, capace di elaborare il suono creando effetti; • un’interfaccia MIDI, capace di scambiare dati con strumenti musicali esterni. La qualità dell’audio riprodotto dipende, ovviamente, dalla qualità della scheda, che a sua volta è legata alla qualità dei materiali e della tecnologia utilizzata. Come accade per le schede video, la scheda audio ha un limite di risoluzione, determinato da due importantissimi fattori: • la risoluzione, misurata in bit; • la frequenza di campionamento. La risoluzione (misurata in bit) corrisponde alla precisione con cui si misura l’intensità del segnale. Analogamente a quanto avviene per il video, la risoluzione è tanto maggiore quanto più alto è il numero di bit che la definiscono: una registrazione a 16 bit sarà caratterizzata da una qualità del suono nettamente migliore di quella effettuata a 8 bit, ma nettamente inferiore a quella realizzata a 24 bit. La frequenza di campionamento (misurata in kHz) indica il numero di volte che il segnale di entrata viene letto (cioè campionato) dalla scheda audio in un secondo. Anche in questo caso, maggiore è il valore di questo parametro, maggiore è la qualità ottenuta. In generale, lo standard CD prevede una risoluzione a 16 bit e una frequenza di campionamento di 44,1 kHz (cioè 44.100 campioni al secondo). Il DVD include risoluzioni sino a 24 bit e 96 kHz (96.000 campioni al secondo). CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 89 I principali formati audio La distinzione fondamentale che può essere fatta sui formati dei file audio riguarda due categorie: • i file che descrivono i contenuti musicali (file .mid, comunemente chiamati file MIDI o Midi file); • i file che contengono effettivamente della musica (file WAVE). I file MIDI non contengono né suoni né musica (per questo motivo sono file di piccole dimensioni), bensì una specifica descrizione che informa il programma su quali note suonare, in quale istante e con quale strumento musicale. I file WAVE contengono la rappresentazione digitale di un evento sonoro. La conversione in digitale è svolta dalla scheda audio con l’utilizzo di chip ADC (Analog Digital Conversion) in entrata di chip DAC (Digital Analog Conversion) in uscita, ossia in fase di riproduzione del suono. Lo standard MIDI Il MIDI (Musical Instruments Digital Interface) è uno standard di comunicazione tra strumenti musicali elettronici, che permette a uno strumento remoto (una tastiera, un computer e così via) di comunicare con strumenti elettronici distanti (un generatore di suoni esterno, un generatore interno alla scheda audio e così via) e di controllarli. Se si collegano due tastiere MIDI con un cavo, le note suonate da una tastiera (detta master) vengono riprodotte dall’altra (detta slave). Il MIDI è fondamentale se si vuole far musica con il computer: connettere strumenti MIDI a un elaboratore dotato di software apposito significa avere la possibilità di comporre, arrangiare, modificare e persino stampare la propria musica. Come abbiamo visto, il MIDI descrive il contenuto musicale di un pezzo: si occupa, cioè, di codificare tutte le informazioni relative all’esecuzione di un passaggio musicale. Facciamo un esempio: supponiamo di avere una tastiera musicale e di premere il tasto DO della seconda ottava (ossia il secondo DO a partire da sinistra). Se la tastiera dispone di un’interfaccia MIDI, essa tradurrà questa azione in un comando del tipo Suona la nota C2 (nella notazione anglosassone la lettera C sta per il nostro DO, mentre il numero 2 rappresenta la seconda ottava) con una velocity di 100 (la velocity indica l’intensità di pressione e si misura con valori oscillanti nell’intervallo 0 ... 127). Lo standard MP3 Un altro standard audio molto diffuso (particolarmente in Internet) è MP3 (MPEG Audio Layer 3). Si tratta di uno standard di compressione ideato dal Moving Picture Experts Group (l’acronimo dà il nome all’MPEG), un gruppo di persone nell’ambito dell’ISO (International Standards Organization) che si occupa dello studio di metodi atti a comprimere i dati audio e video sino a portarli a dimensioni ritenute accettabili per un comodo trasporto sui media digitali, garantendo nel contempo una modica perdita in termini di qualità. MP3 e compressione Questo standard riesce a comprimere i file sino a 12 volte (o meno, dipende dalla qualità che si desidera ottenere) basandosi sulle teorie della psicoacustica, cioè di come l’orecchio e il cervello umano riescono a percepire i suoni (in particolare la soglia di udibilità). L’orecchio umano percepisce le frequenze da 20 Hz a 20 kHz ed è più sensibile tra i 2 kHz e 4 kHz, inoltre necessita di un certo tempo per poter sentire suoni (frequenze) “deboli” adiacenti a suoni “forti”. 90 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Sfruttando questa “limitazione” dell’orecchio umano, questo algoritmo riesce a produrre file con alti livelli di compattazione (a compressione avvenuta, un minuto di musica occupa solo 1 MB contro i 10 MB normali). Per esempio, viene sfruttato l’effetto di mascheramento: quando è presente un suono a volume molto elevato, i suoni più deboli riprodotti nello stesso momento non vengono percepiti dall’orecchio umano e, pertanto, possono essere cancellati senza causare alcun cambiamento in termini di qualità. Può essere sfruttata un’altra debolezza dell’orecchio umano: il nostro organo sensoriale, infatti, non è in grado di riconoscere la direzione di provenienza di suoni molto gravi; per questo motivo, tutte le informazioni relative alla direzione del suono (stereofonia) poste al di sotto di una specifica frequenza possono essere eliminate. MP3 e qualità Il fattore che incide notevolmente sulla qualità dei file MP3 è il bitrate, ossia il flusso di dati in bit per secondo: maggiore è il bitrate, maggiore sarà la qualità. Qualità Frequenza Bitrate Compressione = telefono 2,5 kHz mono 6 kb/s 96:1 > onde corte 4,5 kHz mono 16 kb/s 48:1 > radio AM 7,5 kHz mono 32 kb/s 24:1 = FM 11 kHz stereo 56-64 kb/s 24:1 < CD 15 kHz stereo 96-112 kb/s 14:1 simile CD 15 kHz stereo 128 kb/s 1:1 Per produrre un file MP3 con un computer (ovviamente dotato di una buona scheda audio) sono necessari due tipi di software: grabber ed encoder. I programmi di tipo grabber sono in grado di generare file wave da un CD, mentre i software di tipo encoder servono per generare file in formato MP3 partendo da file wave. Per ascoltare un brano codificato in formato MP3 occorre un player (riproduttore). Ne esistono moltissimi per ogni sistema operativo. Gli standard MPC e MP4 Lo standard .mpc (MusePack) è un formato che offre altissimi risultati, soprattutto a bitrate alti (oltre 192 kbps e oltre). I risultati sono assolutamente migliori dell’mp3: è sufficiente ascoltare una traccia codificata in mp3 a 192 kbps e una in mpc allo stesso bitrate per avvertire immediatamente la differenza. Questo è stato considerato il miglior formato audio lossy, fino all’uscita dell’mp4. È supportato da WinAmp tramite plugin, e in modo nativo da player più evoluti. Un album di 600 MB in formato WAV occupa circa 100 MB in mpc con bitrate intorno ai 192–256 kbps. Lo standard .mp4, .aac (Nero MP4 AAC) è uno tra i più recenti ed è considerato uno tra i migliori formati lossy, avendo superato anche la pur elevatissima qualità dell’mpc. La qualità è estremamente elevata, seppure i tempi di conversione siano un po’ più lunghi rispetto agli altri formati. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 91 Il video digitale Affrontiamo ora il problema della digitalizzazione dei filmati, ovvero di immagini in movimento con eventuale accompagnamento sonoro. Proviamo a pensare a come è fatta una vecchia pellicola cinematografica: una successione di fotogrammi (ognuno dei quali corrisponde a una precisa immagine statica), accompagnata da una banda sonora (in sostanza immagini e suoni). Sappiamo già come digitalizzare tanto le immagini che corrispondono ai singoli fotogrammi, quanto il sonoro che le accoppia. Appare immediatamente evidente che il numero di bit necessari per questa operazione aumenta in maniera eccezionale. Il numero di bit necessari alla codifica di un filmato sarà infatti tanto maggiore: • quanto più lungo è il filmato; • quanto maggiore è la sua risoluzione grafica, cioè quanto più fitta è la griglia utilizzata per convertire in digitale i fotogrammi (frame) che compongono il filmato; • quanto più ricca è la palette di colori impiegata; • quanto maggiore è il numero di fotogrammi per secondo; • quanto migliore è la qualità dell’audio (ossia la frequenza di campionamento). Vediamo ora che cosa accadrebbe risparmiando sui bit: • una bassa risoluzione grafica produrrebbe un filmato quadrettato, poco chiaro e non differenziato; • una palette troppo limitata renderebbe approssimativi e poco realistici i colori visualizzati; • un numero troppo basso di frame per secondo darebbe vita a un filmato “a scatti”, impreciso e poco scorrevole; • una frequenza di campionamento audio troppo bassa pregiudicherebbe, ovviamente, la qualità del suono, così importante affinché un video possa stimolare quelle sensazioni di cui è il principale artefice. Come è ormai ben noto, i fattori da considerare sono davvero molteplici: nonostante la disponibilità di bit degli attuali computer sia aumentata tantissimo e nonostante il fatto che nel campo delle immagini in movimento le tecniche di compressione abbiano fatto passi da gigante, il full motion video digitale, cioè la capacità di rappresentare a pieno schermo le immagini in movimento, con una risoluzione e con una scorrevolezza analoga o addirittura migliore rispetto a quelle televisive, è un obiettivo raggiunto solo di recente; e non ancora in tutti i casi. Il video digitale professionale è stato utilizzato per la prima volta nel 1983 dal formato D-1 di Sony. Per problemi dovuti al suo elevato costo, il formato D-1 venne utilizzato maggiormente da grandi network televisivi. Nel corso degli anni fu sostituito da alcuni sistemi più economici che utilizzavano dati compressi; tra i tanti ricordiamo il famoso Digital Betacam sempre di Sony, che è ancora ampiamente utilizzato come formato di registrazione dai grandi produttori televisivi. Il video digitale di tipo amatoriale, invece, è stato utilizzato per la prima volta in forma di QuickTime, nota architettura di Apple Computer per formati di dati time-based e di streaming, che si diffuse intorno al 1990. Con il termine streaming si fa riferimento a un flusso di dati audio/video che vengono trasmessi da una sorgente a una o più destinazioni attraverso una rete telematica. I dati trasmessi sono poi riprodotti a mano a mano che giungono a destinazione. In principio gli strumenti amatoriali in grado di creare contenuti video digitali erano grezzi e richiedevano la digitalizzazione di una sorgente video analogica in un formato che potesse poi essere elaborato dai computer. 92 START – INFORMAZIONI E CALCOLATORI CODIFICA DELL’INFORMAZIONE MULTIMEDIALE Il video digitale amatoriale perfezionò velocemente la sua bassa qualità iniziale, in un primo momento con l’introduzione di standard di riproduzione come MPEG-1 per l’archiviazione e il recupero di filmati e audio, utilizzato anche nei video CD con una qualità di immagine simile a quella dei tradizionali nastri e MPEG-2, lo standard della TV digitale e dei DVD. Successivamente, il miglioramento venne con lo standard MPEG-4 versione 1, lo standard per le applicazioni multimediali. Oltre ai codec appena menzionati, ne esistono degli altri tra cui ricordiamo uno tra gli ultimi nati: lo standard MPEG-4 Part 10. L’MPEG-4 Part 10 è conosciuto anche come MPEG-4 AVC (AVC è l’acronimo di Advanced Video Coding) o semplicemente AVC. Questo standard è stato designato dall’ITU-T (International Telecommunication Union – Telecommunication Standardization Bureau, il settore dell’Unione Internazionale delle Telecomunicazioni che regola le telecomunicazioni telefoniche) come H.264. Si tratta di un codec video sviluppato per video ad alta qualità anche a frequenze di trasmissione dei dati inferiori rispetto alle soluzioni attuali. È molto utilizzato per qualsiasi tipo di periferica: dai televisori ai telefoni cellulari 3G. I servizi di broadcast che si basano sullo standard H.264 occupano una banda decisamente inferiore rispetto allo schema di codifica utilizzato dall’MPEG-2, a una frequenza di trasmissione dei bit notevolmente più bassa. Con l’utilizzo di questo standard, gli operatori di broadcasting possono trasmettere in modo assolutamente economico un maggior numero di programmi ad alta definizione. L’efficienza della compressione è stata migliorata di oltre il 50% rispetto al precedente MPEG-2. I dispositivi che maggiormente utilizzano questo sistema di codifica sono l’iPod video e la console Sony PSP. Lo standard H.264 è oramai impiegato nei dischi ottici di ultima generazione (gli HD DVD). A titolo di curiosità ricordiamo che nell’ottobre 2005 Apple Inc. distribuì nel suo famoso negozio online iTunes Store i primi video codificati in H.264. Apple, che è stata sempre una tra le più grandi sostenitrici di questo formato, fu una delle prime a rendere disponibile in QuickTime uno specifico software per la codifica e decodifica di video codificati con AVC. Sono stati annunciati tali video anche per l’utilizzo su iPhone. Possiamo ritenerci soddisfatti: disponendo solo dei simboli 0 e 1 (propri della codifica digitale) abbiamo affrontato tipi di informazioni, tra cui anche suoni, immagini e video, assai diverse dal numero o dal testo scritto. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 93 LAVORARE CON TESTA PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE 1 Quali sono le differenze tra sistema RGB e il sistema CMYK? 14 In che cosa consiste il processo di rasterizzazione? 2 Stabilisci se le seguenti affermazioni sono vere o false: le principali caratteristiche della grafica di tipo 15 Esponi bitmap. a b Pixel corrisponde alla contrazione dei due termini picture elements--------------------I primi elaboratori manipolavano una griglia di 80 colonne per 60 righe----------- v f v f le principali caratteristiche della grafica di tipo 16 Esponi vettoriale. 17 Che cos’è una texture? 3 Che cosa si intende con profondità di colore? 4 Che cosa significa comprimere i dati? 5 Che cosa si intende per palette? 6 Che cosa si intende con la sigla codec? 20 Che cosa sono le immagini GIF trasparenti? 7 La compressione lossless: 21 In che cosa consiste il JPEG progressivo? 8 è la differenza tra visualizzazione wire-frame e 19 Qual shaded? a garantisce una codifica fedele b può essere applicata a qualunque tipo di dato c dalla decompressione non si ottiene un file identico in tutto d in fase di espansione viene garantito il ritorno al file originale ai frattali, che cosa si intende con auto22 Relativamente somiglianza? 23 Che cosa si intende con Aliasing? 24 In che cosa consiste la tecnica Anti-Aliasing? La compressione lossy: 9 che cosa consiste il processo di texturing anche 18 Indetto texture mapping? a non assicura la conservazione integrale del contenuto del file 25 In che cosa consiste la tecnica Alpha Blending? b è una codifica fedele c provoca una perdita di dati se le seguenti affermazioni sono vere o false: 26 Stabilisci a d dalla decompressione si ottiene un file uguale alll’originale Descrivi brevemente l’algoritmo RLE. 10 Descrivi brevemente l’algoritmo LZW. 11 Un’interfaccia MIDI è capace di scambiare dati con strumenti musicali esterni-----------------------------------------------------b Le schede audio possono utilizzare un solo bus-------------------------------------------------------------c I file MIDI contengono musica e testo ----------d I file WAV contengono musica e testo------------ e I file MIDI possono anche non essere riconosciuti da tutti gli strumenti--------------------- Che cosa si intende con il termine raster? f immagni bitmap sono resolution dependent. Che 12 Le cosa significa? 13 In che cosa consiste il processo di pixelizzazione? 94 START – INFORMAZIONI E CALCOLATORI La sigla Lyrics indica il testo dei Midifile---------------------------------------------------------------- g h L’orecchio umano percepisce le frequenze da 20Hz a 20KH--------------------------L’orecchio umano è più sensibile tra i 2KHz e 4KHz-------------------------------------------------- CODIFICA DELL’INFORMAZIONE MULTIMEDIALE v f v f v f v f v f v f v f v f training 1 Inno irlandese. Fai una ricerca su Internet per trovare l’inno della nazionale Irlandese “Ireland’s call” in formato mp3. Ascoltalo utilizzando un lettore multimediale qualsiasi (per esempio Windows Media Player, oppure VLC o qualsiasi altro lettore gratuito disponibile su Internet). 2 Registrazione di suoni 1. Registra una poesia con la tua voce. Per far questo devi: • procurarti un programma per registrare suoni (quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet, oppure usa Registratore di suoni di Windows); • assicurarti che il computer abbia un microfono incorporato o procurarti e installare il microfono per il tuo computer. 3 Registrazione di suoni 2. Cerca su Internet un file musicale, aprilo con Registratore di suoni di Windows e sovrapponi alla traccia audio una tua canzone. 4 Conversione di formato audio. Supponi che il tuo impianto stereo non legga il formato mp3, ma solo quello standard CD audio. Converti allora un file mp3 in CD audio affinché possa essere letto dal tuo stereo. Per far questo devi: • procurarti un programma per convertire i formati audio (quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet come CDex, per esempio); • procurarti un file audio in formato mp3 (cerca una canzone liberamente disponibile su Internet); • utilizzare il programma di conversione che ti sei procurato per convertire il file audio da mp3 a CD audio; • procurarti un CD vuoto e un qualsiasi program- ma per copiare (masterizzare) il file così ottenuto su un CD audio in modo da poterlo ascoltare sul tuo impianto stereo. 5 Gif animate. Crea una gif animata che visualizzi un pallino che cambia di colore. Per far questo devi: • procurarti un qualsiasi programma a tua scelta per creare una gif animata; • utilizzare un qualsiasi programma a tua scelta (per esempio Windows Paint o un programma utilizzato dalla tua scuola) per creare le immagini del pallino con i diversi colori; • utilizzare il programma per le gif animate per completare il lavoro. PROVE APERTE PER LA VERIFICA DELLE ABILITÀ 6 Conversione di formato grafico 1. Converti un’immagine da formato GIF a formato TIFF. Per far questo devi: • procurarti un programma per convertire i formati grafico(quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet, o utilizza Windows Paint); • procurarti un’immagine in formato GIF (eventualmente cercala su Internet); • utilizzare il programma di conversione che ti sei procurato per convertire il formato del file da GIF a TIFF. 7 Conversione di formato grafico 2. Converti un’immagine da formato BMP a formato JPEG e verifica che differenza c’è nella dimensione dei file tra i due formati. Per far questo devi: • procurarti un programma per convertire i formati grafico(quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet, o utilizza Windows Paint); • procurarti un’immagine in formato BMP (eventualmente cercala su Internet); • utilizzare il programma di conversione che ti sei procurato per convertire il file da BMP a JPEG; • utilizzare Esplora risorse di Windows o un qualsiasi altro programma di gestione dei file per confrontare le dimensioni delle due immagini. 8 Acquisizione immagini. Acquisisci qualche immagine presente sulla tua fotocamera digitale o sul tuo telefonino. Per far questo devi: • procurarti un programma per acquisire imma- gini (quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet adatto alla tua fotocamera o telefonino); • procurarti un cavo di collegamento tra telefonino e computer (via USB) oppure accertarti se puoi utilizzare porta a infrarossi o porta bluetooth; • aprire l’immagine acquisita con un qualsiasi lettore di immagini disponibile in Windows (o con Windows Paint per poterla anche modificare). 9 Acquisizione video. Acquisisci un filmato da una videocamera digitale, oppure dal tuo telefonino. Per far questo devi: • procurarti un programma per acquisire filma- ti (quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet, oppure utilizza Windows Movie Maker, già installato e disponibile in ambiente Windows); • procurarti un cavo di collegamento tra telefonino e computer (via USB) oppure accertarti se puoi utilizzare una porta a infrarossi o bluetooth. CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI 95 Dagli albori al 1822 Sin dall’antichità l’uomo ha sentito l’esigenza di eseguire calcoli precisi e privi di errori. I primi strumenti a disposizione furono, naturalmente, le dita, ma quando queste non bastarono più, l’uomo fu costretto a utilizzare ogni sorta di espediente: cominciò a tracciare delle aste sui muri della sua abitazione, a formare cumuli di sassi, a usare altri sistemi rudimentali. La necessità lo spinse, nel tempo, a costruire macchine sempre più sofisticate che alleviassero la fatica del calcolo numerico. La prima vera macchina da calcolo fu costruita dai Greci e dai Romani: l’abaco, dalla parola greca abax, che significa “tavola”. Era appunto una tavoletta, divisa in due parti e composta da varie scanalature, all’interno delle quali erano inseriti dei sassolini (il principio di funzionamento era simile a quello del pallottoliere). Nel 1623 Wilhelm Schickard costruì la prima macchina per il calcolo automatico, che andò perduta nella Guerra dei 30 anni e della quale si scoprì l’esistenza solo nel 1957. La macchina di Schickard era capace di compiere le quattro operazioni. Il primo vero successo spettò al filosofo e matematico francese Blaise Pascal che, appena ventenne, nel 1642 progettò una macchina per addizionare e sottrarre, che teneva conto automaticamente dei riporti: la Pascalina, la più antica macchina di calcolo giunta a noi (meno completa, però, di quella di Schickard, poiché effettuava solo due operazioni). Essa diede inizio alla lunga serie di macchine calcolatrici che avrebbe poi aperto il passo agli attuali computer. La Pascalina era composta da una serie di ruote dentate indicanti le unità, le decine, le centinaia e così via, e ognuna era divisa in dieci settori (dallo 0 al 9), corrispondenti alle cifre del sistema decimale. Il suo funzionamento era semplice: per eseguire la somma 7+4 si impostava la ruota delle unità sul 7 e la si faceva avanzare di 4 posizioni. Si otteneva così un 1 sulla ruota delle unità e un altro 1 su quella delle decine, ruotata automaticamente da alcuni ingranaggi, che formavano il numero 11, risultato dell’operazione. La macchina di Pascal operava, dunque, in maniera rudimentale; tuttavia essa applicava un principio fondamentale nel calcolo meccanico: il “riporto automatico”, in base al quale la rotazione completa di una ruota provoca automaticamente lo scatto in avanti di un’unità della ruota successiva. Nella seconda metà del secolo, nel 1673, anche il filosofo e scienziato tedesco Gottfried Wilhelm von Leibniz progettò e costruì una macchina calcolatrice, più avanzata rispetto a quella ideata da Pascal, dal momento che era in grado di eseguire automaticamente anche le operazioni di moltiplicazione e divisione, mediante l’impiego di un pignone dentato. Nel 1679 Leibniz progettò anche una macchina da calcolo binario, introducendo quello che sarebbe divenuto il codice matematico dei computer moderni. Un contributo indiretto, ma decisivo, allo sviluppo di macchine automatiche per il calcolo, giunse nel 1725 a opera di Bouchon con l’invenzione della banda perforata per la programmazione automatica continua dei telai tessili. Tale invenzione venne perfezionata con l’adozione di piccole schede a cartoncino dal meccanico Falcon nel 1728. 96 START – INFORMAZIONI E CALCOLATORI STORIA DELL’INFORMATICA Al francese Joseph M. Jacquard spetta il merito di aver reso industriale questo processo, applicandolo ai telai meccanici; si rivoluzionò, così, l’industria tessile. L’idea innovatrice di Jacquard fu quella di far guidare automaticamente i movimenti del telaio da una serie di fori praticati su schede di cartone. La trama e l’ordito della stoffa erano codificati da queste schede di controllo, che venivano “lette” da una serie di uncini collegati ai vari fili da intrecciare. Nacque così, per compiti completamente diversi da quelli successivamente svolti in informatica, la scheda perforata, utilizzata per trasmettere a una macchina le informazioni necessarie per il suo funzionamento. La scheda perforata è stata usata fino a pochi decenni fa come strumento di input. Era costituita da un cartoncino rettangolare di dimensioni standard e suddivisa in ottanta colonne e dodici righe: in ciascuna colonna poteva essere memorizzato un carattere mediante la perforazione di fori rettangolari in opportune posizioni. Le apparecchiature che servivano per la perforazione delle schede erano di due tipi: perforatori, che realizzavano la perforazione in modo automatico, e perforatrici di tipo manuale, costituite da una tastiera analoga a quella delle comuni macchine per scrivere. Occorre attendere, però, gli studi di Charles Babbage e di Ada Lovelace per giungere a qualcosa di veramente innovativo. Charles Babbage nacque nel 1791 da una famiglia benestante e si rivelò ben presto un genio matematico. Fu proprio lavorando alla correzione dei numerosi errori da lui individuati nelle tavole logaritmiche che gli venne l’idea di costruire un apparecchio di calcolo. Nel 1822 egli presentò alla Royal Astronomical Society il primo modello di Macchina differenziale, una macchina in grado di eseguire i calcoli necessari per costruire le tavole logaritmiche e il cui nome derivava da una tecnica matematica chiamata calcolo differenziale. La Royal Astronomical Society incoraggiò Babbage a perfezionare l’apparecchio. Insieme a Lady Ada Augusta contessa di Lovelace, figlia di lord Byron, Babbage intraprese un progetto molto ambizioso, la costruzione della Analytical Engine, ossia la Macchina analitica. Questo apparecchio, che riceveva i comandi da una scheda perforata, doveva essere in grado di calcolare i valori di funzioni matematiche molto più complesse della funzione logaritmo, ma fin dagli inizi difficoltà di ogni tipo ne limitarono il funzionamento. La macchina doveva essere gigantesca (a giudicare dai pochi disegni rimasti nel progetto), tanto da occupare tutto l’enorme laboratorio di Babbage. STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI 97 Dall’Ottocento al Novecento A Babbage vennero a mancare i finanziamenti del governo inglese, poiché non onorò il primo contratto stipulato, quello relativo alla seconda macchina differenziale (più grande della prima). Per questa ragione, e non per inadeguatezza tecnologica, come è stato spesso scritto, egli dovette rinunciare alla costruzione della macchina analitica. La macchina analitica si basava su due principi di funzionamento sorprendentemente moderni: • una parte chiamata store o memoria; • una parte chiamata mill o unità di calcolo. Chi riuscì a costruire una macchina differenziale funzionante, come riconobbe lo stesso Babbage, fu lo svedese Georg Scheutz, il primo a realizzare una macchina da calcolo con meccanismo stampante e, soprattutto, il primo europeo a esportare tecnologie di calcolo negli Stati Uniti, aprendo in questa nazione l’era del calcolo automatico. La macchina di Scheutz fu acquistata dall’osservatorio astronomico di Albany, nello stato di New York, per calcolare le posizioni di alcuni astri. Nel 1847, l’inglese George Boole con la sua opera Mathematical analysis of logic gettò le basi del sistema logico binario. Nel 1880 fu svolto negli Stati Uniti il censimento della popolazione e le registrazioni trattate manualmente consentirono di usufruire dei risultati soltanto sette anni dopo. Quando nel 1890 si dovette ripetere il censimento, in molti ebbero il timore che i risultati non si potessero conseguire prima della fine della decade, poiché nel decennio trascorso la popolazione era notevolmente aumentata. Per superare il problema, un ingegnere che collaborava con l’Ufficio Censimento degli Stati Uniti, Herman Hollerith, riprese il concetto della scheda perforata, adattandolo alle esigenze del censimento e suggerendo di registrare sulla scheda tutti i dati, in modo da poterli sottoporre a una parziale elaborazione meccanica. L’idea era, quindi, quella di perforare i dati su schede e di rilevare la presenza di una perforazione mediante aghi percorsi da corrente elettrica. Le macchine di questo tipo, chiamate tabulatrici, vennero utilizzate nei vari uffici governativi per l’elaborazione dei dati del censimento. Si passò, così, da sette anni a sei settimane per ricevere il risultato del censimento. Da quel momento, l’applicazione di queste unità meccanografiche si estese in modo repentino e iniziò il loro impiego anche nel settore commerciale. Per la produzione di tali apparecchiature, nel 1896 Hollerith fondò una società per sfruttare il brevetto, la Tabulating Machine Company che, sotto la guida di Thomas Watzon sr, diventerà, nel 1924 la International Business Machine Corporation (IBM). 98 START – INFORMAZIONI E CALCOLATORI STORIA DELL’INFORMATICA Per ulteriore conferma delle intuizioni di Babbage, si dovette attendere il 1936, quando un giovane matematico di Cambridge, Alan Turing, pubblicò un articolo sulla rivista On Computable Numbers. Il nome di Turing è rimasto pressoché sconosciuto ai più, ma il suo apporto contribuì notevolmente allo sviluppo dell’informatica. Turing fu alla guida di un gruppo di ricercatori e sviluppò l’invenzione più segreta della seconda guerra mondiale, Colossus, il primo computer elettromeccanico, costruito da T. H. Flowers. Questo apparecchio fu utilizzato per decifrare il codice segreto tedesco Enigma durante il conflitto. Nel 1939 Konrad Zuse costruì lo Z1, primo di una innovativa serie di calcolatori elettromeccanici basati sul sistema binario e programmabili, funzionanti prima a memorie meccaniche e poi a relè. La macchina presentava una struttura già del tutto analoga a quella dei computer moderni, poiché anche essa faceva la distinzione tra unità di memoria e unità di calcolo, e funzionava alla velocità di clock di un solo Hertz, generata da un motore elettrico. Gli studi di Zuse e quelli di John Vincent Atanasoff, inventore della memoria rigenerativa, furono la base principale per le successive innovazioni apportate all’architettura dei computer di cui, come vedremo a breve, il principale artefice fu John von Neumann. Il convegno internazionale di Informatica del 1998 riconobbe a Konrad Zuse con il suo Z1 il ruolo di inventore del primo computer programmabile funzionante della storia. Dopo la guerra, Turing si recò negli Stati Uniti, dove partecipò al primo progetto americano di computer, l’ENIAC (Electronic Numerical Integrator And Computer) il primo calcolatore elettronico messo in funzione nel 1946 per usi concreti nella storia (aveva, comunque, una base di calcolo decimale e non binaria). L’apparecchio, progettato dall’Università di Pennsylvania, impiegava 18.000 valvole (ne saltava una ogni due minuti, a causa dell’eccessivo calore generato dalla macchina) e occupava uno spazio di 180 metri quadrati. L’ENIAC pose fine all’era dei calcolatori meccanici, perché fu il primo calcolatore elettronico della storia. Il primo computer Turing-completo basato sul sistema numerico binario e totalmente programmabile fu lo Z3, costruito in Germania da componenti riciclati di telefonia da Konrad Zuse, che lo realizzò praticamente da solo, nel 1941. Lo Z3 venne poi distrutto in un bombardamento dagli alleati, e per molti anni ne è stata ignorata perfino l’esistenza; di conseguenza il primato di primo computer della storia è stato ingiustamente riconosciuto alla macchina statunitense ENIAC. STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI 99 Dagli anni Cinquanta agli anni Settanta Nel 1948 furono utilizzati i transistor al silicio, che, rispetto alle valvole, permisero di ottenere velocità di calcolo impressionanti, maggiore accuratezza e bassa generazione di calore. Al pari delle valvole, i transistor vennero impiegati come interruttori elettronici. A metà degli anni Sessanta, gli scienziati riuscirono a produrre circuiti miniaturizzati e, grazie alle ingenti somme di denaro investite nella ricerca spaziale, vennero prodotti i primi circuiti integrati su singoli chip di silicio. Questi componenti hanno consentito di compiere un ulteriore balzo in avanti nella costruzione dei computer. È proprio grazie a questa scoperta che inizia la corsa alla miniaturizzazione dei componenti elettronici, coronata dall’integrazione in un solo chip di più circuiti. Nacque, così, il microprocessore: il primo fu l’INTEL 4004, costruito negli Stati Uniti da un team di cui faceva parte l’italiano Federico Faggin. Sebbene il microchip sia poco simile alla gigantesca “macchina analitica” di Babbage e Lovelace o al Colossus di Turing, l’architettura dei moderni computer si basa ancora sui principi impostati da Babbage e la teoria enunciata da Turing rimane ancora oggi importante. Tra gli uomini che hanno fatto la storia dell’elaborazione automatica occorre ricordare anche l’“architetto” dei moderni computer, John von Neumann, il quale prese parte al progetto ENIAC come consulente per la parte logica del sistema. Il suo lavoro ha influenzato enormemente i successivi sviluppi dell’informatica. Egli suggerì, tra l’altro, di dotare i futuri computer di programmi interni allo stesso apparecchio e di impiegare la numerazione binaria per rappresentare programmi e dati nella memoria del computer, recuperando le intuizioni del tedesco Zuse e di Atanosoff che, come abbiamo visto, per primi avevano costruito calcolatori funzionanti a relè e, quindi, basati sul sistema binario. Con l’introduzione di tali concetti, gli elaboratori elettronici superarono, pertanto, la prima struttura elementare e assunsero le caratteristiche conservate e sviluppate fino ai nostri giorni. Mettendo in pratica le sue idee, von Neumann, che lavorò in costante collaborazione con un gruppo di esperti militari e di professori universitari di Princeton, costruì intorno al 1952 un calcolatore denominato IAS o Princeton o Macchina di von Neumann. 100 START – INFORMAZIONI E CALCOLATORI STORIA DELL’INFORMATICA La flessibilità operativa di questa macchina fece sì che congegni nati allo scopo di alleviare i problemi di calcolo per tecnici e scienziati potessero essere impiegati in futuro nella soluzione di problemi di natura completamente diversa, di tipo amministrativo, gestionale e produttivo. La diffusione nell’uso degli elaboratori elettronici ha contribuito quindi alla nascita di una nuova area scientifica e tecnologica, che va ormai comunemente sotto il nome di informatica. Nel 1970 nei laboratori Xerox di Palo Alto viene concretizzato un progetto molto in avanti sui tempi, che vide la prima luce due anni dopo, nel 1972: lo Xerox Alto. Prodotto dal Palo Alto Research Center (PARC), questo è il primo computer nella storia a essere dotato di un display bitmap a finestre con capacità di sovrapposizione, connesso alla prima stampante laser, collegato alla prima rete Ethernet in local area network (LAN), e dotato del primo linguaggio orientato agli oggetti: Smalltalk. Lo Xerox Alto rimarrà un concept computer, ma darà il vita al progetto Xerox Star (1981), il primo computer in assoluto sul mercato dotato di interfaccia GUI (Graphical User Interface) a icone, con mouse, i cui concetti e le cui soluzioni ispireranno tutto il mondo dell’informatica di là da venire. Nell’aprile 1975 nei laboratori di Ricerca & Sviluppo della Olivetti di Ivrea, giovani ingegneri e diplomati non stavano a guardare e alla fiera di Hannover venne presentato il P6060, primo personal al mondo con floppy disk incorporato. Era in concorrenza con un prodotto IBM simile ma dotato di floppy disk esterno. Nel successivo prodotto, l’M20 (1982) l’azienda adottò per la prima volta il microprocessore. Infine, sono da menzionare Steve Wozniac e Steve Jobs, che fin da giovanissimi progettavano computer. Pochi altri hanno contribuito alla miniaturizzazione e alla diffusione su larga scala del computer. Tra le loro invenzioni ricordiamo l’Apple II (che oggi è un computer da collezionisti), realizzato con l’aiuto finanziario di Mike Markkula nel 1977: esso fu il primo personal computer della storia a impiegare unità a dischetti e rimane ancora oggi uno dei più grandi successi commerciali della storia dell’informatica. Wozniac ha lavorato fino a pochi anni fa a nuovi progetti per Apple Corporation, di cui Jobs è il presidente (almeno sino al momento di redazione di questo volume). La novità introdotta dall’Apple II non riguardava solo l’hardware ma anche un componente del suo software: il BASIC, un linguaggio che garantiva una programmazione molto più agevole rispetto ai codici esadecimali e ottali dei primi computer. Dal punto di vista hardware, l’Apple II disponeva di una memoria di massa costituita da un floppy disk da 5,25 pollici. Nello stesso periodo altri costruttori diedero l’avvio a una grande corsa al ribasso dei prezzi. Realizzarono macchine potenti quanto i primi personal computer, ma decisamente più economiche. Fu l’era di Sinclair, con lo ZX-80 e lo Spectrum, e della Commodore, con il C64, i primi home computer della storia. STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI 101 Dagli anni Ottanta a oggi Agli inizi degli anni Ottanta, al già gremito mercato di case costruttrici di personal computer si aggiunse IBM, che introdusse sul mercato il PC IBM o IBM 5150, una macchina basata su un potente microprocessore, l’Intel 8088, e mise gli schemi tecnici a disposizione di tutti i produttori di accessori per computer che, in tal modo, realizzarono ogni genere di schede aggiuntive. Nacque così la seconda generazione dei personal: i businnes o professional computer, che avevano un prezzo quasi analogo ai loro predecessori, ma erano molto più potenti. Il PC IBM divenne lo standard e con esso anche il suo sistema operativo, il CP/M, che, per le esagerate condizioni di licenza d’uso imposte da Digital Research venne sostituito con l’MS-DOS, Disk Operating System progettato dalla Seattle Computer Company e acquistato per poche centinaia di dollari da Bill Gates che nel 1977, insieme con Paul Allen e Steve Ballmer fondò Microsoft, una delle più potenti software house del mondo. Il 27 giugno 2008, dopo 33 anni, Bill Gates dà ufficialmente le dimissioni da presidente lasciando il suo posto a Steve Ballmer, suo cosiddetto braccio destro da ormai più di due da anni. Ora Gates si dedica a tempo pieno alla sua Foundation, insieme alla moglie Melinda Gates, e alla ricerca di nuovi software e hardware, per una maggior semplicità di utilizzo da parte degli utenti. Il successo di IBM non passò inosservato, le industrie informatiche delle “tigri orientali” (Taiwan, Singapore e così via) si misero subito al lavoro per clonare il PC IBM. La clonazione, cioè la duplicazione, fu possibile poiché IBM forniva assieme al PC anche gli schemi elettrici, e il listato del sistema operativo era facilmente ottenibile. Il passo per la produzione industriale dei cloni fu brevissimo. In pochi anni il mondo fu invaso da enormi quantità di PC clonati, dalle prestazioni sempre più brucianti e dai costi sempre più bassi. Nel 1984 Apple produce il secondo passaggio evolutivo che porta agli attuali personal computer. Dopo l’insuccesso dell’Apple Lisa, che, nel 1983 fu il primo computer (commerciale e su larga scala) dotato di serie di interfaccia grafica e di mouse, troppo costoso e con un design poco appariscente, l’azienda di Cupertino (California) decide di ritentare l’impresa col Macintosh, decisamente più elegante nel design e nell’approccio all’interfaccia grafica. Nasceva così il concetto di WIMP (Windows Icons Mouse and Pointer). Il primo modello di Mac fu messo in vendita al prezzo di 2.495 dollari e ottenne un successo di mercato senza precedenti, grazie al suo approccio amichevole (userfriendly) e alla facilità d’uso del suo sistema operativo, il Mac OS. La sua interfaccia grafica (GUI) usava per la prima volta metafore facili da comprendere, quali il cestino, la scrivania, le finestre, gli appunti e così via, aprendo finalmente l’uso del computer anche a persone con limitate conoscenze informatiche. 102 START – INFORMAZIONI E CALCOLATORI STORIA DELL’INFORMATICA In seguito al successo mondiale del Macintosh, molte di queste caratteristiche innovative furono mutuate da Microsoft nella creazione del proprio sistema operativo Windows, scatenando una battaglia anche legale durata oltre un decennio. Nel 1987 nasce Amiga2000. Amiga è una piattaforma informatica originariamente ideata da una piccola compagnia americana, Hi-Toro. Questo gruppo d’informatici e ingegneri inizialmente voleva creare una macchina da gioco dalle grandi capacità grafiche e sonore. In seguito, a mano a mano che il progetto avanzava, Hi-Toro incorporò alla proto-console caratteristiche proprie di un personal computer multimediale coordinate da un elegante sistema operativo, AmigaOS, che già allora offriva un reale preemptive multitasking. Era il 23 luglio 1985 quando venne mostrato al mondo l’Amiga 1000 da Andy Warhol. Nacque così la piattaforma che fu soprannominata Advanced Multitasking Integrated Graphics Architecture, in breve AMIGA. Hi-Toro fu poi acquisita, insieme al progetto Amiga, da una famosa casa produttrice di personal computer, Commodore, la quale commercializzò il prodotto dall’ottobre del 1985. Date le eccezionali caratteristiche di Amiga per l’epoca, la piattaforma raccolse un notevole seguito tra gli esperti e gli appassionati di informatica che si distinsero per un notevole spirito di comunità. Tuttavia una serie di errori strategici e lo scarso interesse degli amministratori di Commodore verso Amiga portarono alla bancarotta dell’azienda che andò in liquidazione volontaria nell’aprile del 1994, con conseguente vendita della tecnologia Amiga ad una serie di aziende specializzate in personal computer che non seppero rivalutarla adeguatamente: di fatto la piattaforma finì per essere sostenuta prevalentemente da una schiera di affezionati utenti e programmatori. Dopo oltre 25 anni di primato nell’industria dell’hardware, nel dicembre 2004 IBM, pur essendo tra i leader del mercato, decide di abbandonare la fabbricazione dei personal computer di ogni tipo, dai desktop ai notebook, cedendo marchio e quote di mercato alla cinese Lenovo, azienda che detiene il primo posto per vendite in Asia, escludendo il Giappone. L’accordo prevede la fornitura dei servizi da parte di IBM a Lenovo, che diviene così il terzo produttore mondiale. Attualmente si assiste a una specializzazione nella produzione dell’hardware per cui le grandi case produttrici tendono a sviluppare i singoli componenti (schede madri, CPU, schede grafiche e così via) piuttosto che prodotti completi. Delle grandi case che producevano sia hardware sia software sono attualmente attivi solo pochi marchi, tra cui, ad esempio, Sun Microsystems, che continua a detenere un primato per i grandi server. STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI 103