Il 0% ha trovato utile questo documento (0 voti)
430 visualizzazioni

INFORMATICA

Caricato da

Giovanna
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
430 visualizzazioni

INFORMATICA

Caricato da

Giovanna
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 43

PRIMA PARTE –

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.

John Van NEUMANN


Nel 1945 progettò alla Princeton University EDVAC - Electronic Display Variable Automatic Computer,
prototipo dei moderni laboratori. Per la prima volta le istruzioni di funzionamento erano espresse come
numeri.

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%.

Modello 701 IBM - 1953


Thomas WATSON jr.
Sfrutta quanto appreso in un laboratorio delle Forze Armate americane e determina il mutamento della
IBM, dalle tabulatrici ai calcolatori.

FORMULAS TRANSLATOR - 1954


Ovvero tradurre comandi e istruzioni in linguaggio macchina, Grace Hopper realizza il primo compilatore.
John Backus, matematico, ebbe il via libera dal’IBM per realizzare un Formulas Translator specifico per
formule matematiche indirizzato alla clientela tecnico-scientifica. Nascerà il FORTRAN.

DCA – Digital Computing Association - 1955


7 persone che scrivono programmi di utilità comune per i 17 possessori dell’IBM 701. Gene AMDAHL
progetta per IBM il modello 704, nasce SHARE, associazioni degli utilizzatori la quale stipula i primi standard
di programmazione. Nasce così il software trasportabile.

1956 - RIVOLUZIONE SILENZIOSA


Presso i Lincoln Laboratories dell’MIT fu realizzato il primo computer interattivo: il TX-0. Wes CLARK che ne
fu l'architetto di sistema oltre che inventore della penna ottica. Ken OLSEN si occupò dell’aspetto
ingegneristico.

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.

BUSINESS e ACCADEMIA – 1962


Ross PEROT fonda la EDS Electronic Data System: nasce un nuovo tipo di azienda informatica: contratto
onnicomprensivo, tempi e costi prestabiliti, assistenza a lungo termine.
Felix HAAS Istituisce il primo corso di laurea in Computer Sciences presso la facoltà di matematica della
Purdue University nell’Indiana il primo anno gli iscritti furono 24 circa.

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

COMPUTER COMPATIBILI – 1964


in casa IBM nasce la gamma S/360 famiglia di 6 modelli di computer compatibili con 44 diverse periferiche
viene prodotto anche il software il Sistema Operativo OS/360 e il linguaggio PL/1 con il suo compilatore
inizia il dominio IBM

PACKET SWITCHING – 1965


Paul BARAN lavorando alla RAND al progetto commissionato dall’ARPA per una rete a prova di attacco
nucleare capisce che la suddivisione dei dati in “pacchetti” era la soluzione Donald DAVIES sovrintendente
della Divisione Informatica del National Physics Laboratory era arrivato alla stessa conclusione.

PRIMO COMPUTER HEWLETT-PACKARD – 1966


l’ HP 2116A nasce per automatizzare la raccolta e l’elaborazione dei dati provenienti dalle altre
apparecchiature HP la sua architettura era compatibile con altre apparecchiature mediante collegamenti
con interfacce questo lo rendeva utilizzabile anche al di fuori della HP HP diventerà industria informatica
solo nel ‘75

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

CODICI A BARRE – 1970


negli USA le grandi catene di distribuzione ed i produttori alimentari sentono l’esigenza di risparmiare
tempo e costi istituito un codice unificato fu scelto il CODICE A BARRE proposto dall’ IBM

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

XEROX ALTO – 1972


Bob TAYLOR guida il laboratorio PARC della XEROX a Palo Alto progettarono un PC interattivo, con grande
display, mouse, disco locale e tastiera nasce ALTO 128 Kb di memoria costo 4.000 $

Dennis RITCHIE -- 1972


nei Bell Labs sviluppa il linguaggio “C” su UNIX Seymour CRAY lascia la CDC e fonda CRAY RESEARCH

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”

1973 -- Fatti & Tecnologie


Vinton CERF e Robert KAHN iniziano lo sviluppo del protocollo TCP/IP; prime connessioni internazionali per
ARPAnet l’University College di Londra e il centro di sorveglianza radar inglese in Norvegia; terza guerra
arabo-palestinese; Pinochet prende il potere in Cile; “La stangata” vince l’Oscar come miglior film; muore
Pablo Picasso; esce “The dark side of the moon” dei Pink Floyd; l’organizzazione dei paesi esportatori di
petrolio decide un brusco aumento.

1974 -- Fatti & Tecnologie


Federico FAGGIN con altri ex-INTEL fonda ZILOG e presenta Zilog Z-80 microprocessore a 8bit; INTEL
presenta 8080 chip a 8 bit di 11°generazione; all’ MIT viene sviluppato il primo braccio robotico; rapita
Patricia Hearst; in Italia referendum abrogativo per il divorzio, vincono i no; Richard Nixon si dimette in
seguito allo scandalo Watergate; in Grecia cade il regime dei colonnelli; Gerald Ford diventa Presidente;
rivoluzione dei garofani in Portogallo; “il Padrino parte II” vince l’Oscar.

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

1976 -- Fatti & Tecnologie


Charles WANG con 3 soci fonda COMPUTER ASSOCIATES; TYMNET sviluppa On Tyme primo servizio di posta
elettronica; Nolan BUSHNELL vende ATARI alla Warner Communications; nasce SAS INSTITUTE; Jimmy
Carter vince le elezioni; sotto il regime di Pol Pot inizia il genocidio del popolo Cambogiano; muore Mao; in
Italia esce “Novecento” di Bertolucci; in Inghilterra si formano i Sex Pistols, nasce il punk.

VAX e APPLE II – 1977


Gordon BELL capo della ricerca e sviluppo DIGITAL Equipment progetta VAX 11/780 primo
superminicomputer a 32 bit successo presso università e aziende che si resero autonome dai grandi
mainframe APPLE diventa una SpA con più di 7 milioni $ di fatturato presenta APPLE II un PC dal design
accattivante costruito come un vero sistema quasi 4.000 gli esemplari venduti nel primo anno

R.I.S.C. Reduced Instruction Set Computer – 1980


David PATTERSON professore alla Berkley ottiene fondi dalla ARPA per sviluppare RISC chip con un set di
istruzioni ridotto fu prodotto dalla HP contemporaneamente IBM studiava segretamente come applicare
tecniche architetturali scientifiche a macchine di uso generale

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

1982 -- Fatti & Tecnologie


OLIVETTI lancia il suo primo PC l’ M20 su chip Zilog non IBM compatibile; fondata AUTODESK e presentato
AutoCAD; INTEL presenta il chip 80286; in 8 mesi IBM vende 50.000 PC in 11 saranno 200.000; guerra nelle
Falkland tra Inghilterra e Argentina; muore Leonid Breznev; Israele invade il Libano e giunge a Beirut;
Gabriel Garcia Marquez vince il Nobel; l’Italia vince i mondiali di Spagna; per il Time l’uomo dell’anno è il PC
LOTUS e WORD – 1983
Mitch KAPOR rinuncia a VisiCalc e fonda la LOTUS DEVELOPMENT esce LOTUS 1 2 3 MICROFOFT presenta
WORD un word processor rivoluzionario R. CANION, J. HARRIS e B. MURTO lasciano la T.I. e fondano
COMPAQ Computer

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

1984 -- Fatti & Tecnologie


OLIVETTI lancia M24 il suo primo IBM compatibile; Michael DELL fonda DELL; HP presenta la LaserJet e la
ThinkJet definendo i nuovi standard; IBM presenta PC jr.; SUN Microsystem commercializza NFS; negli USA
rieletto Reagan; muore Andropov; William Gibson pubblica “Neuromante” primo romanzo cyberpunk; il
Napoli calcio compra Maradona per 15 miliardi

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

1985 -- Fatti & Tecnologie


INTEL presenta l’80386 a 32 bit; Steve JOBS lascia APPLE e fonda NEXT; Symbolic.com è il primo
dominio .com; J. KIMSEY, M. SHERIFF e S. CASE fondano Quantum Computer Services; Gorbaciov presidente
dell’URSS; dirottata l’Achille Lauro; in vendita il primo test per l’HIV; a Ginevra primo vertice USA-URSS per
il disarmo; 2.000 gli host collegati ad Internet

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

E.R.P. Enterprise Resource Planning – 1997


sistemi integrati per l’automatizzazione delle funzioni di finanza, amministrazione e gestione delle risorse
per le aziende un database per i dati un motore transazionale per gestire le applicazioni e moduli applicativi
per le varie funzioni.

SECONDA PARTE – Linguaggi di Programmazione


Cos’è un linguaggio
• Definizione 1 - Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e
compresi da una comunità di persone
• È una definizione poco precisa perché… § Non evita le ambiguità dei linguaggi naturali § Non si presta a
descrivere processi computazionali automatici § Non aiuta a stabilire proprietà
• Definizione 2 - Il linguaggio è uno strumento matematico che consente di rispondere a domande come: §
Quali sono gli elementi linguistici primitivi? § Quali sono le frasi lecite? § Si può decidere se una frase
appartiene o no al linguaggio? § Come si stabilisce il significato di una frase?

Lessico, sintassi e semantica


• Lessico: l’insieme di regole formali per la scrittura di parole in un linguaggio
• Sintassi: l’insieme di regole formali per la scrittura di frasi in un linguaggio, che stabiliscono cioè la
grammatica del linguaggio stesso
• Semantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel
linguaggio • Nota: una frase può essere sintatticamente corretta e tuttavia non avere significato! “Sento il
gatto che cinguetta e annaffio nel giardino le mie mimose blu…”
Esempio: la sintassi di un numero naturale Diagramma sintattico := 1|2|3|4|5|6|7|8|9 := 0 | := 0 | {}

I linguaggi di programmazione: Cenni storici - 1


• Benché siano macchine in grado di compiere operazioni complesse, i calcolatori devono essere “guidati”
per mezzo di istruzioni appartenenti ad un linguaggio specifico e limitato, a loro comprensibile
• Un linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio, da un alfabeto, con cui
viene costruito un insieme di parole chiave (il vocabolario) e da un insieme di regole sintattiche per l’uso
corretto delle parole del linguaggio
• A livello hardware, i calcolatori riconoscono solo comandi semplici, del tipo copia un numero, addiziona
due numeri, confronta due numeri

I linguaggi di programmazione: Cenni storici - 2


• I primi linguaggi di programmazione coincidevano con l’insieme delle istruzioni eseguibili dall’hardware
• Le istruzioni hardware sono codificate in codice binario: ogni informazione è rappresentata, all’interno
della macchina, come una sequenza di bit § Enorme sforzo programmativo richiesto per codificare algoritmi
semplici
• I comandi realizzati in hardware definiscono il set di istruzioni macchina e i programmi che li utilizzano
direttamente sono i programmi in linguaggio macchina

I linguaggi di programmazione: Cenni storici - 3


• In linguaggio macchina… § …ogni “operazione” richiede l’attivazione di numerose istruzioni base § …
qualunque entità, istruzioni, variabili, dati, è rappresentata da numeri binari: i programmi sono difficili da
scrivere, leggere e manutenere
• Il linguaggio macchina riflette l’organizzazione della macchina più che la natura del problema da risolvere
• Dalla nascita dei primi calcolatori, si è cercato di diminuire lo sforzo ed aumentare la produttività
dell’utente, anche a costo di caricare la macchina di maggiori compiti

I linguaggi di programmazione: Cenni storici – 4


• La prima evoluzione dei linguaggi di programmazione ha portato ad una codifica di tipo simbolico, anziché
binaria, dei programmi
• Tali versioni simboliche dei linguaggi hardware sono note come linguaggi assemblatori, dal termine usato
per indicare i programmi traduttori che, ricevendo come dato la versione simbolica di un programma,
producono come risultato la corrispondente forma binaria direttamente eseguibile dalla macchina
• Per la prima volta, con la nascita degli assembler, fu applicato il principio che è meglio risparmiare il
tempo dell’uomo anche a costo di sprecare tempo-macchina (una parte del tempo è dedicata alla
traduzione di programmi, non alla loro esecuzione)
I linguaggi di programmazione: Cenni storici - 5
• Negli anni ‘50, tutti i programmi erano scritti in linguaggio macchina o in assembly
• In assembly… § …le istruzioni corrispondono univocamente alle istruzioni macchina, ma vengono espresse
tramite nomi simbolici (parole chiave) piuttosto che mediante codici numerici § …il riferimento alle variabili
viene effettuato per mezzo di nomi piuttosto che con indirizzi di memoria
• I programmi scritti in assembly necessitano di un apposito programma assemblatore per tradurre le
istruzioni tipiche del linguaggio in istruzioni macchina

I linguaggi di programmazione: Cenni storici - 6


• Il passo successivo nell’evoluzione dei linguaggi di programmazione tese a rendere la codifica degli
algoritmi il più possibile “vicina” al problema da risolvere, anziché all’architettura della macchina destinata
all’esecuzione del programma § I primi due linguaggi di alto livello, FORTRAN e COBOL, hanno costrutti
fortemente ispirati alla notazione usata, negli anni ‘50, per l’elaborazione numerica e gestionale

I linguaggi di programmazione: Cenni storici - 7


• Negli anni ‘60: § Grande sforzo per razionalizzare la definizione e le tecniche di implementazione dei
linguaggi, reso necessario dallo sviluppo quantitativamente impetuoso delle applicazioni Definizione
dell’ALGOL 60, il capostipite dei moderni linguaggi, basato sui principi della programmazione strutturata §
Proliferazione selvaggia, favorita dalle industrie, di nuovi linguaggi, sia general purpose che rivolti a specifici
settori applicativi

I linguaggi di programmazione: Cenni storici - 8


• Negli anni ‘70: § Si diffondono i linguaggi strutturati, quali il SIMULA 67, capostipite dei linguaggi Object-
Oriented, l’ALGOL 68, ma soprattutto il PASCAL, primo esempio di prodotto di origine accademica che abbia
conosciuto vasto successo ed applicazione nel mondo dell’industria § In modo simile, il C, concepito come
un assembler strutturato per trasportare facilmente UNIX, ha finito per diventare il linguaggio più affermato
nella programmazione di sistema

I linguaggi di programmazione: Cenni storici - 9


• Il periodo a cavallo tra gli anni ‘70 ed ‘80 è segnato da tendenze contraddittorie: § Viene lanciata dal
Dipartimento della Difesa americano l’iniziativa per la definizione e la realizzazione di un nuovo linguaggio,
che l’ente intende imporre come proprio standard ADA dovrebbe rappresentare il punto di maturazione
perfetta di tutti i principi di progettazione software e dei meccanismi linguistici elaborati negli anni
precedenti § Si moltiplicano i nuovi linguaggi tesi a rendere più gradevole ed efficiente la programmazione
tradizionale e si ha l’affermarsi definitivo dei linguaggi object-oriented (C++, Visual BASIC, Java)

I linguaggi di programmazione: Cenni storici - 10


• Nei linguaggi di alto livello ogni singola istruzione consente di effettuare un’operazione semplice, ma
completa
• I linguaggi di alto livello sono elementi intermedi di una varietà di linguaggi ai cui estremi si trovano il
linguaggio macchina, da un lato, ed i linguaggi naturali, come l’italiano e l’inglese, dall’altro
• I linguaggi di programmazione differiscono comunque dai linguaggi naturali: sono infatti meno espressivi
ma più precisi
• Sono semplici e poveri (poche parole chiave, poche regole), ma privi di qualsiasi ambiguità

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

Linguaggi di programmazione di alto livello - 1


• Consentono al programmatore di trattare oggetti complessi senza doversi preoccupare dei dettagli della
particolare macchina sulla quale il programma viene eseguito
• Richiedono un compilatore o un interprete che sia in grado di tradurre le istruzioni del linguaggio di alto
livello in istruzioni macchina di basso livello, eseguibili dal calcolatore
• Un compilatore è un programma traduttore complesso, infatti… § …mentre esiste una corrispondenza
biunivoca fra istruzioni in assembler ed istruzioni macchina § …ogni singola istruzione di un linguaggio di
alto livello corrisponde a molte istruzioni in linguaggio macchina: quanto più il linguaggio si discosta dal
linguaggio macchina, tanto più il lavoro di traduzione del compilatore è difficile

Linguaggi di programmazione di alto livello - 2


• I linguaggi che non dipendono dall’architettura della macchina offrono due vantaggi fondamentali: § i
programmatori non devono cimentarsi con i dettagli architetturali di ogni calcolatore § i programmi
risultano più semplici da leggere e da modificare ð portabilità, leggibilità, manutenibilità

Linguaggi di programmazione di alto livello - 3


• Portabilità: i programmi scritti per un calcolatore possono essere utilizzati su qualsiasi altro calcolatore,
previa ricompilazione
• Leggibilità: la relativa similitudine con i linguaggi naturali rende i programmi più semplici, non solo da
scrivere, ma anche da leggere
• Manutenibilità: facilità nell’effettuare modifiche di tipo correttivo, perfettivo, evolutivo e adattivo
• La possibilità di codificare algoritmi in maniera astratta si traduce in una migliore comprensibilità del
codice e quindi in una più facile analisi di correttezza

Linguaggi di programmazione di alto livello - 4


• Eventuale svantaggio dell’uso dei linguaggi di alto livello è la riduzione di efficienza § È possibile utilizzare
successioni di istruzioni macchina diverse per scrivere programmi funzionalmente equivalenti: il
programmatore ha un controllo limitato sulle modalità con cui il compilatore traduce il codice § Tuttavia… i
compilatori attuali ricorrono a trucchi di cui molti programmatori ignorano l’esistenza
• La ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la
maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale
leggibilità e portabilità sono cruciali

Linguaggi di programmazione di alto livello - 5


• Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello astratto di
programmazione che sottintendono e che è necessario adottare per utilizzarli Linguaggi di programmazione
Imperativi Procedurali Paralleli (C, Pascal) Ad oggetti (C++, Java) Dichiarativi Funzionali (Lisp) Logici (Prolog)

Linguaggi di programmazione di alto livello - 6


• Linguaggi imperativi § Il modello computazionale è basato sul cambiamento di stato della memoria della
macchina § È centrale il concetto di assegnazione di un valore ad una (variabile) locazione di memoria § Il
compito del programmatore è costruire una sequenza di assegnazioni che producano lo stato finale (in
modo tale che questo rappresenti la soluzione del problema)
• Linguaggi dichiarativi § Il modello computazionale è basato sui concetti di funzione e relazione § Il
programmatore non ragiona in termini di assegnazioni di valori, ma di relazioni tra entità e di valori di una
funzione
Linguaggi di programmazione di alto livello - 7
• Sulla base dell’ambito in cui si colloca il problema da risolvere, è opportuno adottare un linguaggio
piuttosto che un altro: § Calcolo scientifico: Fortran, C § Intelligenza artificiale: Prolog, Lisp, C § Applicazioni
gestionali: Cobol, SQL, C § Sistemi operativi: Assembler, C § Applicazioni visuali: C++, Java, Visual Basic §
Applicazioni Web: Java, PHP, ASP 33

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

Il compilatore - 11 Interazione fra compilatore, SO e hardware

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

L’arte della programmazione - 1


• La soluzione di un problema tramite un programma è un procedimento che non si esaurisce nello scrivere
codice in un dato linguaggio di programmazione, ma comprende una fase di progetto, che precede, e di
verifica, che segue, la scrittura del codice § Definizione del problema § Algoritmo per la soluzione del
problema Analisi § Codifica § Debugging § Validazione § Documentazione Programmazione
§ Manutenzione

L’arte della programmazione - 2


• Definizione del problema § Definizione degli ingressi e delle uscite quali variabili quale dominio per ogni
variabile § Risoluzione delle ambiguità § Scomposizione in (sotto-)problemi più semplici
• Definizione dell’algoritmo § Soluzione in pseudocodice § Soluzione mediante diagramma a blocchi
strutturato

L’arte della programmazione - 3


• Codifica § Traduzione dell’algoritmo in istruzioni del linguaggio di programmazione
• Debugging, correzione degli errori sintattici e semantici § Errori sintattici Espressioni non valide o non ben
formate nel linguaggio di programmazione § Errori semantici Comportamento non aderente alle
aspettative/alla intenzionalità del programmatore

L’arte della programmazione - 4


• Validazione § Test su tutte le condizioni operative del programma § Test su input estremi (es., vettori di
dimensione 0 o 1, variabili nulle)
• Documentazione § Inserimento di commenti esplicativi nelle varie parti del programma per facilitarne la
comprensione (dopo molto tempo dalla stesura o per terze persone)
• Manutenzione § Modifica del programma per soddisfare al cambiamento delle specifiche con cui deve
operare

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”

TERZA PARTE – Architettura degli Elaboratori

La struttura del calcolatore


IBM S/360 Mod 40 (1964) 1.6 MHz 32KB-256KB 225.000$; IBM S/360 Mod 50 (1964) 2.0 MHz 128KB-256KB
550.000$; IBM S/360 Mod 65 (1964) 5.0 MHz 256KB-1MB 1.200.000$

• Si possono considerare diversi livelli di astrazione: § Circuiti elettronici (hardware) § Architettura e


linguaggio macchina § Sistema operativo (software di sistema) § Linguaggi di programmazione § Programmi
applicativi Il calcolatore è basato su circuiti elettronici digitali, ovvero modellabili con l’algebra di Boole; i
circuiti elettronici implementano le funzioni logiche AND, OR, NOT, permettono di memorizzare il valore di
variabili booleane, di effettuare calcoli, etc..

La macchina di Von Neumann – 1


• Tutti i calcolatori attuali si rifanno all’architettura di Von Neumann, costituita dalle quattro componenti: §
CPU (Central Processing Unit) § Memoria centrale § Bus di sistema § Periferiche

La macchina di Von Neumann - 2


• Carratteristiche del modello di Von Neumann § Proceduralità: possibilità di eseguire differenti programmi
memorizzati Ø Il modello è basato sul paradigma di programmazione procedurale: il programma indica la
sequenza di istruzioni da eseguire per ottenere la soluzione ad una data classe di problemi § Sequenzialità:
regola della selezione dell’istruzione da eseguire rigidamente fissata Ø Connessione tra le unità funzionali
con singolo flusso di informazione tra memoria e processore: architettura a BUS

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

L’Unità Aritmetico-Logica (ALU)


• L’ALU (Arithmetic-Logic Unit) è un circuito in grado di eseguire operazioni aritmetiche e logiche su 2
operandi, rappresentati su n bit (es. 32/64 bit); oltre al risultato dell’operazione stessa può produrre
informazioni ulteriori su linee specifiche (il risultato è zero, si è verificato un overflow, etc.)
• Il tipo di operazione selezionata, in un dato istante, dipende dallo stato di alcune linee di controllo
provenienti dalla CU
• Le operazioni logiche (es. AND) vengono eseguite bit a bit fra i due operandi
• Esiste una unità specializzata per le operazioni in virgola mobile (FPU)

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

Registri e loro funzioni


• Registri accumulatori: sono integrati alla ALU, che vi può operare direttamente; mantengono risultati
temporanei
• Registro di stato: PSW (Program Status Word), contiene i flag di stato, bit impostati dall’HW della CPU
dopo un’operazione, per indicare particolari condizioni circa l’esito dell’esecuzione (es. segno, risultato
nullo, overflow, carry,…)
• Registro puntatore allo stack: SP (Stack Pointer), lo stack è un insieme di celle di memoria che può essere
acceduto in modalità LIFO (Last-In-First-Out0); la posizione in cui si trova l’elemento inserito per ultimo è la
testa dello stack, che viene puntata dal registro SP; lo stack è organizzato in modo da crescere verso
indirizzi decrescenti: SP viene decrementato ad ogni nuova immissione (push) ed incrementato ad ogni
prelievo (pop)

L’unità di controllo (CU)


• Esegue le istruzioni prelevandole dalla memoria nella fase di fetch
• La prossima istruzione da eseguire è individuata dall’indirizzo presente nel registro contatore di
programma (PC)
• L’istruzione in esecuzione è memorizzata nel registro istruzione (IR)
• L’istruzione è un codice binario che deve essere decodificato dalla CU; specifica il tipo di operazione, gli
eventuali operandi, etc.
• Normalmente le istruzioni sono eseguite in sequenza: dopo il fetch, il PC viene incrementato, per fare
riferimento all’istruzione successiva

Come si eseguono i programmi – 1


• Il processore esegue le istruzioni di un programma una alla volta in sequenza: estrae le istruzioni dalla
memoria, le interpreta e le esegue una dopo l’altra § Un programma indica la sequenza di istruzioni da
eseguire per ottenere la soluzione ad un data classe di problemi
• Il processore esegue ogni istruzione mediante una sequenza ben definita di operazioni detta ciclo di
istruzione o ciclo macchina § Estrazione di una istruzione: fase di fetch § Esecuzione dell’istruzione: fase di
execute

Come si eseguono i programmi – 2


• Fase di fetch § L’unità di controllo preleva dalla memoria centrale l’istruzione, utilizzando l’indirizzo
conservato nel PC § L’istruzione prelevata viene memorizzata nel registro IR
• Fase di Execute § L’unità di controllo interpreta l’istruzione e determina le operazioni da eseguire §
L’unità di controllo sovrintende all’esecuzione delle operazioni § Il PC viene incrementato per puntare
all’istruzione successiva

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)

Architettura della memoria centrale


• Il registro indirizzi contiene l’indirizzo della cella che deve essere acceduta; la sua dimensione deve essere
tale da permettere che tutte le celle di memoria possano essere indirizzate
• Esempio: un registro a 16 bit indirizza 65536 posizioni di memoria
• Il decodificatore di indirizzi è un dispositivo in grado di selezionare la cella il cui indirizzo corrisponde a
quello contenuto nel registro indirizzi
• Il registro dati contiene l’informazione da scrivere/letta sulla/dalla cella indirizzata; la dimensione del
registro è uguale a quella delle celle di memoria

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

Il software della ROM – 1


• La ROM contiene il software e i dati necessari ad inizializzare il computer ed a far funzionare i dispositivi
periferici
• Il nucleo del software della ROM è costituito dalle routine di avviamento che comprendono il caricatore di
boot-strap ed il ROM BIOS
• Le routine di avviamento realizzano l’inizializzazione del calcolatore: § Ne effettuano un rapido controllo
di affidabilità, per accertare che tutte le componenti hardware siano perfettamente funzionanti § Caricano
il sistema operativo dal disco (caricatore di boot-strap)

Il software della ROM - 2


• Il caricatore di boot-strap ha la funzione di leggere un programma di lancio dal disco, detto bootstrap, e di
trasferire ad esso il controllo: il boostrap carica il nucleo del sistema operativo e lo manda in esecuzione
• Il ROM BIOS ¾ Basic Input-Output System ¾ è la parte della ROM attiva quando il computer è al lavoro: il
suo ruolo è quello di fornire un insieme di servizi di base richiesti per il funzionamento delle periferiche
Operazioni sulla memoria centrale
• Le operazioni che si effettuano sulla memoria sono operazioni di lettura e scrittura
• Entrambe presuppongono l’utilizzo di un indirizzo che identifica univocamente la cella interessata
all’operazione
• L’operazione di scrittura è distruttiva, cioè cancella l’informazione precedentemente contenuta nella cella
• L’operazione di lettura preserva il contenuto della cella indirizzata: all’esterno della memoria centrale
viene trasferita copia dell’informazione

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!

Il set di istruzioni macchina


• L’insieme delle istruzioni eseguibili, e la relativa codifica, sono generalmente diverse per modelli diversi di
processore
• Le istruzioni possono essere codificate con un numero variabile di bit (es. Intel Pentium, Intel i7) o con un
numero fisso (es. MIPS - 32 bit)
• Le categorie di istruzioni normalmente disponibili sono: Trasferimento dati: spostano dati (byte, word) tra
registri, memoria principale e dispositivi di ingresso/uscita (I/O) Aritmetico-logiche: eseguono i calcoli nella
ALU Salti (condizionati e incondizionati): prendono decisioni e alterano la normale esecuzione sequenziale
delle istruzioni

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

Cos’è un sistema operativo – 2


• Tutte le piattaforme hardware/software richiedono un sistema operativo
• Quando si accende un elaboratore, occorre attendere alcuni istanti per poter iniziare a lavorare: durante
questa pausa il computer carica il SO

Scopo del sistema operativo


• Gestione EFFICIENTE delle risorse del sistema di elaborazione
• Rendere AGEVOLE l’interfaccia tra l’uomo e la macchina

Percezione del sistema operativo


• Per l’utente, la percezione del calcolatore dipende dall’interfaccia del SO § SO progettato pensando alla
facilità d’uso § Qualche attenzione alle prestazioni § Scarsa attenzione all’utilizzo delle risorse
• Dal punto di vista del sistema di calcolo… § Il SO viene percepito come un gestore di risorse (CPU, RAM,
I/O) e come un programma di controllo § Arbitra l’esecuzione dei programmi utente
• Non c’è uniformità nel definire cosa fa parte/non compete del/al SO

Esempio: il SO come gestore di risorse – 1


• Si consideri un ristorante con un capo-cuoco (che dirige la cucina) ed i suoi aiutanti, camerieri e clienti: § I
clienti scelgono un piatto dal menù § Un cameriere prende l’ordine e lo consegna al capo-cuoco § Il capo-
cuoco riceve l’ordine e assegna uno o più aiutanti alla preparazione del piatto § Ogni aiutante si dedicherà
alla preparazione di un piatto, il che potrà richiedere più attività diverse § Il capo-cuoco supervisiona la
preparazione dei piatti e gestisce le risorse (limitate) disponibil
Esempio: il SO come gestore di risorse – 2
• Il capo-cuoco è il sistema operativo! § I clienti sono gli utenti § Le ricette associate ai piatti sono i
programmi § Il menù ed il cameriere costituiscono l’interfaccia verso il sistema operativo (grafica e non) §
Gli aiutanti sono i processi § La cucina è il computer; pentole, fornelli, etc. sono le componenti hardware

Esempio: il SO come gestore di risorse – 3


• Problemi del capo-cuoco: § Esecuzione fedele delle ricette § Allocazione efficiente delle risorse esistenti
(aiutanti, fornelli, etc.) § Coordinamento efficiente degli aiutanti § Licenziamento degli aiutanti che non si
comportano secondo le regole
• Problemi del sistema operativo: § Esecuzione dei programmi utente § Efficienza nell’uso delle risorse
(processori, memoria, dischi, etc.) § Coordinamento dei processi § Protezione nell’uso delle risorse e abort
dei processi che se appropriano indebitamente

Il SO come macchina estesa – 1


• Visione a strati delle componenti hardware/software che compongo un sistema di elaborazione

Il SO come macchina estesa – 2


• Il SO può essere inteso come uno strumento che virtualizza le caratteristiche dell’hardware sottostante,
offrendo all’utente la visione di una macchina astratta più potente e più semplice da utilizzare di quella
fisicamente disponibile
• In questa visione, un SO… § …nasconde a programmatori/utenti i dettagli dell’hardware e fornisce
un’interfaccia conveniente e facile da usare § …agisce come intermediario tra programmatore/utente e
hardware
• Parole chiave § Indipendenza dall’hardware § Comodità d’uso § Programmabilità

Il SO come macchina estesa – 3


• L’utente è in grado di utilizzare la macchina fisica senza conoscere i dettagli della sua struttura interna e
del suo funzionamento 1. Hardware — fornisce le risorse fondamentali di calcolo (CPU, memoria, device di
I/O) 2. Sistema Operativo — controlla e coordina l’utilizzo delle risorse hardware da parte dei programmi
applicativi dell’utente 3. Programmi Applicativi — definiscono le modalità di utilizzo delle risorse del
sistema, per risolvere i problemi di calcolo degli utenti (compilatori, database, video game, programmi
gestionali) 4. Utenti — persone, altri macchinari, altri elaboratori

Architettura del sistema operativo


• I SO sono costituiti da un insieme di moduli, ciascuno dedicato a svolgere una determinata funzione
• I vari moduli del SO interagiscono tra loro secondo regole precise, al fine di realizzare le funzionalità di
base della macchina
• L’insieme dei moduli per la gestione della CPU e della memoria centrale è il kernel

Ancora sul sistema operativo


• Riassumendo: Il sistema operativo fornisce un ambiente per eseguire programmi in modo conveniente ed
efficiente; funge infatti da… Allocatore di risorse — controlla, distribuisce ed alloca le risorse (in modo equo
ed efficiente) Programma di controllo — controlla l’esecuzione dei programmi utente e le operazioni sui
dispositivi di I/O Esempio: il filesystem Si ha a che fare con file, directory, etc., e non ci si deve preoccupare
di come i dati sono memorizzati sul disco

Compiti del sistema operativo


• Gestione dei processi
• Gestione della memoria principale
• Gestione della memoria di massa (file system)
• Realizzazione dell’interfaccia utente
• Protezione e sicurezza
La gestione dei processi – 1
• Un processo è un programma in esecuzione § Un processo utilizza le risorse fornite dal sistema di
elaborazione per assolvere ai propri compiti § La terminazione di un processo prevede il recupero di tutte le
risorse riutilizzabili ad esso precedentemente allocate
• Normalmente, in un sistema vi sono molti processi, di alcuni utenti, e alcuni sistemi operativi, che
vengono eseguiti in concorrenza su una o più CPU
• La concorrenza è ottenuta effettuando il multiplexing delle CPU fra i vari processi

La gestione dei processi – 2


• Il sistema operativo è responsabile delle seguenti attività riguardanti la gestione dei processi: § creazione
e terminazione dei processi § sospensione e riattivazione dei processi § gestione dei deadlock §
comunicazione tra processi § sincronizzazione tra processi
• Il gestore dei processi “realizza” una macchina virtuale in cui ciascun programma opera come se avesse a
disposizione un’unità di elaborazione dedicata

La gestione dei processi – 3


• Il gestore dei processi è il modulo che si occupa del controllo, della sincronizzazione, dell’interruzione e
della riattivazione dei programmi in esecuzione cui viene assegnato un processore
• La gestione dei processi viene compiuta secondo modalità diverse, in funzione del tipo di utilizzo cui il
sistema è rivolto
• Il programma che si occupa della distribuzione del tempo di CPU tra i vari processi attivi, decidendone
l’avvicendamento, è chiamato scheduler
• Nel caso di sistemi multiprocessore, lo scheduler si occupa anche di gestire la cooperazione tra le diverse
CPU presenti nel sistema (bilanciandone il carico)

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 gestione della memoria principale – 1


• La memoria principale… § …è un “array” di byte indirizzabili singolarmente § …è un deposito di dati
facilmente accessibile e condiviso tra la CPU ed i dispositivi di I/O
• Il SO è responsabile delle seguenti attività riguardanti la gestione della memoria principale: § Tenere
traccia di quali parti della memoria sono usate e da chi § Decidere quali processi caricare quando diventa
disponibile spazio in memoria § Allocare e deallocare lo spazio di memoria quando necessario
• Il gestore di memoria “realizza” una macchina virtuale in cui ciascun programma opera come se avesse a
disposizione una memoria dedicata

La gestione della memoria principale – 2


• L’organizzazione e la gestione della memoria centrale è uno degli aspetti più critici nel disegno di un SO
• Il gestore della memoria è quel modulo del SO incaricato di assegnare la memoria ai task (per eseguire un
task è necessario che il suo codice sia caricato in memoria)
• La complessità del gestore della memoria dipende dal tipo di SO
• Nei SO multi-tasking, più programmi possono essere caricati contemporaneamente in memoria
• Problema: come allocare lo spazio in maniera ottimale?

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

La gestione della memoria secondaria – 1


• Poiché la memoria principale è volatile e troppo piccola per contenere tutti i dati e tutti i programmi in
modo permanente, il computer è dotato di memoria secondaria § In generale, la memoria secondaria è
data da hard disk e dischi ottici
• Il SO garantisce una visione logica uniforme del processo di memorizzazione: § Astrae dalle caratteristiche
fisiche dei dispositivi per definire un’unità di memorizzazione logica - il file § Ciascuna periferica viene
controllata dal relativo device driver, che nasconde all’utente le caratteristiche fisiche variabili
dell’hardware: modalità e velocità di accesso, capacità, velocità di trasferimento

La gestione della memoria secondaria – 2


• Il SO è responsabile delle seguenti attività riguardanti la gestione della memoria secondaria: § Allocazione
dello spazio § Gestione dello spazio libero § Ordinamento efficiente delle richieste di accesso al disco (disk
scheduling)

La gestione del file system – 1


• Il file è l’astrazione informatica di un archivio di dati § Il concetto di file è indipendente dal mezzo sul
quale viene memorizzato (che ha caratteristiche proprie e propria organizzazione fisica)
• Un file system è composto da un insieme di file
• Il SO è responsabile delle seguenti attività riguardanti la gestione del file system: § Creazione e
cancellazione di file § Creazione e cancellazione di directory § Manipolazione di file e directory § Codifica
del file system sulla memoria secondaria

La gestione del file system – 2


• Il gestore del file system è il modulo del SO incaricato di gestire le informazioni memorizzate sui
dispositivi di memoria di massa
• Il gestore del file system deve garantire la correttezza e la coerenza delle informazioni
• Nei sistemi multi-utente, fornisce meccanismi di protezione per consentire agli utenti di proteggere i
propri dati dall’accesso di altri utenti non autorizzati
• Le funzioni tipiche del gestore del file system sono: § Fornire un meccanismo per l’identificazione dei file
§ Fornire metodi opportuni di accesso ai dati § Rendere trasparente la struttura fisica del supporto di
memorizzazione § Implementare meccanismi di protezione dei dati

Organizzazione del file system


• Quasi tutti i SO utilizzano un’organizzazione gerarchica del file system
• L’elemento utilizzato per raggruppare più file insieme è la directory
• L’insieme gerarchico delle directory e dei file può essere rappresentato attraverso un grafo (un albero nei
SO più datati) delle directory

La gestione dei dispositivi di I/O


• La gestione dell’I/O richiede: § Un’interfaccia comune per la gestione dei device driver § Un insieme di
driver per dispositivi hardware specifici § Un sistema di gestione di buffer per il caching delle informazioni
• Il gestore dei dispositivi di I/O è il modulo del SO incaricato di assegnare i dispositivi ai task che ne fanno
richiesta e di controllare i dispositivi stessi
• Da esso dipende la qualità e il tipo di periferiche riconosciute dal sistema
• Il gestore delle periferiche offre all’utente una versione astratta delle periferiche hardware; l’utente ha a
disposizione un insieme di procedure standard di alto livello per leggere/scrivere da/su una periferica che
“percepisce” come dedicata

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.)

Sistemi operativi commerciali


• In commercio sono presenti una grande quantità di sistemi operativi diversi
• In passato, la tendenza delle case costruttrici di sistemi di elaborazione era di sviluppare sistemi operativi
proprietari per le loro architetture
• La tendenza attuale è quella dello sviluppo di sistemi operativi portabili su piattaforme hardware diverse

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.

QUARTA PARTE – ALGORITMI E PROGRAMMI

Trattamento delle Informazioni


• Informatica = studio sistematico dei processi che servono al trattamento delle informazioni o più in
generale della definizione della soluzione di problemi assegnati. – analisi dettagliata di ciò che serve al
trattamento dell’informazione, – progetto di una soluzione applicabile alla generazione di informazioni
prodotte da altre informazioni, – verifica della correttezza e della efficienza della soluzione pensata, –
manutenzione della soluzione nella fase di funzionamento in esercizio
Informatica e studio di Algoritmi
• “algoritmo” – introdotto nella matematica per specificare la sequenza precisa di operazioni il cui
svolgimento è necessario per la soluzione di un problema assegnato. – Algoritmo & esecutore
• Informatica è lo studio sistematico degli algoritmi. – Il calcolatore è tra tutti gli esecutori di algoritmi
(compreso l’uomo) quello che si mostra più potente degli altri e con una potenza tale da permettere di
gestire quantità di informazioni altrimenti non trattabili.
• Lo studio dell’Informatica considera quindi il computer come uno scienziato utilizza il proprio
microscopio: uno strumento per provare le proprie teorie e, nel caso specifico, verificare i propri
ragionamenti o algoritmi.

La soluzione dei Problemi: osservazioni


• La descrizione del problema non fornisce, in generale, indicazioni sul metodo risolvente; anzi in alcuni casi
presenta imprecisioni e ambiguità che possono portare a soluzioni errate. – per alcuni problemi non esiste
una soluzione; – alcuni problemi, invece, hanno più soluzioni possibili; e quindi bisogna studiare quale tra
tutte le soluzioni ammissibili risulta quella più vantaggiosa sulla base di un insieme di parametri prefissati
(costo della soluzione, tempi di attuazione, risorse necessarie alla sua realizzazione, etc.) – per alcuni
problemi non esistono soluzioni eseguibili in tempi ragionevoli e quindi utili.

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.

Automa a Stati Finiti


• Un automa M (a stati finiti) può essere definito da una quintupla di elementi (Q,I,U,t,w) dove: – Q è un
insieme finito di stati interni caratterizzanti l’evoluzione del sistema; – I è un insieme finito di sollecitazioni
in ingresso; – U è un insieme finito di uscite; – t è la funzione di transizione che trasforma il prodotto
cartesiano Q×I in Q (t: QxI → Q) – w è la funzione di uscita che trasforma Q×I in U (w: QxI → U).

Rappresentazione a grafo
• Grafo – un cerchio per rappresentare gli stati del sistema – archi orientati ad indicare le transizioni

Il Modello di Macchina di Turing


• Il modello di Macchina di Turing è un particolare automa per il quale sono definiti – l’insieme degli
ingressi e delle uscite come insiemi di simboli – è definito un particolare meccanismo di lettura e scrittura
delle informazioni.
• È un modello fondamentale nella teoria dell’informatica, in quanto permette di raggiungere risultati
teorici sulla calcolabilità e sulla complessità degli algoritmi.

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

Macchina di Turing e Algoritmi


• Una macchina di Turing che – si arresti – trasformi un nastro t in uno t’ rappresenta l’algoritmo per
l’elaborazione Y=F(X), ove X e Y sono codificati rispettivamente in t e t’.
• Una macchina di Turing la cui parte di controllo è capace di leggere da un nastro anche la descrizione
dell’algoritmo è una macchina universale capace di simulare il lavoro compiuto da un’altra macchina
qualsiasi. – … leggere dal nastro la descrizione dell’algoritmo richiede di saper interpretare il linguaggio con
il quale esso è stato descritto.
• La Macchina di Turing Universale è l’interprete di un linguaggio

Tesi di Church e Turing


• Tesi di Church e Turing: Non esiste alcun formalismo, per modellare una determinata computazione
meccanica, che sia più potente della Macchina di Turing e dei formalismi ad essi equivalenti. – Ogni
algoritmo può essere codificato in termini di Macchina di Turing ed è quindi ciò che può essere eseguito da
una macchina di Turing. – Un problema è non risolubile algoritmicamente se nessuna Macchina di Turing è
in grado di fornire la soluzione al problema in tempo finito. – Se dunque esistono problemi che la macchina
di Turing non può risolvere, si conclude che esistono algoritmi che non possono essere calcolati.
• Sono problemi decidibili quei problemi che possono essere meccanicamente risolvibili da una macchina di
Turing; sono indecidibili tutti gli altri.

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.

MdT e Von Neumann


• La macchina di Turing e la macchina di von Neumann sono due modelli di calcolo fondamentali per
caratterizzare la modalità di descrizione e di esecuzione degli algoritmi.
• La macchina di Von Neumann fu modellata dalla Macchina di Turing Universale per ciò che attiene alle
sue modalità di computazione. – La sua memoria è però limitata a differenza del nastro di Turing che ha
lunghezza infinita. – La macchina di Von Neumann, come modello di riferimento per sistemi non solo
teorici, prevede anche la dimensione dell’interazione attraverso i suoi dispositivi di input ed output.
Programmazione Strutturata
• Il ruolo degli algoritmi è fondamentale se si pensa che essi sono indipendenti sia dal linguaggio in cui sono
espressi sia dal computer che li esegue.
• Si pensi ad una ricetta per una torta alla frutta: – il procedimento è lo stesso indipendentemente
dall'idioma usato; – la torta prodotta (dovrebbe J … ) è la stessa indipendentemente dal cuoco.

La progettazione degli algoritmi


• Il progetto degli algoritmi è una onerosa attività intellettuale – …. molto più onerosa di quella di esprimere
l'algoritmo con un linguaggio di programmazione che richiede creatività ed intuito.
• Non esiste un algoritmo per il progetto degli algoritmi!
• Valutazione della complessità della soluzione individuata: – se ci sono algoritmi diversi per descrivere lo
stesso processo:
• la complessità ci dice quale di essi è migliore, ossia quale viene eseguito nel minor tempo con la minima
occupazione di memoria, più in generale con il miglior utilizzo di tutte le risorse disponibili.
• lo studio della correttezza ci consente di valutare l'aderenza della soluzione alle specifiche del problema. –
Essere sicuri della correttezza è un'attività tanto più complessa quanto più complesso risulta il progetto
dell'algoritmo.

L’Ingegneria del Software


• Ai fini di una produzione industriale di qualità è necessario evitare di produrre software in base alle
esperienze e/o alle iniziative del programmatore: – il processo di produzione del software non può essere
un processo di tipo artigianale
• Ad esempio, negli anni '60 il programmatore usava mille trucchi per risparmiare memoria! deve invece
servirsi di metodologie e tecniche sistematiche di progettazione e programmazione con fissati parametri di
qualità e in maniera standard.
• La "Software Engineering" (ingegneria del software) è la branca dell'Ingegneria Informatica che raccoglie il
patrimonio di metodi e tecniche per la produzione del software.

Requisiti del Software


• buon livello qualitativo;
• produttività medio-alta;
• impiego di personale non troppo specializzato (la specializzazione é fornita dallo standard);
• riduzione sensibile del costo del prodotto.

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.

Caratteristiche: Top Down


• Il top-down e lo stepwise refinement costituiscono il modo procedurale di raggiungimento della soluzione
(divide et impera) – Tale approccio parte dalla considerazione che la complessità di un problema da
risolvere non consente di tener conto contemporaneamente di tutte le decisioni realizzative. – Sarà quindi
necessario procedere per "Raffinamenti Successivi" procedendo dal generale al particolare.
• "si analizza il problema al più alto livello possibile di astrazione individuandone gli elementi più importanti
e supponendo di avere a disposizione un sistema adatto ad eseguire gli elementi funzionali individuati". –
Ogni elemento, a sua volta, diventa il problema da analizzare subendo una suddivisione in problemi più
elementari. – Il procedimento continua fino a raggiungere un livello di scomposizione comprensibile
all'esecutore (o software del sistema in uso).

Soluzione del Problema: Albero


• la radice corrisponde al problema
• i nodi rappresentano le differenti decisioni di progetto,
• le foglie, vengono associate alla descrizione della soluzione in modo comprensibile all'esecutore.

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

La progettazione dei programmi di piccole dimensioni


• Una delle esigenze maggiormente sentita è quella di una separazione netta, in fase progettuale, tra il
“cosa” (analisi dei requisiti e specifiche funzionali) e il “come” (progetto a diversi livelli di dettaglio). – In
effetti la distinzione tra il “cosa” e il “come” è comune a qualsiasi tipo di progetto ed è un modo per
esprimere con altre parole la separazione fra analisi e sintesi.

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.

Separazione Analisi e Progetto


• Motivi alla base di tale separazione sono: – la possibilità di documentare in maniera completa i requisiti
del problema e quindi, indirettamente, le scelte della fase di progetto; – l'impossibilità d'inficiare i risultati
dell'analisi a causa di scelte anticipate di progetto; – la possibilità di rendere indipendente l'analisi dai
vincoli di realizzazione.

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.

La Documentazione dei Programmi


• La documentazione dei programmi è lo strumento fondamentale per la chiarezza e la leggibilità dei
programmi.
• Tali caratteristiche di leggibilità consentono: – una più semplice comprensione di quale sia il problema che
il programma risolve e quindi della correttezza del programma stesso; – una più semplice prosecuzione del
progetto ogni qualvolta lo si sia interrotto; – una più elementare comunicazione delle scelte di progetto; –
una più semplice modificabilità del programma al variare delle specifiche del problema.

Regole della documentazione


• Produrre la documentazione nel corso stesso del progetto – in quanto si può essere certi della efficacia e
della completezza della documentazione soltanto se si documentano le scelte nel momento in cui esse
vengono fatte.
• Inserire la documentazione quanto più possibile all'interno del programma in modo che viva con il
programma stesso, cambi e cresca con esso, e quindi sia sempre aggiornata.

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

QUINTA PARTE – Algebra di Boole e Rappresentazione dei Numeri


Cenni storici - 1
• La presenza “invasiva” dell’informatica nella vita di tutti i giorni è un fenomeno relativamente recente;
non recente è invece la necessità di avere a disposizione strumenti e metodi per contare rapidamente,
elaborare dati, “calcolare”
- Le prime testimonianze di strumenti per contare risalgono a 30.000 anni fa
- I primi esempi di algoritmi ¾ procedure di calcolo “automatico” ¾ sono stati scoperti in Mesopotamia su
tavolette babilonesi risalenti al 1800-1600 a.C.
• Il sogno di costruire macchine capaci di effettuare calcoli automatici affonda le radici nel pensiero
filosofico del ‘600:
- Wilhelm Schickard introdusse la prima macchina moltiplicatrice dotata di accumulatori cilindrici

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)

Che cos’è l’Informatica – 1


• Informatica -- fusione delle parole informazione e automatica -- l’insieme delle discipline che studiano gli
strumenti per l’elaborazione automatica dell’informazione e i metodi per un loro uso corretto ed efficace.
• L’Informatica è la scienza della rappresentazione e dell’elaborazione dell’informazione
- L’accento sull’ “informazione” fornisce una spiegazione del perché l’Informatica sia ormai parte integrante
di molte attività umane: laddove deve essere gestita dell’informazione, l’Informatica è un valido strumento
di supporto
- Il termine “scienza” sottolinea il fatto che, nell’Informatica, l’elaborazione dell’informazione avviene in
maniera sistematica e rigorosa, e pertanto può essere automatizzata.

• 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)

L’architettura di Von Neumann

• La capacità dell’elaboratore di eseguire successioni di operazioni in modo automatico è determinata dalla


presenza di un dispositivo di memoria
-Nella memoria sono registrati i dati e...
-...le operazioni da eseguire su di essi (nell’ordine secondo cui devono essere eseguite): il programma, la
“ricetta” usata dall’elaboratore per svolgere il proprio compito
• Il programma viene interpretato dall’unità di controllo

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

• Le operazioni AND e OR sono operazioni binarie, l’operazione NOT è unaria


• Nella valutazione delle espressioni booleane esiste una relazione di precedenza fra gli operatori NOT,
AND e OR, nell’ordine in cui sono stati elencati
• Gli operatori dell’algebra booleana possono essere rappresentati in vari modi
- Spesso sono descritti semplicemente come AND, OR e NOT
- Nella descrizione dei circuiti appaiono sotto forma di porte logiche § In matematica si usano + per OR e ´
per AND, mentre si rappresenta il NOT con una barra posta sopra l’espressione che viene negata

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

Ancora un po’ di preistoria

• 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

• Il sistema di rappresentazione dei valori attraverso i “calculi” è un sistema additivo


• Come in ogni sistema di rappresentazione additivo, l’operazione di addizione risulta particolarmente
semplice
• Per addizionare due o più valori basterà infatti mettere insieme i simboli uguali di ciascuno degli addendi:
l’addizione è compiuta nel gesto stesso dell’unione dei sassolini
• L’insieme dei sassolini indicherà complessivamente il valore risultato dell’addizione

• 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

• Il sistema di spaziatura consentiva di risolvere le ambiguità di interpretazione dei raggruppamenti


• Ai tempi di Alessandro Magno era però invalso anche l’uso di un simbolo (due cunei obliqui) per indicare
un posto vuoto; questo simbolo svolgeva alcune funzioni del nostro zero, ma non tutte: veniva usato fra
colonne e mai per indicare colonne vuote alla fine della sequenza

I numeri nell’antico Egitto


• La civiltà degli Egizi ci ha lasciato alcune fra le più antiche tracce di matematica scritta
• I primi numeri scritti si individuano infatti su monumenti e stele databili all’inizio del III millennio a.C.
• Si tratta di iscrizioni che impiegano il sistema geroglifico, la scrittura pittografica egizia
• Nel sistema geroglifico vengono riservati ai numeri sette simboli diversi per rappresentare le potenze del
10, da 1 a 106

• 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

I numeri nell’antica Grecia


• Nella civiltà greca classica sono noti due principali sistemi di numerazione
-Il primo, più antico, è noto come attico ed è per molti aspetti simile a quello in uso presso i Romani;
utilizzava infatti accanto ai simboli fondamentali per l’1 e le potenze di 10 fino a 10000, un simbolo speciale
per il 5, che combinato con i precedenti, dava altri simboli anche per 50, 500, 5000, 50000
- Compaiono testimonianze di questo sistema dal V al I secolo a.C. ma, a partire dal III secolo, si diffonde
anche il sistema detto ionico o alfabetico

• 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

I numeri nell’antica Roma


• Nel sistema di numerazione romano, a base decimale, ci si serviva, come è noto, anche di simboli speciali
per indicare 5, 50, 500
• Alcune antiche epigrafi inducono a ritenere che i segni usati fossero inizialmente segni speciali, forse di
origine etrusca, che solo successivamente furono identificati con le lettere I, V, X, L, C, D, M

• La scrittura dei numeri avveniva combinando additivamente i segni


• Per agevolare scrittura e lettura si diffuse più tardi un sistema sottrattivo già utilizzato, ad esempio, dagli
Assiri (che ha traccia anche nelle forme verbali come ad esempio “undeviginti” , stessa cosa di “decem et
novem”)
-Un simbolo posto alla sinistra di un simbolo di quantità maggiore viene sottratto, così IX e VIIII indicano
entrambi il numero 9
• Ancora in epoca tarda, un segno che prese l’aspetto di una linea orizzontale posta sopra le lettere serviva
per indicarne la moltiplicazione per 1000

• 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)

Dall’India… il sistema decimale


• La civiltà indiana, più antica delle civiltà classiche, è già documentata dal 3000 a.C.
• Sebbene l’uso della matematica dovesse essere ben sviluppato già in epoca arcaica, i primi testi che ci
sono giunti risalgono al V secolo d.C.
• Non è però ancora chiaro dove e quando si sia sviluppato il sistema di notazione decimale posizionale
che, in seguito, attraverso gli Arabi, si è diffuso in Europa

• 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 di numerazione posizionali


• Sistemi di numerazione posizionali: La base del sistema di numerazione Le cifre del sistema di
numerazione Il numero è scritto specificando le cifre in ordine ed il suo valore dipende dalla posizione
relativa delle cifre

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

Da decimale a binario Numeri interi


• Si divide ripetutamente il numero intero decimale per 2 fino ad ottenere un quoziente nullo; le cifre del
numero binario sono i resti delle divisioni; la cifra più significativa è l’ultimo resto
Numeri razionali
• Si moltiplica ripetutamente il numero frazionario decimale per 2, fino ad ottenere una parte decimale
nulla o, dato che la condizione potrebbe non verificarsi mai, per un numero prefissato di volte; le cifre del
numero binario sono le parti intere dei prodotti successivi; la cifra più significativa è il risultato della prima
moltiplicazione

L’aritmetica degli elaboratori


• L’aritmetica “interna” degli elaboratori differisce notevolmente dall’aritmetica classica
• Sebbene le stesse operazioni possano essere realizzate secondo modalità diverse su elaboratori diversi, si
riscontrano alcune caratteristiche comuni: § Rappresentazione binaria dei numeri § Rango finito dei numeri
rappresentabili § Precisione finita dei numeri § Operazioni espresse in termini di operazioni più semplici

L’aritmetica degli elaboratori


• Rango finito dei numeri rappresentabili § Qualunque sia la codifica utilizzata, esistono sempre il più
grande ed il più piccolo numero rappresentabile § I limiti inferiore e superiore del rango di
rappresentazione dipendono sia dal tipo di codifica, sia dal numero di bit utilizzati § Se il risultato di
un’operazione non appartiene al rango dei numeri rappresentabili, si dice che si è verificato un overflow
(un underflow, più precisamente, se il risultato è più piccolo del più piccolo numero rappresentabile)

• 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)

Codifica dei caratteri alfabetici


• Oltre ai numeri, molte applicazioni informatiche elaborano caratteri (simboli) • Gli elaboratori elettronici
trattano numeri § Si codificano i caratteri e i simboli per mezzo di numeri • Per poter scambiare dati (testi)
in modo corretto, occorre definire uno standard di codifica

• 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

La codifica delle immagini


• Le immagini vengono anch’esse codificate come una sequenza di bit: il processo di “traduzione” da
un’immagine ad una sequenza binaria prende il nome di digitalizzazione § L’immagine è suddivisa in punti o
pixel (per picture element ) e ciascun punto viene codificato con un numero, che corrisponde ad un colore
o ad un particolare tono di grigio § Si utilizzano un numero di colori o di sfumature che sia una potenza del
2, in modo da codificare l’informazione legata a ciascun pixel con un opportuno numero di bit

• 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

Reti e Internet – Prte 6


INFRASTRUTTURE, SERVIZI E COMUNITÀ ¢ Internet esiste perché ci sono reti che la preesistono e che si
connettono tra loro per generare la rete delle reti ¢ Quando parliamo di Internet ci riferiamo ad un insieme
di Dispositivi informatici Connessioni Protocolli Software Utenti

ELEMENTI COSTITUTIVI DI INTERNET ¢ Dispositivi informatici: calcolatori, stampanti, terminali ¢


Connessioni: canali di trasporto quali il doppino telefonico, le fibre ottiche, i collegamenti satellitari ¢
Protocolli: regole di funzionamento ¢ Software: programmi per gestire la posta elettronica o navigazione sul
Web ¢ Utenti

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 1/2 ¢ La Commutazione di Pacchetto è la comunicazione tipica delle reti


moderne che sfrutta in modo efficace i canali di comunicazione ¢ Utilizzando la Commutazione di Pacchetto
non è necessario usare una linea di comunicazione dedicata tra due calcolatori

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

COMUNICAZIONE SINCRONA ¢ I sistemi di comunicazione sincrona permettono di mettere in contatto


utenti in tempo reale (chat) che si scambiano messaggi testuali ¢ Nel tempo si sono sviluppati sistemi di
Instant Messaging (e.g., WhatsApp) che sono chat ibride che permettono lo scambio di materiali
multimediali e posta elettronica.

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

WWW: STATICO / DINAMICO


pagine statiche: corrispondenza uno a uno pagina - file ¢ pagine dinamiche: pagina generata al volo da
informazioni utente, di archivio, elaborazione ¢è siti statici / dinamici ¢ CMS (Content Management
System): funzionalità per la costruzione corale di un sito da parte di personale non specializzato

PROTOCOLLI, LINGUAGGI, INDIRIZZI


¢ HTTP (HyperText Transfer Protocol): protocollo di comunicazione ¢ HTML (HyperText Markup Language):
linguaggio di marcatura per la composizione di pagine web ¢ URL (Uniform Resource Locator): convenzioni
per denominare / identificare le risorse web

PROTOCOLLO http
¢ Software rilevanti: — Web Server e Web Browser (client)

Potrebbero piacerti anche