127
Indice Gli Albori ...................................................................................... 4 Le prime macchine ................................................................................. 5 Macchine astratte – Una storia lounga un secolo ............................ 10 I calcolatori di prima generazione 1940-1955 .................................... 12 I calcolatori di seconda generazione 1956-1963 ............................... 16 I calcolatori di terza generazione 1964-1970 ..................................... 17 I calcolatori di quarta generazione 1971-oggi ................................... 18 I calcolatori di quinta generazione. Il futuro… .................................. 21 Rappresentazione posizionale ................................................. 22 Codifica dell’informazione, numeri binari e caratteri Ascii ............. 23 Sistemi di numerazione binario ottale ed esadecimale .................. 25 Codifica delle informazioni - Rappresentazione dei numeri .......... 25 Rappresentazione di caratteri ............................................................ 30 Rappresentazione dei segnali audio ................................................. 33 Rappresentazione delle immagini ..................................................... 34 Rappresentazioni ipertestuali ............................................................. 35 Compressioni delle informazioni ...................................................... 36 Premessa .................................................................................... 39 Formalismi di codifica ......................................................................... 40 Diagrammi di flusso ............................................................................. 40 Pseudocodifica ..................................................................................... 45 Premessa .................................................................................... 47 Hardware ............................................................................................... 47 La microprogrammazione ................................................................... 49 Le unità periferiche .............................................................................. 49 Software ................................................................................................ 68 Funzionalità di un calcolatore .................................................. 71

Dal problema all'Algoritmo

Embed Size (px)

DESCRIPTION

La storia dell'informatica

Citation preview

Page 1: Dal problema all'Algoritmo

Indice

Gli Albori ...................................................................................... 4 Le prime macchine ................................................................................. 5 Macchine astratte – Una storia lounga un secolo ............................ 10 I calcolatori di prima generazione 1940-1955 .................................... 12 I calcolatori di seconda generazione 1956-1963 ............................... 16 I calcolatori di terza generazione 1964-1970 ..................................... 17 I calcolatori di quarta generazione 1971-oggi ................................... 18 I calcolatori di quinta generazione. Il futuro… .................................. 21

Rappresentazione posizionale ................................................. 22 Codifica dell’informazione, numeri binari e caratteri Ascii ............. 23 Sistemi di numerazione binario ottale ed esadecimale .................. 25 Codifica delle informazioni - Rappresentazione dei numeri .......... 25 Rappresentazione di caratteri ............................................................ 30 Rappresentazione dei segnali audio ................................................. 33 Rappresentazione delle immagini ..................................................... 34 Rappresentazioni ipertestuali ............................................................. 35 Compressioni delle informazioni ...................................................... 36

Premessa .................................................................................... 39 Formalismi di codifica ......................................................................... 40 Diagrammi di flusso ............................................................................. 40 Pseudocodifica ..................................................................................... 45

Premessa .................................................................................... 47 Hardware ............................................................................................... 47 La microprogrammazione ................................................................... 49 Le unità periferiche .............................................................................. 49 Software ................................................................................................ 68

Funzionalità di un calcolatore .................................................. 71

Page 2: Dal problema all'Algoritmo

La macchina di von Neumann ........................................................... 71 Il funzionamento della macchina di von Neumann ......................... 72 Le macchine convenzionali moderne ................................................ 74

L'interconnessione Bus ...................................................................... 75

I Linguaggi formali .................................................................... 85 Linguaggi di alto e di basso livello .................................................... 86 Le Categorie ......................................................................................... 87

Introduzione ............................................................................... 89 L'installazione ...................................................................................... 91 Il Copyright ........................................................................................... 92 Introduzione ai sistemi operativi ........................................................ 94 Il Bootstrap ........................................................................................... 95 Sistema operativo e microprocessore ............................................... 96 Struttura di un Sistema Operativo ...................................................... 99 Monolitica .............................................................................................. 99 Client-Server ....................................................................................... 100 Buccia di cipolla ................................................................................. 101

Premessa ................................................................................. 102 Il Modello OSI ...................................................................................... 103 Il Modello TCP/IP ................................................................................ 105 Criteri generali dell'architettura del TCP/IP ..................................... 107 Gli Apparati di Rete ............................................................................ 107 Tipologia Della Rete ........................................................................... 109 Internet ............................................................................................... 111

Premessa .................................................................................. 112 I Protocolli ........................................................................................... 112 Internet Protocol (IP) .......................................................................... 115 User Datagram Protocol (UDP) ......................................................... 116 Transport Control Protocol (TCP) .................................................... 117

Page 3: Dal problema all'Algoritmo

Limiti e dimensioni riguardanti la trasmissione dei dati ............... 118 Posta Elettronica (Simple Mail Transfer Protocol) ......................... 119 FTP (File Transfer Protocol) .............................................................. 120 HTTP (HyperText Transfer Protocol) ................................................ 120 Data Streaming ................................................................................... 121

Il World Wide Web. Introduzione ai formati dei dati multimediali. Introduzione all'uso dei motori di ricerca ....... 122 Premessa .................................................................................. 122

I motori di ricerca ............................................................................... 124 Trucchi ................................................................................................. 125

Sitografia .................................................................................. 127 BIBLIOGRAFIA ......................................................................... 127

Page 4: Dal problema all'Algoritmo

CAPITOLO I

Cenni di Storia dell’Informatica

Gli Albori

La ricerca di sistemi che facilitassero il calcolo (dopo l’uso delle dita), iniziò con l’ABACO, un quadro con perline mobili inventato a Babilonia circa 5000 anni fa. L’abaco rimase il principale sistema di calcolo fino al XVII secolo quando John Na-pier creò un metodo, che utilizzava piastre ed asticciole dette bastoncini (o ossi) di Nepero, che permetteva di effettuare la moltiplicazione, la divisione e l'estrazione delle radici quadrate e cubiche. Nello stesso periodo Henry Briggs crea le prime ta-vole logaritmiche in base 10. Successivamente, stimolato da un incontro con il mate-matico Napier, calcolò le tavole logaritmiche con quattordici cifre decimali dei nu-meri da 1 a 20.000 e da 90.000 a 100.000(pubblicate nel 1618).

Figura 1 ABACO

Page 5: Dal problema all'Algoritmo

Le prime macchine

Il vero punto di partenza che ha condotto ai moderni elaboratori è rappresentato da un calcolatore meccanico ad ingranaggi (la mac-china di Pascal –“la pascalina”), ideato per eseguire somme e sottrazioni dal diciannovenne Blaise Pascal (1623-1662) , mate-matico francese (che inventerà anche il calcolo delle probabilità).

Figura 3 Pascalina di Blaise PascalAl limite della "pascalina" pose rimedio il matematico tedesco Gottfried Wilhelm Leibniz(1646-1716), che nel 1671 costruì una macchina in grado di fare anche molti-

plicazioni e divisioni. Il principio della moltiplicazione era relativa-mente semplice: sommare successivamente il moltiplicando per un numero di volte pari al moltiplicatore. Tuttavia, la sua più grande in-venzione fu quella della rappresentazione binaria dei numeri (0 e 1). Purtroppo però essa cadde nel vuoto e solo nel 1847 verrà riscoperta, grazie al matematico inglese C. Boole, che aprirà l'orizzonte alle grandi scuole di logica matematica del '900 e soprattutto alla nascita del calcolatore elettronico.

L'ingegnere matematico Giovanni Poleni (1685-1761) docente di "Astronomia e meteore" all'Università di Padova, realizza un prototipo funzionan-te di una macchina calcolatrice in grado di eseguire le quattro ope-razioni su numeri massimo di tre cifre. La descrizione della calco-latrice è riportata nel suo saggio "Miscellanea" del 1709 in cui con-fluiscono i risultati delle sue ricerche giovanili. Nel secondo capi-tolo dell'opera si legge che la "macchina aritmetica" ha una grande ruota a tre settori su ciascuno dei quali ci sono nove denti che muo-vono rotelle totalizzatrici. Per la divisione, la macchina richiede un procedimento complicato e non completamente sicuro. Mentre le calcolatrici di Pascal e Leibeniz erano azionate con una manovella, quella di Poleni dispone un contrappeso. Poleni distruggerà la sua macchina quando verrà a sapere che un austriaco ne aveva costruito un esemplare migliorato. Nel 1959, per i 250 anni dalla pubblicazione del saggio "Miscellanea" una ricostruzione della macchina di Po-

Figura 4

Figura 2Blaise Pascal

Figura 5

Page 6: Dal problema all'Algoritmo

leni sarà realizzata negli stabilimenti IBM di Milano. La macchina è esposta al Mu-seo della Scienza di Milano.

Nel 1804, l'imprenditore francese Joseph Marie Jacquard (1752- 1834) pensò d'introdurre nei telai di legno della sua azienda di Lione, che produceva stoffe, delle lunghe schede di cartone fora-to: ad ogni scheda corrispondeva un preciso disegno, formato da forellini. Sembrava si potesse finalmente dare ordini a una mac-china perché eseguisse da sola un lavoro ripetitivo. Il dispositivo di lettura delle schede era costituito da file di aghi che potevano

attraversare solo dove c'erano i fori: i fili venivano così alzati automa-ticamente permettendo il passaggio della trama e il lavoro procedeva molto più in fretta, aumentando la produzione. La reazione degli operai fu immediata: i telai di Jacquard rischiavano di gettare in miseria i 4/5 della popolazione di Lione. Il Consi-glio della città gli ordinò di distruggerla. Tuttavia, nel 1812 operavano in Francia già 11.000 telai a scheda perforata. Dieci anni dopo la macchina era diffusa in Inghilter-ra, Germania, Italia, America e persino in Cina.

Figura 7 - Telaio di Jacquard

Sul modello della macchina di Leibniz, il francese Thomas de Col-mar (1785-1870) costruì nel 1820 l'aritmometro, un apparecchio fi-nalmente pratico, portatile, di facile uso e, soprattutto, correttamente funzionante. Essa fu la prima calcolatrice commercializzata con vero successo: ne furono venduti più di 1500 esemplari in trent'anni.

Figura 6

Figura 7

Page 7: Dal problema all'Algoritmo

La macchina era progettata in modo da poter essere costruita in piccola serie dalle nuove macchine utensili perfezionate con la Rivoluzione Industriale. L’Aritmometro, così venne chiamata, ottenne una medaglia d'oro all'esposizione di Parigi del 1855. Era in grado di eseguire le quattro operazioni, con risultati fino a 12 cifre; ma non poteva essere programmata per svolgere calcoli in successione, né era capace di con-servare in memoria un risultato parziale, per riprenderlo in una successiva fase di cal-colo. Per fornire queste prestazioni alle calcolatrici occorrerà aspettare i progressi tecnologici di un settore in grande sviluppo in quel periodo. La macchina inventata da de Colmar conobbe un successo ininterrotto per parecchie decine di anni, finché il progresso nelle tecniche di fabbricazione dei pezzi meccanici permise di ottenere un rendimento migliore.

Nel 1834 l’inglese Charles Babbage(1791-1871) presenta l’idea di una macchina analitica (Analythical Engine) le cui caratteristiche sono molto simili a quelle dei moderni calcolatori. La macchina non fu mai realizzata se non in tempi recenti, Babbage aveva cono-sciuto il telaio di Jacquard nei suoi studi sulle manifatture e da que-sta invenzione aveva ricavato alcuni concetti che gli furono utili nell' ideazione della sua seconda macchina; quella analitica. Per

questa macchina, precorrendo i tempi, aveva immaginato la possibilità di introdurre da un lato le operazioni (gli algoritmi) e dall'altro i valori

(le variabili e le costanti). Il modo più semplice di fare questo consisteva nell' utiliz-zo di schede perforate o nastri perforati in tutto simili a quelli dei telai di Jacquard. La macchina doveva essere in grado di eseguire operazioni ricorrenti nel calcolo del-le tavole e, per questo, dovevano esserci varie schede, una per ogni operazione da compiere, che venivano unite in un nastro nella opportuna sequenza. Questo era di fatto il programma di calcolo (operation cards).Altre schede perforate contenevano i dati, variabili e costanti, e venivano a costituire un secondo nastro (variable cards). Egli realizzò anche una "macchina alle differen-ze" in grado di svolgere calcoli più specializzati. La macchina analitica era costituita da due parti: lo store (memoria) che immagazzinava variabili e costanti e nella quale erano conser-vati anche tutti i risultati intermedi dei calcoli.Il mill (unità di calcolo) che conteneva il programma vero e proprio.Babbage non vedrà mai funzionare la sua Macchina Analitica. Mentre la Macchina alle differenze sarà completata solo nel 1989 ed ora è esposta al Museo della Scienza di Londra. Ma lo schema generale del suo calcolatore è talmente simile a quello dei computer moderni che la tardiva riscoperta dei suoi scritti invalidò alcuni brevetti dell’IBM.

Figura 8

Page 8: Dal problema all'Algoritmo

Gorge Boole(1815-1864) matematico inglese, inventa l’ Algebra di Boole nella quale esistono solo i numeri 1 e 0 (senza nessun va-lore intermedio) e le operazioni NOT,AND,OR, in ordine di priori-tà, da priorità alta a priorità bassa. Talvolta, al posto di 1 e 0 ven-gono utilizzati T (True, vero in inglese) e F (False, falso in inglese) per significare che 1 e 0 non rappresentano numeri nel senso co-mune del termine, ma solamente uno stato, una cosa che esiste op-pure non esiste: T e F possono sostituire completamente, senza nessun limite, 1 e 0.

L'Algebra di Boole richiede e definisce le seguenti proprietà (solo se sono soddisfat-te tutte si può parlare di Algebra di Boole):

poniamo* per rappresentare la funzione AND+ per rappresentare la funzione OR! per rappresentare la funzione NOT

PROPRIETÀ DELL'ASSORBIMENTO:a * ( a + b ) == aa + ( a * b ) == a

PROPRIETÀ COMMUTATIVA:a * b == b * aa + b == b + a

PROPRIETÀ DISTRIBUTIVA:a * ( b + c ) == ( a * b ) + ( a * c )a + ( b * c ) == ( a + b ) * ( a + c )

PROPRIETÀ ASSOCIATIVA:a * ( b * c ) == ( a * b ) * ca + ( b + c ) == ( a + b ) + c

ALTRE PROPRIETÀ:a * 0 == 0a * !a == 0a + 1 == 1a + !a == 1

IDEMPOTENZA:a * a == aa + a == aPRINCIPIO DI DUALITÀ:Se una uguaglianza è corretta, è corretta ed uguale anche l'uguaglianza ottenuta so-stituendo da tutte e due le parti 1 con 0 e 0 con 1, AND con OR, OR con AND. La seconda si chiama duale della prima. Da qui deriva il concetto di NOT applicato ad una formula (e non semplicemente ad una variabile o costante).

Tabella 1

Nel 1884 l'industriale di Chicago Dorr Eugene Felt(1862-1930) realizzò la 'Macaro-ni box', prototipo di una calcolatrice a tastiera per applicazioni contabili ,così chia-mata perché allestita in una scatola di legno per spaghetti .Lo spunto venne preso dal movimento alternato di una piallatrice. Nel prototipo i tasti sono costituiti da spiedini

Figura 9

Page 9: Dal problema all'Algoritmo

da macellaio di lunghezza diversa ,le guide dei tasti da chiodi e le molle da elastici .E' la prima calcolatrice (dopo quella di Tito Gonella) ad essere azionata con tasti an-ziché da manovella. Dopo tre anni di perfezionamenti, nel 1887 venne commercializ-zata nella versione in serie col nome di 'comptometer'. Nel 1905, la Marina degli Sta-ti Uniti se ne servì per la progettazione delle proprie navi.

Verso la fine del 1800 la rivoluzione industriale aveva sconvolto il panorama geografico delle nazioni: le città e le fabbriche comin-ciarono ad essere sempre più importanti, mentre le campagne si spopolavano. L’equilibrio sociale diventava sempre più comples-so, anche a causa delle immigrazioni, e i governi dovevano essere in grado di conoscere, attraverso censimenti,la composizione delle società per poter prendere decisioni adeguate al momento giusto. Il governo degli Stati Uniti si rese ben presto conto che non poteva seguire le trasformazioni in corso senza avere alcun strumento di

calcolo a disposizione: questa fu la prima volta che un uomo si rese conto che le sue sole capacità mentali non sarebbero bastate ma era necessario un aiuto meccanico. Per questo Herman Hollerith(1860-1929) ingegnere meccanico, nel 1884 propose l’utilizzo di un macchinario elettrico da lui elaborato, basato sull’utilizzo di schede di cartone perforate, sull’esempio di Jacquard(telai). Ogni scheda rappresentava un individuo e ogni foro rappresentava una risposta positiva o negativa ad una certa do-manda. Le schede venivano preparate su macchine speciali dette perforatrici panto-grafiche, che traducevano le risposte dei moduli del censimento in buchi sulle sche-de di cartone. Terminato il lavoro di perforazione le schede venivano raggruppate e inserite nel lettore di schede, nel quale un congegno elettromeccanico verificava la presenza o l’assenza dei buchi. Contando i buchi sulle schede, il lettore fu in grado di generare i risultati del censimento del 1890 in circa 2 anni, contro i sette occorsi per la precedente rilevazione. Hollerith sfruttò economicamente il successo ottenuto, estendendo l’utilizzo delle schede perforate anche nel settore commerciale e dando avvio alla cosiddetta meccanografia, che si occupa di registrare le informazioni an-ziché eseguire calcoli; nel 1896 fondò la Tabulation Machine Company, confluita nel 1911 insieme ad altre compagnie nell C-T-R-Calculation and recordings Co., che nel 1924 prese il nome di International Business Machine, meglio conosciuta come IBM. Ad Hollerith è dovuta anche la standardizzazione dei formati delle schede per-forate; tale formato è sopravvissuto alla definitiva scomparsa delle schede perforate, intorno al 1980. Contrariamente a quello che è successo in Italia, le schede perforate sono state usate, soprattutto negli Stati Uniti, anche prima dell’invenzione dei com-puter elettromeccanici ed elettronici; gli elaboratori semmai hanno approfittato di questa tecnologia consolidata.

Figura 10

Page 10: Dal problema all'Algoritmo

Figura 11

Macchine astratte – Una storia lounga un secolo

Alla base dei concetti teorici dei calcolatori elettronici del 900 trovia-mo le teorie di David Hilbert (1862-1943) sulla costruzione di un uni-co sistema che ricomprendesse e organizzasse tutta la matematica po-nendo la questione della completezza e della coerenza, esso è completo se tutti gli enunciati veri della matematica sono derivabili (‘ottenibili’ e

‘dimostrabili’) al suo interno; è coerente , o non-contraddittorio, se non possono derivarsi al suo interno enunciati contraddittori, vale a dire una proposizione e la sua negazione. Una questione di questo tipo rientra nella metamatematica, poiché è un’indagine matemati-

ca sulla matematica.

Nel 1931 Kurt Gödel (1906-1978) pubblicò il "Teorema di in-completezza" che mostrava l'impossibilità dell'impresa proposta da Hilbert. Il teorema afferma che in un qualsiasi sistema assioma-tico (costruito cioè su un gruppo di assiomi, come l'aritmetica o la geometria euclidea) è sempre possibile trovare una proposizione che fa parte di questo sistema, la cui validità non è tuttavia dimo-strabile con i mezzi logici (assiomi, definizioni, regole di deduzio-ne) offerti dal sistema stesso: per effettuare questa dimostrazione, è necessario ricorrere a un sistema più ricco di mezzi logici del pri-mo.

Figura 0.14

Figura 12

Page 11: Dal problema all'Algoritmo

Nel 1936 il matematico inglese Alan Mathison Turing (1912-1954) progettò una macchina ideale che fosse in grado di risolvere problemi. Questa macchina, nota come macchina di Turing, si com-pone di un nastro, che possiamo immaginare di carta e di una testina di lettura/scrittura (TLS) che scorre sopra il nastro. La macchina funziona su intervalli discreti di tempo; ad ogni istante il suo stato dipende dallo stato precedente; la sua struttura è:

a. Il nastro è suddiviso in singole celle nelle quali può essere scritto un simbolo appartenente a un alfabeto predefinito; il nastro è da con-siderarsi infinito a destra e a sinistra.

b. La TLS deve essere in grado di leggere i simboli scritti in una cella, di scri-vervi un nuovo simbolo, di muoversi in entrambi i versi lungo il nastro.

c. La macchina che comanda la testina è definita istante per istante da una quintupla di elementi:

1. s: lo stato della macchina all'istante presente; 2. i: il simbolo letto all'istante presente; 3. S(s, i): lo stato della macchina all'istante successivo; è fun-zione dei primi due parametri. 4. I(s, i): il simbolo scritto dalla macchina all'istante successi-vo; è funzione dei primi due parametri. 5. V(s, i): il verso (movimento) della macchina (destra/sini-stra); è funzione dei primi due parametri.

Questa macchina, concettualmente semplice, è in grado di risolvere una classe di problemi molto vasta; un esempio semplice ma non banale è quello di stabilire se una sequenza di parentesi è ben formata.

Nello stesso anno Alonzo Church (1903-1995), sviluppa la teoria del “λ calcolo” (1936) che mostra l'esistenza di un "problema indecidibi-le". Questo risultato precedette il famoso lavoro di Turing sul proble-ma della fermata (o halting problem) che inoltre mostra l'esistenza di un problema irrisolvibile mediante un procedimento meccanico. Chur-ch e Turing, mostrarono altresì che il λ calcolo e la macchina di Tu-ring, utilizzata dallo stesso Turing nel problema della fermata, sono equivalenti in capacità, e successivamente dimostrarono una varietà di

"processi di computazione meccanica" alternativi aventi le medesime abilità compu-tazionali. Questo risultato è la tesi di Church–Turing. Successivamente Turing studiò la cosiddetta macchina universale, una macchina di Turing in grado di imitare una

Figura 13

Figura 14

Page 12: Dal problema all'Algoritmo

qualsiasi particolare macchina di Turing. La macchina universale di Turing ha costi-tuito il primo modello del futuro computer programmabile. In un certo senso gli odierni computer programmabili sono macchine universali di Turing.

I calcolatori di prima generazione 1940-1955

I primi grandi calcolatori furono concepiti allo scopo di semplificare e accelerare i calcoli scientifici in ambito ingegneristico e soprattutto militare. Erano principal-mente costituiti da valvole termoioniche e tubi a vuoto. Tre grandi tipi di calcolatori sono stati costruiti negli anni '40, essenzialmente in università o centri di ricerca:

I calcolatori numerici elettromeccanici: Benché siano stati rapidamente su-perati in seguito questi calcolatori hanno rappresentato un notevole progresso. Le loro prestazioni nel calcolo e, in particolare, la velocità nell'esecuzione delle operazioni ne fecero delle macchine moderne per la loro epoca, che su-peravano ampliamente i calcolatori d'ufficio. Inoltre faranno da banco di pro-va per alcune tecniche impiegate più tardi nei computer, in particolare per quanto riguarda l'uso del calcolo binario e il principio del registro interno o memoria. Esempi di questo tipo di calcolatore sono:

lo Z1 (1941,evoluto fino allo Z4) di Zuze, pri-mo calcolatore universale binario governato da programma, la cui memoria era costituita prima da una serie di ripiani mobili, poi (dallo Z2) da relé telefonici; queste macchine vennero usate per calcoli aeronautici connessi all'impiego del-le bombe volanti, lanciate dagli aerei.

il Model1 di Stibitz che si basava su principi tecnici simili allo Z3 ma che diede vita al primo esempio di calcolo a distanza grazie al collega-mento con telescriventi via rete telegrafica

I calcolatori analogici: I capostipite di questi calcolatori fu l'analizzatore differenziale di Vannevar Bush (1890 - 1974) costruito per risolvere le equazioni differenziali che complicavano e rallentavano notevolmente il lavo-ro degli ingegneri civili. Tuttavia l'esempio più significativo di calcolatore analogico fu il MARK 1(1944), elaborato nell'Università di Harvard nel 1937 da Howard H. Aiken (1900-1973). Il suo progetto fu quello di costruire un calcolatore universale (servendosi del principio delle macchine a schede per-forate), che avrebbe dovuto eseguire i calcoli nell'ordine delle sequenze mate-matiche e non dalle sequenze imposte dalle limitazioni meccanografiche. Il meccanismo di trasferimento di una determinata quantità d'informazione da

Page 13: Dal problema all'Algoritmo

una parte all'altra della macchina funzionava grazie a un sistema di ruote den-tate, mosse da impulsi elettrici, che effettuavano una rotazione ogni dieci im-pulsi. Il programma era inserito su un nastro di carta perforata e un orologio sincronizzava le operazioni eseguite dalla macchina.

I calcolatori numerici elettronici: L'avvenire apparteneva all'elettronica anche se molti durante gli anni '40 stentavano a rendersene conto. Il vantaggio principale dell'elettronica era sicuramente la rapidità di commutazione: si poteva azionare un circuito aperto/chiuso parecchie centinaia di migliaia di volte al secondo grazie all'assenza di qualunque attrito meccanico. Si trattava della migliore prestazione mai ottenuta da una tecnologia di elaborazione dei segnali, ma c'era un inconveniente: il solo modo di utilizzare le risor-se dell'elettronica all'epoca era costituito da fragilissimi tubi a vuoto. Di conseguenza i calcolatori numerici elettronici annoverarono sia sostenitori che oppositori:

Primo dei calcolatori fu il COLOSSUS (1943) di T. H. Flo-wers, W. W. Chandler e altri. Era un grande calcolatore elet-tronico, con una memoria composta di1500 valvole. Usava cinque processori paralleli e poteva leggere un nastro perforato alla velocità di 5000 caratteri al secondo.

Il più importante di questi calcolatori fu senza dubbio l'E-NIAC (1946), uno degli ultimi dinosauri del periodo che ha preceduto la comparsa del computer. La sua costruzione ebbe inizio alla Moore School dell'Università della Pensylvania nel giugno del 1943 e rimase nascosta per lungo tempo al grande pubblico in quanto segreto militare. Molte delle idee che servi-rono a realizzare l'ENIAC vennero da Atanasoff: l'uso dei tubi elettronici era già stato sperimentato sull'ABC (un precedente calcolatore elettronico), ma questa volta furono impiegati su scala molto più ampia. Atanasoff aveva anche realizzato la sincronizzazione delle operazioni interne della macchina con un orologio elettronico, le cui pulsazioni permettevano che le differenti operazioni della macchina avessero luogo simulta-neamente. Questa importante innovazione sarà ripresa con l'E-NIAC che in tal modo cambierà stato 200 volte al secondo.

EDSAC (Electronic Delay Storage Automatic Computer, 1949) di M. Wilkes, W. Renwick, D. J. Wheeler e collabor-atori. Il primo calcolatore elettronico general purpose con pro-gramma memorizzato

Figura 15

Page 14: Dal problema all'Algoritmo

BINAC (Binary Automatic Computer, 1949) di J. P. Eckert e J. W. Mauchly. Era di tipo general purpose, il primo calcolato-re costruito da privati fuori da centri di ricerca.

Figura 16 - l’ENIAC (1946)

I calcolatori degli anni ‘50 sfruttano progressivamente l’utilizzo dei neonati transistor (di maggior affidabilità, minor potenza, minori dimensioni) creati nei laboratori Bell nel 1947, memorie a nuclei di ferrite(magnetici), memorie di massa a nastro magneti-co, sistema operativo, linguaggi ad alto livello.

Page 15: Dal problema all'Algoritmo

Linguaggio formale Sembra ragionevole introdurre la definizione di linguaggio formale in quanto nasce in questo periodo storico ed e’ alla base dello sviluppo dell’ intelligenza artificiale, dello studio della correttezza dei linguaggi di programmazione e quindi dell’ infor-matica teorica.In matematica, logica, informatica e linguistica, per linguaggio formale si intende un insieme di stringhe di lunghezza finita costruite sopra un alfabeto, cioè sopra un insieme finito di oggetti tendenzialmente semplici che vengono chiamati caratteri, simboli o lettere. Si può parlare di linguaggio formale anche in senso non stretta-mente tecnico in vari contesti (scientifici, legali, amministrativi, di progetto, di nor-mativa, ...), per intendere un linguaggio che si serve di termini e di espressioni scel-te con cura maggiore di quella impiegata nel parlare comune, al fine di eliminare o ridurre ogni ambiguità di interpretazione. Un criterio per distinguere un linguaggio formale consiste nel valutare se si possa sottoporlo ed elaborazioni automatiche

Nei primi anni ’50 uno studente di Church, Stephen Kleene (1909-1994) coniò il termine espressione regolare. Diede un grosso contributo allo studio della teoria ri-corsiva inventando le espressioni normali, fornendo i metodi di determinazione su quali problemi sono risolvibili e quali funzioni sono computabili. Creò la stella di Kleene per caratterizzare e determinare automazioni.

John Von Neumann (1903-1957) , entrò nel gruppo di lavoro dell’ ENIAC modificandone la programmazione, che fino ad allo-ra richiedeva una manipolazione diretta ed esterna dei collegamen-ti, era così ridotta ad un'operazione dello stesso tipo dell'inseri-mento dei dati. L’ENIAC diveniva la prima realizzazione della macchina universale inventata da Alan Turing nel 1936: in altre parole, un computer programmabile nel senso moderno del termi-ne. Nel frattempo un nuovo modello di computer, l'ED-VAC(1951), era in cantiere, e von Neumann ne assunse la direzio-

ne. Nel 1945 egli scrisse un famoso rapporto teorico, che divenne un classico dell'in-formatica: in esso la struttura della macchina era descritta negli odierni termini di memoria, controllo, input e output. Si dedicò alla progettazione di un nuovo calcola-tore, producendo una serie di lavori che portarono alla definizione di quella che oggi è nota come “architettura von Neumann”: in particolare, la distinzione tra memoria primaria (ROM) e secondaria (RAM) e lo stile di programmazione mediante dia-grammi di flusso.

Debutta l'IBM 650 (1953), conosciuto anche col nome di calcolatore a tamburo magnetico e diventa il primo computer prodotto industrialmente. Con questa macchina si può affermare che è nato il primo minicomputer. Ne verranno venduti

Figura 17

Page 16: Dal problema all'Algoritmo

450 già nel primo anno di produzione. Nei successivi 15 anni ne saranno prodotti e venduti più di 1500, che per questo periodo è un record assoluto. Come il 701, anche il 650 può leggere e scrivere sia da nastro magnetico che da schede perforate. Le schede perforate sono anche usate per introdurre il programma da eseguire ed ogni scheda rappresenta una istruzione a tre indirizzi, comprendendo cioè anche quello dell'istruzione successiva.

Un grande passo in avanti viene effettuato da, John W. Backus che imposta il lin-guaggio di programmazione scientifica FORTRAN (FORmula TRANsalot) per il si-stema IBM 704. Ingegneri e scienziati sceglieranno definitivamente questa strada per la programmazione dei computer, abbandonando il metodo di modificare il cablaggio interno delle macchine per cambiarne il programma da eseguire.

1956 : l'IBM introduce e inizia le installazioni dei sistemi RAMAC 305 (RAMAC = Random Access Method Of Accounting And Control). Sarà questo il primo passo per trasferire i dati (records) dal supporto delle vecchie e ingombranti schede perfo-rate, alle unità a dischi magnetici.

I calcolatori di seconda generazione 1956-1963

Vengono definitivamente abbandonate le valvole per lasciare posto ai transistor un dispositivo a stato solido composto da un materiale semiconduttore ( il germanio che poi fu sostituito con il silicio), che funge da rettificatore e amplificatore per la corren-te e che sostituisce presto le fragili e ingombranti valvole. L'introduzione dei transi-stori al posto delle valvole, all'interno del computer, aumenta notevolmente la veloci-tà di elaborazione dei dati e permette di ridurre notevolmente le dimensioni, non ché i guasti. Nascono i “chip”.

Differenza Transistor-ValvolaFigura 18

Page 17: Dal problema all'Algoritmo

Alla fine del 59 nascono più di 200 linguaggi di programmazione, tra cui il COBOL (Common Business Oriented Language). La DEC l’anno successivo introduce il PDP-1 il primo computer commerciale con monitor e tastiera per l’input.

1963: L'American National Standards Institute (ANSI) accetta l'ASCII (American Standard Code for Information Interchange) con codice a 7 bit per lo scambio d'in-formazioni, che diventa così uno standard mondiale, ancora in uso oggi. Prima di al-lora ogni computer usava un suo sistema di rappresentazione dei dati, per cui per scambiare informazioni tra macchine diverse bisognava sempre utilizzare tavole di conversione.1963 Douglas Engelbart inventa il mouse, come dispositivo di puntamento, allo Stanford Research Institute, nell'ambito di una ricerca di un sistema per gli ipertesti. Lo stesso anno la IBM mise in vendita il primo programma di "Word processor" (elaboratore di testi) del mondo.

I calcolatori di terza generazione 1964-1970

I computer di questa generazione differiscono da quelli della precedente per l’utilizzo di circuiti integrati a scapito dei transistor. La IBM ormai azienda leader adotta lin-guaggi di programmazione Assembler, RPG (Report Program Generator) e CO-BOL. Il sistema operativo può essere memorizzato su nastro (TOS) oppure su disco (DOS). In particolar modo sul IBM System/360, il primo elaboratore a circuiti inte-grati. La novità di questa macchina risiedeva nella possibilità di essere potenziata au-mentando la capacità della memoria o addirittura aggiungendo altri elementi.

La costruzione del primo Floppy Disk da 8 pollici da parte della IBM risale al 1967, anno in cui vengono sviluppati i linguaggi ADA e SIMULA (il primo linguaggio object-oriented). L’ IBM rilascia il primo 360/91, una macchina che introduce il concetto di "pipeline", per incrementare le prestazioni del computer anche del 33%, inventato da Robert Tomasulo. La serie 360 usa una ca-che memory super veloce. Questa memoria ha mostrato infatti d'essere fino a 12 volte più veloce della standard magnetic core memory, con tempo medio d'accesso di 80 nano secondi.

Nel 1968 nasce la INTEL Inc. (INTegrated ELectronics) che si evidenzia per aver rivoluzionato il mondo dei computer con l’introduzione di nuovi dispositivi, produs-se la prima RAM ("Random Access Memory" ), la memoria a semiconduttori da 1 Kbyte, che fu adottata immediatamente nella costruzione di nuovi computer al posto delle vecchie memorie a nuclei magnetici di ferrite.

Figura 19

Page 18: Dal problema all'Algoritmo

Ritchie Dennis e Thompson Ken nel 1969 iniziano allora a lavorare su una loro idea di sistema operativo, che anziché essere orientato alla multiutenza si dirigerà ad un unico utente. Per questo (e scherzando sul nome Multics) lo chiameranno UNIX. La prima versione girerà su un PDP-7 della Digital Equipment Co. (DEC) e sarà completata entro lo stesso anno. Il programma è scritto in assembler PDP-7. UNIX diventerà una potenza nel mondo dei sistemi operativi. In questo anno diventa uno standard mondiale l’interfaccia seriale RS-232-C, che consente le comunicazioni tra qualsiasi tipo di computer e periferica. Il Dipartimento della Difesa USA commissiona ARPANET (Advance Research Pro-jects Agency Net) per ricerche sulle reti e i primi 4 nodi diventano operativi all'U-CLA, UC Santa Barbara, SRI e all'Università dello Utah. L'esperimento servirà a connettere vari centri di ricerca negli USA, tramite un sistema di comunicazione a commutazione di pacchetti (packet-switching network). Diventerà la più grande rete mondiale, con milioni e milioni di persone collegate e si chiamerà INTERNET.

Nel 1970 la IBM propone sul mercato il IBM System/370 in cui compare l’innova-zione della memoria virtuale, che consente una gestione totalmente automatica di ca-rico/scarico di parti di programma, non richieste in un determinato momento, da di-sco a memoria centrale. Inoltre e’ previsto un sistema di virtual storage, che consente di caricare in memoria parti di dati di cui il sistema prevede il prossimo utilizzo. Nel-lo stesso anno nasce il PASCAL che consente ai programmatori di dividere un pro-gramma in vari blocchi chiamati "funzioni" e "procedure". Rende il codice program-ma più facile da capire e da manutenere. Il PASCAL sarà il linguaggio scelto da molte università e college nei successivi 20 anni.

I calcolatori di quarta generazione 1971-oggi

Lo sviluppo tecnologico ha fatto passi da gigante e i computers diventano un feno-meno di massa, ciò è dovuto ad un abbattimento dei costi e una miniaturizzazione e affidabilità delle componenti.

Il 1971 fu un altro anno importantissimo per la storia dei computer, quando gli inge-gneri elettronici della Intel, l'italiano Federico Faggin e gli americani Marcian Ed-ward Hoff jr. e Stanley Mazer, diedero vita al "motore" dei futuri "Pc", il micropro-cessore. I tre riuscirono a concentrare su una piastrina di quattro millimetri per tre un "supercircuito integrato" contenente ben 2.250 transistor, la futura CPU ("Central Processing Unit" ) che costituivano tutti i componenti di un'unità centrale di elabora-zione: in breve, il "cervello" e la "memoria" di entrata e uscita. L'anno successivo, sempre Faggin e Hoff jr. realizzarono il microprocessore "8008", il primo "chip" da 8 bit di uso universale. L’unoco inconveniente di questa macchina era di possedere una memoria statica capace di memorizzare dati solo in presenza di alimentazione. Il pro-blema fu risolto dall’IBM che sopperì a questo inconveniente con l’uscita dell’ IBM

Page 19: Dal problema all'Algoritmo

3340 che adottava la tecnologia di memoria su Hard Disk (dischi di alluminio ma-gnetizzati). La Commodore è il primo produttore che mette sul mercato un calcola-tore elettronico compatto, come prodotto di massa. Sino ad oggi i calcolatori erano pesanti, complicati e molto costosi per la media delle persone.

Figura 20I processori 4004 -8008

Nel 1972 Dennis Ritchie riscriverà il "B" e battezzerà il nuovo linguaggio con la let-tera "C". Questo linguaggio sarà utilizzato l’anno successivo per riscrivere UNIX.

1975, forse la più importante di tutta la storia dell'informatica. E' l'anno, infatti, in cui due studenti universitari, William "Bill" Gates e Paul Allen, diedero vita a una pic-colissima azienda che elaborava linguaggi per "computer" , la Microsoft .La fortuna di questa piccola società fu la creazione del linguaggio Basic. Quasi in concomitan-za, esattamente nel luglio 1976, a Palo Alto, in California, due giovani dal passato " hippie", Stephen Jobs e Stephen Wozniak, costruirono l'"Apple I", dando vita al-l'omonima azienda, battezzata come la casa discografica creata quasi dieci anni pri-ma dai Beatles. Sarà proprio la Apple la grande rivale della Microsoft, soprattutto per il fatto che entrambe hanno usato fin dall'inizio un linguaggio di programmazione completamente diverso.

Nel corso degli anni ’70 escono sul mercato una serie importante di processori tra queste ricordiamo della intel gli 8086 e 8088, della Zilog lo Z-80.

Entrando nel mercato dei PC (1981), l’IBM adotta come sistema operativo l’MS-DOS ( Microsoft - Disc Operating System ) con il quale sono cresciuti e hanno ap-preso i rudimenti dell'informatica milioni di persone.

Page 20: Dal problema all'Algoritmo

Il completamento del protocollo TCP/IP nell’ 1983 segna la creazione di Internet globale. Nello stesso anno nei laboratori AT&T Bell, Bjarne Stroustrup lavora sul C++, un'estensione Object Oriented del linguaggio C. Nel 1984 in gennaio viene annunciato dalla Apple il personal computer Macintosh. Si tratta finalmente di una macchina interamente grafica, abbordabile come prezzo, anche se più cara di un PC IBM, Il monitor (rigorosamente in bianco e nero) è inte-grato con la CPU, la tastiera è povera di tasti, ma efficace al tocco, come il mouse, che presenta un solo tasto. L'interfaccia grafica è semplice e completa, simulando una scrivania, con le varie cartelle (in forma di icone), dispositivi di memorie (floppy e disco fisso) e cestino per i documenti da buttare. Viene fornito già corredato di scheda grafica e qualche semplice programma come editor di testi e di disegno. La Sony e Philips introducono i primi CD-ROM, che forniscono una enorme capacità di registrazione dei dati (fino a 640mb).

Negli anni ’80 il mercato propone i seguenti processori l’ MC68020(250.000 transi-stor,Motorola) , Intel 80286(16 bit), 80386(32 bit), 80486(32 bit,1.2 milioni di transi-stor). Questo decennio vede lo sviluppo di Windows 1.0 che introduce gli aspetti tipi-ci del Macintosh nei computer DOS compatibili, infatti la Apple accusa la Microsoft di aver creato un software che ricorda troppo il sistema operativo Macintosh. Gli anni ’80 si concludono con il Tim Berners-Lee propone il progetto World Wide Web (WWW) al CERN che svilupperà il prototipo nel 1990 .Quattro anni dopo, l’u-scita del primo browser della Netscape crea il boom di navigatori del Web.

Un personaggio molto significativo è Robert Milner ha aperto nuove frontiere in almeno due importanti aree di ricerca in informatica: la teo-ria della programmazione funzionale e la teoria della programmazione concorrente. Nel primo campo il risultato delle sue ricerche pluriennali si è concretizzato nel linguaggio di programmazione Standard ML, og-gigiorno largamente usato, specialmente nel mondo accademico, come linguaggio introduttivo alla programmazione per la sua semplicità d'uso e rigorosa chiarezza di progetto. Forse ancora maggior impatto ha avuto però la sua proposta di una moderna teoria di modellazione di sistemi

concorrenti, teoria che ha avuto un significativo seguito in tutto il mondo. Frutti di questi studi sono i linguaggi CCS e pi-calcolo, che sono oggi usati in moltissimi con-testi, anche industriali. Tipiche aree applicative per questi linguaggi sono, ad esem-pio: - specifica e verifica di protocolli di comunicazione (tra questi, quelli che quoti-dianamente usiamo, ad esempio, per la posta elettronica); oppure la - verifica di cor-rettezza del progetto di circuiteria hardware. Un derivato di CCS, il linguaggio LO-TOS, è lo standard internazionale ISO per specificare protocolli di comunicazione; e in un certo senso dobbiamo anche a Milner se oggi questi protocolli sono più sicuri, affidabili e, in generale, corretti.

Figura 21

Page 21: Dal problema all'Algoritmo

La definitiva consacrazione della Microsoft grazie all’ uscita sul mercato di diverse versioni sistemi operativi Windows(95,98,CE,2000,ecc.), è com-pleta. In competizione con i sistemi operativi of-ferti dalla Microsoft nasce Linux dall’ideatore Li-

nus Benedict Torvalds. Questo sistema ha come particolarità l’ Open Source, l’idea della condivisione del software libero (non gratuito)

formalizzata da Richard Stallman nel “manifesto GNU”, nel quale traccia la linea di pensiero secondo cui il software deve essere libero e condiviso tra gli utenti interes-sati potendo così essere anche modificato.

Contemporaneamente si sviluppano uno dei più grandi siti di e-commerce Amazon, il linguaggio di programmazione Java (piattaforma indipendente per lo sviluppo di applicazioni Object Oriented) e viene rilasciato un nuovo standard di porta comuni-cazione per PC, denominato USB, questo nuovo tipo di connessione semplificherà la connessione di innumerevoli dispositivi collegabili al PC: mouse, scanner, fotocame-re, webcam, drive portatili, ecc. Oltre alla praticità, la nuova porta di connessione (plug'n play) risulta particolarmente veloce, soprattutto quando verrà fornita la ver-sione USB 2.

I calcolatori di quinta generazione. Il futuro…

Rappresentano i computer di domani dove l’interazione uomo macchina non sarà più eseguita dall’ uso di strumenti come mouse e tastiere , bensì tramite comandi vocali e sistemi di apprendimento tipici dell’ intelligenza. Queste innovazioni ad oggi si pen-sa saranno possibili tramite lo sviluppo dell’ intelligenza artificiale

Figura 23Figura 22

Page 22: Dal problema all'Algoritmo

Grafico 0.1

CAPITOLO II

Rappresentazione delle InformazioniRappresentazione posizionale

La rappresentazione posizionale in primo luogo, permette di scrivere in modo effi-ciente numeri anche molto grandi. Con i sistemi precedenti, ad esempio il sistema di numerazione romano (M,C,V,I), questo è, in teoria, possibile, ma certamente non pratico. Potremmo, ad esempio, scrivere qualsiasi numero usando solo il simbolo I, ripetuto a sufficienza (dieci volte per il numero dieci, mille volte per il numero mille, e così via), ma è chiaro che non andremmo molto lontano.

Page 23: Dal problema all'Algoritmo

La notazione decimale posizionale, cui siamo abituati, è quella in cui il significato di uno dei dieci simboli di base (le cifre 0,1,2,3,4,5,6,7,8,9) dipende dalla posizione di questo all' interno della sequenza di cifre.

Il numero 361 va interpretato come: 3 centinaia + 6 decine + 1 unità . Ovvero: 3 102 + 6 101 + 1 100

Se invece di usare le dieci cifre usuali ne usiamo solo due (0,1 rappresentabili in un circuito mediante tensione alta e tensione bassa) avremo la possibilità di una rappre-sentazione posizionale in base due in cui un numero è costituito unicamente da una sequenza di 0 e 1.

Il numero 11010 2 va interpretato come 1 24 + 1 23 + 0 22 + 1 21 + 0 20

Ovvero: 110102 = 2610 dove si indica sul basso del numero il tipo di base che si mantiene

Codifica dell’informazione, numeri binari e caratteri ASCII(Unità d’informazione: Bit, Byte, Word)

Bit: quantità minima di informazione che può valere solamente 0 od 1. Byte: unità di misura dell'informazione che corrisponde sempre a 8 bits. Parola(word): unità di misura dell'informazione che può corrispondere ad un nume-ro variabile di bits, usualmente corrispondente ad un multiplo di un byte. Valori tipici sono 16, 32, 64, 128 bits. Questo può variare da un sistema ad un altro.

Quanta informazione sta in un byte? è facile verificare che la quantità di oggetti numerabili con un certo numero di bits, per esempio , è pari a . Per esempio con un bit si possono rappresentare

numeri compresi fra e 1 e con un byte numeri compresi fra e .

Nella seguente tabella riportiamo i numeri rappresentabili dato il numero di bit di-sponibili. Abbiamo visto che con 8 bit possiamo rappresentare numeri compresi fra

e tuttavia è bene osservare che il concetto è generale e non concerne solo la rappresentazione di numeri. Infatti, più in generale possiamo parlare di numero di oggetti rappresentabili nel senso che ad ogni configurazione di bit possiamo pensare di associare un oggetto. Per esempio, questo è quello che si fa con la codifica ASCII ove ad ogni configurazione di bit in un byte corrisponde un simbolo; poiché i caratte-ri ASCII sono codificati in un byte possiamo rappresentare un numero massimo di 256 simboli.

Page 24: Dal problema all'Algoritmo

Numero di bit Numero di oggetti rappresentabili

Tabella 2

Per quantificare varie quantità di uso comune (per esempio capacità di memorizza-zione dei dischi, velocità di trasferimento dei dati) il bit ed il byte sono ormai troppo piccoli. È quindi diventato usuale avvalersi di multipli, in modo analogo a quello che si fa con altre unità di misura. È usuale e conveniente utilizzare le potenze della base numerica in cui si lavora per definire i multipli delle unità di misura. Così accade che per esempio il chilogrammo ( 1Kg=103=1000g ).

I multipli delle unità di misura delle informazioni sono un po' diversi a causa del fat-to che viene naturale lavorare con le potenze di due. Succede quindi che l'unità di mi-sura che esprime il "migliaio di byte" non corrisponda esattamente a 1000 byte bensì alla potenza di 2 che più si avvicina a 1000 byte: =1024. Analogamente per gli altri multipli che riportiamo nella tabella seguente.

Multiplo di byte Numero effettivo di byte

KiloByte (KB)

MegaByte (MB)

GigaByte (GB)

TeraByte (TB)

PetaByte (PB)

HexaByte (HB)

Gli stessi multipli possono essere applicati ai bit ma si usa in tal caso la lettera "b" minuscola: Kb, Mb e via dicendo. È comune utilizzare questi multipli per le velocità di trasferimento dati. Per esempio le reti locali consentono oggi una velocità di tra-sferimento di 100 Mb/s, 100 MegaBit al secondo.

Page 25: Dal problema all'Algoritmo

Sistemi di numerazione binario ottale ed esadecimale

I sistemi di numerazione presuppongono la determinazione di una base, che chiamia-mo N. Per esempio nel sistema decimale N=10. In generale, un numero per esempio di 4 cifre che indichiamo con abcd, si esprime mediante la seguente espressione :

aN3+bN2+cN1+d

dove le singole cifre a, b, c, d assumono N valori nell'intervallo: 0,…,N-1 ;

Il nostro sistema decimale è quello indio-arabico ma non è l'unico ad essere stato uti-lizzato. I Babilonesi usavano un sistema sessagesimale in base . I computers ragionano in termini del sistema binario ( ). Gli informatici talvolta usano vo-lentieri i sistemi ottale ( ) o esadecimale ( ) perché sono facilmente convertibili nel sistema binario.

Codifica delle informazioni - Rappresentazione dei numeri Numeri interi è quella che utilizza la rappresentazione decimale/binaria posizionale.

Numeri con la virgola I numeri del sistema decimale con la virgola mobile (floating point) sono i numeri reali rappresentati in base 10 mediante notazione "scientifica" ovvero moltiplicati o divisi per un opportuna potenza di 10 in modo da poter essere scritti in modo standardizzato come: x.yxwt *10e oppure 0.xyxwt *10 e+1 . Il coeffi-ciente della potenza di 10 viene chiamato mantissa del numero. Nel primo caso la mantissa è x.yxwt , mentre nel secondo è 0.xyxwt. La rappresentazione mediante virgola mobile offre due principali vantaggi: Rende più semplice automatizzare le operazioni aritmetiche e permette di eliminare qualsiasi ambiguità tra zeri significativi e posizionali.

Per illustrare quest' ultimo punto cerchiamo di capire come interpretare il valore del-le cifre del numero 15000. Chiaramente, si tratta di un numero in cui ci sono 1 deci-na di migliaia e 5 migliaia. Però, non e' chiaro se i tre zeri che seguono vadano in-terpretati come " esattamente zero centinaia, zero decine e zero unità" oppure come indicatori del valore di decine di migliaia e migliaia delle cifre precedenti ma senza per questo implicare che il numero in questione corrisponda ad una conoscenza esat-ta anche di centinaia, decine e unità. Nel primo caso, diremo che si tratta di zeri "si-gnificativi" e che le cifre significative del numero sono in tutto 5. Nel secondo caso, gli zeri servono solo ad attribuire il giusto valore posizionale a 1 e 5 ma il numero di cifre significative è 2. Con la rappresentazione in virgola mobile si definiscono si-gnificative tutte le cifre (zeri inclusi) che siano a destra della prima cifra diversa da zero.

Page 26: Dal problema all'Algoritmo

In notazione binaria il concetto di numero a virgola mobile si estende in modo diret-to. Inoltre, poiché le cifre possono essere solo 0 oppure 1, se si opta per la forma "normalizzata" 1.xyzt *2e, in cui la mantissa 1.xyzt inizia sempre per 1, possiamo omettere di indicare l'1 prima del punto risparmiando un simbolo per rappresentare la mantissa. Per standardizzare la rappresentazione di numeri binari floating point è necessario decidere quanti bit utilizzare e come ripartirli tra mantissa ed esponente. Esistono moltissime possibili soluzioni e, in principio, i linguaggi di programmazio-ne dovrebbero essere "neutri" rispetto alle convenzioni di rappresentazione. Di fatto, negli ultimi 10 anni si è imposto lo standard IEEE 754 che prevede almeno due rap-presentazioni: una "corta" che utilizza 4 bytes, ovvero 32 bit ripartiti in: 1 bit per il segno della mantissa, 23 bit per la mantissa, senza il primo 1 (bit nascosto), ed 8 bit per l' esponente espresso come intero binario nella forma con bias 127. Una "più lunga" o "a precisione doppia" che utilizza 8 bytes (64 bit) ripartiti in: 1 bit per il se-gno della mantissa, 52 bit per la mantissa, senza il primo 1 (bit nascosto), ed 11 bit per l' esponente espresso come intero binario nella forma con bias 1023. Inoltre, due dei possibili valori dell' esponente sono in realtà riservati per esprimere dei valori speciali risultanti da possibili operazioni aritmetiche mal definite come divisioni per zero o rapporti del tipo 0/0, nonché per rappresentare lo zero e un insieme di numeri "denormalizzati" per cui non vale la convenzione del bit nascosto. In dettaglio, per numeri a 32 bit la codifica è la seguente. Indichiamo con S, M ed E i campi di 1, 23 e 8 bit riservati alla codifica di segno (della mantissa), mantissa ed esponente. Il cam-po "esponente", E, dei floating assume valori tra 0 e 255. I valori di E da 1 a 254 per-mettono di esprimere numeri normalizzati in cui il primo bit (nascosto, cioè non rap-presentato esplicitamente) della mantissa è 1 (a sinistra del punto) e gli esponenti vanno da -126 a +127. In altre parole, il valore del numero rappresentato da S,M ed E sarà (-1)S 1.M 2E-127 . Percio' il più piccolo numero normalizzato è 1.000...000 2 -126 che corrisponde approssimativamente a 10 -37 , mentre il più grande ( 1.111...111 2 +127 ) corrisponde a circa 10 +38 . Se il campo E è zero e M è zero, si ha lo zero, di cui esiste un valore positivo ed uno negativo a seconda del valore di S (0 o 1). Zero posi-tivo e zero negativo devono essere trattati dai linguaggi di programmazione come perfettamente equivalenti. Se il campo E e' zero mentre M è non nullo si tratta di nu-meri in cui la mantissa va interpretata come 0.M e la potenza di 2 come -126. Questi numeri "denormalizzati" permettono di rappresentare valori compresi tra circa 10-

45 e 10-37 al prezzo di un crescente perdita di precisione (diminuzione delle cifre si-gnificative) man mano che ci si avvicina allo zero. Se il campo E è 255 e M è 0 si considera il valore come segnale di un "overflow" ed il valore viene indicato come + o - infinito a seconda del segno. Infine, se il campo E è 255 ed M è non nullo, si attri-buisce a tale sequenza il valore NaN ( Not a Number ) che solitamente sta a segnala-re il risultato di operazioni aritmetiche non definite come per esempio il calcolo del rapporto 0/0. In modo analogo per floating a 64. In questo caso il campo esponente e' di 11 bit (e la rappresentazione è mediante interi con bias 1023) mentre quello mantissa diviene di 52 bit (con in più il bit nascosto per i numeri normalizzati). Da

Page 27: Dal problema all'Algoritmo

notare che i valori speciali NaN ( o nan ) e +/- infinito dello standard IEEE non sono intesi come elementi dell' insieme dei numeri reali ma come valori speciali da utiliz-zare nella programmazione per avviare eventuali procedure di manipolazione delle condizioni di errore. Talvolta un compilatore può generare automaticamente codice di gestione delle condizioni di errore nascondendo al programmatore la possibilità di accedere ai valori speciali dello standard IEEE-754. Tuttavia, normalmente, esistono opzioni del compilatore che permettono di evitare la gestione automatica.

Numeri con segno: Nella notazione decimale, i numeri negativi vengono espressi con il segno -. In una rappresentazione binaria questo potrebbe essere ottenuto trami-te un bit aggiuntivo che porti l'informazione sul segno (un bit può rappresentare due possibilità). Per esempio i numeri compresi tra -3 e 3 potrebbero essere rappresentati con tre bit (2 per il valore assoluto, uno per il segno) come segue:

-3 111-2 110-1 101-0 1000 0001 0012 0103 011

Tabella 3Questa rappresentazione ha tuttavia lo svantaggio di avere due diverse rappresenta-zioni per lo zero, sprecando quindi una possibile combinazione (si ricordi che con n bits è possibile rappresentare 2n possibili combinazioni). In pratica si utilizza una diversa codifica per i numeri interi con segno. In questa co-difica, chiamata complemento a due, il bit più significativo indica ancora il segno (1 per indicare numero negativo), ma i rimanenti bit non codificano direttamente il va-lore assoluto del numero. La seguente tabella indica la codifica in complemento a due dei numeri rappresentabili con 4 bits.

Page 28: Dal problema all'Algoritmo

-4 100-3 101-2 110-1 1110 0001 0012 0103 011Tabella 4

Formalmente, un numero espresso in complemento a due tramite la sequenza di cifre binarie (pari a 0 o a 1)

anan-1...a1a0

ha il seguente significato:

-an2n + an-12n-1 + ... + a121 + a020

Si osservi la differenza rispetto alla semplice codifica binaria in cui il termine più a sinistra appare col segno positivo. Con n bits si possono rappresentare in comple-mento a due i numeri compresi tra -2n-1 e 2n-1-1.

Una caratteristica molto utile dei numeri in complemento a due è data dalla possibili-tà di seguire operazioni di somma di numeri negativi e positivi. A tal scopo è suffi-ciente eseguire la somma con le stesse regole della somma in colonna, ricordando che in binario si ha:

Tabella 5. La somma Binaria

Page 29: Dal problema all'Algoritmo

Esempio: 0101+0010=0111 ;5 + 2 = 3

Nel caso si avesse un riporto al di fuori della cifra più significativa (più a sinistra) questi può essere ignorato, a patto che non si ottenga come risultato un numero che non può essere rappresentato con il numero di bits a disposizione. Tale condizione viene chiamata overflow.

Esempio: somma con 4 bits senza overflow

0101 + 5 +

1110 = -2 =

10011 3

In questo caso il risultato può essere rappresentato con 3 bitsEsempio: somma con 4 bits con overflow

0101 + 5+

0011 = 3 =

1000 -8 !!

In questo caso infatti il risultato corretto (8) non può essere rappresentato con 4 bits (che possono rappresentare i numeri compresi tra -8 e 7).

E' possibile determinare quando si ha una condizione di overflow verificando i riporti che si hanno dalla cifra più significativa e dalla cifra immediatamente precedente (a destra). Se non si ha nessun riporto a partire da queste due cifre, o si ha riporto in en-trambi i casi, non si ha overflow. Se invece si ha riporto in una sola delle due cifre si ha overflow. Esaminando l'esempio precedente senza overflow si può verificare che si è avuto riporto in entrambe le cifre, mentre nell'esempio con overflow si è avuto un solo riporto a partire dalla cifra immediatamente precedente la più significativa.

E' possibile invertire il segno di un numero in complemento a due invertendo tutti i bits (da 0 ad 1 e viceversa) e sommando 1. In questo modo è possibile eseguire ope-razioni di sottrazione con la stessa circuiteria logica necessaria per eseguire le som-me: basta invertire il segno del termine da sottrarre e quindi eseguire un'operazione di somma.

Page 30: Dal problema all'Algoritmo

In tutti i calcolatori attuali i numeri interi vengono rappresentati in complemento a due. Dimensioni tipiche sono le seguenti:

byte (8 bits), può rappresentare i numeri compresi tra -128 e 127 word (16 bits), può rappresentare i numeri compresi tra -32768 e 32767 longword (32 bits), può rappresentare i numeri compresi tra -2.147.483.648 e

2.147.483.647

Rappresentazione di caratteri

I caratteri ASCII (American Standard Code for Information Interchange). La codifi-ca ASCII associa ad ogni carattere una particolare sequenza di 0 ed 1 in un byte. Esi-stono varie versioni dei caratteri ASCII. Le due più importanti sono la tabella ASCII standard che usa solo 7 bits che serve solo per i caratteri inglesi e la tabella ASCII estesa (ISO-Latin-8859) che usa tutti gli 8 bits e che può rappresentare i caratteri di tutte le lingue occidentali. La maggior parte dei programmi di elaborazione di testo in circolazione utilizza questo tipo di codifica. Potete vedere una tabella dei caratteri ASCII di seguito.

Tabella 6 ASCII

Page 31: Dal problema all'Algoritmo

Caratteri Unicode. Esiste uno standard di codifica più ampio, denominato Unicode, che impiega 2 bytes per ogni carattere ed è in grado di codificare i caratteri di tutte le lingue conosciute. Questo standard tuttavia non si è ancora diffuso.

I caratteri in verde nella tabella ASCII sono una particolare estensione dovuta a Microsoft. Il codice relativo ad un certo carattere si ricava sommando il valore in or-dinata a quello in ascissa, per esempio per il carattere 40+E=4E abbiamo , risulta-to espresso in esadecimale. è veramente facile convertire i numeri esadecimali in bi-nario. Basta sostituire ad ogni cifra decimale il corrispondente gruppo di 4 cifre bina-rie dedotto dalla tabella 7.

Esadecimale Binario

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

A 1010

B 1011

C 1100

D 1101

E 1110

F 1111

Tabella 7

Page 32: Dal problema all'Algoritmo

Quindi l'espressione binaria del numero esadecimale 4E, che rappresenta il codice ASCII del carattere e, sarà 01001110. La codifica ASCII è l'ingrediente essenziale di qualsiasi testo. è tuttavia opportuno distinguere i testi scritti in semplice ASCII dagli altri. I testi scritti in ASCII non sono altro che una sequenza di byte ognuno dei quali rappresenta un simbolo alfanu-merico secondo la tabella ASCII che abbiamo appena visto. Questo tipo di testo vie-ne prodotto su di un PC ed eventualmente modificato con i cosiddetti editori di testo. Alcuni esempi di editori di testo sono Edit nel sistema DOS, Notepad nel sistema Windows (Notepad è sempre disponibile in Windows, lo potete cercare nel menu av-vio, programmi, accessori), Vi, Pico, Emacs nel sistema Linux; ve ne sono tantissimi altri. Sapete tuttavia che esistono molti altri programmi per la produzione di testi che sono comunemente noti come elaboratori di testo o word processor. Questi usano come ingrediente base il codice ASCII ma in realtà usano anche altre codifiche che servono a manipolare i testi e ad arricchirli esteticamente, cosa impossibile con i soli caratteri ASCII. Se per esempio scrivete un testo e lo salvate in un file con uno dei vari programmi Word disponibili, in quel file non vengono memorizzati solo i carat-teri ASCII corrispondenti alle varie lettere e numeri che voi avete scritto bensì tante altre informazioni che descrivono il tipo di cartteri usati (si chiamano font: Courier, Time Roman, Helvetica e via dicendo), la loro dimensione, effetti speciali quali gras-setto, corsivo, sottolineato e così via, modo in cui si presentano i paragrafi (rientro iniziale, spazio fra un paragrafo e l'altro ...), interlinea ed una miriade di altre possibi-li caratteristiche. Tutte queste informazioni che vanno oltre alla mera rappresentazio-ne dei caratteri ASCII (che producono gli editori di testo) va sotto il nome di format-tazione. Per inciso, questa formattazione non c'entra nulla con la formattazione che concerne lo schema di logico di suddivisione della superficie di un disco magnetico, è evidente che due file contenenti lo stesso identico testo, uno scritto con un editore di testo in caratteri ASCII semplici e l'altro scritto con un word processor (e quindi ``formattato''), hanno dimensioni molto diverse. Chiunque può sperimentare che scrivendo un testo semplicissimo, pippo tanto per cambiare, prima con un editore di testo e poi con un word processor: Si nota che il file con i caratteri ASCII sarà fatto di 5 byte (corripondenti ai 5 caratteri della parola ``pippo'') mentre quello formattato sarà lungo circa 20000 byte!

Il testo pippo scritto in ASCII è

70 69 70 70 6f pippo

Essere coscienti di cosa si impiega per scrivere un testo è utile in funzione di quello che si vuole fare in seguito. La formattazione di un testo può essere estremamente utile per metterne in debito rilievo alcune parti ma a volte ci interessa esclusivamente il suo contenuto. In questo secondo caso l'abitudine di scrivere sempre tutto in modo

Page 33: Dal problema all'Algoritmo

formattato può condurre ad un'esagerata occupazione dello spazio su disco dove ven-gono memorizzati i file che contengono i testi. Oppure nel caso in cui i testi debbano essere trasmessi attraverso la rete si può causare un inutile sovraccarico della medesi-ma. In questo senso è una cattiva abitudine quella di allegare qualsiasi cosa in modo formattato ai messaggi di posta elettronica anziché scrivere semplicemente il testo dentro al programma di posta elettronica: spedire pippo in ASCII anziché in modo formattato è 20000/5=4000 volte più veloce!

Questo tipo di riguardo nell'uso della rete prende il nome di netiquette. è un concetto che concerne la coscienza che si sta usando uno strumento che serve a tutti e che un uso accorto lo può rendere più efficiente per tutti, quindi alla fine anche per se stessi(ne parleremo avanti ).

Rappresentazione dei segnali audio

La rappresentazione dei segnali audio richiede due passi: il campionamento dei se-gnali e la quantizzazione.

o Campionamento. Il campionamento consiste nella estrazione di un insie-me di campioni da un segnale continuo. Usualmente i campioni sono equispaziati nel tempo ma non è una condizione necessaria. Esiste un teo-rema, dovuto a Nyquist, che stabilisce la frequenza minima alla quale bi-sogna campionare un segnale per essere sicuri di non perdere informazio-ne. Questo teorema si rifà alla descrizione di un segnale in termini delle frequenze che lo compongono. Una comprensione completa di questo concetto richiederebbe la nozione di trasformata di Fourier. Ci limitiamo qui a dire che in virtù della teoria di Fourier, qualsiasi segnale è scompo-nibile in una varietà di componenti che sono delle semplici oscillazioni costanti, ognuna caratterizzata da una ben precisa frequenza di oscillazio-ne. Nella realtà i segnali sono sempre caratterizzati da una frequenza mas-sima. Il teorema di Nyquist dice che la frequenza minima alla quale un se-gnale deve essere campionato per non perdere informazione è pari al dop-pio della massima frequenza presente nel segnale.

o Quantizzazione. Ogni valore campionato deve essere trasformato in un numero digitale. Questo è un processo che prende il nome di conversione analogico-digitale ed è svolto da un componente che prende il nome di ADC (Analog to Digital Converter).

Page 34: Dal problema all'Algoritmo

Rappresentazione delle immagini

Con l'estensione dell'utilizzo delle applicazioni multimediali nei Personal Computers, diventa sempre più diffuso l'utilizzo delle immagini, statiche ed in movimento nei calcolatori. Memorizzare un'immagine in formato binario richiede la "discretizzazio-ne" dell'immagine in un certo numero di componenti, detti pixels, corrispondenti ai singoli punti sullo schermo quando l'immagine venga visualizzata su video. Risolu-zioni tipiche degli schermi (pixels per riga x pixels per colonna) sono 640x480, 800-x600, 1024x864, 1152x864, 1280x1024. Se si tiene conto che è necessario associare un colore ad ogni pixel richiedendo uno o due bytes (definendo rispettivamente 256 e 65536 toni di colore), ci si può rendere facilmente conto della quantità di memoria necessaria per immagazzinare le immagini. Per questo motivo le immagini non ven-gono normalmente immagazzinate come una semplice sequenza di colori associati ad ogni pixel, ma vengono utilizzati dei formati che consentano una compressione, ovvero una riduzione della memoria richiesta per le immagini. I due formati utilizzati più frequentemente sono il formato gif ed il formato jpeg. Nel formato gif viene ese-guita una compressione, tuttavia è possibile ricostruire esattamente l'immagine di partenza. Gli algoritmi di compressione si basano di norma sull'osservazione che non è necessario memorizzare una sequenza di bits tutti uguali, ma è sufficiente, ad esem-pio, memorizzare il numero di tali bits nella sequenza. Nel formato jpeg, invece, ven-gono memorizzati i coefficienti della trasformata bidimensionale di Fourier dell'im-magine. Di conseguenza, a fronte di una maggiore compressione operabile, non è possibile ricostruire la stessa sequenza originaria di pixels. La qualità dell'immagine risulta tuttavia perfettamente accettabile all'occhio umano. Riportiamo le sigle di al-cuni dei più diffusi formati

TIFF Tagged Image File Format

GIF Graphics Iterchange Format (Formato concepito per l'invio di immagini in rete)

JPEG Joint Photographers Experts Group (Per immagini fotografiche)

BMP Bitmap (formato tipico di Windows)

PCX PC Paintbrush (formato di questo popolare programma Windows)

PICT Formato Macintosh (anche vettoriale)

Tabella 8

Page 35: Dal problema all'Algoritmo

Oltre alle immagini statiche, e' possibile immagazzinare sequenze di immagini, ovve-ro filmati. Un formato molto utilizzato per memorizzare sequenze di immagini è il formato mpeg, che rappresenta un'estensione del formato jpeg. In mpeg, la compres-sione viene eseguita andando a memorizzare non la semplice sequenza di immagini, ma soltanto le differenze tra l'immagine (frame) corrente ed il frame precedente. Come il formato DVD che consente di immagazzinare interi films compresa la co-lonna sonora.

Rappresentazioni ipertestuali

Il successo e la diffusione di Internet è la conseguenza della diffusione di strumenti informatici (browsers) che consentono di visualizzare non solo testi ed immagini, ma anche formati più complessi e che consentano la "navigazione", ovvero il collega-mento ad altre pagine di informazione attraverso un semplice click del mouse. Utiliz-zando un browser per visualizzare un testo si può osservare che non solo vengono vi-sualizzate le singole lettere e parole del testo, ma il testo stesso è anche formattato. Ad esempio, si può osservare che i titoli utilizzano un font più grande, alcune parole sono sottolineate, sono definite alcune tabelle, etc. Tutto ciò richiede un'informazione aggiuntiva rispetto alla codifica ASCII del semplice testo, e viene ottenuto inserendo delle parole chiave (tags), normalmente racchiuse tra parentesi angolari. I tags ven-gono riconosciuti dal browser che provvederà a rimuoverli dal testo, ed ad utilizzarli per una corretta formattazione. Tale codifica prende il nome di HTML (Hyper Text Markup Language) ed è normalmente utilizzata per la visualizzazione di pagine Web. Ad esempio, se si sta usando Internet Explorer e si prova a selezionare la voce visualizza->HTML , si potrà visualizzare il sorgente HTML, ovvero il formato origi-nale del testo fornito dal Web server al browser. Tra i vari tags definiti in HTML, il tag <A> viene definito per specificare un link. A tale tag sarà associata l'informazio-ne che specifica l'indirizzo della nuova pagina Web cui il browser si collegherà quan-do verrà fatto click sull'elemento corrispondente. Gli indirizzi Web sono specificati come URL (Uniform Resource Location) e specificheranno il tipo di protocollo, l'in-dirizzo IP del Web server e l'indicazione (opzionale) del file da accedere. Ad esem-pio l'URL http:://www.uniroma2.it/didattica specifica la locazione:

la prima parte (http::) specifica il protocollo di comunicazione http (a sua volta basa-to su TCP/IP, il protocollo di internet), la seconda parte indica l'indirizzo http:://www.uniroma2.it/didattica del server Web, e l'ultima parte didattica/.. specifi-ca la directory ed il file contenenti il testo HTML. In maniera analoga vengono speci-ficate le immagini inserite nel testo, tramite il tag <img> e specificando l'URL del file contenente l'immagine (normalmente in formato gif o jpeg).

Page 36: Dal problema all'Algoritmo

Oltre a testi, links ed immagini possono essere inserite funzioni più sofisticate all'in-terno di una pagina Web. Ad esempio è possibile far eseguire al browser un applet, ovvero un programma Java eseguito dal browser, la cui uscita grafica viene inserita nella pagina ed il cui codice viene fornito dal Web server. Questo approccio consente una completa flessibilità nella definizione delle funzioni della pagina Web.

Compressioni delle informazioni

Tecniche di compressione conservative

Con queste tecniche l'infomazione compressa viene recuperata in maniera completa senza alcuna forma di degradazione. Le più note sono la codifica RLE (Run Legth Encoding) che sfrutta le ripetizioni di bytes uguali, la codifica LZW (Lempel Ziv Welch) che impiega le ripetizioni di stringhe di caratteri uguali e la codifica di Huff-man che utilizza codici di rappresentazione piú brevi per i caratteri che appaiono piú frequentemente in un testo.I più popolari programmi di compressione quali WinZip utilizzano questo tipo di metodi.è evidente che il grado di compressione dipende dal contenuto dell'oggetto da com-primere. Se si tratta di un testo con molte ripetizioni il livello di compressione sarà maggiore. Per quanto riguarda le immagini, la presenza di larghe aree uniformi favo-risce la compressione.

Tecniche di compressione non conservative

Oggi vi è una grande necessità di elevate quantità di informazioni. Trasmettere in rete files molto grandi significa amplificare i tempi di trasmissione. Questo problema ha stimolato lo sviluppo di tecniche di compressione ancora più potenti che sfruttano il fatto di potere assumere che una parte delle informazioni siano irrilevanti per l'u-tente finale. Queste tecniche si chiamano non conservative perché non consentono un recupero completo delle informazioni originali. I segnali audio e le immagini sono esempi tipici di applicazione di tali metodi.

Il formato MP3La digitalizzazione dei segnali audio richiede l'impiego di una grande quantità di by-tes. Per esempio un segnale audio può essere campionato in 44100 campioni/secondo ove ogni campione richiede 2 bytes (16 bits) ed usualmente vi sono 2 canali per la ri-produzione stereo. Poiché lunghe sequenze si dati si trasformano in lunghi tempi di trasmissione sono molto importanti le tecniche di compressione. Nel mondo dei se-gnali audio è diventato molto importante lo standard di compressione MP3. Si tratta di uno standard che agisce in modo differenziato sulle varie componenti in frequenza tenendo conto della sensibilità dell'orecchio alle diverse frequenze e trascurando

Page 37: Dal problema all'Algoritmo

componenti di ampiezza minore quando esse sono contemporanee ad altre frequenze caratterizzate da ampiezza molto maggiore. Con il formato MP3 si ottengono fattori di compressione compresi fra 10 e 14. Si tratta di una tecnica di compressione non conservativa in quanto non rende una riproduzione perfetta del segnale.

Il formato JPEG Il formato JPEG è in realtá un formato di codifica delle immagini che include una so-fisticata architettura di compressione che si articola addirittura in 4 passi:

1. DCT (Discrete Cosine Transform). La DCT é una trasformazione mate-matica che fa capo ad una famosissima teoria di Fourier e che trasforma i segnali in una loro rappresentazione fatta di una moltitudine di compo-nenti ognuna delle quali caratterizzata da una precisa frequenza di oscilla-zione. Mediante tale trasformazione ci si sposta in quello che potremmo chiamare il mondo di Fourier dove diventa facile alterare (filtrare) infor-mazioni di tipo diverso: per esempio diventa facile eliminare ciò che varia molto velocemente e lasciare ciò che varia lentamente. Applicando questo metodo alla digitalizzazione (ottenuta per esempio mediante uno scanner) di una fotografia molto ingrandita nella quale si vede la grana della pelli-cola si può pensare di ripulire l'immagine dalla struttura dettagliata della grana. Questa operazione di filtraggio di certe componenti viene eseguito nel passo 3 successivo.

2. Compressione RLE (che abbiamo menzionato poco prima). 3. Quantizzazione. Con questo processo si filtrano le componenti ottenute

con la DCT applicata nel primo passo. 4. Infine viene applicato il metodo di Huffman.

Per il recupero dell'immagine originale i quattro passi vengono applicati in senso in-verso. Con il formato JPEG si possono arrivare a ridurre certe immagini anche di un fattore 50. Tuttavia é necessario verificare se il risultato é soddisfacente. Potete vedere qualche esempio.

Vediamo prima una fotografia a colori di un formato jpeg con un modesto fattore di compressione e quindi con un buon fattore di qualità.

Page 38: Dal problema all'Algoritmo

Figura 24 18,6 KbVediamo ora la stessa immagine con un fattore di compressione molto elevato.

Figura 25 2,86 KbLa seconda immagine richiede molto meno spazio rispetto alla prima, questo com-porta una notevole efficienza su Web ma una bassa qualità .

Page 39: Dal problema all'Algoritmo

CAPITOLO III Definizione di Algoritmo e Programma

Premessa

Con il termine algoritmo si intende la descrizione precisa di una sequenza finita di azioni, definite passo per passo, in modo tale da poter essere eseguite meccanica-mente e tali da produrre un determinato risultato.Da questa definizione si capisce che il concetto di algoritmo non è necessariamente legato al mondo dell’informatica o della matematica, ma può essere esteso anche ad altri contesti. Un semplice esempio è rappresentato dalla descrizione delle azioni ne-cessarie a preparare un caffè:

Algoritmo prepara Caffè1) Svita la caffettiera2) Riempi d’acqua il serbatoio della caffettiera3) Inserisci il filtro4) Riempi il filtro con la polvere del caffè5) Avvita la parte superiore della caffettiera6) Metti la caffettiera, così predisposta, su un fornello acceso.7) Spegni il fornello quando il caffè è pronto8) Versa il caffè nella tazzina

Da quanto descritto si evince che ogni giorno, anche se inconsapevolmente, tutti noi eseguiamo degli algoritmi e quello appena illustrato, è stato scritto in linguaggio na-turale in modo tale da poter essere interpretato da un essere umano. Sappiamo che un calcolatore elettronico, non usando il linguaggio naturale, non riu-scirebbe a comprendere l’algoritmo precedente così come è stato scritto. Per fare in modo che un algoritmo risulti comprensibile ad un calcolatore, bisognerà descriverlo tramite un programma.Un programma è la rappresentazione di un algoritmo utilizzando istruzioni e co-strutti propri dei linguaggi di programmazione.Il potere dell’algoritmo sta nel fatto che esso prescinde dal linguaggio di programma-zione che verrà usato. In tal modo, un generico algoritmo è buono per qualsiasi lin-guaggio.

Page 40: Dal problema all'Algoritmo

Formalismi di codifica

Dopo questa premessa sarà bene soffermarsi sugli strumenti che si hanno a disposi-zione per scrivere un algoritmo(e quindi un programma). Prima di tutto occorre affermare che un algoritmo può avere tra i suoi dati delle co-stanti, delle variabili, che possono essere di tipi differenti (caratteri, interi, reali, strin-ghe,ecc) e delle espressioni, derivate dalla composizione di variabili,costanti con il set di operazioni messo a disposizione.Le costanti sono rappresentazioni simboliche di un numero, stringa ecc. che non cambia nel corso del programma.Una variabile è un nome simbolico che indica una determinata cella di memoria. L’uso di variabili è comodo perché evita al programmatore di dover utilizzare diret-tamente gli indirizzi fisici della memoria. I nomi simbolici delle variabili verranno tradotti in indirizzi fisici direttamente dal compilatore.Come è stato già detto, un algoritmo può anche essere scritto in linguaggio naturale, questo però non è molto conveniente, soprattutto se si ha a che fare con la program-mazione informatica.Per ovviare a questo problema sono stati costruiti diversi formalismi di codifica, i principali, quelli che verranno presi in considerazione in questa sede sono i diagram-mi di flusso e la pseudocodifica.

Diagrammi di flusso

Sono una forma grafica di rappresentazione degli algoritmi. Si collocano tra il lin-guaggio matematico e quello naturale.Prima di entrare nello specifico dei diagrammi di flusso, è bene definire le istruzioni base come segue:

Assegna: Assegna ad una variabile (locazione di memoria) il valore di una espressio-neLeggi: Legge in input dall’esterno un valore che memorizza in una varabile (una lo-cazione di memoria)Scrivi: Scrive in output l’espressione o il valore di una variabile (locazione di memo-ria)Se…allora…altrimenti: Sulla base del valore di una espressione logica, modifica il “flusso” del programmaVai al passo…: Modifica il “flusso” di un programma incondizionatamente Fermati: Termina l’esecuzione di un programma

Page 41: Dal problema all'Algoritmo

Tutte le istruzioni verranno così codificate in una veste grafica che verrà ora illustra-ta:

Assegna :

Questa istruzione assegna alla variabile A il valore 5

Leggi/Scrivi:

Questa istruzione permette di leggere un valore da input ed inserirlo nella variabile B.

N.B.: Nel caso di scrittura, la forma geometrica non cambia, cambia soltanto il testoall’interno che ovviamente sarà “Scrivi B”

NO SISe…allora…altrimenti:

Questa istruzione permette di effettuare una scelta in base al valore dell’espressione logica all’interno del rombo. A seconda di questo valore, il flusso del programma verrà indirizzato su una o sull’altra parte, eseguendo istruzioni differenti.

Vai al passo…:

Si indica semplicemente con una freccia e permette di saltare incondizionatamente al blocco di istruzioni desiderate

Fermati:

Questa istruzione indica quando è finito un programma

I diagrammi di flusso sono costituiti da tre tipi diversi di strutture di istruzioni ed è stato dimostrato (teorema fondamentale della programmazione strutturata di Jacopini e Bohm) che ogni programma può essere codificato attenendosi esclusivamente a queste tre strutture fondamentali:

A=5A=5

Leggi B

C> 3

STOP!

Page 42: Dal problema all'Algoritmo

Struttura Sequenziale

In questa struttura le istruzioni vengono eseguite una dietro l’altra. Esempio:

Struttura Iterativa

NO

SI

A=5A=5

B=3B=3

C> 3

B=5B=5

A=5A=5

Riempi d’acqua il serbatoio della caffettieraRiempi d’acqua il serbatoio della caffettiera

Svita la caffettieraSvita la caffettiera

Inserisci il filtroInserisci il filtro

Riempi il filtro con la polvere del caffèRiempi il filtro con la polvere del caffè

Page 43: Dal problema all'Algoritmo

Permette di eseguire un ciclo (ovvero la ripetizione delle stesse operazioni più volte) condizionato dal valore di un’espressione. Esempio:

NO

SI

Struttura Condizionale

NO SI

Permette di intraprendere due strade differenti. La scelta è condizionata dal valore dell’espressione.Esempio:

NO SI

C> 3

E’ pronto

il caffè?

Avvita la parte superiore della caffettieraAvvita la parte superiore della caffettiera

Metti la caffettiera su un fornello accesoMetti la caffettiera su un fornello acceso

E’ pronto il caffè?

Versare il caffè nella tazzinaVersare il caffè nella tazzina Controllare più tardiControllare più tardi

Page 44: Dal problema all'Algoritmo

Come si sarà potuto notare, le tre strutture derivano direttamente dalla composizione delle istruzioni descritte in precedenza e possono essere componibili tra loro, ovvero le strutture iterative, ad esempio, possono contenere al loro interno altre strutture ite-rative o di altro tipo, come quella condizionale.

Come esempio di diagramma di flusso, viene presentato quello riferito a calcolo della media di 5 numeri.

Grafico 0.2

Page 45: Dal problema all'Algoritmo

Pseudocodifica

L’altro formalismo è la pseudocodifica. Questo formalismo ha la particolarità di es-sere molto legato al linguaggio naturale e permette, ad un programma scritto in pseu-docodifica, di essere tradotto facilmente in un qualsiasi linguaggio di programmazio-ne.Anche la pseudocodifica, come i diagrammi di flusso, è basata sulle tre strutture so-praccitate.

Struttura sequenziale

INIZIOIstruzione 1Istruzione 2..Istruzione nFINE

Esempio

INIZIO Svita la caffettiera Riempi d’acqua il serbatoio della caffettiera Inserisci il filtro . . .FINE

Page 46: Dal problema all'Algoritmo

Struttura Iterativa

RIPETI <corpo dell’iterazione>FINCHE’ <condizione>

Esempio

RIPETI <Controlla se è pronto il caffè>FINCHE’ <non è uscito tutto dal serbatoio della caffettiera>

Struttura CondizionaleSE <condizione> ALLORA <set di istruzioni A> ALTRIMENTI <set di istruzioni B>

Esempio

SE <è pronto il caffè> ALLORA <Versalo nella tazzina> ALTRIMENTI <Attendi che esca >

Come per i diagrammi di flusso, verrà ora presentato il medesimo esempio generico sulla media di 5 numeri in pseudocodifica

INIZIO Poni s=0 Poni n=0 RIPETI Leggi a Poni n=n+1 Poni s=s+a FINCHE’ (n<5) Poni m=s/5 Scrivi mFINE

Page 47: Dal problema all'Algoritmo

CAPITOLO IV Hardware e Software

Premessa

Componenti fondamentali di ogni computer sono l’hardware e il software.

L’hardware è composto dalla componentistica visibile a occhio nudo (hard disk, mouse, ecc.).

Il software è la parte "intelligente" del computer. E' un insieme di programmi che in-dicano alle parti meccaniche le operazioni da eseguire.

Hardware

Il modo migliore per capire l’hardware è descrivere i vari componenti. Nel farlo, ver-rà preso in considerazione il più comune dei computer, il PC.

Microprocessore (Unità Centrale)

L'unità centrale dell'elaboratore (microprocessore) è costituita da sottili piastrine di silicio su ciascuna delle quali vengono creati più collegamenti semplici che realizza-no dei circuiti complessi.

L'insieme di queste piastrine ha la capacità di contenere centinaia di migliaia di infor-mazioni nello spazio di pochi centimetri quadrati.

Figura 26-Processori

Page 48: Dal problema all'Algoritmo

Figura 28-Memoria RAM

Velocità elaborativa

La velocità elaborativa di un processore è determinata dagli impulsi di un clock, e viene misurata in hertz. L’ hertz è l’unità di misura della frequenza, l’inverso del tempo. La velocità di calcolo di un processore è quindi determinata dalla frequenza (hertz) di impulsi al secondo.

La memoria principale (RAM)

La memoria principale dell'elaboratore è costituita da circuiti integrati che hanno una capacità che facilmente supera parecchi milioni di "byte". Il "byte", è la quantità di memoria necessaria a contenere un carattere sia esso alfanumerico che speciale. Tale memoria prende il nome di RAM (Random Access Memory), cioè memoria ad ac-cesso casuale. Durante il funzionamento del computer, le istruzioni e le informazioni elaborate vengono conservate nella RAM e scambiate con il processore. Questa è una memoria volatile, cioè funzionante fino a che è alimentata elettricamente, pertanto i dati che essa riceve verranno perduti allo spegnimento del sistema. La memoria RAM ha la funzione di servire al processore come supporto per contenere dati che momentaneamente non occorrono al processore stesso, e a restituirli quando necessi-tano nuovamente. Questa funzione di “appoggio” detta paginazione permette al pro-cessore di svolgere queste operazioni alla velocità di nanosecondi (miliardesimi di secondi), mentre se non avesse o non fosse sufficiente questo supporto dovrebbe uti-lizzare la memoria magnetica dell’hard disk la cui velocità di accesso è più lenta. Ciò rende comprensibile la funzione determinante della RAM nelle prestazioni di un computer, è senza dubbio meglio avere un medio processore e una RAM capace che un processore velocissimo con scarsa RAM. E’ importante quindi nella scelta di un computer bilanciare in modo corretto potenza elaborativa e RAM ed in ogni caso è meglio privilegiare quest’ultima.

Page 49: Dal problema all'Algoritmo

La microprogrammazione

La microprogrammazione è la tecnica con cui ogni istruzione di macchina di un ela-boratore elettronico viene realizzata con una sequenza di operazioni sub-elementari governate da programmi memorizzati su una apposita memoria. Queste operazioni sub-elementari si dicono più propriamente microoperazioni. I vari programmi sono memorizzati su una micromemoria che in genere è solo in lettura e che prende il nome di ROM (Read Only Memory), cioè memoria di sola lettura. Tale memoria ha la caratteristica di essere conservativa in quanto le informazioni in essa contenute non vengono cancellate allo spegnimento dell'elaboratore. All'accensione del sistema è questa memoria che attiva automaticamente l'elaboratore e lo rende disponibile al-l'utilizzatore.

Le unità periferiche

Le unità periferiche sono apparecchiature collegate all'elaboratore, alcune di esse sono normalmente contenute nel rack (lettore di floppy, hard disk, lettore di CD-Rom, masterizzatore, modem) mentre altre sono collegate ad esso ma sono esterne al rack (stampante, video, scanner, modem, tastiera, casse acustiche, cuffie, microfono, ecc.).

Monitor (Video)

E' il dispositivo che permette di vedere le operazioni che il sistema ha effettuato. Vi-sualizza i messaggi che vengono generati per richiedere interventi da parte dell'utente e i risultati delle operazioni che sono state richieste. Mostra i caratteri che sono stati digitati sulla tastiera. Il video oggigiorno è ormai solo a colori, ed può avere varie di-mensioni, queste dimensioni si indicano in pollici. Importante , nella scelta del video, è la risoluzione, ovvero il numero di “pixel” per pollice, cioè di celle che costituisco-no l’area dello schermo. Maggiore è il numero dei pixel per pollice, migliore sarà la definizione delle immagini rappresentate sullo schermo. Questo fattore, unito alla proprietà di refresh (ovvero il numero di fotogrammi al secondo) determina il costo dell’apparecchiatura. Attualmente i video hanno frequenze di refresh pari a 56,60,72 e 80 hertz. A frequenze più elevate corrisponde una maggiore fluidità di movimento. Questo valore non dipende dal monitor, bensì dalla scheda video, quindi il video deve solo essere in grado di supportare il carico di lavoro imposto dalla scheda video. Le principali tecnologie con cui sono realizzati i monitor sono:

Page 50: Dal problema all'Algoritmo

Tubo a raggi catodici

L'immagine viene prodotta sulla superficie interna del tubo da uno o più fasci elettro-nici che colpiscono il rivestimento costituito da una superficie fosforescente. La scansione avviene velocemente, abbastanza velocemente da dare l'impressione che si tratti di una immagine fissa. Ogni pixel di un monitor CRT è in realtà costituito da tre minuscoli punti di materiale fosforescente che non è possibile vedere individualmen-te ad occhio nudo. Si tratta dei tre fosfori (niente a che fare con l'elemento chimico fosforo), uno rosso (red, R), uno verde (green, G) e uno blu (blue, B). I tre cannoni elettronici (rispettivamente per il rosso, verde e blu) emettono tre fasci di elettroni che spazzano progressivamente l'intero raster. Quando i tre fasci colpiscono un pixel, un particolare meccanismo magnetico-meccanico con l'uso di una maschera forata (shadow mask) fa in modo che il primo fascio colpisca il fosforo R, il secondo colpi-sca il fosforo G e il terzo quello B. I fosfori sono sistemati in terne circolari (Preci-sion InLine) o in striscie verticali (Trinitron). I tre fosfori del pixel vengono eccitati dai tre fasci di elettroni che li rendono fosforescenti (l'aggettivo "fosforescente" si-gnifica letteralmente, "produttore di luce"). I fosfori sono molto vicini per cui è im-possibile distinguerli a occhio nudo, e la mescolanza dei loro colori avviene, in effet-ti, nell'occhio dell'osservatore (tecnicamente si tratta del processo di sintesi additiva spaziale).

Cristalli liquidi

La tecnologia CRT è sostituita dalla tecnologia dei cristalli liquidi (LCD, liquid cri-stal display). I cristalli liquidi sono composti organici che possono avere sia le pro-prietà dei liquidi sia le proprietà dei cristalli: come i liquidi possono essere versati ma come i cristalli mantengono una struttura molecolare ordinata. I monitor a cristal-li liquidi hanno numerosi vantaggi: alta risoluzione, uniformità nello spazio e nel tempo (perché ogni singolo pixel può essere indirizzato separatamente e non viene influenzato dai pixel adiacenti). Inoltre sono sottili (1-2 centimetri) e leggeri, necessi-tano di una potenza elettrica molto bassa, non espongono l'utente ai pericoli dei raggi catodici. Presentano tuttavia anche alcuni difetti: una risoluzione temporale molto bassa (problemi con le immagini dinamiche); bassa luminanza e basso contrasto cro-matico; gamut di colore ridotto rispetto ai monitor CRT (soprattutto a causa del pri-mario blu). I principali tipi di monitor a cristalli liquidi sono a matrice passiva:

TN, twisted nematic;

STN, supertwisted nematic;

Page 51: Dal problema all'Algoritmo

DSTN, dual scan twisted nematic;

CSTN, color twisted nematic;

HPD, hybrid passive display;

a matrice attiva:

TFT, thin film transistor.

Il monitor a matrice attiva (TFT, thin film transistor) è il più moderno. In questo mo-nitor l'indirizzamento di ogni singolo pixel avviene tutto alle spalle del display stesso e i pixel sono attivati da un apposito transistor. Quindi non è più necessario porre da-vanti al video una serie di elettrodi: è sufficiente la presenza di una unica lastra tra-sparente con funzioni di "terra". Il contrasto è quattro volte maggiore rispetto agli STN e l'angolo di visuale è più ampio.

Plasma

La tecnologia al plasma si basa sulla luce fluorescente. In ogni cella del display si trova il gas, normalmente una miscela di Neon e Xenon, che in un campo elettrico modifica le proprie caratteristiche. Applicando una tensione il gas ionizza e diventa un plasma che cede luce ultravioletta non visibile. La parte esterna del pannello è ri-coperta con fosfori RGB che rendono visibile la luce. Tre celle adiacenti costituisco-no un pixel. Un clock di 30 kHz è sufficiente a visualizzare una immagine senza sfar-fallio. Questa caratteristica ha tuttavia effetto anche sulla visualizzazione di immagi-ni mobili. Mentre un colore viene già acceso, l'altro non è ancora illuminato. Per mi-nimizzare questo problema i diversi costruttori utilizzano metodi diversi.

Figura 27 - Video

Page 52: Dal problema all'Algoritmo

Unità di lettura floppy disk

E' un dispositivo che generalmente trova posto nel rack da cui è costituito il compu-ter ed è composto da un piatto ruotante ed una testina che permette la lettura/scrittura su un supporto magnetico chiamato floppy o minidisco .Sono state prodotte delle unità di lettura/scrittura ad alta densità che possono utilizzare i normali floppy da 1,44 Mb ma possono accogliere e registrare anche floppy speciali da 100Mb. Queste unità hanno quindi una doppia funzione.

Figura 28-Unita lettura Floppy

Floppy Disk (minidisco)

E' una supporto magnetico su cui è possibile sia la scrittura che la lettura dei dati che sono stati registrati. Si compone di un leggero disco di materiale plastico ricoperto da una leggera superficie magnetica contenuto in un involucro di plastica rigida con una apertura rettangolare sul lato superiore e due fessure contrapposte sul lato inferiore. L'apertura superiore, protetta da una copertura metallica mobile permette l'inserimen-to della testina di lettura/scrittura. Le due fessure inferiori permettono rispettivamen-te, quella destra il riconoscimento da parte dell'elaboratore il tipo di disco inserito (di capacità 0,720Mb o 1,44Mb), quella sinistra se è chiusa permette solo la lettura dei dati, se è aperta ne permette anche la registrazione. Consta di 90 tracce registrabili concentriche di cui la prima verso il centro contiene l'indirizzario dei file contenuti sul floppy. Come indicato nel paragrafo precedente sulle unità di lettura floppy, sono in commercio supporti speciali di capacità 100Mb atti al trasporto ed alla conserva-zione di notevoli quantità di dati.

Page 53: Dal problema all'Algoritmo

Hard Disk (disco fisso)

Il disco fisso è l'unità magnetica su cui risiede il sistema operativo, i dati, i program-mi per la videoscrittura, in sostanza tutto il "software" utilizzato per le elaborazioni. E' una unità magnetica che ha generalmente grande capacità di memorizzazione, i più utilizzati variano attualmente da 40G a 300Gb, ha un'alta velocità di lettura/scrittura e tempo di accesso al dato di circa 10 ms a seconda del modello e della marca e per hard disk ad alte prestazioni (15000 giri) può arrivare a 3/4 ms.

Le caratteristiche principali di un hard disk sono:

capacità tempo di accesso velocità di trasferimento

Capacità

E’ espressa in gigabyte (Gb). Gli hard disk in commercio generalmente hanno una capacità compresa tra 40Gb e 300Gb.

Tempo di accesso

E’ il tempo medio necessario affinché un dato posto in una parte a caso dell’hard disk , possa essere reperito. Il tempo di accesso tipico per un hard disk consumer è attorno ai 10 ms e per hard disk ad alte prestazioni (15000 giri) può arrivare a 3/4 ms.

Velocità di trasferimento

E’ la quantità di dati che l’hard disk è teoricamente in grado di leggere o scrivere sul disco in un determinato tempo.

Oltre alle 3 caratteristiche sopraccitate esisto altri due fattori che condizionano le prestazioni dell’hard disk e sono il buffer e la velocità dell’interfaccia.

Buffer

E’ una piccola memoria cache (in genere di alcuni megabyte) posta a bordo dell'hard disk. Ha il compito di memorizzare gli ultimi dati letti o scritti dal disco. Nel caso che un programma legga ripetutamente le stesse informazioni, queste possono essere

Page 54: Dal problema all'Algoritmo

reperite nel buffer invece che sul disco. Essendo il buffer un componente elettronico piuttosto che meccanico, la velocità di trasferimento è molto maggiore.

Interfaccia

E’ il collegamento tra l'hard disk e la scheda madre (o, più specificatamente, il con-trollore) può influenzare le prestazioni perché specifica la velocità massima alla qua-le le informazioni possono essere trasferite da o per l'hard disk. Le moderne interfac-ce tipo ATA133, Serial ATA o SCSI possono trasferire centinaia di megabyte per se-condo, molto più di quanto qualunque singolo hard disk possa fare, e quindi l'inter-faccia non è in genere un fattore limitante. Il discorso può cambiare nell'utilizzo di più dischi in configurazione RAID, nel qual caso è importante utilizzare l'interfaccia più veloce possibile, come per esempio la Fibre channel da 2 Gb/s.

Figura 29-Disco fisso Hard disk

Tastiera (keyboard)

La tastiera è il mezzo per comunicare con l'elaboratore. Oltre ai normali tasti per scri-vere contiene una serie di tasti "funzione" (F1,...,F12) che permettono di eseguire funzioni specifiche che generalmente sono inserite nei prodotti realizzati per la vi-deoscrittura, basi dati ecc.

Vi sono inoltre tasti per la cancellazione (Canc), per lo spostamento in alto , in bas-so , a destra e a sinistra .

Page 55: Dal problema all'Algoritmo

Ed ancora tasti Pag , Pag , Ins, Fine (o End), che vengono utilizzati insieme ad al-tri tasti per permettere o funzioni particolari o la digitazione di comandi in assenza o in caso di guasto del mouse

Alcune tastiere, attualmente le più utilizzate, hanno sul lato destro una tastierina nu-merica che, in alcuni prodotti, viene utilizzata per l’inserimento di dati numerici e fa-cilita quindi l'utilizzo dei numeri somigliando alla tastiera di una calcolatrice.

Per facilitare la posizione ergonomica sono in commercio tastiere con "design" parti-colari studiati appositamente per evitare l'affaticamento sia delle mani che dell'avam-braccio obbligando l'utilizzatore ad assumere un posizione corretta. Alcuni modelli hanno inserite nella struttura le casse acustiche ed alcune il mouse a sensori.

Figura 30- Tastiera

Mouse

E' un dispositivo di puntamento che consente, premendo uno dei tasti di cui è dotato (generalmente il sinistro) di selezionare un dato, attivare un comando, aprire o chiu-dere una finestra relativa ad un programma che utilizza elementi grafici (ad es. Word o Excel). Per esigenze personali è possibile modificare la funzionalità dei tasti. Ci sono mouse che hanno tre tasti, tre tasti e un pulsante, alcuni sono incorporati nella tastiera e funzionano con il solo sfregamento di un dito su una superficie piana ed an-cora altri la cui sofisticata struttura permette di soddisfare qualsiasi esigenza. Attual-mente è stato aggiunto lo skroll, una rotella nella parte anteriore che facilita l’intera-zione con i fogli di lavoro tipo word excel, ecc.

Page 56: Dal problema all'Algoritmo

Esistono 3 principali tipologie di collegamento ovvero: seriale, PS2, USB

Figura 31-Mouse

Stampante (printer)

La stampante è la periferica di output che trasferisce su carta le informazioni digitali contenute in un computer. L'operazione comporta perdita di informazioni, in quanto dato un testo o un'immagi-ne stampati è pressoché impossibile ricostruire perfettamente il file originale con il processo inverso, ovvero la scansione o il riconoscimento ottico dei caratteri OCR(Optical Character Recognition). I parametri che caratterizzano una qualunque stampante sono essenzialmente:

Interfaccia: il tipo di collegamento al computer, che può essere una porta parallela, seriale, USB ad infrarossi, bluetooth ecc.

Formato carta: la dimensione, lo spessore, il tipo di supporti di stampa che la stam-pante è in grado di accettare (carta, buste ecc). Il più diffuso è il formato A4, ma al-cuni modelli usano formati minori, in genere per le foto, oppure formati superiori, A3, A2 ecc., fino ai rotoli da 92cm.

Numero di colori primari: ovvero quanti inchiostri sono utilizzati e quindi quanti co-lori può riprodurre la stampante; le monocromatiche impiegano un solo colore, di so-lito il nero. Le tricromatiche usano giallo, ciano e magenta per produrre i colori per sintesi sottrattiva, compreso il nero. Le quadricromatiche hanno i tre colori base già detti più il nero, utilizzato per le stampe bianco e nero e per comporre colori scuri più verosimili. Le esacromatiche hanno in più due tinte chiare di ciano e magenta, per rendere meglio le mezzetinte. Risoluzione massima: il numero di punti stampabili sulla carta per unità di lunghezza, che può differire tra il senso orizzontale e vertica-le. Di solito si esprime in punti per pollice lineare, "dot per inch" (DPI). La densità di pixel dell'immagine non corrisponde necessariamente alla densità dei punti di stam-

Page 57: Dal problema all'Algoritmo

pa, poiché a ciascun pixel possono corrispondere diversi punti di colore diverso af-fiancati. Per ragioni di marketing viene spesso indicata la densità di questi ultimi, che è più alta. Velocità: il numero di pagine (normalmente A4) che può essere prodotta per unità di tempo, di solito espressa in pagine al minuto. Questo parametro differi-sce molto a seconda che si stampi un testo bianco e nero oppure una fotografia, ed anche in funzione della qualità e risoluzione impostate. Tempo per la prima stampa: il tempo che intercorre tra l'invio dei dati e l'avvio della prima stampa. È un valore poco considerato ma che può arrivare a molte decine di secondi. Costo per copia stampata: quando si ha un uso intensivo della macchina, più importante del costo di acquisto è il costo di gestione, dovuto a inchiostri o toner, tamburi, testine, elettricità e quanto altro è necessario per stampare un singolo foglio. Esistono diversi tipi di stampanti che differiscono principalmente per la tecnologia utilizzata.

Stampante ad Aghi

Una serie di aghi (da 7 a 24 o più) mossi da elettromagneti battono sulla carta attra-verso un nastro inchiostrato mentre si spostano lateralmente sul foglio. La sequenza dei colpi è generata da un circuito elettronico per comporre i pixel che costituiscono i caratteri o parte di una immagine. La stampa può avvenire in entrambi i sensi di spo-stamento del carrello, con una aumento della velocità complessiva (stampa bidirezio-nale). Alcuni modelli di stampanti ad aghi possono riprodurre il colore, impiegando oltre al nero anche tre nastri con i colori fondamentali giallo, magenta e ciano. Que-sta tecnologia di stampa è ancora richiesta in alcuni settori poiché permette di impri-mere anche i moduli copiativi a più fogli.

Figura 32-Stampante ad aghi

Page 58: Dal problema all'Algoritmo

Stampante a getto d’inchiostro

È la tecnologia che ha avuto il maggiore successo presso l'utenza privata ed i piccoli uffici, principalmente a causa del basso costo di produzione, della silenziosità e buo-na resa dei colori. Una schiera di centinaia microscopici ugelli spruzzano minuscole gocce o bolle di inchiostro a base di acqua sulla carta durante lo spostamento del car-rello. Il movimento dell'inchiostro è ottenuto per mezzo di due distinte tecnologie:

pompe piezoelettriche che comprimono il liquido in una minuscola camera, resisten-ze elettriche che scaldano bruscamente il fluido facendolo schizzare dall'ugello. En-trambi veri prodigi di fluidodinamica sono realizzate con tecnologie di fotoincisione simili a quelle per la produzione di massa dei circuiti integrati, che consentono costi per quantità molto contenuti. La risoluzione e la qualità di stampa di queste testine raggiunge livelli paragonabili alla fotografia tradizionale, ma solamente utilizzando carta la cui superficie sia stata opportunamente trattata per ricevere l'inchiostro. Il problema più grave di questa tecnica è l'essiccamento dell'inchiostro nelle testine, che è frequente causa di malfunzionamenti. Un altro svantaggio è dato dall'elevato costo per copia stampata se confrontato con le altre tecnologie.

Stampanti a getto di cera

Tecnologia simile alla precedente, ma che offre anche su carta comune immagini dal-l'aspetto fotografico, grazie alla lucidità della cera. L'impiego di queste stampanti è ormai estremamente limitato a causa della loro complessità e ai tempi di utilizzo ele-vati dovuti alla necessità di mantenere costantemente fusa la cera.

Stampanti laser

Questa tecnologia deriva direttamente dalla xerografia comunemente implementata nelle fotocopiatrici analogiche. In sintesi, un raggio laser infrarosso viene modulato secondo la sequenza di pixel che deve essere impressa sul foglio. Viene poi deflesso da uno specchio rotante su un tamburo fotosensibile elettrizzato che si scarica dove colpito dalla luce. L'elettricità statica attira una fine polvere di materiali sintetici e pigmenti, il toner, che viene trasferito sulla carta (sviluppo). Il foglio passa poi sotto un rullo riscaldato che fonde il toner facendolo aderire alla carta (fissaggio). Per otte-nere la stampa a colori si impiegano quattro toner: nero, ciano, magenta e giallo, tra-sferiti da un unico tamburo oppure da quattro distinti.Per semplificare la gestione, nelle stampanti laser moderne il toner e il tamburo foto-sensibile sono incluse in una cartuccia usa e getta (o meglio, rigenerabile). Il costo

Page 59: Dal problema all'Algoritmo

più elevato di queste stampanti è ampiamente compensato da un minore costo per co-pia, una maggiore velocità di stampa e maggiore affidabilità nel tempo dovuta all'as-senza di inchiostri liquidi.

Stampanti led

Tecnologia molto simile alla precedente, impiega al posto del laser una barra di LED disposti per tutta la larghezza di una pagina e in numero uguale al numero di pixel da stampare. Consente una risoluzione massima inferiore al laser.

Stampante a carta termica

Impiega un rotolo di carta speciale, trattata chimicamente in modo da annerirsi se scaldata. Una testina larga quanto la pagina, costituita da una schiera di resistenze elettriche che si scaldano per effetto Joule, impressiona l'immagine sul foglio mentre questo vi scorre sotto. Era impiegata nei primi apparecchi telefax, ma i documenti stampati tendevano ad ingiallire e diventare illeggibili in breve tempo. La tecnica è largamente impiegata nelle stampanti di registratori di cassa, bilance, parchimetri ecc.

Stampanti a trasferimento termico

Questa tecnologia deriva direttamente dalla precedente, ma invece di impiegare carta speciale, utilizza una pellicola di plastica rivestita da un pigmento che viene trasferito su carta comune dal calore. Esistono anche modelli a colori, impieganti quattro pelli-cole con i colori fondamentali. Non offrono però risoluzioni molto elevate.

Stampante braille

Queste macchine non impiegano inchiostri ma imprimono nella carta i simboli carat-teristici dell'alfabeto Braille per non vedenti. Dispongono di una serie di punzoni mossi da elettromagneti che perforano o imbutiscono la carta.

Modem (modulatore/demodulatore)

Il modem (acronimo di modulatore e demodulatore) è una periferica per la ricezione ed invio dati, capace, in fase di invio, di tradurre (modulare) il segnale digitale in partenza da un computer attraverso una linea analogica, o in ricezione di tradurre (demodulare) il segnale in arrivo al computer sempre tramite la linea analogica. È co-munemente collegato al computer tramite una porta seriale RS-232 oppure una porta USB.

Page 60: Dal problema all'Algoritmo

Figura 35-Modem router ADSL

Figura 36-Scanner

I modem più comuni sono quelli che utilizzano la comune rete analogica PSTN (Pu-blic Switched Telephone Network) e ADSL (Asymmetric Digital Subscriber Line). Viene comunemente chiamato con lo stesso nome un analogo dispositivo capace di comunicare attraverso la linea digitale ISDN (Integrated Services Digital Network), tuttavia questo dispositivo non è propriamente definibile modem, in quanto la linea che utilizza è digitale come il segnale in arrivo dal computer (e non analogica).

Scanner (analizzatore)

Lo scanner è la periferica in grado di acquisire immagini da superfici piane (fogli di carta, libri) per poterle elaborare mediante appositi software di fotoritocco, o di rico-noscere testi mediante OCR. Il suo funzionamento è basato su un lettore ottico che "scandaglia" l'oggetto da digitalizzare trasformandolo in una sequenza di dati inter-pretabile come immagine dal computer. Gli scanner sono gli strumenti principali ne-cessari per una corretta Gestione Elettronica dei Documenti (GED). Esistono scanner in grado di processare anche centinaia di pagine al minuto, richiamando automatica-mente le pagine da un apposito contenitore, così come avviene usualmente per una stampante.

Page 61: Dal problema all'Algoritmo

Figura 37-Lettore di CD-Rom

Unità CD-Rom

E’ l’unità atta a leggere i compact disk. Un Compact Disc, o CD, è un supporto di memorizzazione digitale composto da un disco di resina termoplastica trasparente, generalmente di 12 centimetri di diametro, ricoperto da un sottile foglio di materiale metallico sul quale sono memorizzate le informazioni come "buchi" (in inglese "pits") successivamente letti per mezzo di un laser. Il disco viene fatto ruotare per mezzo di un getto d'aria quindi un raggio laser provvede alla lettura dei dati. La velo-cità di lettura è indicata con "1x" se il drive legge a velocità singola, "2x" a doppia velocità e così via. Oggi sono sul mercato drive che leggono a "64x" e più. Il CD deve la sua popolarità al mercato musicale.. E’ in tale contesto che trova la sua prima applicazione superando in qualità e longevità il vecchio formato MC. Oggi lo ha pra-ticamente sostituito. In ambito informatico ha un largo utilizzo. Ciò è dovuto alla possibilità di memorizzare fino a 800 Mb.

Sono da tempo presenti sul mercato CD-RW che permettono di poter riscrivere più volte sullo stesso supporto. La popolarità di questo supporto va scemando a causa dell’arrivo sul mercato di altri supporti quali Pendrive ed il sempre maggiore utilizzo di DVD che offrono maggiori prestazioni.

DVD

E’ un supporto di memorizzazione simile al CD-RROM, ma con una capacità note-volmente superiore. La nascita del DVD è dovuta all’idea di avere a disposizione un supporto che potesse memorizzare grandi quantità di dati, principalmente video digi-tali. Oggi è largamente utilizzato per i video, infatti ha sostituito il vecchio standard delle videocassette VHS. Nell’ambito dei computer si appresta a sostituire i CD-ROM, vista la maggiore capacità di memorizzazione ed il progressivo abbassamento dei prezzi. Da qualche tempo sono presenti sul mercato DVD-RW, ovvero riscrivibi-li, che permettono agli utenti di poter utilizzare più volte lo stesso DVD proprio come avviene da tempo per i CD-ROM. Le dimensioni dei DVD di produzione industriale sono di quattro tipi:

Page 62: Dal problema all'Algoritmo

DVD-5: 4.7 GB Lato unico e singolo strato

DVD-9: 8.5 GB Lato unico e doppio strato

DVD-10: 9.4 GB Due lati e singolo strato

DVD-18: 17 GB Due lati e doppio strato

La memorizzazione delle informazioni avviene sullo "strato di incisione", tramite un laser, focalizzato su esso, che ne modifica la riflettività, riproducendo la sequenza 0, 1. Ogni strato è suddiviso in tracce circolari e concentriche di 0,74 micron.In lettura, la luce laser, viene riflessa dallo strato di memorizzazione in modo diverso a seconda dell'indice di riflessione e conoscendo la velocità di rotazione del disco e la traccia su cui si sta leggendo, si può risalire alla sequenza 0,1.

La minima velocità di trasmissione dati da un DVD è quasi otto volte maggiore di quella di un CD, cosicché un lettore DVD da 1x è quasi equivalente ad un lettore CD da 8x. Più precisamente, 1x per un lettore DVD equivale a 1350 KBps, mentre 1x per un lettore CD equivale a 150KBps.

Masterizzatori

Il masterizzatore è un dispositivo hardware atto a creare o duplicare compact disc (cd) o dvd di dati, audio e/o video. E' possibile utilizzare tali dispositivi per:

masterizzazione di Cd-R/Dvd-R/Dvd+R, in cui la scrittura sul supporto è definitiva e come tale non più modificabile;

masterizzazione di Cd-RW/Dvd-RW/Dvd+RW, o supporti riscrivibili, sui quali è possibile effettuare operazioni di cancellazione dei dati presenti all'interno degli stes-si e quindi riutilizzo per nuove scritture.

Nel mercato dei masterizzatori vi è un'ulteriore ramificazione: interni oppure esterni. I masterizzatori esterni non occupano alloggiamenti (slot da 5 pollici e 1/2) all'inter-no del computer e si collegano mediante due tipi di porte, connessioni proprietarie a parte: USB o Firewire. La prima soluzione è molto diffusa, grazie all'ampio successo della tecnologia USB 2.0 (transfer rate teorico massimo 480 Mbps), la seconda, ov-vero la connessione Firewire (transfer rate teorico massimo 400 Mbps/IEEE1394 e 800 Mbps/IEEE1394b), meno.

Casse acustiche

Page 63: Dal problema all'Algoritmo

Sono altoparlanti collegabili alla scheda sonora che può essere presente nel sistema tramite un "jack", detta scheda permette di rivelare i suoni in stereofonia. Esistono al-toparlanti di varia potenza (watt per canale) che permettono di ascoltare la musica dei CD musicali ad alta fedeltà.

Figura 33-Casse Acustiche

Cuffie

Sono le normali cuffie con le quali ascoltiamo il walkman o le radioline. Permettono di ascoltare la musica in modo individuale.

Microfono

E' lo strumento per mezzo del quale è possibile, se si possiede una scheda sonora, re-gistrare la propria voce, dei messaggi, che possono essere riascoltati o trasmessi via modem.

Porta Seriale

La porta seriale è un connettore posto sul retro dell'elaboratore utilizzabile per colle-gare allo stesso dell'hardware aggiuntivo. L'elaboratore ha in genere due porte seriali denominate COM1 e COM2 a cui possono connettersi MODEM , PLOTTER ecc. La porta seriale trasmette e/o riceve un bit alla volta ad altissima velocità.

Porta Parallela

La porta parallela, situata sul retro dell'elaboratore, è quella a cui si collega la stam-pante, lo scanner ecc., è una porta che invia e riceve 8 bit alla volta. Possono essere aggiunte altre porte parallele installando un adattatore parallelo.

Page 64: Dal problema all'Algoritmo

Porta SCASI

La porta SCASI può supportare fino a sette periferiche in cascata, e la sua prerogati-va principale è legata all'alta velocità di trasferimento dei dati. E' adatta pertanto ad interfacciare più unità HD, CD-Rom, scanner.

Porta USB

Il disegno dell'USB è stato pensato per consentire un semplice inserimento e rimo-zione. Lo standard è stato progettato in modo da consentire un semplice aggiorna-mento dei sistemi sprovvisti di USB attraverso una scheda PCI o ISA. Le porte USB sono dotate del supporto del Plug and Play e supportano i dispositivi hot swap quindi se il sistema operativo lo consente supportano la rimozione a caldo e il reinserimento delle periferiche senza dover riavviare il computer.

USB può collegare perifieriche quali mouse, tastiere, scanner d'immagini, macchine fotografiche digitali, stampanti, casse acustiche, microfoni e altro ancora. Per i com-ponenti multimediali oramai lo standard USB è il metodo di collegamento più utiliz-zato mentre nelle stampanti sopravvivono ancora molti modelli dotati anche di porta parallela per questioni di compatibilità

All'interno del computer l'USB non ha rimpiazzato lo standar ATA o SCSI per via della sua lentezza. Il nuovo standard serial ATA per esempio consente trasferimenti dell'ordine di 150 Mbyte per secondo, una velocità molto più elevata dello standard USB, che nella versione 2.0 raggiunge un massimo di 60 Mbyte per secondo (480 Mbits/s). L'USB viene molto usato negli hard disk esterni dove si preferisce privile-giare la praticità di poter collegare e scollegare a caldo il componente rispetto alla velocità di una connessione tipo ATA. USB non ha ancora totalmente rimpiazzato il connettore PS2 della tastiera, molti costruttori preferiscono mantenerlo per consenti-re agli utenti di poter utilizzare le economiche tastiere PS2. Lo standard 1.0 dell'USB supporta collegamenti a solo 1,5 Mbit/s, velocità adeguata per mouse, tastiere e di-spostivi lenti. La versione 1.1 aggiunge la modalità full speed che innalza la velocità a 12 Mbit/s. La maggior novità dello standard USB versione 2.0 è l'innalzamento della velocità di trasferimento che arriva anche a 480 Mbit/s. Questa velocità cosi elevata consente all'USB di competere con lo standard Firewire ad armi quasi pari. Infatti lo standard USB ha delle limitazioni di carattere tecnico che ne sconsigliano l'utilizzo su telecamere e dispostivi che manipolano flussi video. Il forum che so-vraintende allo sviluppo dello standard USB ha rinominato USB 1.1 come USB 2.0 Full Speed e USB 2.0 come USB 2.0 High Speed.

Page 65: Dal problema all'Algoritmo

Figura 39-Penna Ottica

Le specifiche dell'USB stabiliscono due tipi di connettori per collegare i dispositivi, il connettore A e B. Negli ultimi anni alcuni produttori hanno introdotto delle varian-ti del connettore per i loro dispostivi miniaturizzati. Molti produttori cercando di ri-durre le dimensioni dei dispositivi hanno deciso di creare connettori più piccoli di quelli standard. Questi dispositivi sono dei dispositivi USB a tutti gli effetti, infatti lo standard di comunicazione rimane quello dell'USB, l'unica cosa che cambia è il con-nettore che è fisicamente diverso.

Una estensione del USB chiamata USB-On-The-Go consente ad una singola porta di fungere sia da dispositivo che da controllore. Ciò consente una più semplice connes-sione di dispositivi tipo i PDA che a volte devono fare da dispositivo ed a volte devo-no comandare dei dispostivi. Per evitare una proliferazione dei connettori proprietari. USB-On-The-Go ha definito anche due connettori chiamati, mini-A e mini-B, che sono connettori molto più piccoli dei connettori precedenti, questo rimuove la princi-pale motivazione dei produttori ad ignorare lo standard e cioè risparmiare spazio.

Porta IrDA

L'Infrared Data Association è un dispositivo che permette di collegare le periferiche al PC tramite una porta a raggi infrarossi di tipo seriale eliminando l'uso di cavi.

Porta HSSB

L'High Speed Serial Bus è un collegamento di tipo seriale che può connettere fino a 63 dispositivi su un solo bus.

Penna ottica

E' uno strumento collegato alla porta seriale per mezzo del quale è possibile leggere i codici a barre, oppure interagire direttamente sullo schermo se il programma che ne prevede l'uso ha predisposto sul video dei campi eccitabili dalla penna stessa. Ci sono prodotti che permettono di disegnare con la penna ottica direttamente sullo schermo a mano libera.

Page 66: Dal problema all'Algoritmo

Plotter

Il plotter è una periferica specializzata nella stampa di grafica vettoriale. È il disposi-tivo di output ideale per i sistemi CAD, dove è impiegato per la stampa di prospetti e progetti architettonici, meccanici, elettrici, mappe topografiche, curve geometriche ecc.Il nome deriva dal verbo inglese to plot nel senso di tracciare (un diagramma).

È costituito da un carrello in grado di muoversi liberamente sulla superficie di un fo-glio, secondo le coordinate cartesiane. Il carrello trasporta un pennino scrivente che può essere abbassato elettricamente per toccare la carta, in questo modo è possibile tracciare punti, linee, curve ecc. Sul carrello possono essere montati pennini di colore o spessore diverso, selezionabili automaticamente. In alcuni modelli è installabile un solo pennino, ma questo può essere sostituito durante la stampa con altri collocati in un deposito laterale. La dimensione del foglio può andare dall'A4 o meno fino a roto-li larghi 914mm o più. Nei formati maggiori il movimento in una coordinata è realiz-zato facendo scorrere il foglio su un rullo e lasciandolo libero alle estremità.Alcuni dispositivi speciali, dove il pennino è rimpiazzato da una lama, sono impiega-ti per ritagliare forme da pellicole autoadesive, tessuti ed altri materiali; si parla in questo caso di plotter da taglio. In altri tipi è invece installata una fresa con la quale è possibile incidere scritte e decorazioni in lastre di diversi materiali. Esistono infine plotter tridimensionali, che possono scolpire materiali per mezzo di frese.I dati sono ricevuti dal computer sotto forma di linguaggi specifici per plotter, tra cui il più noto è l'HPGL.

Attualmente l'uso del plotter è in gran parte sostituito da stampanti per grande forma-to a getto di inchiostro oppure laser, che consentono maggiore flessibilità e velocità. Possono infatti stampare rapidamente anche scritte e fotografie. Appositi software possono emulare le funzioni di un plotter (es. spessore dei pennini) a beneficio del programma CAD.

Page 67: Dal problema all'Algoritmo

Telecamera - Web cam

Sono attualmente disponibili sul mercato piccole telecamere che montate accanto o sopra al video permettono, in collegamento remoto che il nostro interlocutore ci veda, e se anch’esso è dotato dello stesso strumento ci si può vedere in tempo reale. Questa è la stessa tecnica utilizzata attualmente per le videoconferenze.

Bluetooth

Il sistema prende il nome dal Re danese Harald Blåtand (Harold Bluetooth in inglese), Re di Danimarca e di Norvegia che nel 940 riuscì a unificare le tribù della Danimarca, Norvegia e Svezia. Lo standard Bluetooth nasce con l'obiettivo di unifi-care le varie tecnologie di connessione dei terminali mobili, dai computer ai microfo-ni passando per i telefoni cellulari e tutti i dispositivi che si possono interfacciare a un computer. Il logo del Bluetooth è una fusione delle rune legate alle lettere H e B. Questa è la storia ufficiale del nome Bluetooth sebbene sia diffusa la voce che la scelta del nome dipenda molto dal successo del libro "The Long Ships" di Frans Gunnar Bengtsson un best seller svedese ispirato alla tradizione vichinga. Fornisce un metodo standard economico e sicuro per scambiare informazioni tra dispositivi di-versi utilizzando onde radio. Questi dispositivi possono essere personal digital assi-stant (PDA), telefoni cellulari, portatili, Computer, stampanti, macchine fotografiche, ecc. Bluetooth cerca i dispositivi coperti dal segnale (10 metri in ambienti chiusi) e li mette in comunicazione tra di loro. Questo standard è stato progettato con l'obiettivo primario di ottenere bassi consumi, un corto raggio di azione (da 10 a 100 metri) e un basso costo di produzione per i dispositivi compatibili. Lo standard doveva consenti-re il collegamento wireless tra periferiche come stampanti, tastiere, telefoni, microfo-ni, ecc, a computer o PDA o tra PDA e PDA. I telefoni cellulari che integrano chip Bluetooth sono venduti in milioni di esemplari e sono abilitati a riconoscere e utiliz-zare periferiche Bluetooth in modo da svincolarsi dei cavi. BMW è stato il primo produttore di autoveicoli a integrare tecnologia Bluetooth nelle sue automobili in modo da consentire ai guidatori di rispondere al proprio telefono cellulare senza do-ver staccare le mani dal volante. Attualmente molti altri produttori di autoveicoli for-niscono di serie o in opzione vivavoce Bluetooth che integrati con l'autoradio dell'au-tomobile permettono di utilizzare il cellulare mantenendo le mani sul volante a quin-di aumentando la sicurezza della guida. Comunque lo standard include anche comu-nicazioni a lunga distanza tra dispositivi per realizzare delle LAN wireless. Ogni di-spositivo Bluetooth è in grado di gestire simultaneamente la comunicazione con altri 7 dispositivi sebbene essendo un collegamento di tipo master slave solo un dispositi-vo per volta può comunicare con il server. Questa rete minimale viene chiamata pi-

Page 68: Dal problema all'Algoritmo

conet. Le specifiche Bluetooth consentono di collegare due piconet in modo da espandere la rete. Dispositivi in grado di gestire due piconet e quindi in grado di fare da ponte tra le due reti dovrebbero apparire dei prossimi due anni. Ogni dispositivo Bluetooth è configurabile per cercare costantemente altri dispositivi e per collegarsi a questi. Può essere impostata una password per motivi di sicurezza se lo si ritiene ne-cessario.

Molti adattatori Bluetooth sono disponibili in commercio, alcuni includono anche una porta IrDA.

Wireless

Il termine wireless (dall'inglese senza fili) indica i sistemi di interconnessione tra di-spositivi (computer, palmari, mouse, tastiere, stampanti, modem ecc.) che non fanno uso di cavi. I sistemi tradizionali basati su connessioni cablate sono detti wired.Il mezzo di trasporto dell'informazione può essere un segnale radio, la luce infrarossa o un fascio laser. Con questo tipo di sistema è possibile realizzare anche delle reti (Reti wireless) mettendoin collegamento più computer.

Pendrive

Un pendrive (chiamato anche chiavetta USB) è un'unità di memorizzazione di massa portatile utilizzabile mediante la porta USB di un comune personal computer. I dati solitamente vengono immagazzinati in una memoria flash contenuta nel pendrive. Il protocollo per il trasferimento dei dati dal personal computer al pendrive, e vicever-sa, è un protocollo standard denominato USB Mass Storage protocol. Tale standar-dizzazione ha incoraggiato l'inclusione dei driver di supporto e di inclusione nel file system locale da parte dei produttori di sistemi operativi quali Windows e Linux. Grazie alle dimensioni ridotte, all'assenza di meccanismi mobili (al contrario degli hard disk comuni) che lo rende molto resistente, alle sempre crescenti dimensioni della memoria e alla sua interoperabilità il pendrive si sta configurando, accanto ai CD e ai DVD come unità preferita da un crescente numero di consumatori per il tra-sporto fisico di dati. Nel download o upload di dati la chiavetta USB è il supporto più veloce che supera in velocità di lettura e scrittura CD e DVD, ma è più lento delle componenti interne del computer, che rispetto alla velocità di caricamento dei dati sono: memoria cache, RAM e Hard Disk.

Software

Il software è la parte "intelligente" del computer. E' un insieme di programmi che di-cono alle parti meccaniche le operazioni che debbono eseguire. Il calcolatore è tanto

Page 69: Dal problema all'Algoritmo

più intelligente quanto più è intelligente il programma che è stato scritto dal pro-grammatore.

In genere il software è classificabile in tre possibili tipologie, Il software residente, di base (o di sistema) e applicativo.

Software residente

E’ il software che permette di eseguire le prime istruzioni dopo l’accensione del computer. Appena acceso, il calcolatore inizia ad operare e ricerca nella memoria ROM le istruzioni da caricare in memoria RAM ed eseguire per prime. Tutto ciò av-viene senza che l’utente possa fare niente ma gli permette di caricare il software di base senza il quale sarebbe praticamente impossibile usare direttamente l’hardware del computer. Questo processo è anche noto con il nome di bootstrapping.

Software di Base (o di sistema)

E’ spesso chiamato anche sistema operativo e consiste in un gruppo di programmi che gestiscono il funzionamento di base del computer. Il sistema operativo rimane sempre attivo dal momento in cui viene caricato (all’accensione della macchina) fino allo spegnimento. Sono gestite dal sistema operativo tutte le funzioni generali della macchina, come l’aspetto grafico delle visualizzazioni su monitor, la scrittura e la lettura dai dischi, la messa in esecuzione e la chiusura dei vari programmi, la ricezio-ne e trasmissione di dati attraverso tutti i dispositivi di I/O.

Software Applicativo

Viene detto Software applicativo (o semplicemente "applicativi") l'insieme dei pro-grammi che non sono compresi nel sistema operativo, ma che vengono invece instal-lati dall'utente per svolgere compiti specifici. Per esempio sotto Windows il program-ma di videoscrittura Microsoft Word è forse l'applicativo più diffuso. Word non fa parte di Windows ma deve essere acquistato a parte e installato sulla macchina dopo che questa contiene già il sistema operativo. A rigore fanno parte degli applicativi anche alcune utilità che si installano assieme a Windows stesso, come il Blocco note, la Calcolatrice, Paint, WordPad; si tratta infatti di semplici programmi che non sono essenziali per il funzionamento della macchina (potrebbero anche essere rimossi sen-za comprometterne in alcun modo il funzionamento), ma vengono installati assieme al sistema operativo soltanto per offrire all'utente alcune semplici applicazioni di base. Infatti, se per assurdo su un computer si trovasse esclusivamente il sistema ope-rativo senza nessun'altra applicazione, la macchina funzionerebbe perfettamente, ma l'utente non sarebbe messo nelle condizioni di poterla usare.

Page 70: Dal problema all'Algoritmo

Possiamo tentare una classificazione degli applicativi in 5 categorie:

Utilità di Sistema - si tratta di programmi che servono per migliorare la gestione e la sicurezza della macchina, come ad esempio gli stessi antivirus, oppure programmi per l'ottimizzazione delle risorse, per il controllo dello stato del sistema, la ripulitura dell'hard disk, ecc.

Office Automation - programmi di ausilio nei normali lavori d'ufficio, quindi creazio-ne e elaborazione di testi (word processor), gestione di basi di dati (database), fogli di calcolo, posta elettronica, navigazione in Internet, ecc.

Applicazioni aziendali - progammi creati per le necessità specifiche delle aziende, come ad esempio i programmi per la fatturazione o per la gestione del personale, dei magazzini, dei macchinari industriali. Spesso si tratta di programmi creati ad hoc da aziende di produzione software.

Strumenti di sviluppo - programmi per la creazione di oggetti multimediali (pagine Web, animazioni e CD interattivi), elaborazione audio/video/immagini, programmi che servono per la creazione di nuovi applicativi (authoring tools).

Giochi e svago - giochi, emulatori, lettori audio e video.

In definitiva si può dire che il Software di base serve alla macchina per funzionare, mentre il Software applicativo serve all'utente per lavorare.

Page 71: Dal problema all'Algoritmo

CAPITOLO V

Cenni di Architetture dei CalcolatoriFunzionalità di un calcolatore

Le principali funzionalità di un calcolatore devono prevedere l’interazione con l’am-biente esterno tramite il trasferimento di dati e informazioni. Tutto questo è supervi-sionato da un controllore che provvede a gestire i dati elaborati a seconda che questi debbano essere trasferiti o memorizzati.

La macchina di von Neumann

Facciamo qui riferimento ad una organizzazione di un sistema di calcolo effettiva-mente realizzato e reso operativo nell'ambito di un progetto dell'Università di Prince-ton sotto la guida del matematico John Von Neumann.

Page 72: Dal problema all'Algoritmo

Il funzionamento della macchina di von Neumann

Un programma eseguibile dalla macchina di Von Neumann consiste in una lista di istruzioni registrate in memoria centrale, che devono essere eseguite una alla volta secondo l'ordine specificato nel programma fino a quando non si incontra un’istru-zione di controllo, la quale può alterare il flusso sequenziale stabilendo il numero d’ordine della successiva istruzione da eseguire.

L'unità centrale di elaborazione, può accedere solo alle informazioni contenute nella memoria centrale, estrae le istruzioni del programma eseguibile a partire da quella il cui indirizzo si trova nel registro (PC) contatore di programma , le decodifica e le esegue secondo tre fasi dette di fetch, decode e execute, fino a quando viene esegui-ta l'istruzione di halt.

Le fasi di elaborazione sono scandite da un segnale (di tensione a onda quadra da 0 a +5V generato da un oscillatore interno alla CPU, detto orologio di sistema) detto di clock, emesso appositamente per mantenere la sincronizzare tra le varie unità.

L’intervallo che intercorre tra due successivi impulsi è detto periodo di clock. La frequenza del segnale di clock viene misurata in MHz (Mega Hertz, milioni di ci-cli al secondo). Maggiore è la frequenza, maggiore è la velocità della CPU. Una CPU da 200 MHz ha un periodo di clock di 5 ns (1/ (200*106)s)

Fase di fetch

All'inizio della fase di fetch il contenuto del PC, contiene l'indirizzo della prossima istruzione da eseguire, viene trasferito nel registro degli indirizzi (MAR Memory Address Register), e da lì sul bus degli indirizzi dando inizio al reperimento (fetch) e alla lettura della istruzione da eseguire.

Trascorso il tempo d'accesso in memoria la locazione di memoria selezionata, conte-nente l’istruzione da eseguire, viene depositata sul bus dati e da lì giunge sul registro del registro dei dati (MDR), e in fine nel registro delle Istruzioni IR (Instruction Re-gister). Al termine della fase di fetch della istruzione l'unità di controllo incremen-ta di uno il contenuto del PC, per predisporsi ad eseguire l'istruzione successiva.

Page 73: Dal problema all'Algoritmo

Fase di decode

Il registro istruzioni (IR) dato il formato delle istruzioni è logicamente diviso i due parti: la prima parte contiene il codice operativo e la seconda parte l'operando. Per-tanto inizia la fase di decodifica del codice operativo a carico dell'unità di controllo la quale a seconda della operazione decodificata provvederà all'esecuzione della istruzione stessa.

Fase di execute L'esecuzione della istruzione può comportare nuovi accessi in memoria per il recupe-ro degli operandi (fetch operandi), in questo caso, prima della esecuzione vera e pro-pria della istruzione, viene eseguita la fase di fetch degli operandi. Quando tutto ciò che comporta l'istruzione è caricato nei registri opportuni del pro-cessore l'unità di controllo esegue l'istruzione

La logica sequenziale secondo cui il programma viene eseguito si chiama ciclo di esecuzione, ed è riportato nella successiva figura.

I passaggi da una fase all’altra del ciclo di esecuzione sono regolati dal clock.

1. Nella prima fase, chiamata input, il programma viene caricato in memoria centrale.

2. Nella seconda fase, richiesta prima istruzione, l’elaboratore prende in esame la prima istruzione passandola al microprocessore.

3. Nella terza fase avviene la decodifica in comandi elementari comprensibili al calcolatore, comandi rivolti a componenti specifici dell’elaboratore.

4. Nella fase di esecuzione l’istruzione viene eseguita.5. Terminata l’esecuzione la macchina legge dalla memoria un’altra istruzione e

ricomincia così il ciclo.

Page 74: Dal problema all'Algoritmo

Questa sequenza di passi si svolgerà nello stesso identico ordine fino a che non sarà stata eseguita l’ultima istruzione

Le macchine convenzionali moderne

L'architettura MIPS è rappresentativa dell'architettura dei moderni computer, è sem-plice e chiara facile da apprendere rispetto l'architettura x86 che è molto complessa e con molti modi di indirizzamento e molti tipi di eccezioni

In una moderna architettura hardware sono necessarie le seguenti caratteristiche: Flessibilità

Adatta a svolgere diverse tipologie di compiti Modularità

Ogni componente ha una funzione specifica Scalabilità

Ogni componente può essere sostituito con uno equivalente Standardizzazione

Componenti facilmente sostituibili in caso di mal funzionamento Riduzione dei costi

Figura 40 - Archietettura di riferimento MIPS

BUS (dati, indirizzi, segnali di controllo)BUS (dati, indirizzi, segnali di controllo)

Microprocessor (CPU)

Registri ALU

Memory

MonitorMonitor

I/O driverI/O driver

CDCD

I/O driverI/O driver

Page 75: Dal problema all'Algoritmo

Dovuta alla produzione in larga scala Semplicità

Di installazione ed esercizio del sistema

Calcolatori attuali seguono ancora i principi di Von Neumann ma con estensioni per migliorare le prestazioni.

processori dedicati o co-processori per eseguire in modo particolarmente effi-ciente e in parallelo alla CPU particolari operazioni, come quelle aritmetiche (processore aritmetico) o per la presentazione della grafica sul video (pro-cessore grafico, scheda grafica).

possibilità di eseguire alcune istruzioni parzialmente in parallelo uso di gerarchie di memorie con prestazioni e costi decrescenti, come una

memoria cache in cui tenere copia di parte dei dati della memoria centrale con accesso più rapido.

macchine aventi diverse CPU che agiscono contemporaneamente (macchine parallele o multiprocessore), come i supercomputer per eseguire calcoli com-plicatissimi molto velocemente

Dal punto di vista della organizzazione della macchina come composizione di ele-menti costruttivi, la macchina di Von Neumann soffriva di un gravissimo difetto, che avrebbe impedito l'evoluzione dei sistemi di calcolo così come l'abbiamo conosciuto in questi ultimi anni: la mancanza di modularità. Nella struttura della macchina il comportamento del sistema é completamente determinato dalla Control Unit. Se per esempio volessimo cambiare l'unità di ingresso con un'altra (anche con funzionalità simili ma comandata da segnali di controllo diversi), allora dovremmo modificare più o meno drasticamente anche la Control Unit. Se volessimo aggiungere un secon-do dispositivo di uscita, allora dovremmo cambiare (ampliare) l'insieme delle istru-zioni della macchina convenzionale.

L'interconnessione BusPer aumentare la modularità di un sistema di calcolo, fin dagli anni '60 venne intro-dotta una innovazione architetturale fondamentale: la interconnessione di dispositivi mediante bus.

La sua caratteristica principale é quella di svincolare l'unità di controllo (chiamata normalmente CPU, da Central Processing Unit) dagli altri dispositivi. Ogni dispositivo aggiuntivo (unità di ingresso, di uscita, dischi, ecc.) interagisce au-tonomamente col resto del sistema mediante un controllore connesso al bus di siste-ma. Normalmente questi controllori sono a loro volta dispositivi programmabili in grado di accedere alla RAM senza l'intervento della CPU.

Page 76: Dal problema all'Algoritmo

L'aggiunta di un nuovo controllore connesso al bus permette quindi di aggiungere di-spositivi inizialmente non previsti nel sistema, senza modifiche ai dispositivi esisten-ti.

Ora verranno descritti gli elementi fondamentali di un calcolatore elettronico, ovvero la CPU, la memoria centrale, le periferiche ed il bus di comunicazione. La CPU ac-cede in lettura e scrittura, tramite il bus di comunicazione, alle informazioni imma-gazzinate nella memoria, e comunica con le periferiche per eseguire le operazioni ri-chieste.

La memoria centrale

La memoria provvede all'immagazzinamento dell'informazione gestita dal calcolato-re. Una quantità maggiore di informazione viene inoltre immagazzinata nella memo-ria secondaria a supporto magnetico. Attualmente la quantità di memoria centrale ge-stita da un calcolatore può variare dalle decine di KBytes per i microcontrollori mon-tati a bordo di apparecchiature, alle decine di GBytes per i Personal Computers fino ai TBytes utilizzati nei mainframes. L'elemento di base gestito dalla memoria è nor-malmente in byte. Ogni byte memorizzato è identificato da un indirizzo univoco. Il numero di bytes necessari per definire l'indirizzo dipenderà dalla dimensione della memoria. A seconda della tecnologia utilizzata nella loro costruzione, le memorie vengono suddivise in memorie bipolari e memorie MOS. Le memorie bipolari utiliz-zano transistor a giunzione (bjt): sono memorie veloci, ma consentono un grado di integrazione minore delle memorie MOS che utilizzano transistors ad effetto di cam-po (FET).

A seconda della loro funzionalità le memorie sono divise in:

Memorie RAM: memorie ad accesso casuale, caratterizzate da stesso tempo di accesso per tutte le locazioni. Queste memorie mantengono l'informazione fin tanto che sono alimentate.

Memorie ROM: sono memorie che mantengono il contenuto anche quando non sono alimentate. A loro volta le memorie ROM si dividono in memorie PROM (Programmable ROM) il cui contenuto viene impresso un volta per tutte tramite un apposito dispositivo di programmazione, in memorie EPROM (Erasable PROM), che possono essere riprogrammate tramite previa esposi-zione a raggi ultravioletti, ed in memorie EEPROM (Electrically Erasable PROM), che possono essere riprogrammate senza l'ausilio di raggi ultravio-letti, e quindi senza rimuovere il chip. Tali memorie differiscono tuttavia dal-le RAM per il fatto che l'operazione di scrittura richiede un tempo notevol-mente maggiore (qualche millisecondo) rispetto alle operazioni di lettura. Normalmente è anche presente una memoria ROM che contiene il codice di

Page 77: Dal problema all'Algoritmo

boot, ovvero il codice che viene eseguito dal calcolatore subito dopo la sua accensione, e che carica una versione minimale del sistema operativo. Tale codice provvederà a sua volta a caricare da disco o da rete il resto del codice del sistema operativo durante la fase iniziale di bootstrap.

Poiché l'elemento di base del contenuto di una memoria è il singolo byte, cui corri-sponde un indirizzo univoco, sorge il problema di come rappresentare all'interno del-la memoria quelle informazioni che richiedono più di un byte, quale, ad esempio, un numero rappresentato da un longword. Vi sono due diverse possibilità: la prima è quello di caricare il byte meno significativo all'indirizzo inferiore (little endian) e la seconda è quella di caricare il byte più significativo all'indirizzo inferiore (big en-dian). Supponiamo ad esempio il numero 254, corrispondente a 000000000000000000000000111111102, o, in maniera più concisa, a $000000FE, memorizzato a partire dall'indirizzo 1000. In formato big endian tale numero verrà memorizzato comeIndirizzo Valore1000 $001001 $001002 $001003 $FE

mentre in formato little endian verrà memorizzato come

Indirizzo Valore1000 $FE1001 $001002 $00

Non esiste una definizione comune di tale formato. Alcune architetture (es. Pentium) utilizzano il formato little endian, mentre altre (es. Sparc, Motorola 68K) utilizzano il formato big endian. A causa di queste differenze si dovranno eseguire delle operazio-ne di conversione (byte swapping) quando una sequenza di bytes viene trasferita tra due calcolatori che utilizzino un diverso formato.

La CPU

Il processore, o CPU (Central Processing Unit) rappresenta l'elemento centrale di un calcolatore. Esistono diverse famiglie di processori: ogni processore di una data fa-miglia rappresenta in generale un'evoluzione e pertanto è in grado di eseguire lo stes-so codice eseguito dai processori precedenti della stessa famiglia. La CPU è a sua volta composta da un insieme di elementi, collegati tra di loro da uno o più bus inter-

Page 78: Dal problema all'Algoritmo

ni (ovvero bus di comunicazione ricavati dallo stesso elemento di silicio della CPU). Tali componenti sono:

Registri Unità Logico Aritmetica (ALU) Unità Floating point (FPU) Unità di controllo

Registri

Un registro rappresenta un piccolo elemento di memoria all'interno del processore, in grado normalmente di memorizzare una singola Word, Longword (caso tipico per i processori attuali a 32 bits) o Quadword (8 bytes). I registri vengono utilizzati per conservare alcune informazioni durante la sequenza delle fasi di esecuzione delle sin-gole istruzioni nonché tra un'istruzione e l'altra. Alcuni registri sono accessibili al programmatore, ovvero possono essere riferiti direttamente nelle istruzioni di mac-china, altri vengono utilizzati dalla CPU internamente. Tra questi ultimi sono comuni a tutte le architetture i seguenti:

Program Counter(PC): Contiene l'indirizzo in memoria della successiva istruzione da eseguire. Un programma corrisponde infatti ad una sequenza di istruzioni immagazzinate nella memoria centrale. La prima fase dell'esecuzio-ne di ogni istruzione corrisponde al prelevamento (fetch) dalla memoria dell'i-struzione da eseguire. Questa operazione richiede l'indirizzo in memoria del primo byte dell'istruzione, contenuto nel program counter. Dopo che l'istru-zione è stata prelevata, il program counter viene incrementato del numero di bytes di cui l'istruzione è composta, e quindi conterrà l'indirizzo iniziale del-l'istruzione successiva. Durante l'esecuzione della istruzione il program coun-ter potrebbe venire modificato nel caso l'istruzione sia un'istruzione di salto che modifica l'esecuzione sequenziale del programma.

Instruction Register(IR). Contiene l'istruzione corrente. Caricato durante la fase di fetch, tale registro mantiene il codice dell'istruzione durante le fasi successive di esecuzione, ovvero la fase di decode, in cui l'istruzione viene decodificata, e di execute, durante la quale vengono eseguite le operazioni specificate dall'istruzione.

Status Register(SR). Contiene informazioni sullo stato corrente del processo-re. In particolare contiene i bits di condizione, ovvero bei flags che indicano particolari condizioni che si sono verificate nell'ultima istruzione eseguita. I bit di condizione sono generalmente:

o Bit di Carry C: Posto ad 1 quando l'operazione aritmetica appena ese-guita ha causato un riporto dal bit più significativo;

Page 79: Dal problema all'Algoritmo

o Bit di Zero Z : posto ad 1 quando il risultato dell'ultima istruzione è stato pari a 0;

o Bit di Overflow V: posto ad 1 quando l'ultima operazione ha causato un overflow;

o Bit di segno N: posto ad 1 quando il risultato dell'ultima istruzione è negativo.

Altri bits di condizione possono essere definiti nelle specifiche architetture. Oltre ai bits di condizione, altre informazioni vengono memorizzate nello sta-tus (o condition) register, quali il livello corrente di priorità delle interruzioni, e il livello di privilegio.

Memory Address Register (MAR). Contiene l'indirizzo corrente in un'opera-zione di lettura o di scrittura in memoria.

Memory Buffer Register (MBR). Contiene il dato da scrivere o letto durante un'operazione di accesso alla memoria. Tale operazione infatti non è istanta-nea, ma richiede una sequenza di passi, dettata dalle condizioni sulle linee di controllo del bus. (Vedi sezione sul bus di comunicazione).

L'Unità Logico Aritmetica (ALU)

L'unità logico aritmetica è rappresentata da una rete combinatoria composta di som-matori binari, shift registers, blocchi logici AND, OR, XOR, invertitori e multiple-xers. L'attivazione di questi componenti è dettata da un insieme di linee di controllo che, opportunamente comandate dall'unità di controllo, fanno si che la ALU assuma la funzionalità desiderata. Nelle CPU attuali sono normalmente definite più Unità Logico Aritmetiche che possono operare in parallelo.

L'Unità Floating Point (FPU)

L'unità floating point consente di eseguire operazione su numeri reali, normalmente espressi in notazione floating point IEEE 754. Inizialmente la FPU era costituita da un chip separato dalla CPU, ed in mancanza di essa le operazioni su numeri reali do-vevano essere eseguite via software, ovvero con un'opportuna sequenza di istruzioni che comportassero solo calcoli su numeri interi. Attualmente le CPU utilizzate nei Personal Computers montano a bordo dello stesso chip l'unità floating point, e per-tanto il set di istruzioni della CPU viene esteso alle operazioni di manipolazione dei numeri reali.

Page 80: Dal problema all'Algoritmo

Il modulo di controllo

Il modulo di controllo rappresenta la parte centrale della CPU, che coordina la se-quenza delle fasi di esecuzione delle istruzioni. L'esecuzione di ogni istruzione infatti richiede una sequenza di fasi diverse: la fase di fetch per leggere dalla memoria l'i-struzione da eseguire, la fase di decode per la decodifica dell'istruzione, e la fase di execute, per l'esecuzione dell'istruzione stessa. Queste fasi possono a loro volta esse-re suddivise in altre fasi. La CPU pertanto non è rappresentata da una rete combina-toria, bensì da una macchina sequenziale, che attraversa un insieme di stati, sincro-nizzata da un segnale di clock. L'unità di controllo implementa tale macchina sequen-ziale, e definirà un certo insieme di bits per contenere lo stato. L'ingresso di tale mac-china sequenziale sarà rappresentato dall'istruzione da eseguire (o più precisamente da una parte di essa corrispondente al codice operativo), e le uscite saranno le linee di controllo necessarie per la corretta configurazione della ALU, per la connessione dei bus interni, e per la configurazione dei multiplexer utilizzati al di fuori della ALU. L'esecuzione di un'istruzione richiederà pertanto un certo numero di cicli di clock: maggiore sarà la frequenza di tale clock (limitato tuttavia dai tempi di commu-tazione del circuito), più veloce sarà l'esecuzione delle istruzioni.Nella configurazione appena vista il modulo di controllo è rappresentato in principio da una rete combinatoria la quale, ricevendo in ingresso la codifica dello stato attuale e l'ingresso corrente, produce la codifica dello stato successivo e l'insieme delle linee di controllo. Tale implementazione prende il nome di logica cablata, e presenta lo svantaggio che una modifica nella sequenza di fasi (per aggiungere una funzionalità o per correggere un errore di implementazione) richiede di dover riprogettare la rete combinatoria. Una implementazione alternativa dell'unità di controllo definisce invece una memo-ria ROM, le cui locazioni contengono tanti bits quante sono le linee di controllo che devono essere generate. Il codice operativo dell'istruzione definirà un indirizzo ini-ziale nella ROM e le locazioni successive conterranno le linee di controllo da produr-re in sequenza. Una di queste linee di controllo specificherà la terminazione della se-quenza, e quindi inibirà la generazione di indirizzi crescenti ad ogni ciclo di clock, e terminerà la sequenza di esecuzione dell'istruzione corrente. Questa soluzione pre-senta il vantaggio di una maggiore flessibilità (basterà cambiare il contenuto della ROM per modificare il funzionamento della CPU) ma ha lo svantaggio di essere più lenta rispetto ad una logica cablata. Infatti in questo caso le linee di controllo non sono prodotte dall'uscita di una rete combinatoria, ma da una lettura di memoria e ri-chiede pertanto un tempo maggiore di esecuzione (si ricordi che in una memoria un'operazione di lettura richiede un livello di multiplexing per l'attivazione delle cel-le di memoria indirizzate e la connessione degli switch tri-state per il trasferimento in uscita del contenuto selezionato). Quest'ultima soluzione implementativa prende il

Page 81: Dal problema all'Algoritmo

nome di architettura microprogrammata: la sequenza memorizzata nella ROM in cor-rispondenza alla singola istruzione macchina corrisponde infatti ad un "micropro-gramma". Il Bus di comunicazione

Il bus di comunicazione rappresenta il collegamento fisico tra la CPU e gli altri com-ponenti. Diversi tipi di operazioni sono supportati da un bus di comunicazione. Ci concentreremo qui sulle operazioni di lettura e scrittura in cui la CPU scrive una lo-cazione nella memoria o ne legge il contenuto. In questo caso l'operazione è supervi-sionata dalla CPU che pertanto rappresenta il master nella comunicazione. La memo-ria in questo caso ha un ruolo passivo, e rappresenta un componente slave. Il bus si compone fisicamente di un insieme di linee conduttrici: dei fili o delle piste condut-trici nel caso il bus sia esterno, delle aree opportunamente drogate nel silicio nel caso il bus sia interno alla CPU. Mettere a disposizione delle linee di conduzione non è tuttavia sufficiente per un trasferimento controllato dell'informazione. A tal scopo sarà necessario definire un protocollo di comunicazione. Il protocollo di comunica-zione definisce il ruolo delle singole linee, e le sequenze necessarie per un'esecuzione controllata dei trasferimenti. Diversi protocolli di comunicazione sono utilizzati: tra questi ricordiamo il bus VME, utilizzato nei processori della serie Motorola 68K, cui si farà riferimento in questa esposizione, il bus PCI, utilizzato per la comunicazione con le periferiche in molti personal computers, il bus SCSI utilizzato per la comuni-cazione con dispositivi quali i dischi fissi. Una caratteristica del protocollo di comu-nicazione è data dalla frequenza di clock per il bus. Le operazioni sul bus sono infatti sincronizzate da un segnale di clock, la cui frequenza massima dipende dalle caratte-ristiche elettriche del bus (anche queste parte della specifica del protocollo). Le fre-quenze per il clock del bus è tipicamente di molto inferiore a quella delle CPU, a causa delle maggiori capacità che si hanno in un bus esterno rispetto all'interno del chip di silicio. Il PCI, ad esempio, rappresenta uno dei bus più veloci ed è caratteriz-zato da una frequenza di clock di 33 o 66 MHz, ben al di sotto delle frequenze di centinaia di MHz comuni nei processori attuali.

I protocolli di comunicazioni tipicamente dividono le linee del bus in:

linee di indirizzo, dedicate al trasferimento degli indirizzi linee di dati, dedicati al trasferimento dei dati linee di controllo, dedicate ai segnali di handshaking necessari per la corretta

esecuzione del trasferimento.

Il bus VME definisce le linee di controllo R/W (Read/Write), AS (Address strobe) e DTACK (Data Acknowledge) per la gestione delle operazioni di lettura e scrittura. Il livello della linea R/W indicherà se si sta eseguendo un'operazione di lettura o di

Page 82: Dal problema all'Algoritmo

scrittura. Il funzionamento delle linee AS e DTACK è esemplificato dal seguente diagramma che definisce l'evoluzione temporale del protocollo.

In un operazione di lettura la CPU inizialmente pone ad un valore definito le linee di indirizzo A1-A23 (in questo bus gli indirizzi sono specificati da 24 linee, ma poichè le operazioni sono eseguiti a words non è necessario specificare il bit meno significa-tivo dell'indirizzo, che sarebbe sempre 0). Una volta che il livello elettrico di queste linee si è stabilizzato, la CPU segnala che un indirizzo valido è presente sul bus po-stando il livello della linea AS a basso. A questo punto la memoria risponderà ponen-do il contenuto dei due bytes corrispondenti all'indirizzo specificato ed al seguente) sulle 16 linee di dati D0-D15. Tale operazione non sarà istantanea, e richiederà il tempo di accesso alle locazioni specificate (tipicamente di qualche decina di nanose-condi). Quando il livello delle linee di dati si sarà stabilizzato, la memoria segnala la disponibilità dal dato postando il livello della linea di controllo DTACK a basso. A questo punto la CPU potrà trasferire il contenuto delle linee di dati nel memory buf-fer register (MBR)e terminate la sequenza riportando a livello alto la linea di control-lo AS.

Un' operazione di scrittura è rappresentata invece dal seguente diagramma temporale:

Figura 41

Figura 42

Page 83: Dal problema all'Algoritmo

e differisce dalla precedente operazione di lettura, oltre che dal livello della linea R/W (non riportato nella figura), dal fatto che le linee di dati vengono impostate questa volta dalla CPU. Pertanto, quando il livello della linea AS si porta a basso, sia le linee di dati che di indirizzi saranno impostate, e la memoria in risposta provvede-rà alla memorizzazione dei due bytes, segnalando tramite la linea DTACK il termine della scrittura.

Un protocollo simile viene utilizzato anche negli altri bus di comunicazione, che at-tualmente definiscono di norma 32 linee sia per gli indirizzi che per i dati. In alcuni casi le linee di indirizzi vengono utilizzate anche per i dati in un ciclo di clock suc-cessivo. Si parlerà in questo caso di bus multiplexati.

Un'altra caratteristica comune a molti bus è la possibilità di eseguire trasferimenti ve-loci di blocchi di dati (block transfer). In questo caso, poiché i dati stanno ad indirizzi consecutivi, non vi è bisogno di trasferire l'informazione dell'indirizzo dopo aver tra-sferito il primo dato all'indirizzo iniziale. Ciò rende l'operazione di trasferimento più veloce in quanto non è necessario impostare le linee di indirizzi per i dati successivi, richiedendo quindi un tempo inferiore per il trasferimento del singolo dato.

Si osserva infine che negli esempi presentati, le linee di controllo sono attive quando sono a livello basso. Questo è tipico di molti bus di comunicazione e deriva dal fatto che le linee sono collegate a più elementi (la CPU, le memorie e i dispositivi di I/O collegati al bus) in modalità open collector. Quando nessuno degli elementi guida la linea (ovvero la collega tramite un transistor alla massa) il livello della linea è portato ad alto tramite una resistenza di pull-up. Tale livello va basso se almeno uno degli elementi guida la linea, ma non comporta la rottura degli stadi di uscita se più di un elemento guida il livello della linea (il tutto si comporta come un OR).

Le periferiche

I dispositivi esterni, o periferiche, rappresentano il collegamento tra il calcolatore ed il mondo esterno. Un calcolatore senza alcuna periferica sarebbe completamente inu-tile. Il tipo di periferica dipenderà dal tipo di utilizzo del calcolatore. Se il calcolatore è rappresentato da un microcontrollore che coordina il funzionamento di un'apparec-chiatura, le periferiche consisteranno in dispositivi per l'acquisizione dei segnali ed in attuatori, in quanto compito del microcontrollore è quello di acquisire un insieme di segnali per generare un insieme di comandi. In un Personal Computer, le periferiche saranno rappresentate dal terminale, dalla tastiera, dai dischi, dalle stampanti e pro-babilmente da una scheda di rete o da una scheda audio. Le periferiche possono esse-

Page 84: Dal problema all'Algoritmo

re pertanto molto diverse tra loro e quindi possono avere velocità di trasferimento dato molto variabili, passando da qualche migliaio di bits al secondo per i terminali alle decine di milioni di bytes al secondo per i dischi magnetici. E' pertanto necessa-rio che siano definiti dei meccanismi per sincronizzare i dispositivi esterni con la CPU. A tal scopo possono essere definite due diverse architetture:

Bus separato di Ingresso/Uscita (I/O). In questo caso un bus separato dal bus di memoria è definito per il collegamento con le periferiche. Se da un lato questa soluzione aumenta la complessità circuitale, dall'altro consente opera-zioni di I/O disgiunte, e quindi in parallelo, dalle operazioni di accesso alla memoria. In questo caso la sincronizzazione potrà essere eseguita tramite delle linee opportune di controllo in maniera analoga a quanto visto per le operazioni di lettura e scrittura in memoria.

I/O memory mapped. In questo caso lo stesso bus di comunicazione usato per l'accesso della memoria è anche impiegato per l'accesso ai dispositivi di I/O. In tale soluzione ogni dispositivo definirà alcuni registri che vengono visti dalla CPU come locazioni di memoria. Il significato di ogni registro dipende-rà dal tipo di dispositivo, e sarà compito del software (il driver) operare cor-rettamente tramite tali registri. Si osservi che in questo caso le linee di con-trollo non possono essere utilizzate per la sincronizzazione tra CPU e disposi-tivo, perché altrimenti il bus di comunicazione non potrebbe essere utilizzato mentre la CPU è in attesa della risposta di un dispositivo lento. Pertanto l'ac-cesso ai registri delle periferiche avverrà con tempi paragonabili ad un acces-so in memoria, e la sincronizzazione avverrà attraverso il contenuto dell'in-formazione letta dai registri. Per esempio un dispositivo che generi dei dati per la CPU potrà indicare in un registro la disponibilità di un dato di ingresso. La CPU potrà verificare la presenza del dato leggendo tale registro, ed ese-guire quindi il trasferimento del dato solo quando questo risulti disponibile.

Page 85: Dal problema all'Algoritmo

CAPITOLO VI

Linguaggi di ProgrammazioneI Linguaggi formali

Per chiarirci le idee vediamo brevemente quali sono le differenze tra i linguaggi for-mali e quelli naturali.

Quest’ultimi sono quelli che utilizziamo normalmente per comunicare tra noi esseri umani ("naturali" nel senso che non sono nati a tavolino, ma spontaneamente).Essi non sono rigorosamente definiti, sono in continua evoluzione e spesso presenta-no delle ambiguità; hanno però una enorme potenza espressiva. I linguaggi formali, invece, sono completamenti definiti mediante regole esplicite, per cui è sempre pos-sibile determinare la correttezza (grammaticale) di una proposizione; inoltre il signi-ficato di ogni frase è sempre privo di ambiguità. Però hanno un potere espressivo li-mitato.

I linguaggi di programmazione sono un sottoinsieme di quelli formali. Essi possono essere definiti come il mezzo che ci permette di comunicare al computer la sequenza di operazione da effettuare per raggiungere un obiettivo prefissato.

Oltre ai linguaggi di programmazione vi sono anche altri linguaggi formali. Un esempio è la notazione scacchistica utilizzata per descrivere con precisione e senza ambiguità le partite del diffuso gioco di strategia. Un'altra disciplina in cui si fa largo uso dei linguaggi formali è la Logica Matematica, in cui vengono utilizzati per de-scrivere le teorie matematiche e i processi deduttivi in modo rigoroso. Si noti, per in-ciso, che i legami tra la Logica Matematica e l'Informatica stanno diventando sempre più stretti con una forte influenza reciproca. Tra l'altro due linguaggi popolari, il Lisp e il Prolog, sono scaturiti proprio da teorie studiate in Logica Matematica, e precisa-mente dal lambda calcolo di Church e dal calcolo dei predicati del primo ordine.

Page 86: Dal problema all'Algoritmo

Linguaggi di alto e di basso livello

Non è possibile effettuare una rigida classificazione dei linguaggi di programmazio-ne, ma nel seguito tenteremo comunque di individuare alcune categorie generali in cui si possono suddividere.Una prima distinzione possiamo farla tra i linguaggi a basso e quelli ad alto livello. Ogni processore ha un proprio linguaggio che ad ogni stringa di bit fa corrispondere una operazione elementare come il caricamento di un registro interno al processore o la somma tra una cella di memoria e un registro. Questo tipo di linguaggio, detto lin-guaggio macchina, essendo molto vicino alla logica del processore, risulta essere molto lontano dal modo di ragionare dell'uomo, per cui utilizzarlo per la codifica di algoritmi comporta un lavoro molto lungo e difficile. Agli albori dell'informatica questo era l'unico modo di programmare un computer, per cui tale attività era riserva-ta solo a tecnici super specializzati. Per alleviare queste difficoltà si pensò di creare dei linguaggi intermedi con cui scrivere i programmi. Un algoritmo codificato in questo modo non è più direttamente eseguibile dal processore, ma è necessario utiliz-zare un apposito programma traduttore che converte il programma originale (detto file sorgente) nelle corrispondenti istruzioni in linguaggio macchina (ottenendo così il file oggetto). Il primo di tali linguaggi fu il linguaggio Assembler, in cui al posto di ogni istruzione macchina viene usato un codice mnemonico ad esso associato. L'As-sembler, pur permettendo una semplificazione del lavoro, costringe ancora a ragiona-re in un modo strettamente legato a quello del processore. Per cui in seguito si cercò di distaccarsi sempre più dalla logica dei processori arrivando così ai cosiddetti lin-guaggi ad alto livello orientati non più alla macchina ma alla soluzione di problemi. Un'altro importante vantaggio dei linguaggi ad alto livello (e, storicamente, un'altra spinta al loro sviluppo) è il fatto di essere virtualmente indipendenti dal processore e dalla macchina particolare su cui si sviluppa. In questo modo è possibile utilizzare lo stesso sorgente su macchine diverse, ovvero come si dice in gergo informatico si ha una maggiore portabilità delle applicazioni (e dei programmatori che non sono co-stretti a imparare un nuovo linguaggio ogni volta che devono lavorare su una macchi-na diversa).

Al giorno d'oggi l'Assembler viene utilizzato solo in casi particolari: o quando è ne-cessario molta efficienza (in quanto anche se i traduttori cercano di ottimizzare il co-dice macchina risultante, lavorare direttamente in Assembler di solito permette di avere un codice migliore) oppure quando si deve operare a livello macchina (ad esempio per interfacciarsi a delle schede hardware). Per cui normalmente un'applica-

Page 87: Dal problema all'Algoritmo

zione viene scritta in gran parte in un linguaggio ad alto livello, mentre solo le parti più delicate vengono, eventualmente, codificate in Assembler.

Le Categorie La letteratura informatica normalmente suddivide i linguaggi ad alto livello in quat-tro categorie (imperativi, funzionali, dichiarativi ed orientati ad oggetto). Noi utiliz-zeremo una classificazione più ampia esaminando anche alcune categorie meno con-suete. Sottolineiamo comunque che le classi considerate non sono mutuamente esclu-sive, per cui un linguaggio può appartenere anche a più di una categoria. Analizzia-mo ora le loro caratteristiche.

• Imperativi: il programma è costituito da una sequenza di istruzioni il cui effetto è quello di modificare il contenuto della memoria dell'elaboratore o di determinare le modalità di esecuzione di altre istruzioni; in questo modello assume un ruolo fonda-mentale l'istruzione di assegnazione. Sono imperativi la maggior parte dei linguaggi più diffusi (Pascal, Basic, Fortran, C, Cobol, ecc.).

• Funzionali: il programma è considerato come il calcolo del valore di una funzione; in un linguaggio funzionale puro l'assegnazione esplicita risulta addirittura completa-mente assente (si utilizza soltanto il passaggio dei parametri). In tale modello rivesto-no particolare importanza la ricorsione, in pratica l'utilizzo di funzioni che richiama-no se stesse e, come struttura dati, la lista (sequenza ordinata di elementi). Il più im-portante rappresentante di questa categoria è senz'altro il Lisp (LISt Processing).

• Dichiarativi (o logici): il programma è considerato come la dimostrazione della ve-rità di una asserzione; il sorgente è costituito da una sequenza di asserzioni di fatti e regole. Non è necessario indicare esplicitamente il flusso di esecuzione, ma dato un obiettivo di partenza (il goal) è il sistema che cerca di individuare i fatti e le regole rilevanti. In tale ricerca assumono importanza meccanismi quali il pattern matching (in italiano potremo tradurre in combaciamento di forme) e il backtracking (in pratica se il sistema durante la ricerca entra in un vicolo cieco, ritorna alla scelta fatta più re-centemente e prova ad applicare la regola o il fatto seguente).Il fatto che vi sia una netta separazione tra la parte dichiarativa (il cosa fare) e la par-te procedurale (il come) rende un programma scritto in un linguaggio logico partico-larmente leggibile.I linguaggi logici risultano particolarmente adatti a risolvere problemi che riguardano entità e le loro relazioni. Mentre nelle normali applicazioni risultano essere di diffici-le utilizzo, anche perché, ma non solo, comportano un modo di programmare com-pletamente diverso dal solito.L'esemplare più noto di questa famiglia è il Prolog (PROgramming in LOGic). • Strutturati: man mano che l'ars programmandi si sviluppava si sono individuate

Page 88: Dal problema all'Algoritmo

delle metodologie appropriate. Le più importanti sono la programmazione struttura-ta e la programmazione ad oggetti. La programmazione strutturata è una tecnica il cui scopo è di semplificare la struttura dei programmi, limitando l'uso delle strutture di controllo a pochi casi semplici, tutti con un solo ingresso e una sola uscita. Tali metodologie sono state in seguito immerse in nuovi (e in già esistenti) linguaggi, dandone un esplicito supporto. Ad esempio per evitare l'uso indiscriminato del male-fico GOTO (salto incondizionato) sono state introdotte istruzioni di controllo del flusso più strutturate come il WHILE, FOR e l'UNTIL.La maggior parte dei linguaggi oggi diffusi sono strutturati, anche se spesso permet-tono comunque l'uso di strutture di controllo non strutturate in quanto la pratica ha dimostrato che, anche se raramente, vi sono dei casi in cui, ad esempio, con un GOTO si ottiene una maggiore leggibilità del codice. Ciò avviene soprattutto nella gestione delle eccezioni (ad esempio nel trattamento delle situazione di errore).

• Orientati ad oggetti: il programma è considerato l'effetto dell'interazione di un in-sieme di oggetti (insiemi di dati e algoritmi che manipolano questi dati) che comuni-cano con l'esterno mediante messaggi. Assumono rilevanza concetti quali incapsula-mento, ereditarietà (si possono costruire oggetti che ereditano le caratteristiche di un altro) e polimorfismo. Oltre a linguaggi specializzati che implementano i principi di tale metodologia (Smalltalk), sono nate delle estensioni dei linguaggi già esistenti, che li integrano (ad es. C++ per il C, CLOS per il Lisp, Java).

• Equazionali: il programma è considerato come la risoluzione di equazioni.

• Paralleli: in tali linguaggi vi sono dei meccanismi espliciti per indicare compiti che possono essere effettuati in parallelo. Il più diffuso è senz'altro l'Occam.

•Event driven: una delle cause della difficoltà di programmare in Windows è che si lavora in un ambiente event driven (orientato agli eventi) con linguaggi che non sup-portano direttamente tale paradigma. In un ambiente event driven non esiste più una sequenza determinata di comandi da eseguire ma una serie di reazioni che il sistema ha rispondendo a determinati stimoli esterni o interni. Questo è il segreto dell'enorme successo che ha riscosso il Visual Basic della Microsoft, permettendo di creare facil-mente applicazioni sotto Windows, proprio perché supporta direttamente il flusso event driven.

•Atipici: ad esempio, anche i fogli elettronici possono essere considerati linguaggi di programmazione in cui, in una certa misura, le relazioni temporali sono sostituite da relazioni spaziali (il valore di una cella dipende dal valore di altre). •Linguaggi visivi: in cui si utilizzano costrutti e grammatiche di tipo grafico o iconi-co.

Page 89: Dal problema all'Algoritmo

CAPITOLO VII

Software Di Base E Software ApplicativoIntroduzione

Il software di base è costituito dall'insieme di quei programmi il cui scopo è quello di rendere operativo il computer, cioè di metterlo in grado di eseguire programmi per ri-solvere i problemi dell'utente. Tipici esempi di software di base sono i sistemi opera-tivi, insieme di programmi che gestiscono l'hardware e forniscono un supporto per l'esecuzione di programmi che risolvono particolari problemi dell'utente. Il software di base è strettamente legato alle caratteristiche dell'hardware di ciascun computer per cui non è necessario che l'utente ne conosca i dettagli tecnici.

Il sw di base include

Sistema operativo (SO) Compilatori, linker, loader Interpreti

Compilatore: nell'accezione più generica, il compilatore è quel programma che tra-duce automaticamente il codice scritto in un linguaggio, in un altro. Un compilatore è composto generalmente dalle seguenti componenti: analizzatore lessicale, parser, ot-timizzatore, generatore di codice. Generalmente si utilizza un compilatore per tradur-re un linguaggio ad alto livello, quale il C (anche se in C si possono dare anche dei comandi di basso livello), in linguaggio assembly (linguaggio a basso livello).

Interpreti e traduttori….I traduttori sono quei programmi che permettono di effettuare la traduzione dal codi-ce sorgente (non eseguibile dalla CPU) al linguaggio macchina.Essi sono:

Assemblatori (che traducono ogni istruzione dal linguaggio assembler in lin-guaggio macchina);

Interpreti; Compilatori.

Page 90: Dal problema all'Algoritmo

L'interprete di un linguaggio è un programma che legge una alla volta le istruzioni di un programma sorgente; verifica la correttezza sintattica della istruzione, sulla base della sintassi del linguaggio; in caso positivo (assenza di errori), sulla base della se-mantica del linguaggio, la traduce nella corrispondente sequenza di istruzioni in lin-guaggio macchina e la esegue.

Figura 34

Il software applicativo è costituito dall'insieme dei programmi che risolvono determi-nati problemi dell'utente. Esempi di software applicativi sono i programmi di conta-bilità, i programmi di videoscrittura, i programmi di elaborazione grafica, ecc. E' es-senziale che il software applicativo interagisca con il software di base per poter fun-zionare. Esso inoltre può essere suddiviso in software personalizzato, cioè realizzato appositamente in base alle richieste di un singolo utente, e software standard o pac-kage, cioè software realizzato per risolvere una gamma di problemi abbastanza co-muni e pertanto diretto a più utenti.

Page 91: Dal problema all'Algoritmo

Tra gli svariati tipi di software applicativi “orizzontale” i più utilizzati comunemente in azienda vi sono

• programmi di videoscrittura (word processor)• fogli elettronici• programmi di presentazione• programmi di grafica• programmi gestionali e di contabilità• sistemi per la gestione dei database

Sia il software di base che il software applicativo per poter essere eseguito deve esse-re caricato nella RAM. Generalmente sia i dati che i programmi sono contenuti in strutture logiche chiamate file o archivi e memorizzati su supporti di memoria di massa (hard disk, floppy disk, nastri magnetici) in modo che le relative informazioni non si perdano quando il computer è spento. All'accensione del computer il sistema operativo viene caricato dal supporto di memoria di massa, su cui si trova, nella RAM, rendendolo pronto per l'esecuzione dei programmi applicativi. Un programma applicativo deve essere anch'esso caricato in RAM per poter essere eseguito. L'esecu-zione di un programma consiste nella esecuzione da parte del processore di ciascuna delle istruzioni che compongono il programma stesso.

Un programma è un insieme di istruzioni che, eseguite dal processore di un elabora-tore, risolve un determinato problema. Tuttavia le istruzioni devono essere espresse in forma tale da essere “comprese" dal calcolatori.

L'installazione

E’ il processo tramite il quale un nuovo software viene inserito nel computer. Di soli-to non si tratta di una semplice copia del file eseguibile sull'hard disk, quanto piutto-sto di una complessa procedura di interfacciamento fra la nuova applicazione ed il si-stema operativo (che deve aggiornare tutta una serie di file di configurazione genera-li). Per fortuna l'istallazione è quasi sempre realizzata attraverso una procedura auto-matica che richiede solo un intervento minimo da parte dell'utente (tipicamente all'u-tente viene chiesto solo di specificare alcune opzioni, come il nome della cartella in cui copiare il programma, se eseguire l'installazione standard o eliminare/aggiungere alcuni componenti opzionali, ecc.). L'installazione si esegue una sola volta e da quel momento in poi il programma è sempre disponibile per l'uso. Oggi esistono due modi principali per procurarsi nuovo software: acquistare da un rivenditore i CD di instal-lazione o scaricare (download) da Internet il programma di installazione (esiste anche un terzo modo, che è fare una copia pirata, ma di questo discuteremo nel paragrafo del copyright). Per installare il software attraverso un CD è sufficiente inserire il di-sco nel drive e la procedura parte da sola; se così non fosse allora bisogna cercare sul

Page 92: Dal problema all'Algoritmo

CD un file eseguibile (.exe), che dovrebbe chiamarsi "setup.exe" o "autorun.exe" o "install.exe" o qualcosa di simile (comunque un .exe), e farlo partire con un doppio click. L'installazione attraverso un file scaricato da Internet è ancora più semplice: se è un file .exe basta un doppio click sull'icona del file per attivare la procedura. A vol-te il file scaricato da Internet può essere di tipo .zip (archivio di file compressi o, se-condo il gergo comune, “zippati”), in questo caso occorre prima effettuare la decom-pressione dei file attraverso un programma opportuno (WinZip, o altri) e poi cercare il file eseguibile come per il CD. Ad ogni modo, all'interno del file zip decompresso o nelle pagine del sito Internet, dovrebbe trovarsi sempre una breve guida all'installa-zione (quasi sempre solo in inglese).

Il Copyright

Nell'aquisto del CD di installazione software è sempre compresa anche la licenza d'u-so personale che consente di utilizzare liberamente quel software per la propria atti-vità (i termini esatti della licenza sono sempre inclusi nella documentazione allegata al prodotto). Tipicamente il costo di un software per PC va da poche decine di Euro fino ad alcune migliaia, in funzione della complessità del prodotto. Il software scaricato da Internet è invece soggetto a due tipi di licenza: freeware e shareware.

Il software freeware è gratuito e può essere copiato e usato liberamente (eccetto ri-venderlo ad altri); si tratta di solito di programmi relativamente semplici, messi a di-sposizione del pubblico per motivi pubblicitari (di solito sono versioni semplificate di prodotti a pagamento, oppure versioni di lancio per nuovi software) o anche per semplice generosità dei creatori. A volte (anzi, spesso) l'uso gratuito viene vincolato ad impieghi esclusivamente non commerciali

Il software shareware è dato "in prova" gratuita per un periodo di tempo limitato (per esempio 30 giorni) a partire dal momento dell'installazione. Una volta scaduti i termini, se l'utente è soddisfatto e vuole continuare ad usare il prodotto, deve acqui-starlo, altrimenti deve rimuoverlo dalla macchina. I programmi shareware alla sca-denza si comportano in maniera diversa: alcuni avvisano l'utente con un messaggio del tipo "Guarda, che mi dovresti pagare!", ma continuano a funzionare. Altri invece smettono di funzionare o funzionano in modalità ridotta (per esempio non consento-no più di salvare i file). I programmi shareware riacquistano la completa funzionalità (e legalità) solo con l'inserimento di una "chiave software" che il produttore fornisce dopo il pagamento.

Oltre ai programmi freeware e shareware si possono trovare su Internet anche pro-grammi in versione demo (abbreviazione di demonstration): si tratta di versioni di-mostrative gratuite di software a pagamento, che però funzionano fin da subito in

Page 93: Dal problema all'Algoritmo

maniera parziale (per esempio non consentono di salvare i file, o hanno solo alcune funzioni disponibili).A parte i siti delle case produttrici, esistono due siti Internet che raccolgono buona parte del software disponibile su Internet: si tratta di TuCows e di CNET Download. Un sito in italiano per il download è Volftp della Mondadori. La copiatura dei CD di software è consentita unicamente come copia di riserva per l'utente che li ha acqui-stati (nell'eventualità che i CD originali si rovinassero). Non è consentito invece né copiare i CD per cederli ad altri (a nessun titolo), né usare gli stessi CD originali per effettuare più installazioni su diverse macchine (a meno che la licenza non lo preveda espressamente); si parla in questi casi di software pirata. Per quanto riguarda inoltre i programmi shareware, esiste la possibilità di reperire su Internet delle "chiavi pirata" (dette cracks) che ne sbloccano il funzionamento senza aver pagato la licenza. Inutile dire che, anche in questo caso, si tratta di un'operazione illegale (in gergo, si parla di "programmi craccati"). Si tenga presente inoltre che il software su Internet non ha mai un prezzo proibitivo (spesso si tratta di poche decine di dollari) e che con l'ac-quisto legale si favorisce l'ulteriore disponibilità di nuovo software: se nessuno pa-gasse non ci sarebbe più la possibilità di trovare i programmi in rete. Il software pira-ta è diffusissimo per uso personale; le stesse aziende produttrici lo tollerano di buon grado, perché questo favorisce comunque la conoscenza del programma e quindi, di riflesso, anche la sua diffusione legale. Non viene invece assolutamente tollerato l'u-so professionale: chi usa software pirata per il lavoro o per lucro si espone al rischio di grosse sanzioni (che, a seconda dei casi, possono diventare anche penali).

Page 94: Dal problema all'Algoritmo

CAPITOLO VIII

Sistemi OperativiPremessa

Introduzione ai sistemi operativi

Un sistema operativo è un insieme di istruzioni che consente al computer di caricare i programmi in memoria e di eseguirli, di registrare, leggere, e modificare i dati sui di-schi rigidi o sui floppy. Inoltre, consente all’utilizzatore di avere un controllo sulla memoria del computer e sul modo nel quale i dati caricati in memoria verranno trat-tati.

Queste funzioni solo raramente vengono richieste in modo esplicito dall’utilizzatore del computer. Il più delle volte questi lavora con un programma, ad esempio di con-tabilità o di elaborazione testi, che prevede la lettura di dati dal disco, la visualizza-zione sul monitor, la digitazione sulla tastiera, la registrazione del lavoro effettuato, la stampa su carta. Apparentemente è il programma ad effettuare tutte queste opera-zioni, in realtà il nostro software si limita all’elaborazione dei dati in memoria, per tutto il resto si deve affidare al sistema operativo. Ogni singola attività ha origine da una richiesta del programma al sistema operativo, che provvede ad eseguirla ed a re-stituirne i risultati. La pressione di un tasto sulla tastiera viene percepita dal sistema operativo, che provvede a notificarla al programma. Questi decide se tenerne conto, eventualmente la elabora e, se è il caso, visualizza sul monitor un segnale che può es-sere la semplice lettera corrispondente al tasto, oppure un altro messaggio, o il risul-tato dell’elaborazione. Il programma può anche non tener conto della pressione del tasto e continuare indisturbato nel suo lavoro. Se l’utente vuole operare con un file registrato su disco, egli impartisce un comando al suo programma, il quale deve pas-sare la richiesta al sistema operativo che provvede ad azionare il disk drive, a muove-re la testina, a cercare il file nel disco, a leggerlo, a collocarlo in RAM ed infine a metterlo a disposizione del programma. Eventuali errori in questa successione di azioni, ad esempio l’assenza del dischetto dal drive o la mancanza del file sul di-schetto, vengono gestiti dal sistema operativo. Tranne in caso di errori di questo tipo, il lavoro del sistema operativo e la sua interazione con il programma sono del tutto invisibili per l’utente. Ciascun programma è strettamente legato al sistema operativo con cui deve essere eseguito. Un programma realizzato per funzionare in coppia con un sistema operativo, può funzionare solo se è presente quel determinato sistema operativo. Molte funzioni del programma, come abbiamo visto, sono demandate al

Page 95: Dal problema all'Algoritmo

sistema operativo, al quale il programma si limita ad impartire le dovute istruzioni. Un diverso sistema operativo non riuscirebbe ad interpretare correttamente queste istruzioni, ed una volta caricato in memoria il programma, il computer si blocchereb-be. L’importanza del sistema operativo è evidente. Qualsiasi programma vi debba convivere, ne mutua la velocità, il funzionamento, la logica, ed anche l’aspetto esteti-co. Un cattivo programmatore può anche creare programmi brutti e lenti con un siste-ma operativo potente, ma neanche un programmatore bravissimo potrebbe creare un programma bello e veloce con un sistema operativo lento e farraginoso. E comunque anche il programma più brutto e lento sarebbe meno brutto e meno lento se fosse sta-to creato per un sistema operativo veloce e funzionale.

Il Bootstrap

Il sistema operativo viene anche chiamato software di sistema, proprio perché è in-scindibile dal sistema e ne costituisce la base. Una prima parte di sistema operativo è presente in un’area prefissata di memoria ROM. Questo primo segmento ha il compi-to di permettere al computer, all’accensione, di leggere dal disco e caricare in memo-ria la seconda parte del sistema operativo, composta spesso da molti file. Durante questa prima operazione, chiamata bootstrap, vengono eseguiti anche una serie di piccoli test dei componenti del sistema, dal microprocessore alla ROM, dalla RAM ai coprocessori dedicati. Questi test servono a constatare che il computer sia vera-mente in grado di leggere la parte successiva di sistema operativo e di caricarla in RAM.

Un sistema operativo viene creato in diretto collegamento con la struttura hardware su cui deve agire:

- microprocessore;

- configurazione RAM e ROM;

- coprocessori;

- schede;

- periferiche di input/output;

- caratteristiche dei supporti di registrazione dei dati.

Page 96: Dal problema all'Algoritmo

Sistema operativo e microprocessore

Il sistema operativo è strettamente correlato al microprocessore presente. I computer che usano un microprocessore Intel della famiglia 80xxx possono utilizzare il MS-DOS o Windows della Microsoft. Modelli precedenti di computer, che avevano il microprocessore Zilog Z80, utilizzavano il sistema operativo CP/M.

Esiste solo un sistema operativo che può lavorare con microprocessori diversi: Unix. Si tratta di un sistema operativo derivato dal mondo dei computer di grosse dimen-sioni, i mainframe, utilizzati nei centri calcolo industriali o universitari. Unix è così utile, versatile e diffuso, che è stato importato anche nel mondo del personal.

In realtà non si tratta di un sistema operativo uguale per tutti, ma semplicemente di sistemi operativi diversi che utilizzano gli stessi comandi. Infatti esistono versioni Unix per ciascuno microprocessore, e se cercassimo di caricare la versione Unix creata per il Motorola su un computer dotato di Intel, non otterremmo nulla. Né i supporti formattati dalla versione di Unix per Intel potrebbero essere letti dalla ver-sione di Unix sotto Motorola.

Il set delle istruzioni è però identico, perciò un programma elaborato con un micro-processore (salvo qualche adattamento) gira anche su tutti gli altri. Questa flessibilità fa di Unix, o di una sua evoluzione, il sistema operativo del futuro. Tuttavia esso ri-chiede notevoli risorse di memoria e di potenza elaborativa per fare il suo lavoro, con pesanti conseguenze sui costi delle macchine che lo adottano. Tranne che in casi par-ticolari, come in applicazioni grafiche specializzate, nella programmazione o nella coesistenza con mainframe, Unix non ha un utilizzo molto diffuso nei personal. La versione Unix per i personal è Linux.

Categorie di sistemi operativi

Oltre alle differenze materiali, che ne determinano una pressoché completa incompa-tibilità, esistono anche rilevanti differenze di sostanza.Un sistema operativo può es-sere monoutente o multiutente se permette l’uso da parte di uno solo o di più utenti contemporaneamente, e può essere monotask o multitask se consentire il funziona-mento di uno solo o di più programmi. Con un sistema operativo monoutente e mo-notask il computer può essere utilizzato da una sola persona per volta, che lavora con un solo programma. Per passare da un programma di calcolo ad uno di registrazione finanziaria è necessario chiudere il primo programma e quindi far partire il secondo. Con un sistema operativo monoutente e multitask la persona che utilizza il computer

Page 97: Dal problema all'Algoritmo

può lavorare contemporaneamente con il programma di calcolo e con quello finan-ziario senza dover chiudere il primo per passare al secondo. Sarà compito del sistema operativo gestire le risorse della macchina, sia di memoria che di input/output, fra i due, o più, programmi in esecuzione. Con un sistema operativo multiutente e multita-sk una persona può lavorare con programmi diversi, mentre contemporaneamente un terminale od un altro personal ha accesso allo stesso computer e lavora, a sua volta, con altri programmi.

I primi sistemi operativi, come il CP/M, DOS ed il Mac/OS, erano monoutente e mo-notask. Con un vero sistema operativo multitask, invece, tutti i programmi funziona-no contemporaneamente e, mentre l’utente introduce dei dati in un programma, l’al-tro continua ad elaborare i suoi calcoli.

L’interfaccia con l’utilizzatore

Quando è in esecuzione un programma, il sistema operativo è pressoché invisibile al-l’utente. Tuttavia esistono molte condizioni nelle quali l’utente deve lavorare diretta-mente con il sistema operativo, impartirgli comandi e riceverne risposte.

Al di là del lavoro che si può svolgere con un programma, è spesso necessario effet-tuare una copia di un file, registrarlo su un sopporto, cambiargli nome od anche can-cellarlo. Questi sono compiti precisi del sistema operativo. La stessa azione di sce-gliere un programma e di lanciarlo in esecuzione, è un comando impartito al sistema operativo. Ogni sistema operativo possiede una serie di comandi, ognuno dei quali svolge una funzione univoca. I comandi, per essere riconosciuti come tali, devono es-sere inviati con una determinata procedura. Insieme al comando spesso devono esse-re forniti, secondo un preciso ordine e con forme rigorose, parametri che ne condizio-nino l’esecuzione o indicazioni sui dischi od i file che ne devono essere oggetto.

Esistono due modi per impartire comandi al sistema operativo:

- direttamente, tramite la digitazione dei comandi sulla tastiera, con una riga di testo su schermo;

Page 98: Dal problema all'Algoritmo

Figura 35

- indirettamente, tramite l’uso di un mouse o di tasti funzione, nell’ambito di una in-terfaccia grafica che operi da intermediario fra l’utente e il sistema operativo.

Figura 36

Page 99: Dal problema all'Algoritmo

Struttura di un Sistema Operativo

MonoliticaIl sistema monolitico, fondamentalmente, non ha struttura, quindi il sistema operati-vo è una collezione di procedure compilate in un unico oggetto che si possono chia-mare (e vedere) a vicenda, senza che ci siano dei controlli o delle regole particolari per evitare azioni sbagliate (system call bloccanti). Ma un minimo di struttura si può comunque dare, come mostrato in Figura.

Figura 37Un semplice modello di struttura di un sistema monolitico.

Nella figura, infatti, si ha la seguente suddivisione: Un programma principale (main procedure) che richiama le procedure di ser-

vizio. Le procedure di servizio (service procedures) che effettuano le system call. I programmi di utilità (utility procedure) che aiutano le procedure di servizio.

Un programma utente, generalmente, esegue una system call che cambia la modalità della macchina da "modo utente" a "modo kernel"; il sistema operativo (in modo ker-nel) prende i parametri del programma, effettua la system call e riporta il controllo al programma utente. I più comuni SO monolitici sono UNIX, Linux e Windows.

Page 100: Dal problema all'Algoritmo

Client-Server

Il modello client-server si basa sull'idea di minimizzare le funzioni che girano in modo kernel, sviluppando un nucleo minimo chiamato microkernel che offre le fun-zioni base per la gestione dei processi e lo scambio di messaggi. Siccome molte fun-zioni vengono svolte da processi server che girano in modo utente, questi non hanno accesso diretto all'hardware e devono comunicarci con messaggi speciali. Il modello client-server è più sicuro ma meno efficiente di un sistema monolitico; infatti se vie-ne riscontrato un errore questo non "condanna" il sistema ad arrestarsi totalmente.

Figura 38

Nei sistemi distribuiti il modello client-server presenta molti vantaggi, come ad esempio la possibilità di non curarsi dove un messaggio sia fisicamente, o come ven-ga mandato attraverso la rete (se ad un server locale o remoto), l'importante è che il messaggio venga mandato e che si ottenga una risposta. Spesso si costruisce un mec-canismo nel kernel ma si lascia la decisione di policy (politica) ai server. .

Figura 39

Page 101: Dal problema all'Algoritmo

Software applicativoInterprete comandi (shell)Gestione dei fileGestione delle perifericheGestione della memoriaGestione CPU

HW

Buccia di cipolla

La struttura di un sistema operativo puo' essere definita "a cipolla": si hanno 6 strati , ognuno dei quali si occupa di svolgere diversi compiti:

- Il primo strato gestisce le interruzioni e i driver: le procedure di interruzione metto-no il sistema in uno stato di attesa, ad esempio aspetta che sia premuto un tasto; i dri-ver regolano la gestione dei dispositivi di ingresso e uscita, senza interferire con il programma in esecuzione.- Nel secondo strato si trovano la gestione della memoria: file paging, frammentazio-ne, indirizzamento.- Nel terzo strato si trovano i Device: monitor, tastiera e mouse sono Device, disposi-tivi logici che comandano dispositivi fisici.- Nel quarto strato c'e' il File System :questo rappresenta le modalita' con cui viene interrogata la memoria di massa; si trova anche un convertitore che si occupa di tra-sformare e di ordinare i file nelle diverse cartele.- Il quinto strato e' a volte chiamato "User Interface Toolbox": effettua il collegamen-to con gli strati inferiori e le applicazioni finali; e' diviso in tanti blocchi logici, i Ma-nager, ognuno dei quali e' rappresentato da una serie di procedure; l' insieme di tutte le procedure e' chiamato API.

- Il sesto strato e' rappresentato dall'interfaccia utente, il cui compito e' quello di ren-dere visibile l'organizzazione dei file e di semplificare l' utilizzo delle applicazioni. Non è propriamente uno strato del sistema operativo poiché è costituito da tutti i pro-grammi applicativi utilizzabili dall’utente, ma in molte rappresentazioni viene classi-ficato come tale

Figura 49

Page 102: Dal problema all'Algoritmo

CAPITOLO IX

Introduzione alle Reti di Calcolatori, In-ternet ed il World Wide Web

Premessa

Una rete informatica è un insieme di PC e di altri dispositivi che sono collegati tra loro tramite cavi.Il sistema consente a questi dispositivi di comunicare tra loro e di condividere infor-mazioni e risorse. Le reti possono avere dimensioni differenti ed è possibile ospitarle in una sede singola oppure dislocarle in tutto il mondo.

Figura 40Una rete che è collegata su un'area limitata si chiama "Rete Locale" oppure LAN (Local Area Network). Spesso la LAN è localizzata in una sola sede. Per WAN (Wide Area Network) si intende un gruppo di dispositivi o di LAN collegate nell'am-bito di una vasta area geografica, spesso mediante linea telefonica o altro tipo di ca-blaggio (ad es. linea dedicata, fibre ottiche, collegamento satellitare, ecc..). Uno dei più grandi esempi di WAN è l'Internet stessa. Esistono diverse tecnologie LAN; le più comuni sono: Ethernet, Fast Ethernet e Gigabit Ethernet. Una rete può essere for-mata da una o più di queste tecnologie. Le reti Ethernet, Fast Ethernet e Gigabit Ethernet funzionano in modo simile e la differenza principale è data dalla velocità alla quale trasferiscono le informazioni. Ethernet funziona a 10 Megabit per secondo (o Mbps), Fast Ethernet a 100Mbps e Gigabit Ethernet a 1000 Mbps. I dispositivi di

Page 103: Dal problema all'Algoritmo

una rete comunicano trasmettendosi reciprocamente informazioni; le informazioni trasmesse sono gruppi di piccoli impulsi elettrici, detti pacchetti. Ogni pacchetto con-tiene l'indirizzo del dispositivo che esegue la trasmissione (l'indirizzo di sorgente) e l'indirizzo del dispositivo che riceve i dati (l'indirizzo di destinazione). Queste infor-mazioni vengono utilizzate dai PC e da altri dispositivi presenti nella rete per aiutare il pacchetto a raggiungere la propria destinazione. Le reti Ethernet e Fast Ethernet impiegano un protocollo chiamato CSMA/CD (Carrier-Sense Multiple Access with Collision Detection). In tal modo può comunicare solo un dispositivo per volta. Quando due dispositivi cercano di comunicare simultaneamente, tra i pacchetti tra-smessi si verifica una collisione che viene rilevata dai dispositivi trasmittenti. I di-spositivi cessano quindi di trasmettere e attendono prima di inviare nuovamente i loro pacchetti. Il meccanismo è paragonabile ad una conversazione tra un gruppo di persone; se due persone parlano contemporaneamente, si fermano entrambe e una di esse inizia a parlare nuovamente.

Il Modello OSIE un modello sviluppato da una proposta del Internetional Standards Organization (ISO) come primo passo verso la standardizzazione internazionale dei protocolli im-piegati nei diversi strati (vedremo dopo). Si chiama modello di riferimento ISO OSI (Open System Interconnection) perche riguarda la connessione di sistemi aperti, cioè di sistemi che sono “aperti” verso la comunicazione con altri; per brevità varrà chia-mato semplicemente OSI

Figura 41

Livello 7 Applicazione (Network Processes to Application)Si interfaccia direttamente con i programmi applicativi (Application Pro-gram Interface). I campi applicativi più conosciuti sono, per esempio, la posta elettronica (software per la gestione della Email), il trasferimento dei flussi (software per ftp o http), le connessioni remote (software di ac-cesso remoto) , emulazioni di terminali ecc.

Page 104: Dal problema all'Algoritmo

Livello 6 Presentazione (Data Representation)Il livello 6 serve per la trasformazione/conversione del formato dei dati (cifratura e decifratura o codifica, es. ASCII o MPEG). In pratica assicura la "leggibilità e l'interpretazione" del dato da parte del sistema ricevente.

Livello 5 Sessione (Interhost Communication)Si preoccupa di controllare il dialogo (sincronizzazione/mantenimento della comunicazione) fra due programmi applicativi.

Livello 4 Trasporto (End-to-end connections)

È il livello a cui è delegata la funzione di invio e ricezione dei dati. Forni-sce trasferimento dati affidabile correggendo gli errori. Divide i messaggi i in pacchetti, ne controlla e preserva l'ordine con cui devono essere spe-diti, controlla la presenza di errori. E' il primo livello che lavora indipen-dentemente dalla topologia della rete in cui si trova. Non si occupa della qualità del servizio e della sua affidabilità.

Livello 3 Network (Address and best path)Questo livello si occupa della gestione relativa all'instradamento dei pac-chetti, controlla l'indirizzo di provenienza e di destinazione e gestisce le tabelle di instradamento (come le tabelle di routing) necessarie per far giungere a destinazione i pacchetti. E' questo il livello che sceglie gli in-stradamenti alternativi, sia in caso di guasti o di mutate condizioni di traf-fico, che in base alla scelta del minor costo.

Livello 2 Data Link (Access to media)Gestisce i pacchetti (frame), spezzoni di messaggio di lunghezza fissa. Si occupa di tutti i meccanismi di individuazione e correzione degli errori avvenuti nel livello 1. A questo livello avviene l'indirizzamento fisico ba-sato sull'indirizzo fisico degli host (MAC).

Livello 1 Fisico (Binariy transmission)Si occupa della trasmissione dei dati sul mezzo fisico (media). Qui viene, di fatto, specificata la rappresentazione elettrica degli 0 ed 1 binari in modo tale che il sistema ricevente possa leggere correttamente il flusso di bit in arrivo. Tutti gli standard di voltaggio, distanze massime, connettori fisici ecc. sono qui attribuiti.

Page 105: Dal problema all'Algoritmo

Il Modello TCP/IPLasciamo da parte il modello di riferimento OSI per analizzare il modello di riferi-mento progenitore di tutte le reti di computer geografiche, ARPANET e il suo suc-cessore Internet. ARPANET connetteva centinaia di università e installazioni. Così come ISO/OSI anche il modello del TCP/IP è stato strutturato in livelli.

Figura 42

Come si può notare come il modello TCP/IP è più semplice del modello ISO/OSI ed è strutturato in soli quattro livelli. Il suo nome deriva dai due principali protocolli che lo compongono, il TCP (Trasmission Control Protocol) che copre il livello 3 e l'IP (Internet Protocol) che copre il livello 2. Le funzioni dei vari livelli sono le seguenti: Applicazione :É relativo ai programmi di interfaccia con la rete, in genere questi ven-gono realizzati secondo il modello client-server, realizzando una comunicazione se-condo un protocollo che è specifico di ciascuna applicazione. Trasporto: Fornisce la comunicazione tra le due stazioni terminali su cui girano gli applicativi, regola il flusso delle informazioni, può fornire un trasporto affidabile, cioè con recupero degli errori o inaffidabile. I protocolli principali di questo livello sono il TCP e l'UDP. Internet: Si occupa dello smistamento dei singoli pacchetti su una rete complessa e interconnessa, a questo stesso livello operano i protocolli per il reperimento delle in-formazioni necessarie allo smistamento, per lo scambio di messaggi di controllo e per il monitoraggio della rete. Il protocollo su cui si basa questo livello è IP (sia nella attuale versione, IPv4, che nella nuova versione, IPv6). Host to Network: È responsabile per l'interfacciamento al dispositivo elettronico che effettua la comunicazione fisica, gestendo l'invio e la ricezione dei pacchetti da e ver-so l'hardware.La comunicazione fra due stazioni remote avviene secondo le modalità illustrate in figura, dove si è riportato il flusso dei dati reali e i protocolli usati per lo scambio di

Page 106: Dal problema all'Algoritmo

informazione su ciascun livello. Si è genericamente indicato ethernet per il livello 1, anche se in realtà i protocolli di trasmissione usati possono essere molti altri.

Figura 43

Per chiarire meglio la struttura della comunicazione attraverso i vari protocolli mo-strata in figura, conviene prendere in esame i singoli passaggi fatti per passare da un livello al sottostante, la procedura si può riassumere nei seguenti passi: • Le singole applicazioni comunicano scambiandosi i dati ciascuna secondo un suo specifico formato. Per applicazioni generiche, come la posta o le pagine web, viene di solito definito ed implementato quello che viene chiamato un protocollo di appli-cazione (esempi possono essere HTTP, POP, SMTP, ecc.), ciascuno dei quali è de-scritto in un opportuno standard (di solito attraverso un RFC4). • I dati delle applicazioni vengono inviati al livello di trasporto usando un'interfaccia opportuna (i socket). Qui verranno spezzati in pacchetti di dimensione opportuna e inseriti nel protocollo di trasporto, aggiungendo ad ogni pacchetto le informazioni necessarie per la sua gestione. Questo processo viene svolto direttamente nel kernel, ad esempio dallo stack TCP, nel caso il protocollo di trasporto usato sia questo. • Una volta composto il pacchetto nel formato adatto al protocollo di trasporto usato, questo sarà passato al successivo livello, quello di rete, che si occupa di inserire le opportune informazioni per poter effettuare l'instradamento nella rete ed il recapito alla destinazione finale. In genere questo è il livello di IP (Internet Protocol), a cui vengono inseriti i numeri IP che identificano i computer su internet. • L'ultimo passo è il trasferimento del pacchetto al driver della interfaccia di trasmis-sione, che si incarica di incapsularlo nel relativo protocollo di trasmissione. Questo

Page 107: Dal problema all'Algoritmo

può avvenire sia in maniera diretta, come nel caso di ethernet, in cui i pacchetti ven-gono inviati sulla linea attraverso le schede di rete, che in maniera indiretta con pro-tocolli come PPP o SLIP, che vengono usati come interfaccia per far passare i dati su altri dispositivi di comunicazione (come la seriale o la parallela).

Criteri generali dell'architettura del TCP/IP

La filosofia architetturale del TCP/IP è semplice: costruire una rete che possa sop-portare il carico in transito, ma permettere ai singoli nodi di scartare pacchetti se il carico è temporaneamente eccessivo, o se risultano errati o non recapitabili. L'incari-co di rendere il recapito pacchetti affidabile, non spetta al livello di collegamento, ma ai livelli superiori. Pertanto il protocollo IP è per sua natura inaffidabile, in quanto non è assicurata né una percentuale di successo né un limite sui tempi di consegna dei pacchetti. È il livello di trasporto che si deve occupare (qualora necessiti) del controllo del flusso dei dati e del recupero degli errori; questo è realizzato dal proto-collo TCP. La sede principale di intelligenza della rete è pertanto al livello di traspor-to. Le singole stazioni collegate alla rete non fungono soltanto da punti terminali di comunicazione, ma possono anche assumere il ruolo di router (instradatori), per l'in-terscambio di pacchetti da una rete ad un'altra. Questo rende possibile la flessibilità della rete che è in grado di adattarsi ai mutamenti delle interconnessioni. La caratteri-stica essenziale che rende tutto ciò possibile, è la strutturazione a livelli tramite l'in-capsulamento. Ogni pacchetto di dati viene incapsulato nel formato del livello suc-cessivo, fino al livello del collegamento fisico. In questo modo il pacchetto ricevuto ad un livello n dalla stazione di destinazione è esattamente lo stesso spedito dal livel-lo n dalla sorgente. Questo rende facile il progettare il software facendo riferimento unicamente a quanto necessario ad un singolo livello, con la confidenza che questo poi sarà trattato uniformemente da tutti i nodi della rete.

Gli Apparati di Rete

I principali apparati che compongono una LAN:

• Schede di rete (NIC)una scheda di rete svolge compiti importanti quali:Logical link control, comunica con i livelli superiori Nome, fornisce un MAC univoco per la comunicazione tra host Framing, segmenta i pacchetti in frame e ricostruisce i pacchetti da frame MAC, permette l’accesso al mezzo fisico di connessione (ARP,RARP) Signaling, codifica i dati in stream di bit corrispondenti ad un segnale su un de-terminato mezzo

Page 108: Dal problema all'Algoritmo

• HUB (concentratore)Tutti gli utenti collegati all'hub (o ad una serie di hub connessi in cascata) si tro-vano sullo stesso segmento di rete e condividono la stessa larghezza di banda. Trovandosi nello stesso dominio di collisione le trasmissioni contemporanee sono notevolmente rallentate.

Figura 44

• Switch (bridge multiporta)Lo switch permette di segmentare il traffico. In pratica, uno switch crea dei per-corsi commutati collegando fisicamente un interfaccia ad un altra rendendo così disponibile tutta la larghezza di banda.

Figura 45

• Router (instradamento)Il router svolge 2 attività principali:determinazione del percorso ottimale dei pacchettitrasporto delle informazioni tra 2 reti diverse

Il router è un apparato “intelligente” in grado di prendere decisioni sull’instrada-mento dei pacchetti in funzione delle tabelle di routing.

Page 109: Dal problema all'Algoritmo

Tipologia Della Rete

Le strutture fondamentali delle reti (si parla in questo caso di topologia di rete) sono di tre tipi:

Stella : Si ha una rete a stella quando tutti i nodi periferici sono connessi a un nodo principale in modo indipendente dagli altri. In questo modo, tutte le comunicazioni passano per il nodo centrale e in pratica sono gestite completamente da quest'ultimo. Rientra in questa categoria il collegamento da punto a punto (point-to-point) in cui sono collegati solo due nodi.

Figura 46

Anello:Si ha una rete ad anello quando tutti i nodi sono connessi tra loro in sequenza, in modo da formare un anello ideale, e ognuno ha un contatto diretto solo con il pre-cedente e il successivo. In questo modo, la comunicazione avviene (almeno in teoria) a senso unico, e ogni nodo ritrasmette al successivo i dati che non sono destinati allo stesso.

Figura 47

Page 110: Dal problema all'Algoritmo

Bus.:Si ha una rete a bus quando la connessione dei nodi è condivisa da tutti, per cui i dati trasmessi da un nodo sono intercettabili da tutti gli altri. In questa situazione la trasmissione simultanea da parte di due nodi genera un collisione e la perdita del messaggio trasmesso.

Figura 48

Quali sono i vantaggi di avere una Rete?

In una rete LAN (Local Area Network), le informazioni e le risorse possono essere condivise. Questa possibilità offre diversi vantaggi:

E' possibile condividere periferiche costose, come le stampanti. In una rete, tutti i computer possono accedere alla stessa stampante.

E' possibile inoltrare dati tra utenti senza l'uso di floppy disk. Trasferendo file

attraverso la rete, non si perde tempo nel copiare i file su un dischetto o su un altro PC. Inoltre vi sono meno limitazioni sulle dimensioni del file che può essere trasferito attraverso una rete.

E' possibile centralizzare programmi informatici essenziali, come gli applica-

tivi finanziari e contabili. Spesso gli utenti devono poter accedere allo stesso programma in modo che possano lavorarvi simultaneamente. Un esempio di ciò potrebbe essere un sistema di prenotazione di biglietti in cui è importante evitare di vendere due volte lo stesso biglietto.

E' possibile istituire sistemi di backup automatico dei file. E' possibile usare

un programma informatico per fare il backup automatico di file essenziali, ri-sparmiando tempo e proteggendo l'integrità del proprio lavoro.

Page 111: Dal problema all'Algoritmo

In una rete WAN (Wide Area Network), le informazioni e le risorse sono condivise in un'area geografica più ampia. Questa possibilità offre diversi vantaggi:

E' possibile inviare e ricevere messaggi in tutto il mondo, comunicare mes-saggi e avviso a molte persone, in molti luoghi diversi, in modo più rapido ed economico.

E' possibile scambiare i file con i colleghi situati in altri luoghi o accedere da casa alla rete aziendale.

E' possibile accedere alla vaste risorse dell'Internet e di World Wide Web.

Grazie alla WAN, è possibile condividere le risorse e le informazioni all'interno di una vasta area geografica (ad es. consultare il web, trasferire file e messaggi median-te e-mail, ecc..). Per accedere ad una WAN, è necessario un modem o un router. Per accedere ad Internet, occorre avere inoltre un account con un provider di servizi In-ternet (ISP).

Internet Internet non è una rete, ma una vasta raccolta di reti diverse che usano certi protocol-li e offrono certi servizi comuni. È un sistema inconsueto che non ha un progettista e non è controllato da nessuno. Internet, tramite l’applicazione WWW(World Wide Web) ha portato sulla rete milio-ni di utenti. Questa invenzione ideata dal fisico del CERN Tim Bernes-Lee ha per-messo la preparazione di pagine di informazione contenenti testo, immagini,suoni e video con collegamenti interni ad altre pagine. Facendo “click” su un collegamento, l’utente è immediatamente trasportato nella pagina a cui il collegamento si riferisce. La maggior parte di questa crescita è stata stimolata nel corso degli anni ’90 da aziende chiamate ISP (Internet Service Provider). Si tratta di società che danno agli utenti residenziali la possibilità di chiamare uno dei loro computer e collegarsi ad In-ternet per accedere al WWW, email e altri servizi.

Page 112: Dal problema all'Algoritmo

CAPITOLO X

Infrastutture di Rete. Internet. Protocol-li di Comunicazione. Indirizzamento in rete. Servizi di Internet: posta elettroni-

ca, file transfer e data streamingPremessa

Pacchetti di dati vengono trasmessi e ricevuti in base a delle regole definite da un protocollo di comunicazione. A qualunque livello della nostra esistenza è necessario un protocollo per comunicare: in un colloquio tra due persone, chi parla invia un messaggio all'altra che, per riceverlo, deve ascoltare. Volendo proseguire con questo esempio, si può anche considerare il problema dell'inizio e della conclusione della comunicazione: la persona con cui si vuole comunicare oralmente deve essere rag-giunta e si deve ottenere la sua attenzione, per esempio con un saluto; alla fine della comunicazione occorre un modo per definire che il contatto è terminato, con una qualche forma di commiato. Quanto appena visto è solo una delle tante situazioni possibili. Si può immaginare cosa accada in una assemblea o in una classe durante una lezione.

I Protocolli

I dati viaggiano nella rete in forma di pacchetti. Il termine è appropriato perché si tratta di una sorta di confezionamento delle informazioni attraverso cui si definisce il mittente e il destinatario dei dati trasmessi. Il confezionamento e le dimensioni dei pacchetti dipendono dal tipo di rete fisica utilizzata. I dati sono un materiale duttile che può essere suddiviso e aggregato in vari modi. Ciò significa che, durante il loro tragitto, i dati possono essere scomposti e ricomposti più volte e in modi differenti. Per esempio, per attraversare un particolare segmento di una rete, potrebbe essere ne-cessario suddividere dei pacchetti troppo grandi in pacchetti più piccoli, oppure po-trebbe essere utile il contrario. In particolare, si parla di incapsulamento quando i pacchetti vengono inseriti all'interno di altri pacchetti. A questo punto, dovrebbe es-

Page 113: Dal problema all'Algoritmo

sere evidente che il significato del termine pacchetto può avere valore solo in riferi-mento a un contesto preciso.

Di seguito vengono elencati i protocolli:

IPv4 Internet Protocol version 4. È quello che comunemente si chiama IP. Ha origi-ne negli anni '80 e da allora è la base su cui è costruita internet. Usa indirizzi a 32 bit, e mantiene tutte le informazioni di instradamento e controllo per la trasmissione dei pacchetti sulla rete; tutti gli altri protocolli della suite (eccetto ARP e RARP, e quelli specifici di IPv6) vengono trasmessi attraverso di esso.

IPv6 Internet Protocol version 6. È stato progettato a metà degli anni '90 per rim-piazzare IPv4. Ha uno spazio di indirizzi ampliato 128 bit che consente più gerarchie di indirizzi, l'autoconfigurazione, ed un nuovo tipo di indirizzi, gli anycast, che con-sentono di inviare un pacchetto ad una stazione su un certo gruppo. Effettua lo stesso servizio di trasmissione dei pacchetti di IPv4 di cui vuole essere un sostituto.

TCP Trasmission Control Protocol. È un protocollo orientato alla connessione che provvede un trasporto affidabile per un flusso di dati bidirezionale fra due stazioni remote. Il protocollo ha cura di tutti gli aspetti del trasporto, come l'acknoweledg-ment, i timeout, la ri-trasmissione, etc. È usato dalla maggior parte delle applicazioni.

UDP User Datagram Protocol. È un protocollo senza connessione, per l'invio di dati a pacchetti. Contrariamente al TCP il protocollo non è affidabile e non c'è garanzia che i pacchetti raggiungano la loro destinazione, si perdano, vengano duplicati, o ab-biano un particolare ordine di arrivo.

ICMP Internet Control Message Protocol. È il protocollo usato a livello 2 per gestire gli errori e trasportare le informazioni di controllo fra stazioni remote e instradatori (cioè fra host e router). I messaggi sono normalmente generati dal software del ker-nel che gestisce la comunicazione TCP/IP, anche se ICMP può venire usato diretta-mente da alcuni programmi come ping. A volte ci si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6.

IGMP Internet Group Management Protocol. É un protocollo di livello 2 usato per il multicasting. Permette alle stazioni remote di notificare ai router che supportano que-sta comunicazione a quale gruppo esse appartengono. Come ICMP viene implemen-tato direttamente sopra IP.

ARP Address Resolution Protocol. È il protocollo che mappa un indirizzo IP in un indirizzo hardware sulla rete locale. È usato in reti di tipo broadcast come Ethernet,

Page 114: Dal problema all'Algoritmo

Token Ring o FDDI che hanno associato un indirizzo fisico (il MAC address) alla in-terfaccia, ma non serve in connessioni punto-punto.

RARP Reverse Address Resolution Protocol. È il protocollo che esegue l'operazione inversa rispetto ad ARP (da cui il nome) mappando un indirizzo hardware in un indi-rizzo IP. Viene usato a volte per durante l'avvio per assegnare un indirizzo IP ad una macchina. ICMPv6 Internet Control Message Protocol, version 6. Combina per IPv6 le funzio-nalità di ICMPv4, IGMP e ARP.

EGP Exterior Gateway Protocol. È un protocollo di routing usato per comunicare lo stato fra gateway vicini a livello di sistemi autonomi, con meccanismi che permetto-no di identificare i vicini, controllarne la raggiungibilità e scambiare informazioni sullo stato della rete. Viene implementato direttamente sopra IP.

OSPF Open Shortest Path First. È in protocollo di routing per router su reti interne, che permette a questi ultimi di scambiarsi informazioni sullo stato delle connessioni e dei legami che ciascuno ha con gli altri. Viene implementato direttamente sopra IP.

GRE Generic Routing Encapsulation. È un protocollo generico di incapsulamento che permette di incapsulare un qualunque altro protocollo all'interno di IP.

AH Authentication Header. Provvede l'autenticazione dell'integrità e dell'origine di un pacchetto. È una opzione nativa in IPv6 e viene implementato come protocollo a sé su IPv4. Fa parte della suite di IPSEC che provvede la trasmissione cifrata ed au-tenticata a livello IP.

ESP Encapsulating Security Payload. Provvede la cifratura insieme all'autenticazio-ne dell'integrità e dell'origine di un pacchetto. Come per AH è opzione nativa in IPv6 e viene implementato come protocollo a sé su IPv4.

PPP Point-to-Point Protocol. È un protocollo a livello 1 progettato per lo scambio di pacchetti su connessioni punto-punto. Viene usato per configurare i collegamenti, de-finire i protocolli di rete usati ed incapsulare i pacchetti di dati. È un protocollo com-plesso con varie componenti.

SLIP Serial Line over IP. È un protocollo di livello 1 che permette di trasmettere un pacchetto IP attraverso una linea seriale.

Gran parte delle applicazioni comunicano usando TCP o UDP, solo alcune, e per scopi particolari si rifanno direttamente ad IP (ed i suoi correlati ICMP e IGMP); benché sia TCP che UDP siano basati su IP e sia possibile intervenire a questo livello

Page 115: Dal problema all'Algoritmo

con i raw socket questa tecnica è molto meno diffusa e a parte applicazioni particola-ri si preferisce sempre usare i servizi messi a disposizione dai due protocolli prece-denti.

Internet Protocol (IP)

Quando si parla di IP ci si riferisce in genere alla versione attualmente in uso che è la versione 4 (e viene pertanto chiamato IPv4). Questa versione venne standardizzata nel 1981 dall'RFC 719 . Internet Protocol nasce per dividere le applicazioni della struttura hardware delle reti di trasmissione, e creare una interfaccia di trasmissione dei dati indipendente dal sot-tostante substrato di rete, che può essere realizzato con le tecnologie più disparate (Ethernet, Token Ring, FDDI, etc.). Il compito di IP è pertanto quello di trasmettere i pacchetti da un computer all'altro della rete; le caratteristiche essenziali con cui que-sto viene realizzato in IPv4 sono due: • Universal addressing la comunicazione avviene fra due stazioni remote identificate univocamente con un indirizzo a 32 bit che può appartenere ad una sola interfaccia di rete. • Best effort viene assicurato il massimo impegno nella trasmissione, ma non c'è nes-suna garanzia per i livelli superiori né sulla percentuale di successo né sul tempo di consegna dei pacchetti di dati.Negli anni '90 la crescita vertiginosa del numero di macchine connesse a internet ha iniziato a far emergere i vari limiti di IPv4, per risolverne i problemi si è perciò defi-nita una nuova versione del protocollo, che (saltando un numero) è diventata la ver-sione 6. IPv6 nasce quindi come evoluzione di IPv4, mantendone inalterate le funzio-ni che si sono dimostrate valide, eliminando quelle inutili e aggiungendone poche al-tre per mantenere il protocollo il più snello e veloce possibile. I cambiamenti apportati sono comunque notevoli e si possono essere riassunti a gran-di linee nei seguenti punti: • l'espansione delle capacità di indirizzamento e instradamento, per supportare una gerarchia con più livelli di indirizzamento, un numero di nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi. • l'introduzione un nuovo tipo di indirizzamento, l'anycast che si aggiunge agli usuali unycast e multicast. • la semplificazione del formato dell'intestazione (header) dei pacchetti, eliminando o rendendo opzionali alcuni dei campi di IPv4, per eliminare la necessità di riproces-samento della stessa da parte dei router e contenere l'aumento di dimensione dovuto all'ampliamento degli indirizzi. • un supporto per le opzioni migliorato, per garantire una trasmissione più efficiente del traffico normale, limiti meno stringenti sulle dimensioni delle opzioni, e la flessi-bilità necessaria per introdurne di nuove in futuro.

Page 116: Dal problema all'Algoritmo

• il supporto per delle capacità di qualità di servizio (QoS) che permettano di identifi-care gruppi di dati per i quali si può provvedere un trattamento speciale (in vista del-l'uso di internet per applicazioni multimediali e/o “real-time”).

User Datagram Protocol (UDP)

UDP è un protocollo di trasporto molto semplice, la sua descrizione completa è con-tenuta dell'RFC 768 , ma in sostanza esso è una semplice interfaccia a IP dal livello di trasporto. Quando un'applicazione usa UDP essa scrive un pacchetto di dati (il cosid-detto datagram che da il nome al protocollo) su un socket, al pacchetto viene aggiun-to un header molto semplice, viene passato al livello superiore (IPv4 o IPv6 che sia) che lo spedisce verso la destinazione. Dato che né IPv4 né IPv6 garantiscono l'affida-bilità niente assicura che il pacchetto arrivi a destinazione, né che più pacchetti arri-vino nello stesso ordine in cui sono stati spediti. Pertanto il problema principale che si affronta quando si usa UDP è la mancanza di affidabilità, se si vuole essere sicuri che i pacchetti arrivino a destinazione occorrerà provvedere con l'applicazione, all'interno della quale si dovrà inserire tutto quanto necessario a gestire la notifica di ricevimento, la ritrasmissione, il timeout. Si tenga conto poi che in UDP niente garantisce che i pacchetti arrivino nello stesso ordine in cui sono stati trasmessi, e può anche accadere che i pacchetti vengano du-plicati nella trasmissione, e non solo perduti. Di tutto questo di nuovo deve tenere conto l'applicazione. Un'altro aspetto di UDP è che se un pacchetto raggiunge correttamente la destinazio-ne esso viene passato all'applicazione ricevente in tutta la sua lunghezza, la trasmis-sione avviene perciò per record la cui lunghezza viene anche essa trasmessa all'appli-cazione all'atto del ricevimento. Infine UDP è un protocollo che opera senza connessione (connectionless) in quanto non è necessario stabilire nessun tipo di relazione tra origine e destinazione dei pac-chetti. Si hanno così situazioni in cui un client può scrivere su uno stesso socket pac-chetti destinati a server diversi, o un server ricevere su un socket pacchetti prove-nienti da client diversi. Il modo più semplice di immaginarsi il funzionamento di UDP è quello della radio, in cui si può trasmettere e ricevere da più stazioni usando la stessa frequenza. Nonostante gli evidenti svantaggi comportati dall'inaffidabilità UDP ha il grande pre-gio della velocità, che in certi casi è essenziale; inoltre si presta bene per le applica-zioni in cui la connessione non è necessaria, e costituirebbe solo un peso in termini di prestazioni, mentre una perdita di pacchetti può essere tollerata, ad esempio le appli-cazioni di streaming e quelle che usano il multicasting.

Page 117: Dal problema all'Algoritmo

Transport Control Protocol (TCP)Il TCP è un protocollo molto complesso, definito nell'RFC 739 e completamente di-verso da UDP; alla base della sua progettazione infatti non stanno semplicità e velo-cità, ma la ricerca della massima affidabilità possibile nella trasmissione dei dati. La prima differenza con UDP è che TCP provvede sempre una connessione diretta fra un client e un server, attraverso la quale essi possono comunicare; per questo il paragone più appropriato per questo protocollo è quello del collegamento telefonico, in quanto prima viene stabilita una connessione fra due i due capi della comunicazio-ne su cui poi effettuare quest'ultima. Caratteristica fondamentale di TCP è l'affidabilità; quando i dati vengono inviati at-traverso una connessione ne viene richiesto un “ricevuto” (il cosiddetto acknowleg-ment), se questo non arriva essi verranno ritrasmessi per un determinato numero di tentativi, intervallati da un periodo di tempo crescente, fino a che sarà considerata fallita o caduta la connessione (e sarà generato un errore di timeout); il periodo di tempo dipende dall'implementazione e può variare far i quattro e i dieci minuti. Inoltre, per tenere conto delle diverse condizioni in cui può trovarsi la linea di comu-nicazione, TCP comprende anche un algoritmo di calcolo dinamico del tempo di an-data e ritorno dei pacchetti fra un client e un server (il cosiddetto RTT, round-trip time), che lo rende in grado di adattarsi alle condizioni della rete per non generare inutili ritrasmissioni o cadere facilmente in timeout. Inoltre TCP è in grado di preservare l'ordine dei dati assegnando un numero di se-quenza ad ogni byte che trasmette. Ad esempio se un'applicazione scrive 3000 byte su un socket TCP, questi potranno essere spezzati dal protocollo in due segmenti (le unità di dati passate da TCP a IP vengono chiamate segment) di 1500 byte, di cui il primo conterrà il numero di sequenza 1 - 1500 e il secondo il numero 1501 - 3000. In questo modo anche se i segmenti arrivano a destinazione in un ordine diverso, o se alcuni arrivano più volte a causa di ritrasmissioni dovute alla perdita degli acknow-legment, all'arrivo sarà comunque possibile riordinare i dati e scartare i duplicati. Il protocollo provvede anche un controllo di flusso (flow control), cioè specifica sem-pre all'altro capo della trasmissione quanti dati può ricevere tramite una advertised window (letteralmente finestra annunciata), che indica lo spazio disponibile nel buf-fer di ricezione, cosicché nella trasmissione non vengano inviati più dati di quelli che possono essere ricevuti. Questa finestra cambia dinamicamente diminuendo con la ricezione dei dati dal soc-ket ed aumentando con la lettura di quest'ultimo da parte dell'applicazione, se diventa nulla il buffer di ricezione è pieno e non verranno accettati altri dati. Si noti che UDP non provvede niente di tutto ciò per cui nulla impedisce che vengano trasmessi pac-chetti ad un ritmo che il ricevente non può sostenere. Infine attraverso TCP la trasmissione è sempre bidirezionale (in inglese si dice che è full-duplex). È cioè possibile sia trasmettere che ricevere allo stesso tempo, il che comporta che quanto dicevamo a proposito del controllo di flusso e della gestione

Page 118: Dal problema all'Algoritmo

della sequenzialità dei dati viene effettuato per entrambe le direzioni di comunicazio-ne.

Limiti e dimensioni riguardanti la trasmissione dei dati

Un aspetto di cui bisogna tenere conto nella programmazione di rete, è che ci sono una serie di limiti a cui la trasmissione dei dati attraverso i vari livelli del protocollo deve sottostare, limiti che è opportuno tenere presente perché in certi casi si possono avere delle conseguenze sul comportamento delle applicazioni. Un elenco di questi limiti, insieme ad un breve accenno alle loro origini ed alle even-tuali implicazioni che possono avere, è il seguente: • La dimensione massima di un pacchetto IP è di 65535 byte, compresa l'intestazio-ne. Questo è dovuto al fatto che la dimensione è indicata da un campo apposito nel-l'header di IP che è lungo 16 bit. • La dimensione massima di un pacchetto normale di IPv6 è di 65575 byte, il campo apposito nell'header infatti è sempre a 16 bit, ma la dimensione dell'header è fissa e di 40 byte e non è compresa nel valore indicato dal suddetto campo. Inoltre IPv6 ha la possibilità di estendere la dimensione di un pacchetto usando la jumbo payload option. • Molte reti fisiche hanno un MTU (maximum transfer unit) che dipende dal proto-collo specifico usato al livello di connessione fisica. Il più comune è quello di ether-net che è pari a 1500 byte.Quando un pacchetto IP viene inviato su una interfaccia di rete e le sue dimensioni eccedono la MTU viene eseguita la cosiddetta frammentazione, i pacchetti cioè ven-gono suddivisi6) in blocchi più piccoli che possono essere trasmessi attraverso l'in-terfaccia.

Rete MTUHyperlink 65535Token Ring IBM (16 Mbit/sec) 17914Token Ring IEEE 802.5 (4 Mbit/sec) 4464FDDI 4532Ethernet 1500X.25 576

Tabella 9

Page 119: Dal problema all'Algoritmo

La MTU più piccola fra due stazioni viene in genere chiamata path MTU, che dice qual'è la lunghezza massima oltre la quale un pacchetto inviato da una stazione ad un'altra verrebbe senz'altro frammentato. Si tenga conto che non è affatto detto che la path MTU sia la stessa in entrambe le direzioni, perché l'instradamento può essere di-verso nei due sensi, con diverse tipologie di rete coinvolte. Una delle differenze fra IPv4 e IPv6 é che per IPv6 la frammentazione può essere eseguita solo alla sorgente, questo vuol dire che i router IPv6 non frammentano i pac-chetti che ritrasmettono (anche se possono frammentare i pacchetti che generano loro stessi), mentre i router IPv4 si. In ogni caso una volta frammentati i pacchetti posso-no essere riassemblati solo alla destinazione. Nell'header di IPv4 è previsto il flag DF che specifica che il pacchetto non deve esse-re frammentato; un router che riceva un pacchetto le cui dimensioni eccedano quelle dell'MTU della rete di destinazione genererà un messaggio di errore ICMPv4 di tipo destination unreachable, fragmentation needed but DF bit set. Dato che i router IPv6 non possono effettuare la frammentazione la ricezione di un pacchetto di dimensione eccessiva per la ritrasmissione genererà sempre un messaggio di errore ICMPv6 di tipo packet too big. Dato che il meccanismo di frammentazione e riassemblaggio dei pacchetti comporta inefficienza, normalmente viene utilizzato un procedimento, detto path MTU disco-very che permette di determinare il path MTU fra due stazioni; per la realizzazione del procedimento si usa il flag DF di IPv4 e il comportamento normale di IPv6 in-viando delle opportune serie di pacchetti (per i dettagli vedere l'RFC 1191 per IPv4 e l'RFC 1981 per IPv6) fintanto che non si hanno più errori. Il TCP usa sempre questo meccanismo, che per le implementazioni di IPv4 è opzio-nale, mentre diventa obbligatorio per IPv6. Per IPv6 infatti, non potendo i router frammentare i pacchetti, è necessario, per poter comunicare, conoscere da subito il path MTU. Infine TCP definisce una MSS Maximum Segment Size che annuncia all'altro capo della connessione la dimensione massima dimensione del segmento di dati che può essere ricevuto, così da evitare la frammentazione. Di norma viene impostato alla di-mensione della MTU dell'interfaccia meno la lunghezza delle intestazioni di IP e TCP, in Linux il default, mantenuto nella costante TCP_MSS è 512.

Posta Elettronica (Simple Mail Transfer Protocol)

Il metodo più veloce in assoluto che esista per comunicare a grande distanza è la po-sta elettronica (spesso abbreviata con E-mail o email). La posta elettronica è attual-mente l'applicazione predominante su Internet. Essa consente agli utenti della Rete di inviare messaggi e di riceverli in modo comodo ed economico e senza occuparsi del modo in cui le informazioni viaggiano.

Page 120: Dal problema all'Algoritmo

La posta elettronica si basa sul concetto di indirizzo. Un indirizzo email forniscetutte le informazioni richieste per recapitare un messaggio fino al destinatario inqualunque parte del mondo esso si trovi. Gli indirizzi email sono strutturati nellaforma:

[email protected]

(ad esempio [email protected]). Il simbolo @ sta per "at"e indica il fatto che l'u-tentecon nome nome_utente è reperibile via email sul Server il cui indirizzo è sito.domi-nio. Nell'esempio riportato l'utente Mario Rossi (mrossi è ilsuo identificativo) possiede una casella di posta elettronica sulla macchina che neldominio uniroma2.it è il Server email. Per inviare la posta si utilizza il protocollo SMTP (Simple Mail Transfer Protocol), mentre per ricevere i messaggi è possibile utilizzare POP3 (Post Office Protocol versione 3), oppure IMAP (Internet Message Access Protocol).

FTP (File Transfer Protocol)

FTP o Protocollo per il Trasferimento di File è il metodo principale attraverso cui èpossibile trasferire file e documenti su Internet. Anch’esso si basa sull’interazione tra un client (FTP Client) e un server (FTP Server). Per poter prelevare un file tramite FTP di solito si ha bisogno un identificativo personale sul Server da cui si preleva il file. Tale identificativo viene concesso dall'amministratore del Server remoto e ciò comporta che soltanto un numero ristretto di persone possono accedere al sistema ed eseguire l'operazione di copia. Un modo semplice per aggirare questa limitazione è il servizio denominato FTP anonimo. Questo servizio in pratica consente a chiunque in tutto il mondo di avere accesso al FTP Server in modo controllato e di effettuare la copia dei file e dei documenti messi a disposizione. In questo modo molte organizza-zioni possono rendere pubblici i loro archivi oppure mettere a disposizione di altri gruppi di persone programmi o dati, il tutto con uno sforzo minimo ed una ampia si-curezza.

In realtà il protocollo FTP può essere usato sia per prelevare file da un Server, cheper trasferire file da un Client ad un Server avremo quindi:• DOWNLOAD trasferimento Server - Client• UPLOAD trasferimento Client – Server

HTTP (HyperText Transfer Protocol)

http è di gran lunga il protocollo più utilizzato in internet, in quanto permette di

Page 121: Dal problema all'Algoritmo

rendere visuale l’accesso alle informazioni e ai servizi offerti dalla Rete. http,permette la comunicazione tra un client (http Client o Web Browser) e un Server(http Server o Web Server) al fine di trasferirsi file che contengono degli ipertesti. Èil protocollo su cui si basa il World Wide Web (WWW).

Data Streaming

Il data streaming funziona come se su Internet esistesse una specie di servizio di re-capito di video cassette. Solo quando la cassetta arriva a casa, è possibile infilarla nel videoregistratore virtuale, e vederla. Ovviamente, addio al bello della diretta! Infatti le cassette digitali sono molto esose in fatto di spazio e spesso occorre aspettare molti decine di minuti per vedere la prima inquadratura.

Per ovviare a questo grande limite, è stata sviluppata una tecnologia innovativa che si chiama data streaming, traducibile come invio di flussi di dati. Lo streaming è un si-stema che permette di inviare attraverso la rete, video e suoni digitali sotto forma di un flusso continuo di bit, e non come un intero blocco di grandi dimensioni. Un ap-posito programma, che si integra con il normale browser di pagine Web, è in grado di ricevere questo flusso in tempo reale, man mano che arriva, e di trasformarlo in im-magini che si muovono sul video del computer. Grazie al data streaming è possibile trasmettere immagini in tempo reale attraverso la rete. Insomma, è possibile realizza-re una sorta di trasmissione televisiva via Internet. Per il momento la qualità di que-ste trasmissioni digitali non è eccellente, ma la Tv su Internet sta attirando l'interesse e gli investimenti delle grandi aziende informatiche, e nei prossimi anni vedremo cer-tamente grandi progressi tecnologici in questo settore. Nel frattempo, la tecnologia dello streaming ha permesso la nascita di una serie stazioni radio, che trasmettono su Web musica e notiziari, con qualità stereo.

Page 122: Dal problema all'Algoritmo

CAPITOLO XI

Il World Wide Web. Introduzione ai for-mati dei dati multimediali. Introduzio-ne all'uso dei motori di ricerca

Premessa

Il più recente ed ambizioso dei servizi di Internet è il World Wide Web (ragnatela mondiale, abbreviato WWW o anche semplicemente web). Il web, come si è visto precedentemente, è nato al CERN di Ginevra come progetto accademico tendente a semplificare l'accesso alle informazioni e ai documenti.Poiché il web è stato concepito quando Internet già esisteva, utilizza molto di ciò che è stato realizzato in informatica negli ultimi decenni, ma utilizza anche importanti nuove tecnologie, realizzate appositamente per il web:Il web funziona con il meccanismo client-server. La parte client del web è il browser, un programma che l’utente esegue sul proprio computer e mediante il quale richiede le informazioni desiderate ad un server web. Alla risposta del server, il browser vi-sualizze le informazioni in pagine indipendenti. Le pagine web sono descritte mediante il linguaggio di formattazione HTML (Hyper Text Markup Language). HTML consente agli autori di pagine web di creare pagine ipertestuali che qualunque server web può distribuire e qualunque browser può visua-lizzare. I codici HTML sono detti tag e consentono di indicare la formattazione del testo (dimensione, stile, posizionamento, ecc.) e la posizione delle immagini, dei fil-mati, delle animazioni. Queste indicazioni sono poi interpretate dal browser per la vi-sualizzazione. Una pagina web può contenere collegamenti (link) che puntano ad altre pagine web, anche su macchine diverse. I collegamenti possono essere incorporati nel testo o as-sociati ad una immagine. È il concetto di ipertesto, un termine coniato da Ted Nelson negli anni 60. Un ipertesto è un testo che consente una lettura non lineare di un docu-mento. Se in un testo che parla di vino c’è una informazione sugli alberi che produ-cono il sughero, e a questa informazione è associato un link, basta fare clic sul link

Page 123: Dal problema all'Algoritmo

per andare ad una nuova pagina che parla di tali alberi, interrompendo la lettura della parte dedicata al vino, alla quale si potrà tornare successivamente. Il sistema degli URL (Uniform Resource Locator) consente a quasi tutti i tipi di in-formazione di essere recuperati da quasi tutti i punti di Internet, ed è stato messo a punto appositamente per il web. Il protocollo HTTP (HyperText Transfer Protocol) è il protocollo di comunicazione tra browser (client web) e server web.

Server e Client WebPer stabilire un canale di comunicazione tra client e server, servono due programmi che girano su macchine diverse (eccezionalmente sulla stessa macchina); uno deve iniziare la connessione e l’altro deve accettarla. Il server viene avviato per primo, av-visa il sistema operativo che desidera accettare connessioni di rete in ingresso e si mette in attesa. Quando un client su una macchina remota desidera spedire o preleva-re informazioni dal server apre una connessione con il server, trasferisce le informa-zioni e chiude la connessione. Un client web, detto anche browser, è un programma in grado di interrogare un ser-ver web (mediante il protocollo HTTP) e di interpretare la risposta. Normalmente tale risposta è un file HTML da visualizzare. Il browser deve dunque avere anche le capacità di "rendere" il file HTML (composto di testo, immagini, filmati, animazione e altro) in una finestra del computer. Come vedremo, la visualizzazione del codice HTML può differire da browser a browser e da piattaforma a piattaforma: si tratta di uno dei principali problemi del web, quello degli standard.Oggi sono disponibili diversi browser per le diverse piattaforme. Tutti i browser mo-derni funzionano in modo grafico. Questa possibilità, collegata al fatto che i numero-si standard HTML che si sono rapidamente susseguiti specificano modi diversi per trattare testo e grafica, ha portato al risultato che oggi è quasi impossibile fare in modo che una pagina HTML sia visualizzata allo stesso modo con i vari browser e sulle diverse piattaforme.I browser più diffusi sono Netscape Navigator e Microsoft Internet Explorer. Consi-derando che le versioni ancora utilizzate sono tre (la versione 2, la 3 e la 4) e le piat -taforme principali sono due (Windows e Macintosh) si vede come le possibili visua-lizzazioni di una pagina possono arrivare fino a dodici. Questo problema può essere risolto creando diverse varianti per ogni pagina, o creando pagine dinamiche, o infine cercando soluzioni di compromesso.Un server web è invece un programma molto più semplice di un browser: deve solo rispondere alle richieste dei browser web, in modo positivo o negativo, e fornire la ri-sorse richiesta. La comunicazione tra browser e server avviene mediante il protocollo HTTP, che ambedue i programmi devono supportare. Il server può risiedere su qua-lunque macchina (Windows, Unix, Macintosh) ed è continuamente in funzione, in at-tesa che gli vengano fatte delle richieste da parte dei browser.

Page 124: Dal problema all'Algoritmo

I motori di ricercaTenendo conto che le pagine web (le singole "schermate" di Internet) sono centinaia di milioni e che sono in continuo aumento, è impossibile pensare di conoscere gli "indirizzi" di tutti i siti, né ritenere di essere in grado da soli di sapere dove è possibi-le rintracciare tutte le informazioni presenti in rete. Per cercare informazioni su Inter-net sono quindi indispensabili quelli che sono chiamati, a volte impropriamente, "motori di ricerca".Cos’è un motore di ricerca? È un sito all’interno del quale sono catalogate milioni di pagine Internet in tutte le lingue e di tutto il mondo; il motore può ricercare nomi, pa-role e frasi presenti nelle pagine catalogate.Ad esempio, se si indica (si "chiede") al motore di ricerca di cercare una certa parola, esso mostrerà un elenco di tutte le pagine Internet che "conosce", in altre parole che ha memorizzato nel suo enorme archivio elettronico, all’interno delle quali la parola è presente.Ecco un elenco di alcuni motori di ricerca:

Altavista (www.altavista.it/), Virgilio (www.virgilio.it/), Yahoo! (www.yahoo.it) Trovatore (www.trovatore.it/) Lycos (www.lycos.it/) Arianna (www.arianna.iol.it/) Google (www.google.it/)

Nella pagina principale di ognuno di questi c’è un riquadro nel quale scrivere la pa-rola cercata, per poi "cliccare" sull’immagine di un tasto sulla quale, generalmente, è scritto cerca, trova o, in inglese, find o search.Un riquadro di ricerca collegato ai motori è oggi spesso presente anche in altri siti, come quelli dei fornitori del cosiddetto "abbonamento" ad Internet.Vediamo quali problemi si possono presentare nell’usare le possibilità offerte da siti come Altavista, Virgilio, Google o altri.Se, ad esempio, si vogliono cercare informazioni sul cantautore Vasco Rossi e si scri-ve nome e cognome nel riquadro di ricerca, si verificherà questa situazione: il motore segnalerà sì i siti che trattano del rocker italiano, ma anche le pagine nelle quali c’è la parola "Vasco" (ad esempio il sito Internet dell’idraulico Vasco Bianchi, una pagina in cui c’è scritto "il mio migliore amico si chiama Vasco"…), la parola Rossi (dr Ma-rio Rossi, dermatologo; una pagina dove è presente una poesia con il verso "papaveri rossi" etc.); in Argentina, inoltre, potrebbe esistere un tale che si chiama Vasco Rossi e che nulla ha a che fare con il cantante… Considerando che il cognome Rossi è uno dei più diffusi in Italia, è probabile quindi che il motore mostrerà migliaia di pagine…Ma se non interessa nulla dell’idraulico Vasco Bianchi né del dermatologo

Page 125: Dal problema all'Algoritmo

Mario Rossi e si cercano solo informazioni sul cantautore; come fare? È necessario usare alcuni semplici trucchi…

Trucchi

Premessa Schematica

ogni motore ha le sue "regole" di ricerca; quelle che seguono, in genere, sono valide per tutti o si differenziano di pochissimo da quelle che prescrive il motore;

può essere utile decidere di imparare ad usare bene un unico motore, in modo da sfruttarne tutte le potenzialità; va ricordato però che quanti più mo-tori si utilizzano tanti più risultati si hanno;

ogni motore ha una pagina di help o di aiuto nella quale queste regole sono indicate;

oltre a quelle che indichiamo esistono altre regole, molto efficaci, ma anche più complicate;

i motori cercano solo all’interno del World Wide Web, cioè all’interno delle "pagine Internet": se da un sito è possibile scaricare, ad esempio, un testo ric-co di informazioni scritto al computer, queste non sono analizzate dal motore;

secondo recenti ricerche, sembra che i motori coprano al massimo un quarto delle pagine Internet esistenti.

Scelta Della LinguaInnanzi tutto è importante tenere conto delle lingue; ovviamente, se, ad esempio, si cerca la parola sole, si deve considerare che in inglese può voler dire sogliola; se si cercano informazioni sulle automobili spider bisogna tenere presente che in inglese spider significa ragno…I motori possono fare ricerche su siti scritti in tutte le lingue, ma permettono anche di scegliere la lingua in cui sono scritte le pagine.

Il Segno "+"Un trucco utilissimo è usare il segno "+"; se si scrive nel riquadro di ricerca:

Vasco+Rossisi indica che si cerchino solo le pagine nelle quali sono presenti entrambe le parole; il motore, dopo aver effettuato la ricerca, mostrerà solo l’elenco delle pagine che con-tengono sia Vasco sia Rossi, escludendo quindi, per restare nel nostro esempio, la pa-gina di Mario Rossi e dell’idraulico Vasco Bianchi (nella prima c’è solo Rossi, nella seconda solo Vasco); può comunque capitare che in una pagina ci sia scritto ad esempio "Mario Rossi ha un figlio che si chiama Vasco"; essendo presenti nella pagi-na entrambi i termini, il motore la inserirà nell’elenco.

Il Segno "-"

Page 126: Dal problema all'Algoritmo

Allo stesso modo si può adoperare il segno "–": se si vuole cercare la pagina di un amico che si chiama Vasco Rossi, ma non si vuole essere sommersi da siti relativi al musicista, si può provare a scrivere:

Vasco+Rossi-cantante

Maiuscole E MinuscoleSe una parola è scritta tutta in minuscolo (rossi), in genere i motori indicheranno le pagine che contengono sia la versione minuscola, sia quella maiuscola, sia quella che contiene entrambe le forme (rossi, Rossi, ROSSI); se uso le maiuscole, invece, il mo-tore cercherà solo le parole scritte esattamente come sono state digitate; se si desidera trovare proprio "Rossi" bisogna quindi scriverlo con la lettera maiuscola.

L’asterisco (Carattere Jolly)L’asterisco “ * ” può essere utilizzato per sostituire delle lettere che non si ricordano o che non si sa con precisione come devono essere scritte. Ad esempio, si sa che un cantautore si chiama Vasco, ma non si ricorda se il cognome è Rossi o Rassi... se si prescrive al motore di effettuare questa ricerca:

Vasco+R*ssiesso cercherà Vasco Rassi, Vasco Rissi… e, ovviamente, Vasco Rossi.

Le CategorieMolti siti che ospitano motori di ricerca hanno anche dei "cataloghi ragionati" di pa-gine web, divisi per categorie, all’interno delle quali trovano spazio solo i siti che le riguardano; questi cataloghi sono chiamati in vari modi: Altavista li chiama Web Di-rectory, Virgilio li definisce Canali etc. Il concetto, comunque, non cambia.Ad esempio, ci può essere una categoria principale musica che contiene al suo inter-no sottocategorie come classica, rock, dance… Una sottocategoria come rock può es-sere a sua volta suddivisa in italiano e straniero. È chiaro che all’interno di musica/rock/italiano non troveremo siti che parlano… della "Ditta Vasco Rossi, fale-gnameria" o dell’idraulico Vasco Bianchi, ma solo pagine davvero relative al cantau-tore emiliano. La scelta delle pagine non è quindi fatta da un meccanismo elettronico che agisce automaticamente, ma da esseri umani che davvero conoscono quei siti. È da tenere presente che in questo caso, anche se più comoda, la scelta non è stata ope-rata da noi, ma da altri.Quasi tutti i siti di ricerca offrono inoltre la possibilità di cercare anche solo immagi-ni, musiche o video relativi alle parole indicate.

Page 127: Dal problema all'Algoritmo

Sitografiawww.windoweb.it www.storiadellinformatica.it www.prometheo.it/a_linguaggi_programmazione.htm www.dizionarioinformatico.com www.wikipedia.org

BIBLIOGRAFIAAlgoritmi e strutture dati di Demetrescu, Finocchi e Italiano. Ed: McGraw-HillIntroduzione agli algoritmi di Cormen, Leiserson e Rivest. Ed: Jackson libriManuale di informatica: coordinatori Giacomo Ciuffi e Vincenzo Falzone. Edizio-ne Calderini. Nello specifico, è stato tratto un brano di Daniel Pierre Bovet.