Indice - DigiLibro

Transcript

Indice - DigiLibro
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
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
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
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 Napier 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 tavole logaritmiche in base 10. Successivamente, stimolato da un incontro con il matematico Napier, calcolò le tavole logaritmiche con quattordici cifre decimali dei numeri da 1 a 20.000 e da 90.000 a 100.000(pubblicate nel 1618).
Figura 1 ABACO
Le prime macchine
Il vero punto di partenza che ha condotto ai moderni elaboratori è
rappresentato da un calcolatore meccanico ad ingranaggi (la macchina di Pascal –“la pascalina”), ideato per eseguire somme e
sottrazioni dal diciannovenne Blaise Pascal (1623-1662) , matematico francese (che inventerà anche il calcolo delle probabilità).
Figura 2
Blaise Pascal
Figura 3 Pascalina di Blaise Pascal
Al limite della "pascalina" pose rimedio il matematico tedesco Gottfried Wilhelm
Leibniz(1646-1716), che nel 1671 costruì una macchina in grado di fare anche moltiplicazioni e divisioni. Il principio della moltiplicazione era relativamente semplice: sommare successivamente il moltiplicando per un
numero di volte pari al moltiplicatore. Tuttavia, la sua più grande invenzione 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
Figura 4
del calcolatore elettronico.
L'ingegnere matematico Giovanni Poleni (1685-1761) docente di "Astronomia e
meteore" all'Università di Padova, realizza un prototipo funzionante di una macchina calcolatrice in grado di eseguire le quattro operazioni su numeri massimo di tre cifre. La descrizione della calcolatrice è riportata nel suo saggio "Miscellanea" del 1709 in cui confluiscono i risultati delle sue ricerche giovanili. Nel secondo capitolo dell'opera si legge che la "macchina aritmetica" ha una grande
ruota a tre settori su ciascuno dei quali ci sono nove denti che muoFigura 5
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-
leni sarà realizzata negli stabilimenti IBM di Milano. La macchina è esposta al Museo della Scienza di Milano.
Nel 1804, l'imprenditore francese Joseph Marie Jacquard (17521834) pensò d'introdurre nei telai di legno della sua azienda di
Lione, che produceva stoffe, delle lunghe schede di cartone forato: ad ogni scheda corrispondeva un preciso disegno, formato da
forellini. Sembrava si potesse finalmente dare ordini a una macchina perché eseguisse da sola un lavoro ripetitivo. Il dispositivo
Figura 6
di lettura delle schede era costituito da file di aghi che potevano
attraversare solo dove c'erano i fori: i fili venivano così alzati automaticamente 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 Consiglio 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 Inghilterra, Germania, Italia, America e persino in Cina.
Figura 7 - Telaio di Jacquard
Sul modello della macchina di Leibniz, il francese Thomas de Colmar (1785-1870) costruì nel 1820 l'aritmometro, un apparecchio finalmente 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 7
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 conservare in memoria un risultato parziale, per riprenderlo in una successiva fase di calcolo. 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 conosciuto il telaio di Jacquard nei suoi studi sulle manifatture e da questa 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à
Figura 8
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' utilizzo 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 delle 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 differenze" 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 conservati 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.
Gorge Boole(1815-1864) matematico inglese, inventa l’ Algebra
di Boole nella quale esistono solo i numeri 1 e 0 (senza nessun valore intermedio) e le operazioni NOT,AND,OR, in ordine di priorità, da priorità alta a priorità bassa. Talvolta, al posto di 1 e 0 vengono utilizzati T (True, vero in inglese) e F (False, falso in inglese)
per significare che 1 e 0 non rappresentano numeri nel senso comune del termine, ma solamente uno stato, una cosa che esiste oppure non esiste: T e F possono sostituire completamente, senza Figura 9
nessun limite, 1 e 0.
L'Algebra di Boole richiede e definisce le seguenti proprietà (solo se sono soddisfatte tutte si può parlare di Algebra di Boole):
poniamo
* per rappresentare la funzione
PROPRIETÀ DELL'ASSORBIMENTO:
AND
a * ( a + b ) == a
+ per rappresentare la funzione OR a + ( a * b ) == a
! per rappresentare la funzione NOT
PROPRIETÀ COMMUTATIVA: PROPRIETÀ DISTRIBUTIVA:
a * b == b * a
a * ( b + c ) == ( a * b ) + ( a * c )
a + b == b + a
a + ( b * c ) == ( a + b ) * ( a + c )
PROPRIETÀ ASSOCIATIVA:
ALTRE PROPRIETÀ:
a * ( b * c ) == ( a * b ) * c
a * 0 == 0
a + ( b + c ) == ( a + b ) + c
a * !a == 0
IDEMPOTENZA:
a + 1 == 1
a * a == a
a + !a == 1
a + a == a
PRINCIPIO DI DUALITÀ:
Se una uguaglianza è corretta, è corretta ed uguale anche l'uguaglianza ottenuta sostituendo 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 'Macaroni box', prototipo di una calcolatrice a tastiera per applicazioni contabili ,così chiamata 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
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 anziché da manovella. Dopo tre anni di perfezionamenti, nel 1887 venne commercializzata nella versione in serie col nome di 'comptometer'. Nel 1905, la Marina degli Stati 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 cominciarono ad essere sempre più importanti, mentre le campagne si
spopolavano. L’equilibrio sociale diventava sempre più complesso, anche a causa delle immigrazioni, e i governi dovevano essere
in grado di conoscere, attraverso censimenti,la composizione delle
Figura 10
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 domanda. Le schede venivano preparate su macchine speciali dette perforatrici pantografiche, che traducevano le risposte dei moduli del censimento in buchi sulle schede 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 anziché 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 perforate; 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 computer elettromeccanici ed elettronici; gli elaboratori semmai hanno approfittato di
questa tecnologia consolidata.
Figura 11
Macchine astratte – Una storia lounga un secolo
Alla base dei concetti teorici dei calcolatori elettronici del 900 troviamo le teorie di David Hilbert (1862-1943) sulla costruzione di un unico sistema che ricomprendesse e organizzasse tutta la matematica ponendo 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
Figura 0.14
dire una proposizione e la sua negazione. Una questione di questo
tipo rientra nella metamatematica, poiché è un’indagine matematica sulla matematica.
Nel 1931 Kurt Gödel (1906-1978) pubblicò il "Teorema di incompletezza" che mostrava l'impossibilità dell'impresa proposta
da Hilbert. Il teorema afferma che in un qualsiasi sistema assiomatico (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 dimostrabile con i mezzi logici (assiomi, definizioni, regole di deduzione) offerti dal sistema stesso: per effettuare questa dimostrazione, è
necessario ricorrere a un sistema più ricco di mezzi logici del pri- Figura 12
mo.
Figura 13
Nel 1936 il matematico inglese Alan Mathison Turing (19121954) progettò una macchina ideale che fosse in grado di risolvere
problemi. Questa macchina, nota come macchina di Turing, si compone 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 considerarsi infinito a destra e a sinistra.
b. La TLS deve essere in grado di leggere i simboli scritti in una cella, di scrivervi 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; è funzione dei primi due parametri.
4.
I(s, i): il simbolo scritto dalla macchina all'istante successivo; è funzione dei primi due parametri.
5.
V(s, i): il verso (movimento) della macchina (destra/sinistra); è 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 indecidibile". Questo risultato precedette il famoso lavoro di Turing sul problema della fermata (o halting problem) che inoltre mostra l'esistenza di
un problema irrisolvibile mediante un procedimento meccanico. Church e Turing, mostrarono altresì che il λ calcolo e la macchina di TuFigura 14
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à computazionali. Questo risultato è la tesi di Church–Turing. Successivamente Turing studiò
la cosiddetta macchina universale, una macchina di Turing in grado di imitare una
qualsiasi particolare macchina di Turing. La macchina universale di Turing ha costituito 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 principalmente 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 superati 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 superavano ampliamente i calcolatori d'ufficio. Inoltre faranno da banco di prova 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, primo 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 delle 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 collegamento 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 lavoro 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 perforate), che avrebbe dovuto eseguire i calcoli nell'ordine delle sequenze matematiche e non dalle sequenze imposte dalle limitazioni meccanografiche. Il
meccanismo di trasferimento di una determinata quantità d'informazione da
una parte all'altra della macchina funzionava grazie a un sistema di ruote dentate, mosse da impulsi elettrici, che effettuavano una rotazione ogni dieci impulsi. 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- Figura 15
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. Flowers, W. W. Chandler e altri. Era un grande calcolatore elettronico, 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'ENIAC (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 servirono 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 simultaneamente. Questa importante innovazione sarà ripresa con l'ENIAC 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 collaboratori. Il primo calcolatore elettronico general purpose con programma memorizzato

BINAC (Binary Automatic Computer, 1949) di J. P. Eckert e
J. W. Mauchly. Era di tipo general purpose, il primo calcolatore 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 magnetico, sistema operativo, linguaggi ad alto livello.
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’ informatica 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 strettamente tecnico in vari contesti (scientifici, legali, amministrativi, di progetto, di normativa, ...), per intendere un linguaggio che si serve di termini e di espressioni scelte 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 ricorsiva 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 allora richiedeva una manipolazione diretta ed esterna dei collegamenti, era così ridotta ad un'operazione dello stesso tipo dell'inserimento 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 termiFigura 17
ne. Nel frattempo un nuovo modello di computer, l'EDVAC(1951), era in cantiere, e von Neumann ne assunse la direzione. Nel 1945 egli scrisse un famoso rapporto teorico, che divenne un classico dell'informatica: in esso la struttura della macchina era descritta negli odierni termini di
memoria, controllo, input e output. Si dedicò alla progettazione di un nuovo calcolatore, 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 diagrammi 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
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 linguaggio di programmazione scientifica FORTRAN (FORmula TRANsalot) per il sistema 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 perforate, 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 corrente e che sostituisce presto le fragili e ingombranti valvole. L'introduzione dei transistori al posto delle valvole, all'interno del computer, aumenta notevolmente la velocità di elaborazione dei dati e permette di ridurre notevolmente le dimensioni, non ché
i guasti. Nascono i “chip”.
Differenza Transistor-Valvola
Figura 18
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'informazioni, che diventa così uno standard mondiale, ancora in uso oggi. Prima di allora 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 linguaggi di programmazione Assembler, RPG (Report Program Generator) e COBOL. 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 integrati. La novità di questa macchina risiedeva nella possibilità di essere potenziata aumentando la capacità della memoria o addirittura aggiungendo altri elementi.
Figura 19
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 cache 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, produsse 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.
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 Projects Agency Net) per ricerche sulle reti e i primi 4 nodi diventano operativi all'UCLA, 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’innovazione della memoria virtuale, che consente una gestione totalmente automatica di carico/scarico di parti di programma, non richieste in un determinato momento, da disco 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. Nello stesso anno nasce il PASCAL che consente ai programmatori di dividere un programma in vari blocchi chiamati "funzioni" e "procedure". Rende il codice programma 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 fenomeno 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 ingegneri elettronici della Intel, l'italiano Federico Faggin e gli americani Marcian Edward Hoff jr. e Stanley Mazer, diedero vita al "motore" dei futuri "Pc", il microprocessore. 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 elaborazione: 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 problema fu risolto dall’IBM che sopperì a questo inconveniente con l’uscita dell’ IBM
3340 che adottava la tecnologia di memoria su Hard Disk (dischi di alluminio magnetizzati). La Commodore è il primo produttore che mette sul mercato un calcolatore elettronico compatto, come prodotto di massa. Sino ad oggi i calcolatori erano
pesanti, complicati e molto costosi per la media delle persone.
Figura 20
I processori 4004 -8008
Nel 1972 Dennis Ritchie riscriverà il "B" e battezzerà il nuovo linguaggio con la lettera "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 piccolissima azienda che elaborava linguaggi per "computer" , la Microsoft .La fortuna
di questa piccola società fu la creazione del linguaggio Basic. Quasi in concomitanza, 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 all'omonima azienda, battezzata come la casa discografica creata quasi dieci anni prima 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’MSDOS ( Microsoft - Disc Operating System ) con il quale sono cresciuti e hanno appreso i rudimenti dell'informatica milioni di persone.
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) è integrato 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 transistor,Motorola) , Intel 80286(16 bit), 80386(32 bit), 80486(32 bit,1.2 milioni di transistor). Questo decennio vede lo sviluppo di Windows 1.0 che introduce gli aspetti tipici 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’uscita 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 teoria 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, oggigiorno largamente usato, specialmente nel mondo accademico, come
linguaggio introduttivo alla programmazione per la sua semplicità d'uso
Figura 21
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 contesti, anche industriali. Tipiche aree applicative per questi linguaggi sono, ad esempio: - specifica e verifica di protocolli di comunicazione (tra questi, quelli che quotidianamente usiamo, ad esempio, per la posta elettronica); oppure la - verifica di correttezza del progetto di circuiteria hardware. Un derivato di CCS, il linguaggio LOTOS, è 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.
La definitiva consacrazione della Microsoft grazie
all’ uscita sul mercato di diverse versioni sistemi
operativi Windows(95,98,CE,2000,ecc.), è completa. In competizione con i sistemi operativi offerti dalla Microsoft nasce Linux dall’ideatore Linus Benedict Torvalds. Questo sistema ha Figura 22
Figura 23
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 interessati 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 comunicazione per PC, denominato USB, questo nuovo tipo di connessione semplificherà la
connessione di innumerevoli dispositivi collegabili al PC: mouse, scanner, fotocamere, webcam, drive portatili, ecc. Oltre alla praticità, la nuova porta di connessione
(plug'n play) risulta particolarmente veloce, soprattutto quando verrà fornita la versione 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 pensa saranno possibili tramite lo sviluppo dell’ intelligenza artificiale
Grafico 0.1
CAPITOLO II
Rappresentazione delle Informazioni
Rappresentazione posizionale
La rappresentazione posizionale in primo luogo, permette di scrivere in modo efficiente 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.
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 rappresentazione 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 numero 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 disponibili. 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 caratteri ASCII sono codificati in un byte possiamo rappresentare un numero massimo di
256 simboli.
Numero di bit
Numero di oggetti rappresentabili
Tabella 2
Per quantificare varie quantità di uso comune (per esempio capacità di memorizzazione 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 fatto che viene naturale lavorare con le potenze di due. Succede quindi che l'unità di misura 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 trasferimento di 100 Mb/s, 100 MegaBit al secondo.
Sistemi di numerazione binario ottale ed esadecimale
I sistemi di numerazione presuppongono la determinazione di una base, che chiamiamo 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 utilizzato. I Babilonesi usavano un sistema sessagesimale in base
. I computers
ragionano in termini del sistema binario (
). Gli informatici talvolta usano volentieri 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 coefficiente 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 delle cifre del numero 15000. Chiaramente, si tratta di un numero in cui ci sono 1 decina di migliaia e 5 migliaia. Però, non e' chiaro se i tre zeri che seguono vadano interpretati 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 esatta anche di centinaia, decine e unità. Nel primo caso, diremo che si tratta di zeri "significativi" 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 significative tutte le cifre (zeri inclusi) che siano a destra della prima cifra diversa da
zero.
In notazione binaria il concetto di numero a virgola mobile si estende in modo diretto. 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 programmazione dovrebbero essere "neutri" rispetto alle convenzioni di rappresentazione. Di fatto,
negli ultimi 10 anni si è imposto lo standard IEEE 754 che prevede almeno due rappresentazioni: 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 segno 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 campo "esponente", E, dei floating assume valori tra 0 e 255. I valori di E da 1 a 254 permettono di esprimere numeri normalizzati in cui il primo bit (nascosto, cioè non rappresentato 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 positivo 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 numeri 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 1045
e 10-37 al prezzo di un crescente perdita di precisione (diminuzione delle cifre significative) 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 attribuisce a tale sequenza il valore NaN ( Not a Number ) che solitamente sta a segnalare 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
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 utilizzare 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 tramite 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
-2
-1
-0
0
1
2
3
111
110
101
100
000
001
010
011
Tabella 3
Questa rappresentazione ha tuttavia lo svantaggio di avere due diverse rappresentazioni 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 codifica, 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 valore assoluto del numero. La seguente tabella indica la codifica in complemento a
due dei numeri rappresentabili con 4 bits.
-4
-3
-2
-1
0
1
2
3
Tabella 4
100
101
110
111
000
001
010
011
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 complemento a due i numeri compresi tra -2n-1 e 2n-1-1.
Una caratteristica molto utile dei numeri in complemento a due è data dalla possibilità di seguire operazioni di somma di numeri negativi e positivi. A tal scopo è sufficiente eseguire la somma con le stesse regole della somma in colonna, ricordando
che in binario si ha:
Tabella 5. La somma Binaria
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 bits
Esempio: 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 entrambi 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 operazioni di sottrazione con la stessa circuiteria logica necessaria per eseguire le somme: basta invertire il segno del termine da sottrarre e quindi eseguire un'operazione
di somma.
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 codifica ASCII associa ad ogni carattere una particolare sequenza di 0 ed 1 in un byte. Esistono 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
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 ordinata a quello in ascissa, per esempio per il carattere 40+E=4E abbiamo , risultato espresso in esadecimale. è veramente facile convertire i numeri esadecimali in binario. Basta sostituire ad ogni cifra decimale il corrispondente gruppo di 4 cifre binarie 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
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 alfanumerico secondo la tabella ASCII che abbiamo appena visto. Questo tipo di testo viene 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 avvio, 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 caratteri 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 grassetto, 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 possibili caratteristiche. Tutte queste informazioni che vanno oltre alla mera rappresentazione dei caratteri ASCII (che producono gli editori di testo) va sotto il nome di formattazione. 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
formattato può condurre ad un'esagerata occupazione dello spazio su disco dove vengono 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 medesima. 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 segnali e la quantizzazione.
o
o
Campionamento. Il campionamento consiste nella estrazione di un insieme di campioni da un segnale continuo. Usualmente i campioni sono
equispaziati nel tempo ma non è una condizione necessaria. Esiste un teorema, dovuto a Nyquist, che stabilisce la frequenza minima alla quale bisogna campionare un segnale per essere sicuri di non perdere informazione. 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 è scomponibile in una varietà di componenti che sono delle semplici oscillazioni
costanti, ognuna caratterizzata da una ben precisa frequenza di oscillazione. Nella realtà i segnali sono sempre caratterizzati da una frequenza massima. Il teorema di Nyquist dice che la frequenza minima alla quale un segnale deve essere campionato per non perdere informazione è pari al doppio della massima frequenza presente nel segnale.
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).
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 "discretizzazione" dell'immagine in un certo numero di componenti, detti pixels, corrispondenti ai
singoli punti sullo schermo quando l'immagine venga visualizzata su video. Risoluzioni tipiche degli schermi (pixels per riga x pixels per colonna) sono 640x480, 800x600, 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 vengono 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 eseguita 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 esempio, memorizzare il numero di tali bits nella sequenza. Nel formato jpeg, invece, vengono memorizzati i coefficienti della trasformata bidimensionale di Fourier dell'immagine. 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 alcuni 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
Oltre alle immagini statiche, e' possibile immagazzinare sequenze di immagini, ovvero filmati. Un formato molto utilizzato per memorizzare sequenze di immagini è il
formato mpeg, che rappresenta un'estensione del formato jpeg. In mpeg, la compressione 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 colonna 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 collegamento ad altre pagine di informazione attraverso un semplice click del mouse. Utilizzando un browser per visualizzare un testo si può osservare che non solo vengono visualizzate 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 vengono 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 originale 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'informazione che specifica l'indirizzo della nuova pagina Web cui il browser si collegherà quando verrà fatto click sull'elemento corrispondente. Gli indirizzi Web sono specificati
come URL (Uniform Resource Location) e specificheranno il tipo di protocollo, l'indirizzo IP del Web server e l'indicazione (opzionale) del file da accedere. Ad esempio l'URL http:://www.uniroma2.it/didattica specifica la locazione:
la prima parte (http::) specifica il protocollo di comunicazione http (a sua volta basato 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/.. specifica la directory ed il file contenenti il testo HTML. In maniera analoga vengono specificate le immagini inserite nel testo, tramite il tag <img> e specificando l'URL del
file contenente l'immagine (normalmente in formato gif o jpeg).
Oltre a testi, links ed immagini possono essere inserite funzioni più sofisticate all'interno 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 Huffman 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 comprimere. 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 favorisce 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'utente 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 MP3
La digitalizzazione dei segnali audio richiede l'impiego di una grande quantità di bytes. 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 riproduzione stereo. Poiché lunghe sequenze si dati si trasformano in lunghi tempi di
trasmissione sono molto importanti le tecniche di compressione. Nel mondo dei segnali 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
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 sofisticata architettura di compressione che si articola addirittura in 4 passi:
1. DCT (Discrete Cosine Transform). La DCT é una trasformazione matematica che fa capo ad una famosissima teoria di Fourier e che trasforma i
segnali in una loro rappresentazione fatta di una moltitudine di componenti ognuna delle quali caratterizzata da una precisa frequenza di oscillazione. Mediante tale trasformazione ci si sposta in quello che potremmo
chiamare il mondo di Fourier dove diventa facile alterare (filtrare) informazioni 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 pellicola 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 inverso. 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à.
Figura 24 18,6 Kb
Vediamo ora la stessa immagine con un fattore di compressione molto elevato.
Figura 25 2,86 Kb
La seconda immagine richiede molto meno spazio rispetto alla prima, questo comporta una notevole efficienza su Web ma una bassa qualità .
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 meccanicamente 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 necessarie a preparare un caffè:
Algoritmo prepara Caffè
1) Svita la caffettiera
2) Riempi d’acqua il serbatoio della caffettiera
3) Inserisci il filtro
4) Riempi il filtro con la polvere del caffè
5) Avvita la parte superiore della caffettiera
6) Metti la caffettiera, così predisposta, su un fornello acceso.
7) Spegni il fornello quando il caffè è pronto
8) 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 naturale in modo tale da poter essere interpretato da un essere umano.
Sappiamo che un calcolatore elettronico, non usando il linguaggio naturale, non riuscirebbe 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 costrutti propri dei linguaggi di programmazione.
Il potere dell’algoritmo sta nel fatto che esso prescinde dal linguaggio di programmazione che verrà usato. In tal modo, un generico algoritmo è buono per qualsiasi linguaggio.
Formalismi di codifica
Dopo questa premessa sarà bene soffermarsi sugli strumenti che si hanno a disposizione per scrivere un algoritmo(e quindi un programma).
Prima di tutto occorre affermare che un algoritmo può avere tra i suoi dati delle costanti, delle variabili, che possono essere di tipi differenti (caratteri, interi, reali, stringhe,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 direttamente 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 programmazione 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 diagrammi di flusso e la pseudocodifica.
Diagrammi di flusso
Sono una forma grafica di rappresentazione degli algoritmi. Si collocano tra il linguaggio 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 espressione
Leggi: Legge in input dall’esterno un valore che memorizza in una varabile (una locazione di memoria)
Scrivi: Scrive in output l’espressione o il valore di una variabile (locazione di memoria)
Se…allora…altrimenti: Sulla base del valore di una espressione logica, modifica il
“flusso” del programma
Vai al passo…: Modifica il “flusso” di un programma incondizionatamente
Fermati: Termina l’esecuzione di un programma
Tutte le istruzioni verranno così codificate in una veste grafica che verrà ora illustrata:
Assegna :
A=5
Questa istruzione assegna alla variabile A il valore 5
Leggi/Scrivi:
Leggi B
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 testo
all’interno che ovviamente sarà “Scrivi B”
NO
Se…allora…altrimenti:
C>
3
SI
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:
STOP!
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:
Struttura Sequenziale
A=5
B=3
In questa struttura le istruzioni vengono eseguite una dietro l’altra. Esempio:
Svita la caffettiera
Riempi d’acqua il serbatoio della caffettiera
Inserisci il filtro
Riempi il filtro con la polvere del caffè
Struttura Iterativa
A=5
B=5
NO
C>
3
SI
Permette di eseguire un ciclo (ovvero la ripetizione delle stesse operazioni più volte)
condizionato dal valore di un’espressione. Esempio:
Avvita la parte superiore della caffettiera
Metti la caffettiera su un fornello acceso
NO
E’
pronto
il
caffè?
SI
Struttura Condizionale
NO
SI
C>
3
Permette di intraprendere due strade differenti. La scelta è condizionata dal valore
dell’espressione.Esempio:
NO
Versare il caffè nella tazzina
E’
pronto
il caffè?
SI
Controllare più tardi
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 iterative 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
Pseudocodifica
L’altro formalismo è la pseudocodifica. Questo formalismo ha la particolarità di essere molto legato al linguaggio naturale e permette, ad un programma scritto in pseudocodifica, di essere tradotto facilmente in un qualsiasi linguaggio di programmazione.
Anche la pseudocodifica, come i diagrammi di flusso, è basata sulle tre strutture sopraccitate.
Struttura sequenziale
INIZIO
Istruzione 1
Istruzione 2
.
.
Istruzione n
FINE
Esempio
INIZIO
Svita la caffettiera
Riempi d’acqua il serbatoio della caffettiera
Inserisci il filtro .
.
.
FINE
Struttura Iterativa
RIPETI
<corpo dell’iterazione>
FINCHE’ <condizione>
Esempio
RIPETI
<Controlla se è pronto il caffè>
FINCHE’ <non è uscito tutto dal serbatoio della caffettiera>
Struttura Condizionale
SE <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 m
FINE
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 indicano alle parti meccaniche le operazioni da eseguire.
Hardware
Il modo migliore per capire l’hardware è descrivere i vari componenti. Nel farlo, verrà 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 realizzano dei circuiti complessi.
L'insieme di queste piastrine ha la capacità di contenere centinaia di migliaia di informazioni nello spazio di pochi centimetri quadrati.
Figura 26-Processori
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 accesso 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 necessitano nuovamente. Questa funzione di “appoggio” detta paginazione permette al processore di svolgere queste operazioni alla velocità di nanosecondi (miliardesimi di
secondi), mentre se non avesse o non fosse sufficiente questo supporto dovrebbe utilizzare 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.
Figura 28-Memoria RAM
La microprogrammazione
La microprogrammazione è la tecnica con cui ogni istruzione di macchina di un elaboratore 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 all'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 CDRom, 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. Visualizza 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 dimensioni, queste dimensioni si indicano in pollici. Importante , nella scelta del video,
è la risoluzione, ovvero il numero di “pixel” per pollice, cioè di celle che costituiscono 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:
Tubo a raggi catodici
L'immagine viene prodotta sulla superficie interna del tubo da uno o più fasci elettronici 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 individualmente 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 colpisca 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" significa letteralmente, "produttore di luce"). I fosfori sono molto vicini per cui è impossibile distinguerli a occhio nudo, e la mescolanza dei loro colori avviene, in effetti, 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 cristal display). I cristalli liquidi sono composti organici che possono avere sia le proprietà 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 cristalli 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, necessitano 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 cromatico; gamut di colore ridotto rispetto ai monitor CRT (soprattutto a causa del primario blu). I principali tipi di monitor a cristalli liquidi sono a matrice passiva:
TN, twisted nematic;
STN, supertwisted nematic;
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 monitor 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 davanti al video una serie di elettrodi: è sufficiente la presenza di una unica lastra trasparente 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 è ricoperta con fosfori RGB che rendono visibile la luce. Tre celle adiacenti costituiscono un pixel. Un clock di 30 kHz è sufficiente a visualizzare una immagine senza sfarfallio. Questa caratteristica ha tuttavia effetto anche sulla visualizzazione di immagini mobili. Mentre un colore viene già acceso, l'altro non è ancora illuminato. Per minimizzare questo problema i diversi costruttori utilizzano metodi diversi.
Figura 27 - Video
Unità di lettura floppy disk
E' un dispositivo che generalmente trova posto nel rack da cui è costituito il computer 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'inserimento della testina di lettura/scrittura. Le due fessure inferiori permettono rispettivamente, 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 conservazione di notevoli quantità di dati.
Hard Disk (disco fisso)
Il disco fisso è l'unità magnetica su cui risiede il sistema operativo, i dati, i programmi 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
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 controllore) può influenzare le prestazioni perché specifica la velocità massima alla quale le informazioni possono essere trasferite da o per l'hard disk. Le moderne interfacce tipo ATA133, Serial ATA o SCSI possono trasferire centinaia di megabyte per secondo, molto più di quanto qualunque singolo hard disk possa fare, e quindi l'interfaccia 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 scrivere contiene una serie di tasti "funzione" (F1,...,F12) che permettono di eseguire
funzioni specifiche che generalmente sono inserite nei prodotti realizzati per la videoscrittura, basi dati ecc.
Vi sono inoltre tasti per la cancellazione (Canc), per lo spostamento in alto , in basso , a destra  e a sinistra .
Ed ancora tasti Pag , Pag , Ins, Fine (o End), che vengono utilizzati insieme ad altri 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 numerica che, in alcuni prodotti, viene utilizzata per l’inserimento di dati numerici e facilita quindi l'utilizzo dei numeri somigliando alla tastiera di una calcolatrice.
Per facilitare la posizione ergonomica sono in commercio tastiere con "design" particolari studiati appositamente per evitare l'affaticamento sia delle mani che dell'avambraccio 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 chiudere 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 ancora altri la cui sofisticata struttura permette di soddisfare qualsiasi esigenza. Attualmente è stato aggiunto lo skroll, una rotella nella parte anteriore che facilita l’interazione con i fogli di lavoro tipo word excel, ecc.
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'immagine 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 stampante è in grado di accettare (carta, buste ecc). Il più diffuso è il formato A4, ma alcuni 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 colori può riprodurre la stampante; le monocromatiche impiegano un solo colore, di solito 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 verticale. 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-
pa, poiché a ciascun pixel possono corrispondere diversi punti di colore diverso affiancati. 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 differisce 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 attraverso 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 spostamento del carrello, con una aumento della velocità complessiva (stampa bidirezionale). 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. Questa tecnologia di stampa è ancora richiesta in alcuni settori poiché permette di imprimere anche i moduli copiativi a più fogli.
Figura 32-Stampante ad aghi
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 buona 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 carrello. Il movimento dell'inchiostro è ottenuto per mezzo di due distinte tecnologie:
pompe piezoelettriche che comprimono il liquido in una minuscola camera, resistenze elettriche che scaldano bruscamente il fluido facendolo schizzare dall'ugello. Entrambi 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 dall'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 elevati 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 ottenere la stampa a colori si impiegano quattro toner: nero, ciano, magenta e giallo, trasferiti
da
un
unico
tamburo
oppure
da
quattro
distinti.
Per semplificare la gestione, nelle stampanti laser moderne il toner e il tamburo fotosensibile sono incluse in una cartuccia usa e getta (o meglio, rigenerabile). Il costo
più elevato di queste stampanti è ampiamente compensato da un minore costo per copia, una maggiore velocità di stampa e maggiore affidabilità nel tempo dovuta all'assenza 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 pellicole con i colori fondamentali. Non offrono però risoluzioni molto elevate.
Stampante braille
Queste macchine non impiegano inchiostri ma imprimono nella carta i simboli caratteristici 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. È comunemente collegato al computer tramite una porta seriale RS-232 oppure una porta
USB.
I modem più comuni sono quelli che utilizzano la comune rete analogica PSTN (Public 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).
Figura 35-Modem router ADSL
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 riconoscere testi mediante OCR. Il suo funzionamento è basato su un lettore ottico che
"scandaglia" l'oggetto da digitalizzare trasformandolo in una sequenza di dati interpretabile come immagine dal computer. Gli scanner sono gli strumenti principali necessari per una corretta Gestione Elettronica dei Documenti (GED). Esistono scanner
in grado di processare anche centinaia di pagine al minuto, richiamando automaticamente le pagine da un apposito contenitore, così come avviene usualmente per una
stampante.
Figura 36-Scanner
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 velocità 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 praticamente 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.
Figura 37-Lettore di CD-Rom
DVD
E’ un supporto di memorizzazione simile al CD-RROM, ma con una capacità notevolmente superiore. La nascita del DVD è dovuta all’idea di avere a disposizione un
supporto che potesse memorizzare grandi quantità di dati, principalmente video digitali. Oggi è largamente utilizzato per i video, infatti ha sostituito il vecchio standard
delle videocassette VHS. Nell’ambito dei computer si appresta a sostituire i CDROM, vista la maggiore capacità di memorizzazione ed il progressivo abbassamento
dei prezzi. Da qualche tempo sono presenti sul mercato DVD-RW, ovvero riscrivibili, 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:
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 stessi 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'interno 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, ovvero la connessione Firewire (transfer rate teorico massimo 400 Mbps/IEEE1394 e
800 Mbps/IEEE1394b), meno.
Casse acustiche
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 altoparlanti 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, registrare 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 collegare 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 stampante, lo scanner ecc., è una porta che invia e riceve 8 bit alla volta. Possono essere
aggiunte altre porte parallele installando un adattatore parallelo.
Porta SCASI
La porta SCASI può supportare fino a sette periferiche in cascata, e la sua prerogativa 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 rimozione. Lo standard è stato progettato in modo da consentire un semplice aggiornamento 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 componenti multimediali oramai lo standard USB è il metodo di collegamento più utilizzato 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 privilegiare 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 consentire 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 dispostivi 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 sovraintende 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.
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 varianti del connettore per i loro dispostivi miniaturizzati. Molti produttori cercando di ridurre 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 connettore 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 connessione di dispositivi tipo i PDA che a volte devono fare da dispositivo ed a volte devono 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 principale 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.
Figura 39-Penna Ottica
Plotter
Il plotter è una periferica specializzata nella stampa di grafica vettoriale. È il dispositivo 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 foglio, 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 rotoli larghi 914mm o più. Nei formati maggiori il movimento in una coordinata è realizzato facendo scorrere il foglio su un rullo e lasciandolo libero alle estremità.
Alcuni dispositivi speciali, dove il pennino è rimpiazzato da una lama, sono impiegati 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 formato 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.
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 unificare le varie tecnologie di connessione dei terminali mobili, dai computer ai microfoni 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 diversi utilizzando onde radio. Questi dispositivi possono essere personal digital assistant (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 consentire il collegamento wireless tra periferiche come stampanti, tastiere, telefoni, microfoni, 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 utilizzare 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 dover staccare le mani dal volante. Attualmente molti altri produttori di autoveicoli forniscono di serie o in opzione vivavoce Bluetooth che integrati con l'autoradio dell'automobile permettono di utilizzare il cellulare mantenendo le mani sul volante a quindi aumentando la sicurezza della guida. Comunque lo standard include anche comunicazioni a lunga distanza tra dispositivi per realizzare delle LAN wireless. Ogni dispositivo Bluetooth è in grado di gestire simultaneamente la comunicazione con altri
7 dispositivi sebbene essendo un collegamento di tipo master slave solo un dispositivo per volta può comunicare con il server. Questa rete minimale viene chiamata pi-
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 necessario.
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 dispositivi (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 viceversa, è un protocollo standard denominato USB Mass Storage protocol. Tale standardizzazione 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 trasporto 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 dicono alle parti meccaniche le operazioni che debbono eseguire. Il calcolatore è tanto
più intelligente quanto più è intelligente il programma che è stato scritto dal programmatore.
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ò avviene 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 ricezione e trasmissione di dati attraverso tutti i dispositivi di I/O.
Software Applicativo
Viene detto Software applicativo (o semplicemente "applicativi") l'insieme dei programmi che non sono compresi nel sistema operativo, ma che vengono invece installati dall'utente per svolgere compiti specifici. Per esempio sotto Windows il programma 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 senza 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 operativo senza nessun'altra applicazione, la macchina funzionerebbe perfettamente, ma
l'utente non sarebbe messo nelle condizioni di poterla usare.
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 creazione 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.
CAPITOLO V
Cenni di Architetture dei Calcolatori
Funzionalità di un calcolatore
Le principali funzionalità di un calcolatore devono prevedere l’interazione con l’ambiente esterno tramite il trasferimento di dati e informazioni. Tutto questo è supervisionato 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 effettivamente realizzato e reso operativo nell'ambito di un progetto dell'Università di Princeton sotto la guida del matematico John Von Neumann.
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’istruzione 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 eseguita 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 cicli 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, contenente 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 Register). Al termine della fase di fetch della istruzione l'unità di controllo incrementa di uno il contenuto del PC, per predisporsi ad eseguire l'istruzione successiva.
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. Pertanto 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 recupero degli operandi (fetch operandi), in questo caso, prima della esecuzione vera e propria della istruzione, viene eseguita la fase di fetch degli operandi.
Quando tutto ciò che comporta l'istruzione è caricato nei registri opportuni del processore 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.
Questa sequenza di passi si svolgerà nello stesso identico ordine fino a che non sarà
stata eseguita l’ultima istruzione
Le macchine convenzionali moderne
BUS (dati, indirizzi, segnali di controllo)
Microprocessor
(CPU)
Memory
I/O driver
I/O driver
Monitor
CD
Registri
ALU
Figura 40 - Archietettura di riferimento MIPS
L'architettura MIPS è rappresentativa dell'architettura dei moderni computer, è semplice 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

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 efficiente e in parallelo alla CPU particolari operazioni, come quelle aritmetiche
(processore aritmetico) o per la presentazione della grafica sul video (processore 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 complicatissimi molto velocemente
Dal punto di vista della organizzazione della macchina come composizione di elementi 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 secondo dispositivo di uscita, allora dovremmo cambiare (ampliare) l'insieme delle istruzioni della macchina convenzionale.
L'interconnessione Bus
Per aumentare la modularità di un sistema di calcolo, fin dagli anni '60 venne introdotta 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 autonomamente col resto del sistema mediante un controllore connesso al bus di sistema. Normalmente questi controllori sono a loro volta dispositivi programmabili in
grado di accedere alla RAM senza l'intervento della CPU.
L'aggiunta di un nuovo controllore connesso al bus permette quindi di aggiungere dispositivi inizialmente non previsti nel sistema, senza modifiche ai dispositivi esistenti.
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 accede in lettura e scrittura, tramite il bus di comunicazione, alle informazioni immagazzinate nella memoria, e comunica con le periferiche per eseguire le operazioni richieste.
La memoria centrale
La memoria provvede all'immagazzinamento dell'informazione gestita dal calcolatore. Una quantità maggiore di informazione viene inoltre immagazzinata nella memoria secondaria a supporto magnetico. Attualmente la quantità di memoria centrale gestita da un calcolatore può variare dalle decine di KBytes per i microcontrollori montati 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 è normalmente 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 utilizzano transistor a giunzione (bjt): sono memorie veloci, ma consentono un grado di
integrazione minore delle memorie MOS che utilizzano transistors ad effetto di campo (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 esposizione a raggi ultravioletti, ed in memorie EEPROM (Electrically Erasable
PROM), che possono essere riprogrammate senza l'ausilio di raggi ultravioletti, e quindi senza rimuovere il chip. Tali memorie differiscono tuttavia dalle RAM per il fatto che l'operazione di scrittura richiede un tempo notevolmente maggiore (qualche millisecondo) rispetto alle operazioni di lettura.
Normalmente è anche presente una memoria ROM che contiene il codice di
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 corrisponde un indirizzo univoco, sorge il problema di come rappresentare all'interno della 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 endian). 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 come
Indirizzo
Valore
1000
$00
1001
$00
1002
$00
1003
$FE
mentre in formato little endian verrà memorizzato come
Indirizzo
1000
1001
1002
Valore
$FE
$00
$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 operazione 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 famiglia rappresenta in generale un'evoluzione e pertanto è in grado di eseguire lo stesso 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-
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 singole istruzioni nonché tra un'istruzione e l'altra. Alcuni registri sono accessibili al
programmatore, ovvero possono essere riferiti direttamente nelle istruzioni di macchina, 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'esecuzione di ogni istruzione corrisponde al prelevamento (fetch) dalla memoria dell'istruzione da eseguire. Questa operazione richiede l'indirizzo in memoria del
primo byte dell'istruzione, contenuto nel program counter. Dopo che l'istruzione è stata prelevata, il program counter viene incrementato del numero di
bytes di cui l'istruzione è composta, e quindi conterrà l'indirizzo iniziale dell'istruzione successiva. Durante l'esecuzione della istruzione il program counter 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 processore. 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 eseguita ha causato un riporto dal bit più significativo;
o
o
o
Bit di Zero Z : posto ad 1 quando il risultato dell'ultima istruzione è
stato pari a 0;
Bit di Overflow V: posto ad 1 quando l'ultima operazione ha causato
un overflow;
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 status (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'operazione 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 è istantanea, 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 sommatori binari, shift registers, blocchi logici AND, OR, XOR, invertitori e multiplexers. 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 dovevano 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 pertanto il set di istruzioni della CPU viene esteso alle operazioni di manipolazione dei
numeri reali.
Il modulo di controllo
Il modulo di controllo rappresenta la parte centrale della CPU, che coordina la sequenza 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'istruzione 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 essere suddivise in altre fasi. La CPU pertanto non è rappresentata da una rete combinatoria, bensì da una macchina sequenziale, che attraversa un insieme di stati, sincronizzata da un segnale di clock. L'unità di controllo implementa tale macchina sequenziale, e definirà un certo insieme di bits per contenere lo stato. L'ingresso di tale macchina 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 commutazione 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 memoria 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 iniziale nella ROM e le locazioni successive conterranno le linee di controllo da produrre in sequenza. Una di queste linee di controllo specificherà la terminazione della sequenza, e quindi inibirà la generazione di indirizzi crescenti ad ogni ciclo di clock, e
terminerà la sequenza di esecuzione dell'istruzione corrente. Questa soluzione presenta 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 richiede 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 celle di memoria indirizzate e la connessione degli switch tri-state per il trasferimento in
uscita del contenuto selezionato). Quest'ultima soluzione implementativa prende il
nome di architettura microprogrammata: la sequenza memorizzata nella ROM in corrispondenza alla singola istruzione macchina corrisponde infatti ad un "microprogramma".
Il Bus di comunicazione
Il bus di comunicazione rappresenta il collegamento fisico tra la CPU e gli altri componenti. 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 locazione nella memoria o ne legge il contenuto. In questo caso l'operazione è supervisionata dalla CPU che pertanto rappresenta il master nella comunicazione. La memoria 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 conduttrici 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 comunicazione 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 comunicazione con dispositivi quali i dischi fissi. Una caratteristica del protocollo di comunicazione è 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 caratteristiche elettriche del bus (anche queste parte della specifica del protocollo). Le frequenze 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 è caratterizzato 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
scrittura. Il funzionamento delle linee AS e DTACK è esemplificato dal seguente
diagramma che definisce l'evoluzione temporale del protocollo.
Figura 41
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 significativo 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 postando il livello della linea AS a basso. A questo punto la memoria risponderà ponendo 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 nanosecondi). 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 buffer register (MBR)e terminate la sequenza riportando a livello alto la linea di controllo AS.
Un' operazione di scrittura è rappresentata invece dal seguente diagramma temporale:
Figura 42
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 provvederà 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 attualmente 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 successivo. Si parlerà in questo caso di bus multiplexati.
Un'altra caratteristica comune a molti bus è la possibilità di eseguire trasferimenti veloci 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 trasferito 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 inutile. Il tipo di periferica dipenderà dal tipo di utilizzo del calcolatore. Se il calcolatore
è rappresentato da un microcontrollore che coordina il funzionamento di un'apparecchiatura, 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 probabilmente da una scheda di rete o da una scheda audio. Le periferiche possono esse-
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 necessario 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 operazioni 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 dipenderà dal tipo di dispositivo, e sarà compito del software (il driver) operare correttamente tramite tali registri. Si osservi che in questo caso le linee di controllo non possono essere utilizzate per la sincronizzazione tra CPU e dispositivo, perché altrimenti il bus di comunicazione non potrebbe essere utilizzato
mentre la CPU è in attesa della risposta di un dispositivo lento. Pertanto l'accesso ai registri delle periferiche avverrà con tempi paragonabili ad un accesso in memoria, e la sincronizzazione avverrà attraverso il contenuto dell'informazione 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 eseguire quindi il trasferimento del dato solo quando questo risulti disponibile.
CAPITOLO VI
Linguaggi di Programmazione
I Linguaggi formali
Per chiarirci le idee vediamo brevemente quali sono le differenze tra i linguaggi formali 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 presentano delle ambiguità; hanno però una enorme potenza espressiva. I linguaggi formali,
invece, sono completamenti definiti mediante regole esplicite, per cui è sempre possibile determinare la correttezza (grammaticale) di una proposizione; inoltre il significato di ogni frase è sempre privo di ambiguità. Però hanno un potere espressivo limitato.
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 descrivere le teorie matematiche e i processi deduttivi in modo rigoroso. Si noti, per inciso, 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 precisamente dal lambda calcolo di Church e dal calcolo dei predicati del primo ordine.
Linguaggi di alto e di basso livello
Non è possibile effettuare una rigida classificazione dei linguaggi di programmazione, 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 linguaggio 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 riservata 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 utilizzare 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'Assembler, pur permettendo una semplificazione del lavoro, costringe ancora a ragionare 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 linguaggi 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 costretti a imparare un nuovo linguaggio ogni volta che devono lavorare su una macchina diversa).
Al giorno d'oggi l'Assembler viene utilizzato solo in casi particolari: o quando è necessario molta efficienza (in quanto anche se i traduttori cercano di ottimizzare il codice 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-
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 quattro categorie (imperativi, funzionali, dichiarativi ed orientati ad oggetto). Noi utilizzeremo una classificazione più ampia esaminando anche alcune categorie meno consuete. Sottolineiamo comunque che le classi considerate non sono mutuamente esclusive, per cui un linguaggio può appartenere anche a più di una categoria. Analizziamo 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 fondamentale 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 completamente assente (si utilizza soltanto il passaggio dei parametri). In tale modello rivestono particolare importanza la ricorsione, in pratica l'utilizzo di funzioni che richiamano se stesse e, come struttura dati, la lista (sequenza ordinata di elementi). Il più importante rappresentante di questa categoria è senz'altro il Lisp (LISt Processing).
• Dichiarativi (o logici): il programma è considerato come la dimostrazione della verità 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ù recentemente 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 parte procedurale (il come) rende un programma scritto in un linguaggio logico particolarmente leggibile.
I linguaggi logici risultano particolarmente adatti a risolvere problemi che riguardano
entità e le loro relazioni. Mentre nelle normali applicazioni risultano essere di difficile utilizzo, anche perché, ma non solo, comportano un modo di programmare completamente 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
delle metodologie appropriate. Le più importanti sono la programmazione strutturata 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 malefico 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 permettono 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 insieme di oggetti (insiemi di dati e algoritmi che manipolano questi dati) che comunicano con l'esterno mediante messaggi. Assumono rilevanza concetti quali incapsulamento, 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 supportano 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 facilmente 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 iconico.
CAPITOLO VII
Software Di Base E Software Applicativo
Introduzione
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 risolvere i problemi dell'utente. Tipici esempi di software di base sono i sistemi operativi, 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 traduce automaticamente il codice scritto in un linguaggio, in un altro. Un compilatore è
composto generalmente dalle seguenti componenti: analizzatore lessicale, parser, ottimizzatore, generatore di codice. Generalmente si utilizza un compilatore per tradurre 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 codice sorgente (non eseguibile dalla CPU) al linguaggio macchina.
Essi sono:
 Assemblatori (che traducono ogni istruzione dal linguaggio assembler in linguaggio macchina);
 Interpreti;
 Compilatori.
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 semantica del linguaggio, la traduce nella corrispondente sequenza di istruzioni in linguaggio macchina e la esegue.
Figura 34
Il software applicativo è costituito dall'insieme dei programmi che risolvono determinati problemi dell'utente. Esempi di software applicativi sono i programmi di contabilità, i programmi di videoscrittura, i programmi di elaborazione grafica, ecc. E' essenziale che il software applicativo interagisca con il software di base per poter funzionare. Esso inoltre può essere suddiviso in software personalizzato, cioè realizzato
appositamente in base alle richieste di un singolo utente, e software standard o package, cioè software realizzato per risolvere una gamma di problemi abbastanza comuni e pertanto diretto a più utenti.
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 essere 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'esecuzione 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 elaboratore, 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 solito non si tratta di una semplice copia del file eseguibile sull'hard disk, quanto piuttosto di una complessa procedura di interfacciamento fra la nuova applicazione ed il sistema operativo (che deve aggiornare tutta una serie di file di configurazione generali). Per fortuna l'istallazione è quasi sempre realizzata attraverso una procedura automatica che richiede solo un intervento minimo da parte dell'utente (tipicamente all'utente 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 installazione 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 disco nel drive e la procedura parte da sola; se così non fosse allora bisogna cercare sul
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 volte il file scaricato da Internet può essere di tipo .zip (archivio di file compressi o, secondo il gergo comune, “zippati”), in questo caso occorre prima effettuare la decompressione 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'installazione (quasi sempre solo in inglese).
Il Copyright
Nell'aquisto del CD di installazione software è sempre compresa anche la licenza d'uso personale che consente di utilizzare liberamente quel software per la propria attività (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 rivenderlo ad altri); si tratta di solito di programmi relativamente semplici, messi a disposizione 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 acquistarlo, altrimenti deve rimuoverlo dalla macchina. I programmi shareware alla scadenza 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 consentono 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 programmi in versione demo (abbreviazione di demonstration): si tratta di versioni dimostrative gratuite di software a pagamento, che però funzionano fin da subito in
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 acquistati (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'acquisto legale si favorisce l'ulteriore disponibilità di nuovo software: se nessuno pagasse non ci sarebbe più la possibilità di trovare i programmi in rete. Il software pirata è 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'uso 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).
CAPITOLO VIII
Sistemi Operativi
Premessa
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 dischi 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 trattati.
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 contabilità o di elaborazione testi, che prevede la lettura di dati dal disco, la visualizzazione sul monitor, la digitazione sulla tastiera, la registrazione del lavoro effettuato,
la stampa su carta. Apparentemente è il programma ad effettuare tutte queste operazioni, 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 restituirne 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ò essere la semplice lettera corrispondente al tasto, oppure un altro messaggio, o il risultato 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 passare la richiesta al sistema operativo che provvede ad azionare il disk drive, a muovere 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 dischetto, 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
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 bloccherebbe. L’importanza del sistema operativo è evidente. Qualsiasi programma vi debba
convivere, ne mutua la velocità, il funzionamento, la logica, ed anche l’aspetto estetico. Un cattivo programmatore può anche creare programmi brutti e lenti con un sistema 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 stato creato per un sistema operativo veloce e funzionale.
Il Bootstrap
Il sistema operativo viene anche chiamato software di sistema, proprio perché è inscindibile 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 compito di permettere al computer, all’accensione, di leggere dal disco e caricare in memoria 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 veramente 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.
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 MSDOS 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 dimensioni, 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 versione di Unix sotto Motorola.
Il set delle istruzioni è però identico, perciò un programma elaborato con un microprocessore (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 richiede 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 particolari, 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 incompatibilità, esistono anche rilevanti differenze di sostanza.Un sistema operativo può essere 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 funzionamento di uno solo o di più programmi. Con un sistema operativo monoutente e monotask 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
può lavorare contemporaneamente con il programma di calcolo e con quello finanziario 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 multitask 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 monotask. Con un vero sistema operativo multitask, invece, tutti i programmi funzionano contemporaneamente e, mentre l’utente introduce dei dati in un programma, l’altro continua ad elaborare i suoi calcoli.
L’interfaccia con l’utilizzatore
Quando è in esecuzione un programma, il sistema operativo è pressoché invisibile all’utente. Tuttavia esistono molte condizioni nelle quali l’utente deve lavorare direttamente con il sistema operativo, impartirgli comandi e riceverne risposte.
Al di là del lavoro che si può svolgere con un programma, è spesso necessario effettuare una copia di un file, registrarlo su un sopporto, cambiargli nome od anche cancellarlo. Questi sono compiti precisi del sistema operativo. La stessa azione di scegliere 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 essere inviati con una determinata procedura. Insieme al comando spesso devono essere forniti, secondo un preciso ordine e con forme rigorose, parametri che ne condizionino 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;
Figura 35
- indirettamente, tramite l’uso di un mouse o di tasti funzione, nell’ambito di una interfaccia grafica che operi da intermediario fra l’utente e il sistema operativo.
Figura 36
Struttura di un Sistema Operativo
Monolitica
Il sistema monolitico, fondamentalmente, non ha struttura, quindi il sistema operativo è una collezione di procedure compilate in un unico oggetto che si possono chiamare (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 37
Un 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 servizio.
 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 kernel) 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.
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 funzioni base per la gestione dei processi e lo scambio di messaggi. Siccome molte funzioni 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 viene 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 venga 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 meccanismo nel kernel ma si lascia la decisione di policy (politica) ai server.
.
Figura 39
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 mettono il sistema in uno stato di attesa, ad esempio aspetta che sia premuto un tasto; i driver 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, frammentazione, indirizzamento.
- Nel terzo strato si trovano i Device: monitor, tastiera e mouse sono Device, dispositivi 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 trasformare e di ordinare i file nelle diverse cartele.
- Il quinto strato e' a volte chiamato "User Interface Toolbox": effettua il collegamento con gli strati inferiori e le applicazioni finali; e' diviso in tanti blocchi logici, i Manager, 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 rendere visibile l'organizzazione dei file e di semplificare l' utilizzo delle applicazioni.
Non è propriamente uno strato del sistema operativo poiché è costituito da tutti i programmi applicativi utilizzabili dall’utente, ma in molte rappresentazioni viene classificato come tale
Software applicativo
Interprete comandi (shell)
Gestione dei file
Gestione delle periferiche
Gestione della memoria
Gestione CPU
HW
Figura 49
CAPITOLO IX
Introduzione alle Reti di Calcolatori, Internet 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 informazioni e risorse. Le reti possono avere dimensioni differenti ed è possibile ospitarle
in una sede singola oppure dislocarle in tutto il mondo.
Figura 40
Una 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'ambito di una vasta area geografica, spesso mediante linea telefonica o altro tipo di cablaggio (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 formata 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
una rete comunicano trasmettendosi reciprocamente informazioni; le informazioni
trasmesse sono gruppi di piccoli impulsi elettrici, detti pacchetti. Ogni pacchetto contiene 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 informazioni 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 trasmessi si verifica una collisione che viene rilevata dai dispositivi trasmittenti. I dispositivi 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 OSI
E un modello sviluppato da una proposta del Internetional Standards Organization
(ISO) come primo passo verso la standardizzazione internazionale dei protocolli impiegati 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à chiamato semplicemente OSI
Figura 41
Livello 7 Applicazione (Network Processes to Application)
Si interfaccia direttamente con i programmi applicativi (Application Program 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 accesso remoto) , emulazioni di terminali ecc.
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. Fornisce trasferimento dati affidabile correggendo gli errori. Divide i messaggi
i in pacchetti, ne controlla e preserva l'ordine con cui devono essere spediti, controlla la presenza di errori. E' il primo livello che lavora indipendentemente 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 pacchetti, 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 instradamenti alternativi, sia in caso di guasti o di mutate condizioni di traffico, 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 basato 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.
Il Modello TCP/IP
Lasciamo da parte il modello di riferimento OSI per analizzare il modello di riferimento progenitore di tutte le reti di computer geografiche, ARPANET e il suo successore 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 vengono realizzati secondo il modello client-server, realizzando una comunicazione secondo 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 informazioni 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 verso 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
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 mostrata 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 applicazione (esempi possono essere HTTP, POP, SMTP, ecc.), ciascuno dei quali è descritto 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 trasmissione, che si incarica di incapsularlo nel relativo protocollo di trasmissione. Questo
può avvenire sia in maniera diretta, come nel caso di ethernet, in cui i pacchetti vengono inviati sulla linea attraverso le schede di rete, che in maniera indiretta con protocolli 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 sopportare 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'incarico 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 protocollo TCP. La sede principale di intelligenza della rete è pertanto al livello di trasporto. 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'interscambio 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 caratteristica essenziale che rende tutto ciò possibile, è la strutturazione a livelli tramite l'incapsulamento. Ogni pacchetto di dati viene incapsulato nel formato del livello successivo, 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 livello 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 determinato mezzo
• HUB (concentratore)
Tutti gli utenti collegati all'hub (o ad una serie di hub connessi in cascata) si trovano 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 percorsi 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 pacchetti
trasporto delle informazioni tra 2 reti diverse
Il router è un apparato “intelligente” in grado di prendere decisioni sull’instradamento dei pacchetti in funzione delle tabelle di routing.
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 precedente 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
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 applicativi 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, risparmiando tempo e proteggendo l'integrità del proprio lavoro.
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 messaggi 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 mediante 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 Internet (ISP).
Internet
Internet non è una rete, ma una vasta raccolta di reti diverse che usano certi protocolli 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 milioni di utenti. Questa invenzione ideata dal fisico del CERN Tim Bernes-Lee ha permesso 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 Internet per accedere al WWW, email e altri servizi.
CAPITOLO X
Infrastutture di Rete. Internet. Protocolli di Comunicazione. Indirizzamento in
rete. Servizi di Internet: posta elettronica, file transfer e data streaming
Premessa
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 raggiunta 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 necessario suddividere dei pacchetti troppo grandi in pacchetti più piccoli, oppure potrebbe 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-
sere evidente che il significato del termine pacchetto può avere valore solo in riferimento a un contesto preciso.
Di seguito vengono elencati i protocolli:
IPv4 Internet Protocol version 4. È quello che comunemente si chiama IP. Ha origine 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 rimpiazzare 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 consentono 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'acknoweledgment, 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 abbiano 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 kernel che gestisce la comunicazione TCP/IP, anche se ICMP può venire usato direttamente 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 questa comunicazione a quale gruppo esse appartengono. Come ICMP viene implementato 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,
Token Ring o FDDI che hanno associato un indirizzo fisico (il MAC address) alla interfaccia, 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 indirizzo 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 funzionalità 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 permettono 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 autenticata a livello IP.
ESP Encapsulating Security Payload. Provvede la cifratura insieme all'autenticazione 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, definire i protocolli di rete usati ed incapsulare i pacchetti di dati. È un protocollo complesso 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
con i raw socket questa tecnica è molto meno diffusa e a parte applicazioni particolari si preferisce sempre usare i servizi messi a disposizione dai due protocolli precedenti.
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 sottostante 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 questo 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'è nessuna 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ò definita una nuova versione del protocollo, che (saltando un numero) è diventata la versione 6. IPv6 nasce quindi come evoluzione di IPv4, mantendone inalterate le funzioni che si sono dimostrate valide, eliminando quelle inutili e aggiungendone poche altre per mantenere il protocollo il più snello e veloce possibile.
I cambiamenti apportati sono comunque notevoli e si possono essere riassunti a grandi 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 riprocessamento 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 flessibilità necessaria per introdurne di nuove in futuro.
• il supporto per delle capacità di qualità di servizio (QoS) che permettano di identificare gruppi di dati per i quali si può provvedere un trattamento speciale (in vista dell'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 è contenuta 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 cosiddetto datagram che da il nome al protocollo) su un socket, al pacchetto viene aggiunto 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'affidabilità niente assicura che il pacchetto arrivi a destinazione, né che più pacchetti arrivino 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 duplicati 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 destinazione esso viene passato all'applicazione ricevente in tutta la sua lunghezza, la trasmissione avviene perciò per record la cui lunghezza viene anche essa trasmessa all'applicazione 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 pacchetti. Si hanno così situazioni in cui un client può scrivere su uno stesso socket pacchetti destinati a server diversi, o un server ricevere su un socket pacchetti provenienti 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 pregio della velocità, che in certi casi è essenziale; inoltre si presta bene per le applicazioni 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 applicazioni di streaming e quelle che usano il multicasting.
Transport Control Protocol (TCP)
Il TCP è un protocollo molto complesso, definito nell'RFC 739 e completamente diverso da UDP; alla base della sua progettazione infatti non stanno semplicità e velocità, 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 comunicazione su cui poi effettuare quest'ultima.
Caratteristica fondamentale di TCP è l'affidabilità; quando i dati vengono inviati attraverso una connessione ne viene richiesto un “ricevuto” (il cosiddetto acknowlegment), 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 comunicazione, TCP comprende anche un algoritmo di calcolo dinamico del tempo di andata 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 sequenza 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 acknowlegment, all'arrivo sarà comunque possibile riordinare i dati e scartare i duplicati.
Il protocollo provvede anche un controllo di flusso (flow control), cioè specifica sempre all'altro capo della trasmissione quanti dati può ricevere tramite una advertised
window (letteralmente finestra annunciata), che indica lo spazio disponibile nel buffer 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 socket 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 pacchetti 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
della sequenzialità dei dati viene effettuato per entrambe le direzioni di comunicazione.
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 eventuali implicazioni che possono avere, è il seguente:
• La dimensione massima di un pacchetto IP è di 65535 byte, compresa l'intestazione. Questo è dovuto al fatto che la dimensione è indicata da un campo apposito nell'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 protocollo specifico usato al livello di connessione fisica. Il più comune è quello di ethernet 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è vengono suddivisi6) in blocchi più piccoli che possono essere trasmessi attraverso l'interfaccia.
Rete
Hyperlink
Token Ring IBM (16 Mbit/sec)
Token Ring IEEE 802.5 (4 Mbit/sec)
FDDI
Ethernet
X.25
Tabella 9
MTU
65535
17914
4464
4532
1500
576
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 diverso 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 pacchetti 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 possono essere riassemblati solo alla destinazione.
Nell'header di IPv4 è previsto il flag DF che specifica che il pacchetto non deve essere 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 discovery 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 inviando 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 è opzionale, 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 dimensione 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 posta elettronica (spesso abbreviata con E-mail o email). La posta elettronica è attualmente 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.
La posta elettronica si basa sul concetto di indirizzo. Un indirizzo email fornisce
tutte le informazioni richieste per recapitare un messaggio fino al destinatario in
qualunque parte del mondo esso si trovi. Gli indirizzi email sono strutturati nella
forma:
[email protected]
(ad esempio [email protected]). Il simbolo @ sta per "at"e indica il fatto che l'utente
con nome nome_utente è reperibile via email sul Server il cui indirizzo è sito.dominio. Nell'esempio riportato l'utente Mario Rossi (mrossi è il
suo identificativo) possiede una casella di posta elettronica sulla macchina che nel
dominio 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 organizzazioni 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 sicurezza.
In realtà il protocollo FTP può essere usato sia per prelevare file da un Server, che
per 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
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 recapito 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 sistema 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 apposito 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 immagini che si muovono sul video del computer. Grazie al data streaming è possibile
trasmettere immagini in tempo reale attraverso la rete. Insomma, è possibile realizzare una sorta di trasmissione televisiva via Internet. Per il momento la qualità di queste 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 certamente 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.
CAPITOLO XI
Il World Wide Web. Introduzione ai formati dei dati multimediali. Introduzione 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 visualizze 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ò visualizzare. I codici HTML sono detti tag e consentono di indicare la formattazione del
testo (dimensione, stile, posizionamento, ecc.) e la posizione delle immagini, dei filmati, delle animazioni. Queste indicazioni sono poi interpretate dal browser per la visualizzazione.
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 associati 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 documento. Se in un testo che parla di vino c’è una informazione sugli alberi che producono il sughero, e a questa informazione è associato un link, basta fare clic sul link
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 informazione 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 Web
Per 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, avvisa 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 prelevare informazioni dal server apre una connessione con il server, trasferisce le informazioni e chiude la connessione.
Un client web, detto anche browser, è un programma in grado di interrogare un server 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 moderni funzionano in modo grafico. Questa possibilità, collegata al fatto che i numerosi 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. Considerando 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 visualizzazioni 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 risorse richiesta. La comunicazione tra browser e server avviene mediante il protocollo
HTTP, che ambedue i programmi devono supportare. Il server può risiedere su qualunque macchina (Windows, Unix, Macintosh) ed è continuamente in funzione, in attesa che gli vengano fatte delle richieste da parte dei browser.
I motori di ricerca
Tenendo 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 è possibile rintracciare tutte le informazioni presenti in rete. Per cercare informazioni su Internet 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, parole 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 parola 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 scrive 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 Mario 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
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ù motori 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 ricco 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 Lingua
Innanzi 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+Rossi
si 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 contengono sia Vasco sia Rossi, escludendo quindi, per restare nel nostro esempio, la pagina 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 pagina entrambi i termini, il motore la inserirà nell’elenco.
Il Segno "-"
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 Minuscole
Se 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 motore 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*ssi
esso cercherà Vasco Rassi, Vasco Rissi… e, ovviamente, Vasco Rossi.
Le Categorie
Molti siti che ospitano motori di ricerca hanno anche dei "cataloghi ragionati" di pagine 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 Directory, Virgilio li definisce Canali etc. Il concetto, comunque, non cambia.
Ad esempio, ci può essere una categoria principale musica che contiene al suo interno sottocategorie come classica, rock, dance… Una sottocategoria come rock può essere 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, falegnameria" o dell’idraulico Vasco Bianchi, ma solo pagine davvero relative al cantautore 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 operata da noi, ma da altri.
Quasi tutti i siti di ricerca offrono inoltre la possibilità di cercare anche solo immagini, musiche o video relativi alle parole indicate.
Sitografia
www.windoweb.it
www.storiadellinformatica.it
www.prometheo.it/a_linguaggi_programmazione.htm
www.dizionarioinformatico.com
www.wikipedia.org
BIBLIOGRAFIA
Algoritmi e strutture dati di Demetrescu, Finocchi e Italiano. Ed: McGraw-Hill
Introduzione agli algoritmi di Cormen, Leiserson e Rivest. Ed: Jackson libri
Manuale di informatica: coordinatori Giacomo Ciuffi e Vincenzo Falzone. Edizione Calderini. Nello specifico, è stato tratto un brano di Daniel Pierre Bovet.