INFORMATICA
INFORMATICA
John NAPIER
nel 1617 pubblica RABDOLOGIAE in cui illustra un meccanismo per eseguire le 4 operazioni:
moltiplicazione e divisione venivano trattate come addizione e sottrazione
(11 bastoncini divisi in 10 quadrati tagliati da una diagonale a sinistra la cifra per le decine a destra la cifra
per le unità).
Willhelm SCHICKART
nel 1623 fece costruire la prima macchina addizionatrice ma purtroppo l'unico esemplare andò distrutto;
restano lettere e schizzi che Schickart inviò a Keplero. Un esemplare ricostruito è al Museo del calcolo IBM-
Europe a Parigi.
Blaise PASCAL
nel 1642 realizza per il padre esattore una addizionatrice-sottrattrice per numeri interi con meccanismo per
i riporti. Siistema di 6 (8) ruote per unità, decine, centinaia ecc., azionate con una bacchetta. (la sottrazione
viene eseguita come addizione dei numeri complementari.)
G.Willhelm LEIBNIZ
Nel 1671 progetta il traspositore, meccanismo che consente di accumulare nel totalizzatore la stessa cifra
più volte per semplificare l'esecuzione di moltiplicazione e divisione. Nel 1694 viene realizzata la prima
calcolatrice ma a causa di imprecisioni nel meccanismo di funzionamento risultava corretto.
Charles BABBAGE
Nel 1823 inizio a progettare Difference Engine, una macchina che doveva produrre le tavole numeriche
usate da scienziati, ingegneri, contabili, piloti senza errori servendosi del metodo delle differenze finite ma
dopo 10 anni abbandonò l'idea. Nel 1834 si dedicò ad un progetto a più grandioso Analytical Engine,
progenitrice dei calcolatori elettronici. Ospitava nel suo interno “un mulino” e un “magazzino” e accettava
numeri fino a 50 cifre e dava risultati fino a 100 cifre stampabile e graficabile. Poteva essere programmata
mediante schede perforate ma neanche questa fu realizzata.
Nel 1847 George BOOLE scrive le prime relazioni tra matematica e logica, che saranno la base dei circuiti
elettronici del computer.
Hermann HOLLERITH
Nel 1889 brevettò un sistema per la registrazione dei dati necessari i calcoli statistici del centesimo
statunitense del 1890 mediante la perforazione di bande di carta:
una perforatrice manuale;
una selezionatrice totalizzatrice.
Nel 1896 fondò la Tabulating Machine Company che nel 1924 diventerà IBM.
Strumenti analogici
I compassi di proporzione ed i regoli calcolatori sono da considerarsi analogici perché non operano
direttamente sui numeri, ma su linee che riportano scale lineari, esponenziali e logaritmiche. Sono da
considerarsi analogici anche gli strumenti per il calcolo grafomeccanico per la misurazione delle aree, tra
questi i più semplici sono i planimetri. Nel planimetro a rotazione una rotella ruota su un disco rotante, una
punta percorre il contorno della figura mentre un'altra percorre spazi proporzionali.
Vannevar BUSH
Matematico ed ingegnere all'MIT tra il 1927 ed il 1930 realizza il primo analizzatore differenziale per la
soluzione di equazioni differenziali. Era guidato da motori elettrici ma le operazioni venivano risolte
meccanicamente.
Calcolatori analogici elettronici
Furono realizzati per simulare le caratteristiche di aerei supersonici,, veicoli spaziali. Possono essere già
definiti computer anche se seguono i calcoli su variabili continue e non discrete. I numeri positivi sono
rappresentati da voltaggi positivi mentre i negativi da voltaggi negativi; costituiti da una serie di blocchi
costruttivi in grado di eseguire operazioni matematiche su voltaggio di corrente continua.
Elaboratori Elettromeccanici
Le macchine da calcolo a schede perforate avevano conquistato il mondo degli affari ma scienziati e
matematici continuarono le loro ricerche per realizzare macchine in grado di eseguire calcoli complicati nel
minor tempo possibile. Gli elaboratori elettromeccanici costituiscono l'anello di congiunzione tra le
calcolatrici meccaniche e i computer elettronici.
Konrad ZUSE
Nel 1936 pensò di utilizzare i relè telefonici in una macchina da calcolo, costituì nel salotto dei genitori il
primo calcolatore elettromeccanico Z1; la rappresentazione binaria e controllo programmato con il nastro
perforato.
COLOSSUS
Nel 1943 a Londra fu realizzato COLOSSUS, primo calcolatore elettromeccanico britannico il quale
decodificava i messaggi tedeschi criptati con Enigma. Era in grado di trattare 5000 caratteri al secondo e
decifrare 4000 messaggi al giorno per ogni lingua.
L’ELETTRONICA
Nel 1939 il matematico Vincent Atanasoff per primo costruì “qualcosa” che non utilizzava nessuna parte
meccanica e che procedeva ad una velocità mai vista prima. Da allora furono costruiti elaboratori,
calcolatrici da tavolo e da tasca, personal computer, palmari. Valvole (tubi a vuoto), transistor, circuiti
integrati sono le tecnologie che hanno permesso velocità sempre maggiori in spazi sempre minori.
Vincent ATANASOFF
Nel 1939 realizzò con il suo allievo Barry un prototipo ABC – Atanasoff-Berry Computer. Utilizzava solo
valvole e i dati venivano immagazzinati in una batteria di condensatori elettrici montati su tamburi rotanti.
ENIAC
Elettric Numerical Integrator and Calculator
Presentato nel 1946 era stato progettato da J.P. ECKERT e J.W. MAUCHLY gli stessi che stavano progettando
UNIVAC utilizzato per calcoli balistici, ricerca su raggi cosmici e sull'energia nucleare.
Claude SHANNON
Si laureò con una tesi sulla algebra di Boole ed il suo utilizzo nell'ottimizzazione dei circuiti di
commutazione. Nel 1948 pubblico la rivoluzionaria “the mathematical theory of communication”, il suo
grande merito sta nell'aver capito che il contenuto dell'informazione è indipendente dal contenuto del
messaggio, ma è in relazione al numero di unità elementari necessari per codificarlo.
Alan M. TURING
Fu il primo ad introdurre il concetto di algoritmo, studia le relazioni tra macchine e natura preparano il
terreno all'intelligenza artificiale. Nel 1936 pubblicò "studio dei numeri compatibili” ipotizzano uno
strumento straordinario: una macchina in grado di eseguire qualsiasi funzione computazionale.
1950
Nel 1950 l'industria dei computer compiva 4 anni, l'informatica iniziava ad avere influenza sulla vita
dell'uomo comune. “L'uomo può costruire il superuomo?”
UNIVAC
Nel 1951 i computer iniziarono ad essere utilizzati anche da utenti paganti, il debutto commerciale si ebbe
con UNIVAC - Universal Automatic Computer, il primo computer programmabile adatto alle aziende; la
prima fu la General Electric. Dal 1951 al 1957 ne furono venuti 46 al prezzo di 1.000.000 $.
1952
Le prime lezioni al computer
La CDS utilizza UNIVAC per fornire ai telespettatori della proiezione sui risultati elettorali, fu arruolato uno
statistico Max WOOLDBURY per scrivere il programma di simulazione, vinse Eisenhower. I dati definitivi si
spostarono dalle previsioni UNIVAC di meno del 1%.
DIGITAL -1957
Ken OLSEN lascia i laboratori dell’MIT e, con il fratello Sten e la collega Harlan ANDERSON, fonda la DIGITAL.
Ottennero un finanziamento per produrre moduli per test di apparecchiature, 94.000$ fu il fatturato del
primo anno, iniziano a progettare il loro primo computer PDP-1 Programmed Data Processor.
CIRCUITI INTEGRATI- 1958
J.LAST, J. BLAHK, E. KLEINER, R.NOYCE, G, MOORE, J. HOERNI, S. ROBERTS, V. GRINICK. Gli 8 scienziati e
tecnici della FAICHILD SEMICONDUCTORS, con un finanziamento di 3.500 $ costruirono dal niente le
apparecchiature che gli permisero di produrre circuiti integrati di silicio.
COBOL – 1959
Common Business Oriented Language
La CODASYL CONFERENZE of DATA System Language viene incaricata di sviluppare le specifiche di un nuovo
linguaggio indipendente dalle strutture hardware, semplice è comprensibile al personale amministrativo
delle aziende punto fu un successo immediato, a parte il problema del baco del millennio.
SABRE – 1960
L' America Airline con l'IBM lancia il progetto per un sistema che gestisca le prenotazioni aeree sulla base di
SAGE, Semi Automatic Ground Environment: sistema di allarme e guida dei caccia intercettori e dei missili
antiaerei realizzato dall’MIT per la difesa USA. Investimento di 150 milioni di $. Mancavano programmatori,
reclutati e addestrati i migliori utenti della A.A.
ASCII – 1963
American Standard Code for Information Interchange
Robert BEMER scrive la prima lingua universale per rappresentare i caratteri mettendo fine alla babele dei
60 codici esistenti ci vorranno 18 anni perché lo standard prenda piede sostituendo l’ EBCDIC in uso sulle
macchine IBM
MOUSE -- 1967
Doug ENGELBART ricercatore presso lo SRI Stanford Research Institute presenta la richiesta di brevetto per
un “individuatore di posizione x-y per un sistema di visualizzazione”
INTEL – 1968
Gordon MOORE e Robert NOYCE due dei fondatori della FAIRCHILD SEMICONDUCTORS fondarono la INTEL
DEVELOPMENT CORPORATION nasceranno i CHIP al silicio
ARPAnet – 1969
dopo 10 anni di studi l’ARPA, con la Bolt, Beranek & Newman, presenta ARPAnet con i suo primi 4 nodi Ken
THOMPSON, Dennis RITCHIE e Doug McILLOY continuarono in proprio i lavori su Multics abbandonati dai
Bell Labs nascerà UNIX
1970 Edgar CODD introduce il concetto di “database relazionale” Gene AMDAHL fonda la AMDAHL
costruisce mainframe compatibili IBM HONEYWELL acquisisce la divisione IT di General Electric
FLOPPY – 1971
Al SHUGART e David NOBLE realizzano il FLOPPY da 8 pollici capacità 80 Kb commissionaria la IBM per
risolvere un problema dati sull’ S/370.
1971
Niklaus WIRTH crea il PASCAL F.FAGGINI, T.HOFF e S.MAZER producono il primo microprocessore INTEL il
4004 4000 transistor architettura interna a 4 bit
ETHERNET – 1973
Bob METCALFE ricercatore nei PARC XEROX realizza una rete interna per collegare tutte le postazioni alla
nuova stampante laser il metodo fu chiamato CSMA/CD Carrier Sense Multiple Access / Collision Detection
la rete fu chiamata ETHERNET in onore dell’ “etere luminifero”
MICROSOFT – 1975
Robert ALLEN ingegnere alla Honeywell e William GATES studente ad Harvard fondano Traf-O-Data
software house per programmi in BASIC scrissero un interprete BASIC per ALTAIR Larry ROBERTS fonda
Telenet Communications Corp.
APPLE – 1976
Steve JOBS e Steve WOZNIAK fondano la Apple Computer per poter commercializzare un microcomputer su
scheda fatto in casa vendettero i primi APPLE I in scatole di montaggio a 666,66 $ furono invitati al “PC
76”dovettero anticipargli i soldi per il viaggio e l’albergo
DOS – 1981
IBM progetta un PC ad architettura aperta Philip ESTRIDGE vicepresidente, contatta DR per il sistema
operativo caso vuole che un aereo ritardi Paul ALLEN non perde l’occasione nasce PC DOS 1.0 MICROSOFT
12 agosto presentato il primo PC IBM su un chip 8088 a 4,77 MHz
S.U.N. -- 1982
Bill JOY guru della UNIX proveniente da Berkeley con S. McNEALY, A. BECHTOLSTEIN e V. KHOSLA fondano
S.U.N. Stanford University Network produssero hardware a basso costo su un chip MOTOROLA 68000 con
software BSD UNIX le prime macchine con porta Ethernet standard
MACINTOSH – 1984
Jeff RASKIN in APPLE crea il concetto di “oggetto click & drag” e lo chiama Macintosh Steve JOBS gli toglie la
direzione del progetto esce il primo MAC con soli 128 KB di RAM
C + + -- 1985
Bjarne STROUSTRUP, dei Bell Labs, nel ’79 aveva inventato per sé C++, linguaggio di simulazione più
sofisticato degli esistenti nell’85 la AT&T lo rende disponibile alle università senza garanzie dal ’90 è il
linguaggio a più elevato ritmo di diffusione
LINUX – 1991
Linus TORVALDS studente all’Università di Helsinky, stanco del poco tempo macchina sul microVAX
dell’ateneo con s.o. MINIX, scrive LINUX lo mette a disposizione secondo le regole del public domain nel 94’
rilasciato LINUX 1.0 perfettamente funzionante grazie al lavoro di migliaia di programmatori
1992 – al CERN di Ginevra nasce il primo server World Wide Web TANDY presenta il primo CD-ROM per PC
Microsoft presenta VISUAL BASIC
1993
NCSA sviluppa il browser Mosaic; INTEL presenta il PENTIUM; Microsoft presenta Windows NT; IBM rilascia
OS/2 2.1; primo test Y2K per il capodanno 2000; attentato islamico al World Trade Center; accordo israelo-
palestinese per l’autonomia dei territori occupati; trattato di Maastricht per l’unione monetaria europea
INTERNET – 1994
Jim CLARK e Marc ANDREESSEN fondano NETSCAPE Communications Jerry WANG e David FILO creano un
database di siti YAHOO Jeff BEZOS crea una libreria on-line AMAZON Rob GLASER crea Real Networks
JAVA – 1995
James GOSLING nel ’91 aveva creato per la SUN un linguaggio di programmazione per i video-on-demand
OAK nel ’94 l’idea di utilizzarlo su INTERNET da allora JAVA è storia
DATABASE IBRIDI – 1996
nascono per rispondere alle esigenze di grandi aziende che gestiscono dati di diverso genere Oracle,
Informix e IBM creano Universal Server Sybase crea Adaptive Server
Astrazione - 1
• In informatica si parla di programmazione di basso livello quando si utilizza un linguaggio molto vicino alla
macchina
• Si parla invece di programmazione di alto livello quando si utilizzano linguaggi più sofisticati ed astratti,
slegati dal funzionamento fisico della macchina
• Si viene così a creare una gerarchia di linguaggi, dai meno evoluti (il linguaggio macchina o l’assembler) ai
più evoluti (Pascal, Perl, Java, etc.)
• In questa gerarchia il linguaggio C si pone ad un livello intermedio
Astrazione - 2 • Esistono, quindi, diversi livelli di astrazione: § Linguaggio macchina e Assembler Implicano
la conoscenza dettagliata delle caratteristiche della macchina (registri, dimensione dati, set di istruzioni)
Semplici algoritmi implicano la specifica di molte istruzioni § Linguaggi di alto livello Il programmatore può
astrarre dai dettagli legati all’architettura ed esprimere i propri algoritmi in modo simbolico Sono
indipendenti dalla macchina hardware sottostante
I programmi traduttori - 1
• Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi
eseguibile) da parte di un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchina
• Ogni traduttore è in grado di comprendere e tradurre un solo linguaggio
• Il traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione
(sorgente) nella corrispondente rappresentazione in linguaggio macchina (eseguibile)
I programmi traduttori - 2
• Compilatore: opera la traduzione di un programma sorgente (scritto in linguaggio di alto livello) in un
programma direttamente eseguibile dal calcolatore § PRIMA si traduce tutto il programma § POI si esegue
la versione tradotta
• Interprete: traduce ed esegue il programma sorgente, istruzione per istruzione § Traduzione ed
esecuzione sono intercalate
Il compilatore – 17
• Eseguire un programma scritto in un linguaggio compilato § Il programma P scritto in linguaggio L viene
dato in ingresso a un programma PComp § PComp è il programma compilatore del linguaggio L (ad esempio
il programma compilatore del C) § L’esecuzione da parte di un calcolatore di PComp su P (dove P è il dato di
ingresso) produce Pexe ð FASE di COMPILAZIONE (compile time) § L’esecuzione da parte di un calcolatore
di Pexe su particolari dati in input produce i relativi risultati ð FASE di ESECUZIONE (run time)
Il compilatore - 2
• Esempio di compilatore § Dobbiamo sottoporre un curriculum, in inglese, ad una azienda, ma non
conosciamo l’inglese § Abbiamo bisogno di un traduttore che traduca quanto scritto da noi dall’italiano
all’inglese contattiamo il traduttore il traduttore riceve il testo da tradurre il traduttore fornisce il testo
tradotto possiamo sottoporre il nostro curriculum all’azienda
Il compilatore - 3 • Compilatore § Analisi lessicale ð token (parole) § Analisi sintattica ð albero sintattico §
Analisi semantica ð tabella dei simboli
Il compilatore - 4
• L’analizzatore lessicale trasforma il programma sorgente da stringa di caratteri a stringa di token
• Un token è un simbolo che esprime la natura di un elemento del linguaggio § Punteggiatura ed operatori
vengono trasformati direttamente in token § Per parole riservate, nomi di variabili e costanti, l’analizzatore
deve determinare il token appropriato, esaminando sia la stringa di caratteri, sia il contesto § Ogni
identificatore viene inserito nella tabella dei simboli ed i suoi attributi vengono aggiornati nella fase di
analisi semantica
Il compilatore - 5
• L’output del’analisi lessicale è un insieme di coppie, il cui primo elemento identifica la classe del token ed
il secondo punta alla posizione del token e dei suoi attributi nella tabella dei simboli § Alcuni token non
richiedono attributi e dunque avranno puntatori nulli (ad es., operatori e parole riservate del linguaggio)
Il compilatore - 7
• L’analizzatore sintattico (o parser) permette la costruzione dell’albero di derivazione del particolare
programma basato sulla grammatica del linguaggio
Il compilatore - 8
• L’analizzatore semantico, infine, usa l’albero di derivazione per generare una rappresentazione
intermedia e completare la tabella di simboli § Un altro ruolo svolto dall’analizzatore semantico è la
scoperta di errori dipendenti dal contesto (tipi di dati che non corrispondono, variabili non dichiarate, etc.)
Il compilatore - 9
• Il generatore di codice traduce la rappresentazione intermedia in linguaggio assembler o linguaggio
macchina
• Prima della generazione di codice: § Allocazione della memoria § Allocazione dei registri
• L’ottimizzatore del codice intermedio effettua trasformazioni atte a migliorare l’efficienza del codice
eseguibile finale
Il compilatore - 10
Traduzione da algoritmo a codice C e da C ad Assembler
Compilatore e linker – 1
• I compilatori consentono tipicamente la compilazione separata di parti di programmi (moduli)
• I diversi moduli possono essere progettati, costruiti e messi a punto separatamente, e archiviati in
opportune librerie
• Nel momento in cui un programma deve essere eseguito, un programma apposito, detto linker, si occupa
di collegare opportunamente fra loro i moduli oggetto
• Il risultato dell’esecuzione del linker è un unico modulo, detto modulo eseguibile, pronto per il
caricamento in memoria e l’esecuzione
L’interprete - 1
• Eseguire un programma scritto in un linguaggio interpretato § Il programma P scritto in linguaggio L viene
dato in ingresso a un programma PInt § PInt è il programma interprete del linguaggio L (ad esempio il
programma interprete del Python) § L’esecuzione da parte di un calcolatore di PInt su P, con i dati di
ingresso a P, produce i relativi risultati
L’interprete - 2
• Esempio di interprete § Dobbiamo incontrare un manager cinese per motivi di lavoro ma non conosciamo
il cinese § Abbiamo bisogno di un interprete che traduca il nostro dialogo contattiamo l’interprete parliamo
in italiano, in presenza dell’interprete contemporaneamente l’interprete comunica al manager cinese
quanto detto da noi (e viceversa) § Il compito dell’interprete si svolge contestualmente all’incontro col
manager cinese
Compilatori e interpreti - 1
• Riassumendo… § I compilatori traducono un intero programma dal linguaggio L al linguaggio macchina
della macchina prescelta: traduzione e esecuzione procedono separatamente al termine della compilazione
è disponibile la versione tradotta del programma la versione tradotta è però specifica per quella macchina
per eseguire il programma basta avere disponibile la versione tradotta (non è necessario ricompilare) § Gli
interpreti invece traducono e immediatamente eseguono il programma istruzione per istruzione, infatti:
traduzione ed esecuzione procedono insieme al termine non vi è alcuna versione tradotta del programma
originale se si vuole rieseguire il programma occorre anche ritradurlo
Compilatori e interpreti - 2
• L’esecuzione di un programma compilato è generalmente più veloce dell’esecuzione di un programma
interpretato (nella compilazione si possono attuare processi di ottimizzazione dell’eseguibile), tuttavia… §
L’interprete ha il vantaggio di tradurre solo le istruzioni che effettivamente esegue, riducendo al minimo
l’operazione di traduzione nel caso in cui l’esecuzione venga terminata o un gruppo di istruzioni non
facciano parte del flusso esecutivo corrente § Un compilatore ha il vantaggio di tradurre una sola volta
l’intero programma e reiterare certe istruzioni (iterazioni) per il numero di volte richiesto dalla particolare
esecuzione
Compilatori ed interpreti - 3
• I linguaggi interpretati sono tipicamente più flessibili e semplici da utilizzare (nei linguaggi compilati
esistono maggiori limitazioni alla semantica dei costrutti)
• Per distribuire un programma interpretato si deve necessariamente distribuire il codice sorgente,
rendendo possibili operazioni di plagio
• Nei programmi interpretati, è facilitato il rilevamento di errori di run-time
I commenti - 1
• Perché commentare e documentare i programmi? § I programmi vengono utilizzati più volte nel corso di
tempi lunghi (mesi, anni) per… …fare cambiamenti (aggiunta di caratteristiche) …risolvere errori §
Commentare il programma serve a rendere chiaro ed evidente lo scopo delle diverse parti del codice 61
I commenti - 2
• Inoltre: § Si devono evitare commenti inutili § Si deve evitare di inserirne “troppo pochi” • Un buon
metodo per verificare il livello di documentazione è quello di leggere solo i commenti (e non il codice) ed
ottenere una chiara idea su “cosa fa un programma e come lo fa”
Architettura a BUS
• L’architettura più consolidata per il calcolatore prevede quindi unità funzionali fra loro collegate
attraverso un unico canale di comunicazione, il bus
• Il bus è fisicamente realizzato mediante un insieme di connettori elettrici
Il BUS – 1
• Il bus è utilizzato per trasferire dati fra le unità funzionali § L’unità che inizia il trasferimento (in genere la
CPU) fornisce l’indirizzo, che individua univocamente il dato, sulle linee del bus indirizzi, e configura le linee
del bus di controllo, inviando un comando al dispositivo che contiene il dato (es. READ, alla memoria
principale) § Il dato da trasferire è reso disponibile sul bus dati e viene ricopiato nel dispositivo destinatario
La CPU – 1
• La Central Processing Unit è l’unità centrale di elaborazione: esegue le istruzioni dei programmi e ne
regola il flusso, esegue i calcoli
• La CPU è un dispositivo sincrono, cioè può cambiare stato solo quando riceve un impulso di clock,
’orologio del sistema che fornisce al computer un battito regolare • La CPU lavora a N GHz: segue un ritmo
di N miliardi di impulsi al secondo (es., una CPU con un clock a 3 GHz è temporizzata da tre miliardi di
impulsi al secondo)
La CPU – 2
• La frequenza di clock determina la velocità di elaborazione del computer: più alta è la frequenza di clock,
maggiore è la velocità di elaborazione
• La velocità e la potenza di un computer dipendono però anche dalla larghezza del bus, ovvero dal numero
di bit (ampiezza del singolo dato) che il processore è in grado di ricevere e di elaborare simultaneamente §
Attualmente, i processori sono in grado di elaborare dati rappresentati con 64 bit
La CPU – 3
• La CPU è costituita da tre elementi fondamentali: ¤ Unità Aritmetico-Logica (ALU) ¤ Registri ¤ Unità di
Controllo (CU) } EU Execution Unit
La CPU – 4
• A livello “macroscopico”, ad ogni impulso di clock, la CPU: § “legge” il suo stato interno (determinato dal
contenuto dei registri di stato) e la sequenza di ingresso (determinata dal contenuto dei registri istruzione e
dati) § produce un nuovo stato “dipendente” dallo stato in cui si trovava originariamente
• In pratica, la CPU realizza una complessa funzione logica, con decine di ingressi e di uscite ðla
corrispondente tabella di verità avrebbe un numero enorme di righe (miliardi di miliardi)
La CPU – 5
• Lo stato della CPU è costituito da informazioni (memorizzate negli opportuni registri) su: § dati da
elaborare (contenuti nei registri dati) § istruzione da eseguire (nel registro istruzioni) § indirizzo in memoria
della prossima istruzione da eseguire (nel program counter) § eventuali anomalie o eventi verificatisi
durante l’elaborazione (nei registri flag)
La CPU – 6
• Set di istruzioni di base: § somma (da cui sottrazione) § scorrimento (shift) § operazioni logiche §
operazioni di accesso alla memoria Ø trasferimento di un dato da una locazione di memoria ad un’altra Ø
trasferimento da memoria a un registro della CPU Ø trasferimento da un registro della CPU a memoria §
operazioni di confronto (sufficiente confronto con zero)
• Le operazioni (eccetto quelle di accesso alla memoria) sono eseguite all’interno della ALU e “coordinate”
dall’unità di controllo
I registri
• I registri sono dispositivi di memorizzazione che consentono un accesso molto veloce ai dati che
contengono; hanno dimensioni prefissate (es. 32/64 bit) • Alcuni registri hanno funzioni specifiche (es.
contatore di programma) • Nella maggior parte delle architetture, le operazioni della ALU si possono
effettuare solo fra dati presenti nei registri ed anche il risultato viene momentaneamente memorizzato in
un registro
Le memorie – 1
• Le memorie sono dispositivi per “lo stoccaggio” delle informazioni
•Ogni memoria è costituita da celle, a cui si accede tramite un indirizzo
• In ogni elaboratore vi sono tre tipi di memorie: § Registri: contengono informazioni necessarie alla
elaborazione della singola istruzione § Memoria centrale: contiene dati e istruzioni attualmente elaborati
dal processore § Memorie di massa: contengono dati e programmi che non sono oggetto di elaborazione
immediata
Le memorie – 2
• I parametri fondamentali che definiscono una memoria sono: § Dimensione della parola (locazione di
memoria) § Modalità di accesso (diretto o sequenziale) § Permanenza o volatilità dei dati § Capacità
(numero di locazioni disponibili), espressa in KB, MB, GB, etc. § Tempo di accesso, necessario per accedere
ad una locazione di memoria per un’operazione di lettura o scrittura, espresso in nanosec, millisec, sec
• In base agli ultimi due parametri, le memorie si collocano a diversi livelli di una gerarchia, che va da
memorie più capaci ma più lente (memorie di massa) a memorie piccole e veloci (registri)
La memoria centrale – 1
• La memoria centrale o memoria principale, detta anche RAM (Random Access Memory, ovvero memoria
ad accesso casuale, perché qualsiasi cella può essere letta/scritta in un tempo, mediamente, costante), è la
memoria in linea con il processore, che contiene i dati e i programmi che sono attualmente utilizzati/in
esecuzione
• Un programma, quando non è oggetto di elaborazione, è memorizzato su memoria di massa (dischi)
• Quando deve essere eseguito, viene caricato tutto o in parte, in memoria centrale (memoria virtuale)
La memoria centrale – 2
• Le caratteristiche fondamentali della memoria centrale sono: § accesso diretto alle informazioni § velocità
elevata § volatilità: quando il computer viene spento, i dati e i programmi presenti in memoria vengono
cancellati
• La tecnologia utilizzata per la memoria centrale è quella dei dispositivi a semiconduttori, che la fanno
apparire come una matrice di bit § Ogni bit è presente come stato (alto o basso) di tensione
La memoria centrale – 3
• La memoria principale è un insieme di locazioni o celle
• L’unità di memorizzazione, la dimensione della singola cella, è il byte
• Ciascun byte nella memoria è individuato da un indirizzo che lo distingue da tutti gli altri, costituito da un
numero variabile da 0 a 2N-1, dove N è la dimensione in bit dell’indirizzo (ovvero il numero di bit/fili sul bus
indirizzi)
Processore e RAM
• La connessione tra memoria e processore rappresenta un limite degli elaboratori di Von Neumann §
Limite architetturale: il bus permette l’accesso ad una sola informazione per volta (“collo di bottiglia”) §
Limite tecnologico: la velocità con cui il processore ottiene le informazioni dalla memoria centrale (velocità
di accesso della RAM) è inferiore alla velocità con cui è in grado di elaborarle • Soluzioni § Allargamento del
bus dati, in modo da poter estrarre più istruzioni e/o dati per volta § Superamento del limite tecnologico
mediante introduzione di una memoria intermedia tra memoria centrale e processore che approssimi la
velocità del processore
La memoria cache
• Piccola RAM molto veloce, interposta tra CPU e memoria principale, per migliorare le prestazioni del
sistema § Quando viene indirizzata una parola, quella parola e alcune di quelle vicine vengono trasferite
dalla lenta memoria centrale nella più piccola e veloce memoria cache, in modo che la parola successiva sia
accessibile più velocemente (principio di località spazio-temporale del software)
La memoria ROM
• Una parte della memoria centrale è la ROM (Read Only Memory ), una memoria a sola lettura, destinata a
contenere informazioni non variabili
• Caratteristiche delle memorie ROM: § accesso casuale alle informazioni § velocità elevata (inferiore alle
RAM) • La ROM viene scritta in modo permanente in fase costruttiva: le celle della ROM possono essere
successivamente lette, ma mai riscritte
• Viene usata per memorizzare programmi di sistema
La memoria secondaria
• Esistono diversi dispositivi di memoria secondaria: dischi magnetici (hard disk), dischi ottici (CD, DVD),
dispositivi USB, memorie flash
• Memoria non volatile ad alta capacità
§ Il disco fisso è costituito da uno o più piatti metallici ricoperti di materiale magnetico su entrambe le facce
§ Ciascuna superficie è associata ad una o più testine di lettura/scrittura che si muovono radialmente per
leggere/ scrivere l’informazione organizzata in tracce concentriche
I dischi magnetici – 1
• I dischi magnetici rappresentano il mezzo fondamentale per la memorizzazione di massa § I dischi
ruotano ad una velocità (costante) compresa tra i 60 (3600 RPM) e i 200 (12000 RPM) giri al secondo
I dischi magnetici – 2
• L’informazione è disposta sul disco in tracce, ovvero in cerchi concentrici
• La densità dei bit decresce dalle tracce interne alle più esterne per mantenere costante la quantità di dati
che passano sotto le testine nell’unità di tempo
• Le tracce sono divise in settori
• La capacità di memorizzazione dei dischi cresce in conseguenza allo sviluppo tecnologico
I dischi magnetici – 3
• Il numero di bit contenuti in una traccia è dell’ordine delle centinaia di migliaia (512/4096 byte a settore)
• Centinaia di settori (512/1024 per traccia)
• Decine di migliaia di cilindri (tracce concentriche disposte sulle diverse facce dei diversi dischi)
• Per leggere (o scrivere) sul disco, la testina si deve posizionare sulla traccia che contiene il dato ed
attendere che il dato passi sotto di essa § Le operazioni di lettura/scrittura si basano sulla proprietà del
campo magnetico di indurre/essere indotto il/dal passaggio di corrente in una bobina
I dischi magnetici – 4
• La magnetizzazione avviene infatti mediante la testina magnetica (una piccola bobina racchiusa in un
involucro di metallo dotato di una minuscola fessura, il traferro)
• Facendo passare corrente nella bobina si induce un campo magnetico nel traferro (invertendo la corrente
si inverte anche il campo)
• Quando si fa passare corrente attraverso la testina alternandone la direzione, le aree del disco al di sotto
della testina si magnetizzano in una delle due direzioni: questo procedimento rappresenta la scrittura su
disco
I dischi magnetici – 5
• I dati binari che l’unità scrive sul disco sono tradotti in un formato costituito da una serie di aree
magnetizzate in un senso o nell'altro
• Lettura da disco: poiché le particelle magnetizzate sono circondate da un campo magnetico, quando il
traferro passa sul disco le variazioni del campo inducono sulla testina una corrente che si manifesta con
variazioni di voltaggio alle estremità della bobina; i circuiti di lettura decodificano le variazioni
nell’andamento dell’intensità di corrente riconducendole a 0/1
Accesso al disco
• Il tempo medio di accesso all’informazione memorizzata su disco è dato da § tseek è il tempo di ricerca,
necessario per posizionare la testina sulla traccia che contiene l’informazione; dipende dall’ampiezza dello
spostamento § tlat è il tempo di latenza, necessario perché l’informazione ricercata passi sotto la testina;
dipende dalla velocità di rotazione dei dischi § ttr è il tempo di trasferimento ; dipende dalla velocità di
rotazione, dalla densità di registrazione e dalla quantità di informazione da trasferire
I dischi ottici – 1
• Sui dischi ottici si utilizza la tecnologia laser per realizzare le operazioni di lettura/scrittura
• Densità dei bit uniforme § Un’unica traccia elicoidale o… § …tracce più lontane dal centro del disco sono
più lunghe e contengono un maggior numero di settori (fino al 40% in più rispetto alle tracce vicine al
centro di rotazione)
I dischi ottici – 2
• Sui dischi di lettura/scrittura i dati possono essere modificati più e più volte (dischi a cambio di fase)
• I dischi WORM, Write Once-Read Many, si possono scrivere una sola volta
• La tecnologia originale per dischi WORM consiste nell’inserire una pellicola di alluminio tra due piatti di
plastica o di vetro (o un pigmento polimerico)
• Per scrivere un bit, l’unità usa un raggio laser per praticare un piccolo foro nell’alluminio (o opacizzare il
pigmento): l’informazione può venir distrutta ma non alterata
I dispositivi di Input-Output
• Insieme di dispositivi che consentono l’acquisizione di dati (input), la loro archiviazione (storage) e la loro
presentazione verso il mondo esterno (output)
• Si possono classificare in base a tre diverse caratteristiche:
§ Comportamento: Input (read once), output (write only), memoria (rilettura/riscrittura) § Partner: uomo o
macchina § Velocità del flusso dei dati: quantità di dati trasferiti nell’unità di tempo da o verso la CPU o la
memoria centrale
Il linguaggio macchina
• Quando il programma è in esecuzione, è memorizzato nella memoria principale; esso è rappresentato da
una serie di numeri binari che codificano le istruzioni eseguibili dall’unità centrale
• Il programma non è quindi distinguibile dai dati osservando il contenuto della memoria; le istruzioni sono
individuate dai valori assunti dal registro PC durante l’esecuzione del programma
• Ogni codice binario codifica il tipo di istruzione (OPCODE) ed eventuali parametri (ad es., registri, indirizzi
in memoria, etc.)
• I primi calcolatori si programmavano direttamente in linguaggio macchina!
Assembler
• Per facilitare la programmazione è stato definito il linguaggio assembly
• L’assembly impiega una notazione simbolica che è in stretta relazione con i codici in linguaggio macchina;
il programma scritto in assembly è convertito automaticamente in linguaggio macchina per mezzo del
programma traduttore, l’assembler
Trasferimento dei dati
• Le istruzioni di trasferimento dati permettono di copiare il valore di un dato fra registri o fra un registro e
la memoria
• Si fa riferimento ad un assembly generico
Operazioni aritmetico-logiche
• Permettono di eseguire operazioni aritmetiche o logiche su due operandi
Istruzioni di salto – 1
• Modificano il flusso di esecuzione del programma § Il salto è condizionato se viene effettuato solo quando
si verifica una certa condizione
Istruzioni di salto – 2
• L’istruzione CMP confronta i due argomenti, assegnando valori particolari a bit di condizione che si
trovano nel registro PSW – Program Status Word (zero, segno)
• L’istruzione di salto condizionato può essere basata su diverse condizioni: BRNE (branch not equal), BRLE
(branch less equal), etc.
• L’istruzione di salto incondizionato, BRANCH, effettua sempre il salto
Il sistema operativo
Cos’è
• Il software può essere diviso in due grandi classi: § i programmi di sistema, che gestiscono le funzionalità
del sistema di calcolo § i programmi applicativi, che risolvono i problemi degli utenti ù
• L’insieme dei programmi di sistema viene comunemente identificato con il nome di Sistema Operativo
(SO)
• Definizione: Un sistema operativo è un programma che controlla l’esecuzione dei programmi applicativi
ed agisce come interfaccia fra le applicazioni e l’hardware del calcolatore
Politiche di scheduling
• Le politiche di scheduling sono raggruppabili in due grandi categorie: § Preemptive: l’uso della CPU da
parte di un processo può essere interrotto in un qualsiasi momento, e la risorsa concessa ad altro processo
§ Non preemptive: una volta che un processo ha ottenuto l’uso della CPU, è unico proprietario della risorsa
finché non ne decide il rilascio
Sistemi mono-tasking
• I SO che gestiscono l’esecuzione di un solo programma per volta (un solo processo) sono detti mono-
tasking • Non è possibile sospendere un processo per assegnare la CPU ad un altro • Sono storicamente i
primi SO (es. MS-DOS)
Sistemi multi-tasking
• I SO che permettono l’esecuzione contemporanea di più programmi sono detti multi-tasking o multi-
programmati
• Un programma può essere interrotto e la CPU passata a un altro programma
Sistemi time-sharing
• Un’evoluzione dei sistemi multi-tasking sono i sistemi time-sharing
• Ogni processo viene eseguito ciclicamente per piccoli quanti di tempo
• Se la velocità del processore è sufficientemente elevata si ha l’impressione di un’evoluzione parallela dei
processi
• Esempio § Ipotesi: 1 MIPS, 4 processi, 0.25 s/utente § Conseguenze: 0.25 MIPS/utente, TELA = 4 ´ TCPU
La memoria virtuale – 1
• Spesso la memoria non è sufficiente per contenere completamente tutto il codice dei processi
• Si può simulare una memoria più grande tenendo nella memoria di sistema (RAM) solo le parti di codice e
dati che servono in quel momento
• Si usa il concetto di memoria virtuale
• I dati e le parti di codice relativi a programmi non in esecuzione possono essere tolti dalla memoria
centrale e “parcheggiati” su disco nella cosiddetta area di swap
• I processori moderni sono dotati di meccanismi hardware per facilitare la gestione della memoria virtuale
Device driver
• Il controllo dei dispositivi di I/O avviene attraverso speciali moduli software, detti device driver
• I device driver sono spesso realizzati dai produttori dei dispositivi stessi, che ne conoscono le
caratteristiche fisiche in maniera approfondita
• I device driver implementano le seguenti funzioni: § Rendono trasparenti le caratteristiche fisiche tipiche
di ogni dispositivo § Gestiscono la comunicazione dei segnali verso i dispositivi § Gestiscono i conflitti, nel
caso in cui due o più task vogliano accedere contemporaneamente allo stesso dispositivo
L’interfaccia utente – 1
• Tutti i SO implementano meccanismi per facilitare l’utilizzo del sistema di calcolo da parte degli utenti
• L’insieme di tali meccanismi di accesso al computer prende il nome di interfaccia utente
• Serve per… § …attivare un programma, terminare un programma, etc. § …interagire con le componenti
del sistema operativo (gestore dei processi, file system, etc.)
L’interfaccia utente – 2
• Interfaccia testuale: § Interprete dei comandi (shell) § Esempio: MS-DOS / UNIX ù
• Interfaccia grafica (a finestre): § L’output dei vari programmi viene visualizzato in maniera grafica
all’interno di finestre § L’utilizzo di grafica rende più intuitivo l’uso del calcolatore § Esempio: WINDOWS /
Linux / Mac OS X
• Differenze: § Cambia il “linguaggio” utilizzato, ma il concetto è lo stesso § Vi sono però differenze a livello
di espressività
L’interfaccia grafica
• Realizza la metafora della scrivania ¾ desktop § Interazione semplice via mouse § Le icone rappresentano
file, directory, programmi, azioni, etc. § I diversi tasti del mouse, posizionato su oggetti differenti,
provocano diversi tipi di azione: forniscono informazioni sull’oggetto in questione, eseguono funzioni
tipiche dell’oggetto, aprono directory - folder, o cartelle, nel gergo GUI (Graphical User Interface)
Protezione e sicurezza – 1
• Protezione ¾ è il meccanismo usato per controllare l’accesso da parte di processi e/o utenti a risorse del
sistema di calcolo
• Sicurezza ¾ è il meccanismo di difesa implementato dal sistema per proteggersi da attacchi interni ed
esterni § Denial-of-service, worm, virus, hacker
• In prima istanza, il sistema distingue gli utenti, per determinare chi può fare cosa § L’identità utente (user
ID) include nome dell’utente e numero associato - uno per ciascun utente § L’user ID garantisce
l’associazione corretta di file e processi all’utente e ne regola la manipolazione § L’identificativo di gruppo
permette inoltre ad un insieme di utenti di accedere correttamente ad un gruppo di risorse comuni (file e
processi)
Protezione e sicurezza – 2
All’inizio di una sessione di lavoro, il sistema operativo deve identificare con certezza l’utente
(autenticazione) per: n Garantirgli tutte e sole le autorizzazioni a lui riservate per l’accesso alle risorse n
Personalizzare l’ambiente applicativo secondo le sue preferenze (e.g. il wallpaper, avvio automatico delle
applicazioni, etc.) L’autenticazione informatica avviene mediante tre modalità: n Dimostrazione di
conoscenza (richiesta di scrittura delle credenziali -> nome utente e password - account) n Dimostrazione di
possesso (l’utente deve dimostrare di possedere un oggetto fisico quale, per esempio, una smart card o una
chiavetta USB) n Dimostrazione di caratteristiche fisiche (l’utente deve dimostrare di possedere
determinate caratteristiche fisiche – impronte digitali, etc.)
Windows
• CPU Intel (da 80386 o superiori) o AMD • Multitask • Monoutente/Multiutente • NTFS (NT File System) •
Microkernel, thread • Sistema a 32/64 bit
Linux
• Nato nel ‘91, grazie a Linus Torvalds, studente finlandese dell’Università di Helsinki § “Sei fortunato che
non sei un mio studente. Non prenderesti un buon voto per un tale progetto.” (Andrew S. Tanenbaum,
Università di Amsterdam, creatore del sistema operativo MINIX e professore di SO, dal quale Torvalds prese
spunto per Linux) • Sviluppato su piattaforma Intel 80386, fu distribuito da subito su Internet (free e open-
source) • Multitask • Multiutente • L'architettura del sistema è Unix-like: un kernel molto “piccolo” che
contiene solo funzioni fondamentali per la gestione delle risorse del computer (CPU, memoria, dischi, rete,
I/O) ed una larga collezione di programmi di sistema che l’utente usa per richiedere servizi al SO
Conclusioni: i SO oggi
• Sistemi complessi che presentano miriadi di problemi e milioni di linee di codice (100-1000
programmatori per anno) • Interazioni complesse § Universali (eseguiti su piattaforme diverse) § Differenti
classi di utenti hanno necessità diverse § La performance è cruciale! • Poco compresi: § Il SO tipicamente
“dura” più di chi lo ha programmato ed è troppo grande per essere compreso da una singola persona § Mai
completamente privi di errori (OS/360 rilasciato con 1000 bug); comportamenti difficili da prevedere;
aggiustamenti spesso eseguiti per tentativi.
Alcuni esempi
• Preparare una torta alla frutta – non si riesce a ricavare alcuna indicazione sulla ricetta da seguire che, tra
l’altro, non è facile individuare in un libro di cucina per la sua formulazione generica
• Risolvere le equazioni di secondo grado – … un noto e semplice problema di analisi matematica per il
quale si conosce chiaramente il procedimento risolvente
• Individuare il massimo tra tre numeri – … un esempio di problema impreciso ed ambiguo in quanto non
specifica se va cercato il valore massimo o la sua posizione all’interno della terna dei tre numeri assegnati
• Calcolare le cifre decimali di P – …. un problema con una soluzione nota che però non arriva a
terminazione in quanto le cifre da calcolare sono infinite
• Inviare un invito ad un insieme di amici – ….. si può osservare che esistono sia soluzioni tradizionali basate
sulla posta ordinaria, che soluzioni più moderne quali i messaggi SMS dei telefoni cellulari o i messaggi di
posta elettronica
• Bisogna quindi scegliere la soluzione più conveniente: ad esempio quella che presenta un costo più basso
• Individuare le tracce del passaggio di extraterrestri – …. chiaro esempio di problema che non ammette
soluzione: o, come si dice, non risolvibile
Algoritmo ed Esecutore
• algoritmo, – … un testo che prescrive un insieme di operazioni od azioni eseguendo le quali è possibile
risolvere il problema assegnato. – Se si indica con istruzione la prescrizione di una singola operazione, allora
l'algoritmo è un insieme di istruzioni da svolgere secondo un ordine prefissato;
• esecutore – …. l'uomo o la macchina in grado di risolvere il problema eseguendo l'algoritmo. – Se un
algoritmo è un insieme di istruzioni da eseguire secondo un ordine prefissato, allora l’esecutore non solo
deve comprendere le singole istruzioni ma deve essere anche capace di eseguirle. …… una dopo l’altra
secondo un ordine rigidamente sequenziale che impone l’inizio dell’esecuzione di una nuova istruzione solo
al termine di quella precedente, oppure più istruzioni contemporaneamente svolgendole in parallelo;
• informazioni di ingresso (anche dette input) – … le informazioni che devono essere fornite affinché
avvengano le trasformazioni desiderate;
• informazioni di uscita (anche dette output) – ... i risultati prodotti dall'esecutore del dato algoritmo.
Concetto di Automa
• Elaborazione concetto matematico di funzione Y=F(X) in cui X sono i dati iniziali da elaborare, Y i dati
finali o risultati e F è la regola di trasformazione.
• Automa a stati finiti astrazione per il concetto di macchina che esegue algoritmi
• concetto di stato – particolare condizione di funzionamento in cui può trovarsi la macchina.
• L’automa è uno dei modelli fondamentali dell’informatica – E’ applicabile a qualsiasi sistema che evolve
nel tempo per effetto di sollecitazioni esterne. – Ogni sistema se soggetto a sollecitazioni in ingresso
risponde in funzione della sua situazione attuale eventualmente emettendo dei segnali di uscita, l’effetto
della sollecitazione in ingresso è il mutamento dello stato del sistema stesso. – Il sistema ha sempre uno
stato iniziale di partenza da cui inizia la sua evoluzione. – Può terminare in uno stato finale dopo aver
attraversato una serie di stati intermedi.
Rappresentazione a grafo
• Grafo – un cerchio per rappresentare gli stati del sistema – archi orientati ad indicare le transizioni
Macchina di Turing
• E’ un automa con testina di scrittura/lettura su nastro bidirezionale potenzialmente illimitato. – Ad ogni
istante la macchina si trova in uno stato appartenente ad un insieme finito e legge un simbolo sul nastro. –
La funzione di transizione, in modo deterministico ..
• fa scrivere un simbolo
• fa spostare la testina in una direzione o nell'altra
• fa cambiare lo stato.
• La macchina si compone di: – una memoria costituita da un nastro di dimensione infinita diviso in celle;
ogni cella contiene un simbolo oppure è vuota; – una testina di lettura scrittura posizionabile sulle celle del
nastro; – un dispositivo di controllo che, per ogni coppia (stato, simbolo letto) determina il cambiamento di
stato ed esegue un’azione elaborativa.
Definizione Formale
• è definita dalla quintupla: (A, S, fm , fs, fd) – A è l’insieme finito dei simboli di ingresso e uscita; – S è
l’insieme finito degli stati (di cui uno è quello di terminazione); – fm è la funzione di macchina definita come
A × S → A; – fs è la funzione di stato A × S → S; – fd è la funzione di direzione A × S → D = {Sinistra, Destra,
Nessuna}
• La macchina è capace di: – leggere un simbolo dal nastro; – scrivere sul nastro il simbolo specificato dalla
funzione di macchina; – transitare in un nuovo stato interno specificato dalla funzione di stato; – spostarsi
sul nastro di una posizione nella direzione indicata dalla funzione di direzione.
• La macchina si ferma quando raggiunge lo stato di terminazione
Esempio di MdT
• Costruiamo una macchina che valuti se il numero di occorrenze del simbolo 1 in una sequenza di 0 e 1 è
pari. – Consideriamo in aggiunta che la sequenza debba iniziare e terminare con un simbolo speciale, ad
esempio @. – Rappresentazione della sequenza: @0101110@ – Rappresentazione del risultato:
• Numero di 1 pari, la macchina scrive 1 nella prima casella a destra della stringa di ingresso
• Numero di 1 dispari, la macchina scrive 0 nella prima casella a destra della stringa di ingresso
Progetto del Controllo
• Il dispositivo di Controllo è un automa: – Stati:
• Stato S: stato iniziale in cui la macchina resta fino a quando non individua la stringa di ingresso sul nastro.
• Stato P: il numero di 1 esaminato è pari.
• Stato D: il numero di 1 esaminato è dispari.
• Stato E: la macchina ha eseguito l’algoritmo e si ferma.
• Ingressi 1, 0, @
• Uscite – Spostamento a destra (>), spostamento a sinistra
Conseguenze
• se per il problema esiste un algoritmo risolvente questo è indipendente dal sistema che lo esegue – …. se
è vero che per esso esiste una macchina di Turing;
• l’algoritmo è indipendente dal linguaggio usato per descriverlo – … visto che per ogni linguaggio si può
sempre definire una macchina di Turing universale.
Calcolabilità
• La teoria della calcolabilità cerca di comprendere quali funzioni ammettono un procedimento di calcolo
automatico.
• Nella teoria della calcolabilità la tesi di Church-Turing è un’ipotesi che intuitivamente dice che se un
problema si può calcolare, allora esisterà una macchina di Turing (o un dispositivo equivalente, come il
computer) in grado di risolverlo (cioè di calcolarlo).
• Più formalmente possiamo dire che la classe delle funzioni calcolabili coincide con quella delle funzioni
calcolabili da una macchina di Turing.
La programmazione Strutturata
• L'obiettivo principale della programmazione strutturata consiste nella costruzione di programmi con le
seguenti caratteristiche: – leggibilità: un programma deve essere comprensibile ad altri programmatori; –
documentabilità: un programma deve contenere al suo interno il significato e la motivazione di tutte le
scelte di progetto effettuate; – modificabilità: un programma deve essere strutturato in modo da
permettere un rapido adattamento ad una eventuale variazione di alcuni parametri del progetto; –
provabilità: un programma deve essere costruito in modo da facilitare le attività di testing e debugging
(controllo della correttezza e correzione degli errori) fin dalle prime fasi del progetto software.
Caratteristiche: modularità
• La modularizzazione ci dice che un programma deve essere composto di moduli funzionali. – Ogni modulo
funzionale deve possedere un singolo e ben precisato compito. – Ogni modulo deve essere dotato di un
solo ingresso e di una sola uscita.
• La modularizzazione comporta una regolarità della struttura dei programmi ed un valido supporto per la
fase di progetto, in quanto rispecchia la limitazione degli esseri umani ad esaminare un solo aspetto di un
problema alla volta
Caratteristiche: 1in 1out
• Le strutture di controllo sono da considerarsi degli schemi di composizione dei moduli costituenti il
programma.
• Esse devono assolutamente avere un solo ingresso ed una sola uscita. – Tale condizione discende dalla
necessità che un modulo, composto dall'integrazione di altri moduli tramite le strutture di un controllo,
abbia un solo punto di ingresso ed un solo punto di uscita così come i singoli moduli componenti.
Bottom Up
• … parte considerando il sistema reale a disposizione e creando man mano moduli elementari che
opportunamente integrati formano moduli capaci di compiere operazioni più complesse.
• Il procedimento continua fino a quando è stato creato un modulo che corrisponde proprio alla soluzione
del problema
Fasi
• fase di analisi dei requisiti e delle funzioni
• fase di progetto
• analisi critica della soluzione
Analisi
• Capacità di acquisire tutte le informazioni necessarie alla comprensione del problema e di strutturarle in
un modello che esprima, in un linguaggio adeguato, una rappresentazione coerente e completa di cosa si
deve fare. – Le informazioni devono essere ricavate ..
• dai colloqui con gli utenti di qualsiasi livello, ovvero con coloro che sono coinvolti nell'uso del programma
sia a livello direttivo che esecutivo,
• da un esame dell'ambiente in cui il programma sarà utilizzato,
• queste attività costituiscono la cosiddetta fase di definizione dei requisiti.
• Il compito dell'analista è quello di trarre, dall'insieme confuso e a volte contraddittorio di esigenze ed
obiettivi, un modello che esprima il problema con un formalismo atto ad aumentarne la comprensibilità.
Requisiti
• I requisiti funzionali – cosa deve fare il programma e su quali dati deve operare
• I requisiti non funzionali – quali prestazioni il programma deve offrire
• Il passaggio dall'acquisizione dei requisiti alla formulazione del modello rappresenta la cosiddetta fase di
analisi di un problema
Correttezza
• È necessario verificare che ogni aspetto delle specifiche abbia un'unica interpretazione nel contesto delle
applicazioni che si descrivono ed effettuare delle esemplificazioni degli effetti delle trasformazioni tra dati
di ingresso e dati di uscita. – Tali esemplificazioni costituiscono la base per un confronto del programma con
l'utente che permette di verificare la correttezza delle specifiche.
• Sempre ai fini della correttezza occorrerà: – verificare che nelle specifiche non vi siano inconsistenze; –
verificare che le specifiche coprano tutte le possibili situazioni coinvolte nel problema.
• Al termine della fase di analisi si deve disporre della documentazione su: – la definizione dei dati di
ingresso al problema; – la definizione dei dati in uscita dal problema; – la descrizione di un metodo
risolutivo che sulla carta risolva le specifiche del problema.
Progetto
• La fase di progetto può iniziare solo dopo un'accurata fase di definizione dei requisiti.
• Si articola nelle attività di raffinamento successivo dei dati e dell'algoritmo.
• Costruire un algoritmo equivale a: – esaminare una specifica realtà (il problema assegnato), – costruirne
un'astrazione, – infine rappresentare una tale astrazione in maniera formale in un linguaggio di
programmazione.
• La tecnica top-down si presenta come un approccio guida con l'obiettivo preciso di ridurre la complessità
e di offrire uno strumento di composizione di un'architettura modulare dei programmi. – Il modo di
procedere di tale approccio è una diretta applicazione del metodo analitico deduttivo che si è rilevato,
storicamente, il più adatto alla media degli esseri umani
Come procedere
• Un modo di procedere è quello per livelli di astrazione.
• L'astrazione consiste nell'estrazione di dettagli essenziali mentre vengono omessi i dettagli non essenziali.
– Ogni livello della decomposizione presenta una visione astratta dei livelli più bassi in cui i dettagli vengono
spinti, quanto più possibile, ai livelli ancora più bassi. – I moduli di livello più alto specificano gli obiettivi di
qualche azione oppure cosa deve essere fatto, mentre quelli di livello più basso descrivono come l'obiettivo
verrà raggiunto.
• Il passo di raffinamento iterativo produce, a partire dal problema, una prima decomposizione
dell'algoritmo e prosegue con successivi raffinamenti, sempre più vicini all'espressione finale dell'algoritmo
nel linguaggio di programmazione.
Dati e Funzioni
• Un'altra distinzione, in senso orizzontale, avviene fra dati e funzioni che rappresentano gli aspetti duali,
ma strettamente legati, di ogni problema che si esamina;
• tale separazione è dovuta – sia a ragioni intrinseche
• in quanto dati e funzioni sono caratterizzati da proprietà differenti, – che a ragioni metodologiche
• in quanto è opportuno trattare separatamente funzioni da un lato e dati dall'altro, in modo da
ottimizzarne gli aspetti relativi in maniera indipendente dai condizionamenti che, viceversa, un'analisi
complessiva comporterebbe.
• Ciò consente di ottenere: – l'esame accurato dell'aspetto semantico dei dati; – la completezza dell'analisi,
in quanto essa viene compiuta da differenti punti di vista; – l'assicurazione che dati e funzioni assumano il
giusto peso in analisi e non si enfatizzino gli uni rispetto agli altri.
Documentazione esterna
• E’ il primo livello di documentazione e va compilato preliminarmente nella fase di analisi dei requisiti.
• Descrive soltanto il "cosa" fa il programma e non il "come" lo fa.
• Deve segnalare dettagli operativi tali da rendere autonomo l'utente del programma nell'uso dello stesso.
– a) funzionalità esterne; – b) attivazione del programma; – c) diagnostiche di errore; – d) configurazione
richiesta del sistema; – e) indicazione sull'installazione del programma; – f) versione e data di
aggiornamento.
Documentazione interna
• descrive la struttura interna del programma in termini di scelte sulle strutture dati e sull'algoritmo. –
evidenziazione della struttura del programma mediante l'uso dell'indentazione
• indentare un programma significa mettere in evidenza nel testo del programma, mediante opportuni
incolonnamenti, blocchi di istruzioni che svolgono una funzionalità ben precisa – documentazione top-
down
• ossia facendo comprendere come il programma è stato generato attraverso i vari raffinamenti – uso di
nomi di variabili autoesplicativi, ossia tali da spiegare il ruolo da esse svolte nel corpo del programma –
commento del programma attraverso le frasi di commento di cui tutti i linguaggi di programmazione sono
dotati
Cenni storici – 2
• Pascal e Leibnitz non solo affrontarono il problema, già studiato da Cartesio, di automatizzare il
ragionamento logico-matematico, ma si cimentarono anche nella realizzazione di semplici macchine per
calcolare (capaci di effettuare somme e sottrazioni)
Cenni storici – 3
La macchina alle differenze, concepita da Babbage nel 1833, rappresenta il primo esempio di macchina
programmabile di utilità generale
• In seguito, lo stesso Babbage progetta la macchina analitica (mai realizzata, troppo complessa e critica la
sua costruzione per le tecnologie meccaniche dell’epoca)
- La prima programmatrice nella storia dell’informatica è Ada Augusta Byron, contessa di Lovelace
Cenni storici – 4
• Fu Herman Hollerith, nel 1890 , a sviluppare la macchina a schede perforate , per compiere le statistiche
del censimento decennale degli Stati Uniti
- I dati venivano immessi su schede di cartone opportunamente perforate, le stesse schede che sono state
usate fino a due decenni or sono
-Le schede venivano successivamente “contate” da una sorta di pantografo che permetteva diversi tipi di
elaborazioni (totali, medie, statistiche, etc . )
- Si impiegarono due anni e mezzo ad analizzare i dati (contro i sette anni del censimento del 1880),
nonostante l’incremento di popolazione da 50 a 63 milioni
Cenni storici – 5
• Successivamente la macchina a schede perforate venne utilizzata con successo per i censimenti in Austria,
Norvegia e Russia, tanto che Hollerith decise di fondare una società : la Computing Tabulating Recording
Company che, nel 1923 , divenne l ’International Business Machine, o IBM
• Nel 1932 , il tedesco Konrad Zuse realizza una macchina elettromeccanica in grado di eseguire calcoli con
controllo programmato, ed introduce il sistema di numerazione binario (la cui algebra era stata definita da
Leibnitz e da Boole
Cenni storici – 6
Durante la seconda guerra mondiale, fioriscono i progetti di elaboratori da utilizzarsi per scopi bellici
-Enigma, realizzata dai tedeschi (A. Scherbius) per codificare le comunicazioni militari
- Red Purple, di costruzione giapponese
- Computer Colossus, costruito dagli inglesi per la decifrazione dei messaggi tedeschi, alla cui progettazione
e realizzazione collaborò Alan Turing, permise la vittoria anglo-americana sull’Atlantico
Cenni storici – 7
• Con l’invenzione del tubo a vuoto (1904), del transistor (1947) e, infine, dei circuiti integrati (1969),
l’evoluzione dei computer divenne inarrestabile
• Finora la potenza di calcolo degli elaboratori si è decuplicata ogni 5-6 anni (…ma non può durare, almeno
con le tecnologie in uso)
Cenni storici – 8
• La costruzione dei primi calcolatori risale all’inizio degli anni ‘40, grazie alla tecnologia elettronica; i primi
esemplari venivano programmati mediante connessioni elettriche e commutatori (ENIAC, Mark I)
• Il nome di Von Neumann è legato invece ai primi calcolatori a programma memorizzato realizzati alla fine
degli anni ‘40 (EDSAC, Whirlwind, IAS, UNIVAC)
- Per la prima volta, vige il principio di unitarietà di rappresentazione di dati e istruzioni, che vengono
codificati, all’interno dell’elaboratore, in maniera indistinguibile
• La diffusione dei calcolatori a livello mondiale è avvenuta nei decenni ‘60 e ‘70
Cenni storici – 10
• Tuttavia, l’esplosione dell’Informatica come fenomeno di massa è datata 1981, anno in cui l’IBM
introdusse un tipo particolare di elaboratore: il Personal Computer (PC)
• La particolarità dei PC consisteva nell’essere “assemblati” con componenti facilmente reperibili sul
mercato (e quindi a basso costo) § Possibilità per qualsiasi casa produttrice di costruire “cloni”
• Attualmente i PC, o meglio il loro componente fondamentale ¾ il microprocessore ¾ è utilizzato in tutti i
settori applicativi (non solo per elaborare dati):
- Telefoni cellulari, ricevitori satellitari digitali, GPS; Bancomat e carte di credito; Lavatrici e forni a micro-
onde; Computer di bordo e ABS
Cenni storici – 11
• L’esigenza di realizzare sistemi di elaborazione dotati di più processori operanti in parallelo è stata sentita
fin dalla preistoria dell’Informatica
- In una relazione dello scienziato, generale e uomo politico italiano Luigi Menabrea, datata 1842, sulla
macchina analitica di Babbage, si fa riferimento alla possibilità di usare più macchine dello stesso tipo in
parallelo, per accelerare calcoli lunghi e ripetitivi
• Solo la riduzione dei costi dell’hardware ha consentito, verso la fine degli anni ‘60, l’effettiva costruzione
dei primi supercalcolatori, come le macchine CDC6600 e Illiac e, successivamente, il Cray e le macchine
vettoriali
• A partire dagli anni ‘90, gli ulteriori sviluppi della microelettronica hanno permesso la realizzazione di
calcolatori a parallelismo massiccio e a “grana fine” , caratterizzati dall’interconnessione di decine di
migliaia di unità di elaborazione elementari: le reti neurali, capaci di “simulare” il comportamento del
cervello umano, sulla base degli studi di McCulloch e Pitts (1943)
• L’Informatica non è la scienza dei calcolatori elettronici: il calcolatore è lo strumento che la rende
“operativa”
• L’elaboratore (computer, calcolatore) è un’apparecchiatura digitale, elettronica ed automatica capace di
effettuare trasformazioni sui dati:
- Digitale: i dati sono rappresentati mediante un alfabeto finito, costituito da cifre, digit, che ne permette il
trattamento mediante regole matematiche
- Elettronica: realizzazione tramite tecnologie di tipo elettronico
- Automatica: capacità di eseguire una successione di operazioni senza interventi esterni
• “La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta
in maniera perfettamente onesta.” (Isaac Asimov)
La macchina universale
• Programma: sequenza di operazioni atte a predisporre l’elaboratore alla soluzione di una determinata
classe di problemi
- Il programma è la descrizione di un algoritmo in una forma comprensibile all’elaboratore ù
• Algoritmo: sequenza finita di istruzioni attraverso le quali un operatore umano è capace di risolvere ogni
problema di una data classe; non è direttamente eseguibile dall’elaboratore
• L’elaboratore è una macchina universale: cambiando il programma residente in memoria, è in grado di
risolvere problemi di natura diversa (una classe di problemi per ogni programma)
Ancora sull’Informatica
• L’Informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro
teoria, analisi, progetto, efficienza, realizzazione (ACM, Association for Computing Machinery)
• Nota È possibile svolgere concettualmente un’attività di tipo informatico senza l’ausilio del calcolatore,
per esempio nel progettare ed applicare regole precise per svolgere operazioni aritmetiche con carta e
penna; l’elaboratore, tuttavia, è uno strumento di calcolo potente, che permette la gestione di quantità di
informazione altrimenti intrattabili
L’algebra di Boole
Contempla due costanti 0 e 1 (falso e vero)
• Corrispondono a due stati che si escludono a vicenda
• Possono descrivere lo stato di apertura o chiusura di un generico contatto o di un circuito a più contatti
• Sui valori booleani si definiscono le operazioni AND, OR, NOT
L’operazione di OR
• Si definisce l’operazione di somma logica (OR): il valore della somma logica è il simbolo 1 se il valore di
almeno uno degli operandi è il simbolo 1
L’operazione di AND
• Si definisce l’operazione di prodotto logico (AND): il valore del prodotto logico è il simbolo 1 se il valore di
tutti gli operandi è il simbolo 1
La negazione NOT
• Si definisce l’operatore di negazione (NOT): l’operatore inverte il valore della costante su cui opera
Variabili binarie
• Una variabile binaria indipendente può assumere uno dei due valori 0 e 1
• Una variabile binaria indipendente può assumere uno dei due valori 0 e 1
Configurazione delle variabili
• Date n variabili binarie indipendenti x1, x2,…, xn, queste possono assumere 2n configurazioni distinte
• Una configurazione specifica è individuata univocamente da un AND (a valore 1) di tutte le variabili, dove
quelle corrispondenti ai valori 0 compaiono negate Ad esempio per n=3 si hanno 8 configurazioni
• I primi esempi di utilizzo di sistemi di numerazione risalgono al neolitico, ovvero a circa 50.000 anni fa
• In epoca preistorica, le più utilizzate furono le basi 2, 5, 10, 20, 12, e 60
- Mentre le basi 2, 5, 10 e 20 sono suggerite dalla fisiologia umana, 12 e 60 sembrano suggerite da scopi
utilitaristici: 12 è divisibile per 1, 2, 3, 4, 6 e 12 mentre 60 per 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 e 60
- La base 12 è ancora utilizzata in alcune misure di tempo, 60 nella misurazione di angoli e tempo
• Da notare che il 7 non compare mai nelle basi di numerazione e, in effetti, ebbe significati particolari,
anche religiosi, presso i popoli antichi
-Il 7 esprime infatti la globalità, l’universalità, l’equilibrio perfetto
-Era legato al compiersi del ciclo lunare
-Presso i Babilonesi erano ritenuti festivi, e consacrati al culto, i giorni di ogni mese multipli di 7
• Tra le prime testimonianze certe dell’utilizzo di concetti aritmetici avanzati vi sono le tavole numeriche
babilonesi, elenchi di numeri utilizzati per calcoli astronomici e di agrimensura, risalenti al X secolo a.C.
• Tuttavia, nelle culture dell’antica Mesopotamia, esistevano tabelle per le addizioni e le sottrazioni già
durante il regno di Sargon I, intorno al 2350 ac
• Il documento più significativo dell’antico Egitto è il papiro di Ahmes o Ahmose, dal nome dello scriba che
lo compose nel 1650 a.C.
• Lo stesso Ahmes sostiene inoltre che il suo materiale è tratto da un documento anteriore, e fa risalire
l’originale ad Imhotep, medico e architetto del faraone Djoser della III dinastia, e quindi al 2650 a.C. circa
- Imhotep è ritenuto l’architetto della grande piramide a gradoni di Saqqara, la cui enorme base quadrata
ha lati perfetti al centimetro!
I numeri in Mesopotamia
• Un antichissimo strumento utilizzato un po’ ovunque per aiutarsi nei conteggi è costituito da semplici
sassolini
• Non a caso la parola “calcolo” deriva dal latino calculus, che significa appunto sassolino
• Appartengono alla civiltà dei Sumeri varie tavolette che contengono i più antichi segni numerali usati
dall’uomo e risalgono al 3500-3000 a.C.
• Inizialmente, però, i Sumeri avevano semplicemente perfezionato il metodo dei sassolini, costruendone di
particolari, in terracotta, di forme e dimensioni diverse, ciascuno con un proprio valore
• I simboli fondamentali usati nella numerazione sumera corrispondono ai numeri 1, 10, 60, 600, 3600,
36000
• I valori dei sassolini sono crescenti secondo una scala che procede per 10 e per 6 alternativamente
• Successivamente i Sumeri, per motivi di praticità, realizzarono gli stessi simboli su tavolette di argilla,
utilizzando bastoncini di diverse dimensioni…
• …cominciarono cioè a “scrivere” i numeri
• Un ruolo speciale nell’aritmetica sumera spetta dunque ai numeri 10 e 60: caratteristica ereditata poi dal
sistema babilonese
• Vari secoli dopo, attorno al XIX secolo a.C., a partire dall’antica numerazione sumera, gli scienziati
Babilonesi crearono infatti un sistema di scrittura basato sui soli due simboli:
• Si rappresentavano i numeri da 1 a 59
• Per i numeri successivi, si ha la prima testimonianza dell’uso di una notazione posizionale
- Non si introducevano infatti altri simboli, ma si affiancavano gruppi di cunei per indicare le successive
potenze del 60
- Si tratta dunque di un sistema di numerazione posizionale (come il nostro, ma) in base 60
• I numeri venivano formati raggruppando i simboli, generalmente posti in ordine dal più piccolo al più
grande, da sinistra a destra (o viceversa)
• Il sistema di numerazione non è, tuttavia, posizionale
-L’ordine dei simboli che definiscono le potenze del 10 può venire alterato senza cambiare il valore del
numero rappresentato
- L’ordine è una sorta di convenzione linguistica, senza significato matematico
• Il sistema ionico si serve di ventisette simboli alfabetici (alcuni dei quali arcaici e non più usati nella Grecia
classica) per indicare le unità da 1 a 9, le decine da 10 a 90, le centinaia da 100 a 900
• Si usavano poi nuovamente le prime nove lettere precedute da un apice in basso per indicare i multipli di
1000, e per esprimere numeri ancora più grandi si ricorreva al simbolo M (iniziale di miriade) che indicava la
moltiplicazione per 10000 del numero che seguiva
• Per molte centinaia di anni ancora (con l’unica ecce- zione dei Babilonesi) gli uomini hanno continuato ad
utilizzare sistemi di numerazione additivi
- Più semplici da usare dato che la somma “si fa da sé”
- Poco adatti a rappresentare numeri grandi (che presuppongono l’uso di tanti simboli posti gli uni accanto
agli altri)
• Tale sistema viene utilizzato nell’opera del matematico indiano vissuto attorno al 500 d.C. Aryabhata, la
più antica che ci è pervenuta (se si eccettuano frammenti sparsi di matematici anteriori), dove però manca
ancora l’uso di un simbolo zero
• Testimonianze di scritture in forma posizionale si registrano anche prima del manuale di Aryabhata,
mentre per avere datazioni sicure di forme complete in cui compare anche il simbolo zero occorre arrivare
al IX secolo d.C.
• L’idea di usare un numero limitato di simboli a cui dare valore diverso a seconda della posizione occupata
può essere stata, secondo alcuni studiosi, sviluppata dagli Indiani per conoscenza diretta ¾ o ereditata dai
Greci ¾ del sistema sessagesimale babilonese
• Gli Indiani avrebbero allora iniziato ad utilizzare solamente i primi 9 simboli del loro sistema decimale in
caratteri Brahmi, in uso dal III secolo a.C.
• I simboli assumono forme diverse a seconda delle zone e dei periodi, ma sono comunque quelli che gli
Arabi più tardi utilizzarono e che, dalla forma araba, sono passati in Europa, fino alla forma definitiva resa
uniforme dalla stampa nel XV secolo
Sistemi in base B
• La base definisce il numero di cifre diverse nel sistema di numerazione • La cifra di minor valore è sempre
lo 0; le altre sono, nell’ordine, 1,2,…,B-1; se B>10 occorre introdurre B-10 simboli in aggiunta alle cifre
decimali
• Precisione finita dei numeri § La precisione della rappresentazione di un numero frazionario è una misura
di quanto essa corrisponda al numero che deve essere rappresentato § Negli elaboratori, i numeri
frazionari sono rappresentati in virgola mobile (floating–point), utilizzando un numero finito di bit § È
plausibile che un numero reale non ammetta una rappresentazione finita, quindi dovrà essere codificato in
maniera approssimata § Negli elaboratori si rappresentano soltanto numeri razionali (fino ad una data
precisione)
• Operazioni espresse in termini di operazioni più semplici § La maggior parte degli elaboratori non
possiede circuiti in grado di eseguire direttamente tutte le operazioni: Ø La sottrazione si realizza per mezzo
di una complementazione e di un’addizione Ø La moltiplicazione si realizza per mezzo di una successione di
addizioni e di shift (traslazioni) Ø La divisione si realizza per mezzo di una successione di shift e sottrazioni §
Le operazioni più semplici sono eseguite direttamente da appositi circuiti (in hardware); le operazioni più
complesse sono realizzate mediante l’esecuzione di successioni di operazioni più semplici, sotto il controllo
di programmi appositamente realizzati, e generalmente memorizzati permanentemente (in firmware)
• Ovvero… quando si scambiano dati, deve essere noto il tipo di codifica utilizzato • La codifica deve
prevedere le lettere dell’alfabeto, le cifre numeriche, i simboli, la punteggiatura, i caratteri speciali per certe
lingue (æ, ã, ë, è,…) • Lo standard di codifica più diffuso è il codice ASCII, per American Standard Code for
Information Interchange
Codifica ASCII
• Definisce una tabella di corrispondenza fra ciascun carattere e un codice a 7 bit (128 caratteri) • I
caratteri, in genere, sono rappresentati con 1 byte (8 bit); i caratteri con il bit più significativo a 1 (quelli con
codice dal 128 al 255) rappresentano un’estensione della codifica • La tabella comprende sia caratteri di
controllo (codici da 0 a 31) che caratteri stampabili • I caratteri alfabetici/numerici hanno codici ordinati
secondo l’ordine alfabetico/numerico
• Le immagini vengono memorizzate come lunghe sequenze di bit: per interpretarle è necessario
conoscere... § ...le dimensioni dell’immagine (base ed altezza in numero di pixel), detta anche risoluzione
§ ...il numero di colori (o toni di grigio) disponibili per ogni pixel • Se un immagine viene codificata ad una
data risoluzione, potrà comunque essere presentata su un dispositivo a più bassa risoluzione, a patto di
“ignorare” parte dell’informazione
• Come è avvenuto per i caratteri, anche per le immagini sono stati definiti standard di codifica, che
assicurano la compatibilità fra sistemi diversi, per quanto concerne la trasmissione e la visualizzazione delle
immagini § TIFF - Tagged Image File Format § JPEG § PNG - Portable Network Graphics • Per ridurre lo
spazio necessario per memorizzare le immagini si utilizzano tecniche di compressione (utili anche per la
trasmissione su rete Internet)
• Le tecniche di compressione si dividono in… § Tecniche lossless: non provocano perdita di informazione,
sono adatte a codificare immagini in cui sono presenti ampie aree monocromatiche Þ si codificano in
maniera compatta insiemi di pixel aventi le stesse caratteristiche § Tecniche lossly: provocano perdita di
informazione, facendo decadere la qualità dell’immagine • Normalmente ai formati JPEG e PNG, molto
diffusi per lo scambio di immagini su Internet, si applicano metodi di compressione lossly
NODI DELLA RETE E PROGRAMMI ¢ Due o più dispositivi informatici interconnessi da opportune linee di
trasmissione possono essere messi in comunicazione in maniera tale che gli utenti possano depositare,
ricercare, far circolare o scambiare informazioni ¢ Dispositivi così interconnessi sono chiamati Nodi della
Rete ¢ I programmi sono i software che permettono agli utenti di mettere in atto le loro strategie di
comunicazione e di scambiare i loro messaggi
IL MESSAGGIO ¢ Usiamo il termine messaggio per indicare ciò che viene scambiato tra due nodi di una rete
¢ Un messaggio (per l’utente) può essere: Un File scambiato fra due calcolatori L’indirizzo di una
pagina Web richiesto ad un server tramite il browser Ciò che viene trasferito dal server verso il
calcolatore dell’utente (e visualizzato tramite il suo Web Browser) che ha inoltrato la richiesta
COMMUTAZIONE DI PACCHETTO 2/2 ¢ Il nostro messaggio non verrà spedito come un unico blocco di testo
ma viene spezzettato in tanti pacchetti che vengono instradati nella rete per poi essere riassemblati
correttamente in modo da ottenere il messaggio originario
I PROTOCOLLI DI RETE 1/2 ¢ Norme e convenzioni che stabiliscono i formati dei messaggi e le modalità di
colloquio tra i programmi che se li scambiano e che dunque regolano l’invio e la ricezione di informazioni
tramite una rete ¢ Non sono gli utenti a dovere tenere conto di queste regole ma saranno i programmi usati
dagli utenti che dovranno rispettare le norme di comunicazione
I PROTOCOLLI DI RETE 2/2 ¢ I protocolli di comunicazione vengono gestiti (definiti, aggiornati, sostituiti,
etc.) da organismi internazionali come ISO: Internazional Organization for Standardization W3C:
World Wide Web Consortium
SERVIZI DI RETE ¢ Nello scenario fin qui delineato abbiamo programmi che obbedendo alle norme sancite
dai protocolli, colloquiano sull’infrastruttura costituita da nodi e connessioni e consentono il deposito, il
reperimento e lo scambio di informazioni ¢ Di conseguenza è possibile mettere a disposizione dei servizi di
rete per una comunità di utenti della rete stessa ¢ Sono servizi di rete: la posta elettronica, la chat e il
World Wide Web, etc.
APPLICAZIONI CLIENT/SERVER ¢ Un nodo che fornisce servizi in forma di elaborazione o di dati è detto
server ¢ Un nodo che di questi servizi beneficia è detto client
UTENTI ¢ La rete vede un’utenza numerosa che usa l’infrastruttura per sviluppare processi di
comunicazione fra singoli e fra vere e proprie comunità di utenti
NASCE INTERNET ¢ Internet è il risultato di una ricerca, che risale alla fine degli anni 60, promossa e
finanziata dal Ministero della Difesa degli Stati Uniti alla scopo di progettare ed implementare una rete di
calcolatori anche con sistemi operativi diversi che fosse decentrata e non vulnerabile da parte di attacchi
atomici che potessero avere come obiettivo le infrastrutture di comunicazione degli USA
INTERNET: LA RETE DELLE RETI ¢ Internet approda prima in Europa (anni 70) poi in Italia (anni 80) e in
seguito negli altri continenti ¢ E’ definita “rete delle reti”: un complesso di reti mantenute in collegamento
tramite opportune infrastrutture di interconnessione ¢ Nacquero altri servizi alcuni dei quali arrivati fino a
noi (e.g. e-mail) e altri non sopravvissuti (es. WAIKS) perché spazzati via dalla killer application di Internet: il
World Wide Web
FUNZIONAMENTO DELLE COMUNICAZIONI ¢ Il principale elemento per l’identificazione univoca del nodo è
l’indirizzo: i protocolli di rete stabiliscono che ogni nodo (host) abbia un proprio indirizzo unico e
distintivo ¢ L’indirizzamento è basato sui cosiddetti indirizzi IP (Internet Protocol)
INDIRIZZI IP 1/2 ¢ Si tratta di indirizzi numerici costituiti da 32 cifre binarie che però usualmente vediamo
scritte in una rappresentazione decimale costituita da quattro numeri compresi tra 0 e 255 separati l’uni
dall’altro da un “.”
INDIRIZZI IP 2/2 ¢ Più frequentemente quando fra utenti si parla di indirizzi si fa uso di sequenze di caratteri
alfanumerici più facilmente comprensibili delle sequenze di bit o di numeri decimali divisi dal punto che
costituiscono gli indirizzi IP ¢ Indirizzi come www.uniparthenope.it hanno una precisa corrispondenza con
un indirizzo IP
PROTOCOLLO IP ¢ Internet Protocol (IP) Ogni computer su Internet (sia esso server o client) ha un suo
indirizzo (e.g., 130.186.7.82) Un messaggio (contenente i dati da trasmettere) per essere inviato sulla
rete deve essere inserito in una “busta” con l’indirizzo IP del ricevente Ci sono delle apparecchiature
detti router (sono un po’ come i postini) che si occupano di veicolare il messaggio
PROTOCOLLO TCP ¢ Transmission Control Protocol (TCP) Se un file di grandi dimensioni dovesse essere
trasmesso interamente su Internet, il trasferimento richiederebbe molto tempo Per eliminare questo
inconveniente si usa il protocollo TCP, che divide il file in “pezzi” ognuno contenente una porzione di byte
del file Questi “pezzi” vengono numerati e associati in un messaggio (pacchetto) IP e spediti
separatamente I pacchetti (relativi ad uno stesso file) possono seguire strade diverse sulla rete
Quando arrivano a destinazione, il software di gestione del protocollo TCP estrae i “pezzi” di file dai
pacchetti, ne controlla l’integrità e li assembla per ricostruire il file originale Se qualche “pezzo” è
danneggiato, ne viene richiesta la ritrasmissione
DNS 1/3 ¢ La gestione della corrispondenza indirizzi simbolici -> indirizzi numerici è a carico di un servizio
distribuito sulla rete denominato DNS (Domain Name System)
DNS 2/3 ¢ Anche gli indirizzi simbolici hanno una sintassi che prevede l’uso del punto per concatenare
stringhe alfanumeriche ¢ Lette da destra verso sinistra queste stringhe specificano: il cosiddetto dominio
di primo livello (e.g. it o org) il dominio di secondo livello (e.g., uniparthenope) altri sotto-domini (e.g.
ingegneria)
DNS 3/3 ¢ Sono nazionali i domini legati al paese di appartenenza del registrante: .it per Italia .fr per
Francia .de per la Germania .uk per Gran Bretagna ¢ I domini sovranazionali tendono a dare una
caratterizzazione del tipo di registrante più che della sua dislocazione geografica: .mil per i nodi militari
.com per quelli commerciali .org per attività senza fini di lucro .edu per i siti accademici
I SERVIZI SU INTERNET ¢ Internet costituisce una infrastruttura tecnologica sopra la quale possono essere
messi a disposizione dell’utenza molteplici servizi ¢ Passiamo in rassegna quelli più significativi: Posta
Elettronica FTP e reti paritarie Peer to Peer News e Forum Chat, Instant Messaging e VoIP
Backup, Archiviazione e Condivisione ¢ Anche il Web è un Servizio di Internet Internet è l’infrastruttura
tecnologica sulla quale si poggia il Web
POSTA ELETTRONICA 1/4 33 ¢ Sistema asincrono di scambio di messaggi tra utenti che dispongono di una
casella di posta individuata da un identificativo unico in tutta la rete ¢ L’identificativo è una stringa dalla
forma nomeutente@nomedominio dove ¢ “nomedominio” individua univocamente un dominio nello
spazio del DNS, ¢ “nomeutente” individua univocamente l’utente all’interno di quel dominio.
POSTA ELETTRONICA 2/4 ¢ Il funzionamento della posta elettronica è reso possibile da una rete di Mail
Server, calcolatori che fungono da uffici postali per l’instradamento, smistamento e conservazione dei
messaggi ¢ Dalla parte dell’utente sarà invece attivo un mail client che consente la redazione e l’invio dei
messaggi in uscita, indirizzati al proprio mail server di riferimento e la ricezione dal proprio server dei
messaggi in entrata
POSTA ELETTRONICA 3/4 ¢ Il client può essere di tre tipi: Un vero e proprio programma di posta come
Eudora, Outlook o Thunderbird, configurato per dialogare con il server e per memorizzare e organizzare
localmente i messaggi ricevuti e inviati Un programma integrato nelle funzionalità di un browser web
Una funzione messa a disposizione da un sito Web come nel caso di Yahoo o quello di Gmail
POSTA ELETTRONICA 4/4 ¢ Un utente può ottenere un indirizzo di posta in vari modi: Dal proprio datore
di lavoro come parte dei servizi aziendali Dall’internet service provider che gli fornisce la connettività
Da un sito che fornisce gratuitamente caselle di posta via web (Yahoo, Hotmail, Gmail)
COMUNICARE TRAMITE E-MAIL 1/3 ¢ Il galateo della posta elettronica Mai spedire e-mail con contenuto
offensivo (meglio recriminare di persona) Mai riferirsi a terze persone in modo poco lusinghiero Fare
attenzione alle sfumature di significato e ai toni sarcastici (il testo scritto si presta a facili fraintendimenti)
Non utilizzare il nome dell’azienda per cui lavorate in messaggi di natura personale (potrebbe essere
causa di imbarazzo e addirittura portare a problemi legali) Cercare di comportarsi nel modo più civile e
di trattare gli altri come vorreste essere trattati voi stessi
COMUNICARE TRAMITE E-MAIL 2/3 ¢ Comunicare tramite e-mail è diverso che parlare faccia a faccia Il
linguaggio del corpo e l’intonazione della voce non possono essere utilizzati nelle e-mail Per supplire alla
difficoltà di comunicare reazioni emotive tramite e-mail sono state ideate le emoticons Sono simboli
Permettono di veicolare il tono di una frase scritta Rappresentano una sorta di semplice codifica per le
nostre emozioni
PEER TO PEER 1/2 ¢ Sistema recente per lo scambio di file basato sulle tecniche di P2P (rete paritaria) che si
differenzia fortemente dalla maggior parte delle tecniche usate su internet usualmente legate al rapporto
gerarchico client/server, in quanto prevedono il costituirsi di architetture paritarie in cui ogni nodo svolge
indifferentemente l’attività di cliente o di servente
PEER TO PEER 2/2 ¢ La popolarità di questo tipo di servizi è dovuta al fatto che sono stati e sono
ampiamente sfruttati per le attività di file sharing (condivisione) ossia per lo scambio di documenti ossia per
la maggior parte dei casi materiali audio e video, spesso coperti dal diritto di autore ¢ Un esempio è quello
di eMule, il P2P più popolare al mondo
FORUM ¢ I forum del web sono bacheche elettroniche nelle quali gli utenti affiggono (postano) i propri
messaggi ¢ L’uso del forum richiede che l’utente conosca l’indirizzo web preciso del suo gruppo di
discussione
SKYPE, VOIP, WHATSAPP ¢ Skype sistema di comunicazione noto per aver implementato e diffuso un
sistema di comunicazione telefonica peer to peer sfruttando un protocollo VOIP (Voice Over Internet
Protocol) consentendo di mettere in comunicazione telefonica gratuita utenti che usano calcolatori sui
quali sia installato il programma client di Skype
IL WORLD WIDE WEB ¢ ipertesto multimediale distribuito su rete ipertesto: testo digitale con struttura
reticolare; nodi e collegamenti multimediale: documento digitale in cui convergono e coesistono diversi
linguaggi e formati (testo, audio, video, …) su rete: serventi web ricevono richieste e smistano pagine ai
clienti
WWW: TERMINOLOGIA
homepage: nodo iniziale di un sito ¢ sito: collezione di pagine dotate di coerenza argomentativa ¢ portale:
sito che offre molteplici servizi informativi e comunicativi (notizie, posta, comunità virtuali, …) ¢ tipi di sito:
aziendali, istituzionali, personali ¢ modelli di comunicazione: informativa, conativa, emotiva
PROTOCOLLO http
¢ Software rilevanti: Web Server e Web Browser (client)