Sei sulla pagina 1di 53

DIGITAL MEDIA E BENI CULTURALI

2. Intelligenza Artificiale tra Passato, Presente, e Futuro


La Singolarità
➔ Istante in cui la crescita tecnologica diventa incontrollabile ed irreversibile, con
conseguenze imprevedibili per la civiltà
➔ Creazione di un agente intelligente, in grado di auto-migliorarsi sempre più velocemente,
fino a generare una superintelligenza
➔ Il termine «singolarità» riflette l’idea che tale cambiamento potrebbe avvenire
improvvisamente, senza essere previsto
➔ Concetto sostenuto da Elon Musk, Stephen Hawking, …
➔ S. Hawking: «Il successo nella creazione dell'IA sarebbe il più grande evento nella storia
umana. Sfortunatamente, potrebbe anche essere l'ultimo, a meno che non impariamo come
evitarne i rischi»
➔ Nick Bostrom e Vincent C. Müller hanno «stimato» una probabilità del 50% che tale
fenomeno possa verificarsi fra il 2040 e il 2050

Regolamentazione?
Le Tre leggi della robotica (Isaac Asimov, anni ‘40):
1. Un robot non può recar danno a un essere umano né può permettere che, a causa del
suo mancato intervento, un essere umano riceva danno
2. Un robot deve obbedire agli ordini impartiti dagli esseri umani, purché tali ordini non
vadano in contrasto alla Prima Legge
3. Un robot deve proteggere la propria esistenza, purché la salvaguardia di essa non
contrasti con la Prima o con la Seconda Legge

IA «Forte» vs IA «Debole»
IA Forte (Generale):
➔ «Il computer, opportunamente programmato con i giusti input e output, avrebbe quindi
una mente esattamente nello stesso senso in cui gli esseri umani hanno la mente» (Searle,
1999)
➔ Macchina che è in grado di applicare intelligenza alla risoluzione di qualsiasi problema

IA Debole (Ristretta):
➔ Implementa una parte limitata della mente, o risolve uno specifico
problema
➔ Ad esempio: riconoscimento di immagini, traduzione

Alan Turing (1912 - 1954)


➔ Matematico, logico, crittografo e filosofo britannico
➔ Diede un contributo fondamentale alla violazione dei cifrari tedeschi, come Enigma
➔ Considerato uno dei padri dell'informatica moderna
➔ Formalizzò per primo i concetti di Algoritmo e di Computazione, attraverso la Macchina
di Turing

Il Test di Turing / The Imitation Game


(1950)
➔ Oltre a ciò, si interessò alla questione di
definire un concetto di comportamento
intelligente per le macchine
➔ Proposta del Test di Turing («Computing
Machinery and Intelligence», Mind, 1950)

Capacità di passare il Test di Turing


➔ Perché “passi” il test di Turing, una macchina dovrebbe avere le seguenti capacità:
◆ Elaborazione del linguaggio naturale – per interagire con l’interrogante
◆ Rappresentazione della conoscenza – per memorizzare le informazioni prima e
durante il dialogo
◆ Ragionamento automatico – per usare la conoscenza acquisita per rispondere a
domande o trarre conclusioni
◆ Apprendimento – per adattarsi a nuove circostanze

Critiche al Test di Turing


Nel corso degli anni, il Test di Turing è stato oggetto di critiche da parte di diversi scienziati
e filosofi
➔ E’ basato unicamente sul linguaggio
◆ Test di Turing “totale”: la macchina accede ad un segnale video/audio; inoltre, si
considera la manipolazione di oggetti (percezione, robotica)
➔ E’ antropocentrico
➔ Non tiene in alcun modo in considerazione lo stato interno della macchina

La Stanza Cinese (John Searle, 1980)


➔ Un computer digitale che esegue un programma
non può avere una «mente», «comprensione» o
«coscienza»
➔ Questo indipendentemente da quanto
intelligente o umano il programma possa far
sembrare il computer
Approcci all’Intelligenza Artificiale
Storicamente, troviamo due approcci all’Intelligenza Artificiale:
➔ Simbolico (sistemi esperti)
➔ Connettivista (reti neurali)

IA simbolica
➔ Gli esseri umani ragionano attraverso «simboli» per assegnare significato a oggetti ed
eventi
➔ L’idea dietro all’approccio simbolico è che questi simboli sono i mattoni di qualsiasi
processo cognitivo
➔ Sistema di IA composto da:
◆ Base di conoscenza: progetto Cyc
◆ Insieme di regole
◆ Motore inferenziale
➔ Interpretabile
◆ Sillogismo (Aristotele):
● Premessa: Tutti gli uomini sono mortali
● Premessa: Tutti i greci sono uomini
● Conclusione: Tutti i greci sono mortali
➔ Funziona bene con applicazioni che hanno regole e obiettivi ben definiti

IA connettivista
➔ Non sono gli esseri umani a codificare la conoscenza in modo esplicito
➔ Modelli e metodi statistici che consentono al sistema di apprendere in modo autonomo
dai dati
➔ L’idea è cercare di riprodurre le capacità intellettuali utilizzando un modello semplificato
delle funzionalità cerebrali
➔ Richiede grandi quantità di dati di alta qualità

STORIA DELL’IA
Il termine «Intelligenza Artificiale» viene per la prima volta utilizzato da John McCarthy nel
1956, con l’organizzazione del Dartmouth Summer Research Project on Artificial
Intelligence
Visione storica d’insieme
Da quel momento, l’Intelligenza Artificiale ha vissuto una storia fatta di continui alti e bassi

Anni ’50: primi, entusiastici, passi


➔ I primi programmi sviluppati a seguito della conferenza apparirono, alla maggior parte delle
persone, sorprendenti
➔ I computer iniziarono a dimostrare teoremi di geometria, a risolvere problemi matematici, e a
«parlare» in inglese
➔ Regnava l’ottimismo:
◆ 1958, H. A. Simon e A. Newell: «entro 10 anni un computer sarà campione del mondo di
scacchi»
◆ 1965, A. Simon: «le macchine saranno capaci, entro 20 anni, di fare qualsiasi cosa che
fanno gli esseri umani»
◆ 1965, M. Minsky: «entro una generazione […] il problema di creare un’intelligenza
artificiale sarà sostanzialmente risolto»
◆ 1967, M. Minsky: «fra 3-8 anni avremo una macchina con l’intelligenza di una persona
media»
➔ A fine anni ‘50 viene implementato il Perceptron (rete neurale)
➔ Agenzie governative come DARPA (Defense Advanced Research Project Agency) iniettarono,
come risultato, quantità enormi di denaro nella ricerca, senza seguire un obiettivo specifico «Fund
people, not projects!»
Anni ‘60: primi scricchiolii
➔ Per quanto fossero importanti i primi risultati conseguiti dall’IA, erano in larga parte basati su una
tecnica piuttosto semplice
➔ Per raggiungere un obiettivo, es., dimostrare un teorema con una sequenza di deduzioni logiche,
procedevano passo dopo passo, un po’ come si fa esplorando un labirinto
➔ Al raggiungimento di un vicolo cieco, tornavano indietro percorrendo una strada diversa, sino a
trovare l’uscita
➔ I passi ammissibili, e le regole di tale «gioco», erano specificate a mano da esseri umani
➔ «Ragionamento come ricerca», metodo di forza bruta
➔ Problema: in certi casi, il numero di possibili percorsi attraverso il labirinto è astronomico
(esplosione combinatoria)
➔ Approcci buoni su problemi piccoli e ben formalizzati/definiti (spoiler: il mondo reale non è fatto
così)
➔ ELIZA (1964-1966), riconosciuto come il primo chatbot della storia
➔ E’ in grado di simulare la conversazione con uno psicoterapeuta
➔ Talvolta la conversazione poteva sembrare così reale da indurre le persone a credere che stessero
interagendo con un essere umano
➔ David Avidan, «My Electronic Psychiatrist – Eight Authentic Talks with a Computer»
➔ Tutt’oggi viene utilizzato il termine «Eliza effect»

1974-1980: Primo inverno dell’IA


➔ Messi di fronte ai primi insuccessi, i ricercatori rilanciarono con frasi sempre più
sensazionalistiche, nel timore di perdere i fondi
➔ Tuttavia, risultò chiaro ad un certo punto che gli scienziati avevano grossolanamente sottovalutato
le difficoltà legate all’IA:
◆ Esplosione combinatoria
◆ Scarse risorse computazionali
◆ Difficoltà nella codifica del contesto e della conoscenza comune
➔ L’ultimo punto è estremamente rilevante nel caso della traduzione fra lingue, es., fra inglese e
russo
◆ «lo spirito è forte, ma la carne è debole»
◆ «la vodka è buona, ma la carne è marcia»
➔ Sul fronte connettivista: M. Minksy, S. Papert, Perceptrons (1969)
➔ Le agenzie governative ritirarono infine i fondi, con conseguenze devastanti per la ricerca
sull’Intelligenza Artificiale
➔ Nel 1975 viene presentato Cray-1, considerato uno dei supercomputer più di successo della
storia
◆ CPU 80 MHz
◆ Memoria 8.39 Megabyte
◆ Costo di 35.000.000 $ (del 2021)
◆ Consumo di 115 kW
➔ 2006: Nokia n73
◆ CPU 220 MHz
◆ Memoria 64 Megabyte

1980-1987 : Il secondo boom


➔ Gli anni ‘80 vedono l’esplosione di popolarità dei sistema esperti
➔ Idea: codificare la conoscenza di un insieme di esperti del dominio all’interno di una macchina,
tramite fatti ed insiemi di regole
➔ La macchina, seguendo tali fatti e regole, sarà poi in grado di «ragionare» in modo da rispondere a
domande formulate sullo stesso dominio
➔ Sistemi per la diagnostica, la configurazione, … funzionano!
L’hype aumenta
➔ Sempre più compagnie si affidano a sistemi esperti per compiti gestionali
➔ Nascono diverse aziende che producono hardware dedicato
➔ Parallelamente, si ha la rinascita dell’approccio connettivista, con la scoperta di nuove tecniche
per l’addestramento delle reti neurali
➔ Nel 1981, il governo giapponese lancia il «Fifth Generation Computer Project», con l’obiettivo di
costruire macchine in grado di:
◆ Conversare con un essere umano
◆ Svolgere traduzioni fra lingue
◆ Comprendere il contenuto di fotografia e immagini
◆ Ragionare come gli esseri umani
➔ In risposta, DARPA lancia la «Strategic Computing Initiative»

Secondo inverno: 1987-1993


➔ Architetture generaliste sempre più performanti incrementano la concorrenza nei confronti dei
produttori di hardware dedicato
➔ Contemporaneo calo della domanda di sistemi esperti, che si rivelano estremamente difficili e
costosi da gestire e mantenere quando applicati al di fuori di contesti estremamente specifici:
◆ Sistemi che non apprendono la conoscenza dai dati
◆ Difficoltà di specifica: regole fragili, cablate
◆ Moltissime regole: conflitti, incompletezza
➔ Fallimento di dozzine di compagnie produttrici di hardware
➔ 1992: il «Fifth Generation Computer Project» termina con un fallimento
➔ DARPA taglia nuovamente i fondi alla ricerca

Graduale ripresa: 1993-2011


➔ Sistema per la pianificazione della logistica (DART, Dynamic Analysis and Replanning Tool): nel
corso della Guerra del Golfo, ripaga tutti i finanziamenti spesi da DARPA nei precedenti 30 anni
➔ Le reti neurali ottengono i primi successi nel riconoscimento di caratteri (USPS)
➔ Diverse applicazioni, tipicamente passate in sordina, per risolvere problemi specifici: logistica,
data mining, riconoscimento del linguaggio in domini specifici
➔ In generale, la ricerca si fa molto più «cauta», sistematica, ingegnerizzata
◆ Si parla di “applicazioni avanzate”
➔ N. Bostrom (2006): "Un sacco di intelligenza artificiale all'avanguardia è filtrata in applicazioni
generali, spesso senza essere chiamata IA; questo perché, una volta che qualcosa diventa
sufficientemente utile e abbastanza comune, non viene più etichettata come IA"
➔ 11 maggio 1997: Deep Blue (IBM) diventa il primo computer a battere a scacchi un campione del
mondo in carica, Garry Kasparov
➔ Il successo non è dovuto a nuove, rivoluzionarie idee, ma ad un miglioramento delle capacità di
calcolo
➔ Deep Blue è 10.000.000 di volte più potente delle macchine in uso nei primi anni ’50: in un
secondo può valutare 200.000.000 di mosse
➔ Legge di Moore: la velocità e le capacità di memorizzazione dei computer raddoppiano ogni due
anni

Esplosione: 2011-oggi
➔ Non si vuole costruire una IA «generale» (OpenAI?), ma la ricerca è molto più pragmatica e
focalizzata su problemi specifici
➔ Sempre più dati a disposizione su cui addestrare soluzioni di IA (Big Data), grazie anche allo
sviluppo di Internet
➔ Nel 2012, tramite reti neurali, un gruppo di ricerca improvvisamente dimezza l’errore di
classificazione sul dataset ImageNet, composto da più di 14 milioni di immagini suddivise in 20.000
categorie
APPLICAZIONI DELL’INTELLIGENZA ARTIFICIALE
shakey 1966 - 1972
Atlas 2021
robotica
Alcune applicazioni dell’intelligenza artificiale, come la guida autonoma, pongono dei dilemmi
etici e legali non banali:
● In caso di incidente, di chi è la responsabilità?
● Moral Machine: individuare le possibili preferenze riguardo le scelte che dovranno compiere le
macchine a guida autonoma in caso di incidenti inevitabili
● “Mercedes-Benz’s Self-Driving Cars Would Choose Passenger Lives Over Bystanders
Medicina
“It’s quite obvious that we should stop training radiologists.”
– Geoffrey Hinton, 2016
Chatbot
chatGPT (OpenAI) è un language model estremamente avanzato
➔ può essere utilizzato per realizzare un chatbot in grado di dialogare con l’utente utilizzando il
linguaggio naturale
➔ Molto simile all’AGI! https://chat.openai.com/chat
➔ Ha molta “intuizione artificiale”, è in grado di capire in modo estremamente accurato le necessità
dell’utente
➔ Tuttavia, non è in grado di svolgere “ragionamento artificiale”, basato su un “modello del mondo”
Arte generativa
DALL-E (OpenAI) è un sistema di intelligenza artificiale in grado di generare immagini a partire da
descrizioni formulate in linguaggio naturale
Limiti
➔ Ci sono ancora limiti importanti che riguardano le capacità di apprendimento di una rete neurale
➔ Ad esempio, tipicamente, sono richieste decine/centinaia di migliaia di esempi anche per imparare
un semplice concetto, e milioni/miliardi per sviluppare le applicazioni più avanzate
➔ I modelli addestrati possono mostrare dei comportamenti inattesi quando sottoposti ad un input
mai incontrato in fase di addestramento
Futuro?
➔ Alle soluzioni di IA manca un modello del mondo, trasversale al compito specifico per il quale il
sistema viene utilizzato, costruito incrementalmente
➔ Modello sul quale basarsi per imparare ogni nuova abilità, e da utilizzare per gestire situazioni mai
osservate in precedenza, per formulare previsioni sulle conseguenze delle proprie azioni, …

Reti neurali (naturali)

➔ Il cervello umano contiene all’incirca 86 miliardi di neuroni, collegati da 10¹⁴-10¹⁵ sinapsi


➔ I dendriti ricevono i segnali dagli altri neuroni; la cellula elabora i segnali ricevuti e, se si verificano
delle opportune condizioni, genera un segnale in output attraverso l’assone e le sinapsi
Reti neurali (artificiali)

Reti neurali, implementazioni hardware


➔ Le prime implementazioni dei neuroni artificiali, negli anni ’50 e ‘60, sono hardware
➔ Collegamenti costruiti tramite cavi, numeri codificati attraverso un segnale elettrico, pesi
implementati con resistenze e potenziometri
➔ Oggi, le reti neurali vengono simulate all’interno del calcolatore

Reti neurali, addestramento


➔ Alla rete neurale vengono mostrati una serie di esempi relativi al concetto che si vuole apprendere
➔ Ciascun esempio è costituito da degli input, associati con un output
➔ Si vogliono imparare dei pesi, nella rete neurale, che consentano di costruire una mappatura fra
input e output
➔ La rete neurale apprende dunque una funzione matematica fra input e output numerici

Deep neural networks


➔ Ci sono dei limiti a quello che è possibile fare
con un singolo neurone
➔ Più neuroni, organizzati su più livelli (deep
neural network)
➔ L’architettura è stabilita a priori, solo i pesi
vengono appresi
3. Informatica: Definizione e idee di base
Definizioni di informatica
➔ Dizionario Garzanti [1966]: voce assente
➔ Dizionario Devoto - Oli
◆ [1971] La scienza dei fenomeni relativi alla trasmissione dell’informazione e degli strumenti
cui si serve
◆ [2012] La scienza che si occupa dell’ordinamento, del trattamento, e della trasmissione
dell’informazione per mezzo dell’elaborazione elettronica
➔ Dizionario italiano ragionato (DIR)
◆ [1988] La tecnica del trattamento automatico delle informazioni, realizzata con elaboratori
elettronici capaci di raccogliere i dati in numero altissimo nella propria “memoria”, riporli
quando necessario, e infine elaborarli con la velocità richiesta dalla tecnologia contemporanea

Vocabolario Treccani Online

Il termine deriva dal francese informatique, coniato da P. Dreyfus nel 1962, e composto dalle due
parole: INFORMATion automatIQUE

INFORMATICA UMANISTICA
L'informatica umanistica, o digital humanities o humanities computing, è un campo di studi che
nasce dall'integrazione di procedure computazionali e sistemi multimediali nelle discipline
umanistiche, relativamente in particolare alla rappresentazione dei dati, alla formalizzazione delle
fasi di ricerca e alle tecniche di diffusione dei risultati. Il rapporto tra le due componenti si esprime
non solo a livello applicativo, ovvero nell'impiego di strumenti informatici per rendere più veloci ed
efficienti le ricerche delle discipline umanistiche, ma anche a livello metodologico, ovvero
nell'integrazione di approcci al fine di generare nuovi paradigmi di elaborazione dei dati. I campi
d'applicazione dell'informatica umanistica coinvolgono gli studi di linguistica, filologia, letteratura,
storia, archeologia, storia delle arti figurative, musicologia, interazione uomo-macchina,
biblioteconomia e il settore della didattica.

L’informatica non è (solo) computer!


“Computer science is no more about computers than astronomy is about telescopes.” [Edsger Wybe
Dijkstra (1930-2002)]
➔ Matematica
➔ Logica formale
➔ Algoritmi
➔ Calcolabilità
➔ Complessità computazionale
➔ Teoria dell’informazione e crittografia
L’informazione è… ?
Il trattamento automatico dell’informazione è alla base dell’informatica.
Cerchiamo quindi di definire il concetto di informazione. Per farlo, abbiamo bisogno di introdurre la
nozione di dati.
Dati
I dati sono:
➔ rappresentazioni originarie, oggettive, grezze, cioè non interpretate,
➔ di un fenomeno, osservazione, evento, o fatto,
➔ effettuate attraverso simboli o combinazioni di simboli, o di qualsiasi altra forma espressiva,
➔ legate a un qualsiasi supporto.
ESEMPIO
Termografo: misurazione della temperatura (fenomeno), registrata utilizzando cifre decimali (simboli),
su un rullo di carta (supporto)

Informazione
L’informazione deriva da un dato, o da un insieme di dati, che sono stati sottoposti a un processo di
interpretazione che li ha resi significativi per il destinatario
➔ Leggendo i dati registrati dal termografo, ed interpretandoli come gradi centigradi, si determina
che nelle 24 ore passate la temperatura è stata mediamente troppo elevata
➔ L’informazione è il risultato di una elaborazione dati
➔ Il termine informazione deriva dal latino e significa “dare forma alla mente” e rappresenta il
processo di elaborazione del significato di un dato o di un insieme di dati

Collegando una data informazione con altre informazioni riferite ad un particolare contesto si ottiene
conoscenza, che viene poi confrontata con le conoscenze già acquisite. La conoscenza permette di
interpretare e guidare il nostro operare.
➔ Ad esempio, sulla base di esperienze pregresse, ipotizzo che l’anomalia relativa alla temperatura
sia dovuta probabilmente ad un guasto nell’impianto di climatizzazione e ordino un intervento di
manutenzione

Bit
Nel calcolatore, tutti i dati vengono memorizzati utilizzando sequenze di numeri binari, detti bit
(binary digit), principalmente per ragioni tecniche:
➔ la memorizzazione viene
gestita da opportuni
supporti fisici, ad esempio il
disco rigido o i CD
➔ tutte le elaborazioni
effettuate sui dati operano
quindi su tale
rappresentazione binaria
➔ una stessa sequenza di bit
può essere interpretata, come
vedremo, in diversi modi (come
numeri, caratteri, suoni, immagini, …)

Logica binaria e algebra booleana George Boole (1815 - 1864)


L’algebra booleana è il ramo dell’algebra in cui le variabili
possono assumere solamente due valori (detti di verità):
➔ VERO e FALSO
➔ Solitamente indicati rispettivamente con 1 e 0
Le operazioni booleane manipolano i valori dei bit
➔ NOT: nega (scambia) il valore di verità ricevuto in input
➔ AND: restituisce vero se entrambi i valori di verità ricevuti in input sono veri
➔ OR: restituisce vero se almeno uno dei due valori di verità ricevuti in input è vero
➔ XOR: restituisce vero se esattamente uno dei due valori di verità ricevuti in input è vero
(operatore derivabile)
Altri operatori derivati: NAND, NOR, XNOR

L’algebra booleana gioca un ruolo estremamente importante in informatica perché, ad esempio,


costituisce la base formale per la progettazione dei circuiti utilizzati nei calcolatori.

PORTE LOGICHE

Circuiti logici
➔ A partire dalle porte logiche, è possibile realizzare circuiti logici complessi, che implementano
diverse tipologie di operazioni
➔ Semplificando, possiamo pensare al processore come composto da un insieme di circuiti logici
➔ Proviamo ad implementare l’operazione:
◆ AND(1, OR(x, 0))
◆ x è l’input specificato dall’utente
◆ https://logic.ly/demo/
➔ Allo stesso modo, è possibile realizzare circuiti più complessi che implementano operazioni quali
le somme, le moltiplicazioni, ecc su numeri rappresentati in binario
◆ decimale: 5 + 1 = 6
◆ binario: 101 + 001 = 110

Circuiti logici e memorie


Informatica: Algoritmi
Cos’è un algoritmo
➔ Il concetto di algoritmo è fondamentale in informatica (e non solo)
➔ Un algoritmo è:
◆ una sequenza di passi (operazioni) che definisce come svolgere un determinato
compito
◆ una ricetta, una serie di istruzioni, di compiti e attività che devono essere compiuti
per ottenere il risultato voluto
◆ un metodo per risolvere problemi in maniera automatica, alla base di ogni
programma eseguito/codificato per un esecutore (ad esempio, un calcolatore)

“Begin at the beginning,” the King said, very gravely, “and go on till you come to the end:
then stop.”
― Lewis Carroll, Alice in Wonderland

ORIGINE DEL TERMINE

➔ Le prime nozioni di algoritmi aritmetici (calculus) risalgono al XVII secolo a.C.


➔ La parola algoritmo deriva dal latino medievale algorithmus o algorismus, dal nome del
matematico arabo del IX secolo Abū ‘Abdallāh Muḥammad ibn Mūsā al- Khuwārizmī, così
chiamato perché nativo di Khwarizm, regione dell’Asia Centrale
➔ Il termine algebra deriva dallo stesso matematico
➔ Il concetto di algoritmo nasce quindi nell’ambito della matematica molto prima della
scoperta dei calcolatori (e dell’elettricità)

L’esecutore
➔ Essenziale, nel concetto di algoritmo, è il ruolo dell’esecutore
➔ Si tratta di un “operatore” in grado di svolgere le istruzioni specificate
◆ Ad esempio, un cuoco che legge una ricetta per preparare una torta
◆ Attenzione: l’algoritmo impiega delle operazioni “atomiche”, non interpretabili a
discrezione dell’esecutore. Cambiando l’esecutore, e rieseguendo lo stesso algoritmo, si
otterrà sempre lo stesso risultato
➔ Nel nostro caso, l’esecutore è il calcolatore
Il calcolatore come esecutore
Apparecchio destinato all’elaborazione automatizzata dei dati tramite l’accettazione di istruzioni
per compiere determinate operazioni secondo procedure prestabilite ed espresse in modo formale
(algoritmi) per produrre un risultato (output) come effetto di un inserimento di dati (input)

Si osservi che il calcolatore prevede strumenti per la rappresentazione e memorizzazione


dell’informazione, e per il suo processamento automatico (logica di controllo)

Proprietà degli algoritmi


Un algoritmo è una procedura:
➔ Generale: deve risolvere una classe di problemi e non un singolo problema (es., calcolo del MCD
fra due numeri qualsiasi)
➔ Finita: le istruzioni che la compongono ed il numero di volte che ogni azione deve essere eseguita
devono essere finiti/discreti/numerabili
➔ Completa: deve contemplare tutti i casi possibili che può presentare il problema da risolvere
➔ Non ambigua: ogni istruzione deve essere definita in modo preciso ed univoco, senza alcuna
ambiguità sul significato dell’operazione
➔ Eseguibile: deve esistere una capacità di calcolo in grado di eseguire ogni istruzione in un tempo
finito

Algoritmi e programmi
➔ Al fine di poter essere eseguito da un calcolatore, un algoritmo viene codificato in un programma
➔ Un programma è dunque la rappresentazione di un algoritmo in un formato “compatibile” con il
calcolatore
➔ Nel corso del tempo sono stati sviluppati i più svariati linguaggi di programmazione per
consentire la scrittura di programmi

Compilazione dei programmi


➔ In realtà, un algoritmo codificato in un programma non è ancora pronto per poter essere eseguito
dal calcolatore
➔ Per eseguire un programma, questo deve essere “tradotto” in un altro linguaggio, di più “basso
livello”, composto dalle istruzioni macchina supportate da uno specifico processore, e che
rappresentano i comandi implementati nativamente da un particolare design di processore
➔ Il compilatore è il programma che si occupa di tale traduzione

La Macchina di Turing Alan (1912 - 1954)


➔ La nozione intuitiva di algoritmo che abbiamo visto può essere formalizzata matematicamente
attraverso il concetto di Macchina di Turing (o Macchina Universale)
➔ Strumento teorico largamente impiegato nella teoria della calcolabilità e nello studio della
complessità degli algoritmi
➔ La sua importanza è tale che, per definire in modo formalmente preciso la nozione di algoritmo, si
tende a ricondurla alle elaborazioni effettuabili da una Macchina di Turing

Intuizione
Una MdT è una macchina ideale/astratta che manipola (legge, scrive, cancella) i dati contenuti nelle
caselle di un nastro di lunghezza potenzialmente infinita, seguendo un insieme finito e prefissato di
regole ben formalizzate.
Componenti
Una MdT è composta da:
➔ Un nastro infinito suddiviso in celle (supporto per input, output e memorizzazione dei dati)
➔ Un alfabeto finito
◆ insieme dei simboli che possono comparire nelle celle (un singolo simbolo per casella)
◆ per semplicità, consideriamo l’insieme {0, 1, blank}, dove blank è un simbolo che denota
l’assenza di dati (cella vuota)
➔ Un insieme finito di stati (condizioni) in cui la macchina può trovarsi
◆ definiamo q0 lo stato iniziale, in cui la macchina si trova quando viene fatta partire
◆ definiamo halt lo stato finale: se la macchina raggiunge tale stato, si ferma
➔ Una funzione di transizione che determina il comportamento della macchina (realizza la logica di
controllo)

Funzione di transizione
La funzione di transizione è data da un insieme finito di regole che determinano, per ogni possibile
simbolo X che si trovi al momento sotto la testina e per ogni possibile stato P della macchina:
➔ quale simbolo Y scrivere al posto di X (eventualmente, anche X stesso
o blank)
➔ qual è il nuovo stato Q della macchina (eventualmente, Q=P)
➔ se la testina deve essere spostata a destra oppure a sinistra di una
singola casella
La MdT inizia la sua computazione nello stato iniziale q0, trovando sul nastro già un insieme di dati
iniziali (input). Al termine, la macchina si troverà nello stato finale halt e sul nastro saranno presenti i
dati di output.

MdT è un dispositivo astratto che contiene tutti gli elementi essenziali per poter calcolare il risultato
di una qualsiasi funzione/problema:
➔ Un supporto su cui scrivere: un nastro infinito, diviso in caselle
➔ Un insieme finito di simboli che possono comparire nelle caselle
➔ Un dispositivo di lettura/scrittura: la testina
➔ Un insieme finito di “stati” in cui la macchina si può trovare in ogni istante
➔ Una “tavola di istruzioni” finita, che dice alla macchina cosa fare in base al simbolo che si trova
in quel momento sotto la testina di lettura/scrittura, anche in base a quanto è stato processato nei
passi precedenti (grazie allo stato) La MdT consente di formalizzare l’idea di algoritmo

… perché?
➔ La MdT ha una definizione e un funzionamento estremamente semplici
➔ Nonostante ciò, si può dimostrare che essa è in grado di effettuare tutte le elaborazioni effettuabili
dagli altri “modelli di calcolo” noti all'uomo
◆ Quindi ha la stessa espressività offerta dai computer classici, computer quantistici, ecc
➔ Di conseguenza si è consolidata la convinzione che per ogni problema/funzione calcolabile esista
una MdT in grado di risolverlo (congettura di Church-Turing)
➔ Anche i più complessi computer odierni possono essere ricondotti al modello della MdT
◆ Disclaimer: un calcolo che un odierno computer esegue in una manciata di secondi
potrebbe richiedere un numero enorme di passi se eseguito su un meccanismo dotato di
dispositivi operativi estremamente semplici come quelli della MdT

Funzioni calcolabili e non calcolabili


➔ Le funzioni calcolabili corrispondono alla nozione di algoritmo: una funzione è calcolabile se esiste
un algoritmo (dunque una MdT) che può svolgere il compito della funzione stessa. Ad esempio:
◆ La funzione successore: ℕ → ℕ successore(x) = x + 1
◆ La funzione è_dispari: ℕ → {0,1} è_dispari(x) = 1 se x è un numero dispari, 0 altrimenti

➔ Le funzioni note all’uomo sono tutte calcolabili?


◆ No!
◆ Alcuni problemi sono indecidibili
◆ Il più “famoso” problema indecidibile è l’halting problem
Nella teoria della computabilità , un problema indecidibile è un tipo di problema computazionale che
richiede una risposta sì/no, ma dove non può esserci alcun programma per computer che dia sempre la
risposta corretta; cioè, qualsiasi programma possibile a volte darebbe la risposta sbagliata o
funzionerebbe per sempre senza dare alcuna risposta. Più formalmente, un problema indecidibile è un
problema il cui linguaggio non è un insieme ricorsivo ; vedi l'articolo Linguaggio decidibile . Ci sono
innumerevoli problemi indecidibili, quindi l'elenco che segue è necessariamente incompleto. Sebbene le
lingue indecidibili non siano lingue ricorsive, possono essere sottoinsiemi di Turing Linguaggi riconoscibili:
cioè, tali linguaggi indecidibili possono essere enumerabili ricorsivamente.
Molti, se non la maggior parte, dei problemi indecidibili in matematica possono essere posti come
problemi di parole : determinare quando due stringhe distinte di simboli (che codificano un concetto o un
oggetto matematico) rappresentano o meno lo stesso oggetto.

Halting problem
➔ Determinare, data la descrizione di una MdT arbitraria e un suo input, se tale macchina terminerà
l’esecuzione sull’input dato, o continuerà invece a girare all’infinito
➔ Intuitivamente, si tratta di definire una MdT x che, ricevuta in input la descrizione di un’altra MdT y
e dell’input per y, determina se y termina su tale input
➔ Alan Turing dimostra nel 1936 che un algoritmo generale, in grado di risolvere l’halting problem per
ogni possibile coppia di MdT e relativo input, non può esistere
4.Il calcolatore: Cenni storici
Le origini
➔ La storia dei moderni calcolatori ha radici lontane
➔ L’abaco:
◆ usato sin dal XXI secolo a.C. in Cina e nella Mezzaluna Fertile, e utilizzato in seguito
anche tra i Greci e i Romani
◆ in realtà, è meramente un sistema per la rappresentazione e la memorizzazione
dell’informazione
◆ il controllo dell’esecuzione è demandato ad un operatore umano

La macchina di Anticitera
➔ La macchina di Anticitera è un congegno meccanico datato 23 dicembre 178 a.C.
(studiando la sua calibrazione iniziale)
➔ Rinvenuto nel 1900 tra i resti di un naufragio avvenuto nel secondo quarto del I secolo
a.C. nei pressi dell'isola greca di Cerigotto
➔ Consente il calcolo automatizzato della posizione dei pianeti nel cielo (output) ad ogni
data futura e passata (input), secondo procedure prestabilite ed espresse in modo formale: i
meccanismi e i loro movimenti
➔ È ritenuto il più antico calcolatore meccanico conosciuto

Secoli XVII - XIX


Diversi scienziati progettano macchine per il calcolo:
➔ Pascal – Pascalina (1642), consente di effettuare sottrazioni e addizioni avvalendosi di
una serie di ruote dentate, corrispondenti a unità, divise in 10 settori equivalenti alle cifre del
sistema decimale

➔ Leibniz – Macchina Calcolatrice “Stepped Reckoner” (1694), calcolatrice meccanica a


manovella che consente di svolgere le 4 operazioni

1837 - Macchina Analitica analytical engine


Sviluppata dal matematico, filosofo e scienziato inglese Charles Babbage, effettua
operazioni rappresentate da istruzioni codificate tramite schede perforate passate in input
(come nel telaio Jacquard, 1804)
- primo a introdurre concetto di calcolatore programmabile

◆ Primo prototipo di un computer meccanico sviluppato per eseguire compiti generici,


mai realizzato nella sua interezza
◆ Prevede: in grado di operare in input e output su schede perforate come quelle
impiegate a quel tempo per programmare i telai. Dotato di una memoria che poteva
contenere 1000 numeri di 50 cifre decimali.
◆ Doveva essere alimentata da un motore a vapore ed essere lunga più di 30 metri per 10
metri di profondità
1842 - Ada Lovelace “Ada King”
➔ Augusta Ada Byron, nota come Ada Lovelace (1815–1852), matematica inglese, figlia di
Lord Byron, è considerata la prima programmatrice
➔ Nel 1842, in una pubblicazione che descriveva il funzionamento della macchina analitica
di Babbage, presenta un programma, un algoritmo, per il calcolo dei Numeri di Bernoulli
con la macchina di Babbage
➔ Il programma è il primo algoritmo specificamente pensato per essere calcolato da un
computer. Attenzione, NON il primo algoritmo (con connotazione matematica)

Calcolatori elettromeccanici
➔ Negli anni ‘40 si ha l’avvento dei calcolatori elettromeccanici a relè in Germania con
Konrad Zuse
un relè è un interruttore elettromagnetico la cui apertura e chiusura può essere
controllata tramite un altro circuito elettrico

➔ 1944: IBM Mark I, utilizza 3000 relè e pesa 5 tonnellate; riesce a sommare due numeri di
23 cifre in meno di mezzo secondo
◆ Durante il suo utilizzo nasce anche il termine “bug”

c ELETTRONICI
➔ 1946: ENIAC, primo calcolatore elettronico, che utilizza 10.000 condensatori, 18.000
valvole termoioniche, 70.000 resistenze e pesa 30 tonnellate; effettua 5.000
addizioni/secondo, e ha una memoria di 200 byte

Transistor
➔ 1947: alla Bell Corporation vengono
inventati i transistor, dispositivi più affidabili,
più piccoli, più duraturi e più veloci delle
valvole termoioniche
➔ 1954: primo computer a Transistor
Transistor dispositivi formati da
semiconduttori, che iniziarono a sostituire nei
calcolatori le valvole termoioniche

Hard disk e circuiti integrati


negli anni 60’ i calcolatori divennero più piccoli e veloci economici e affidabili con l’impiego
di circuiti integrati o microchip circuiti elettronici miniaturizzati che hanno portato
all’introduzione del microprocessore.

➔ 1956: l’IBM Model 350 è primo disco rigido commerciale, composto da 50 dischi
metallici larghi 60 cm, e con una capacità di 3.75 megabyte
➔ 1958: viene costruito il primo microchip, o circuito integrato: i circuiti elettrici diventano
microscopici

Computazione batch
➔ Negli anni ‘50 e ‘60, i calcolatori supportano i sistemi informativi aziendali per compiti
batch, ancora basati sull’uso di schede perforate; personale altamente specializzato per
l’esecuzione di job
➔ Per la memorizzazione si utilizzano principalmente i nastri magnetici, che consentono un
accesso sequenziale all’informazione
➔ Grande eterogeneità nell’hardware e nel software

Anni ‘60: computazione interattiva


➔ Negli anni ‘60 si passa dal processamento batch a quello interattivo
➔ Gli utenti dialogano direttamente con il calcolatore attraverso terminali, dotati di monitor
e tastiera
➔ Dato l’alto costo delle macchine, tipicamente un singolo calcolatore è condiviso fra molti
utenti
◆ Non è più possibile eseguire i job in modo sequenziale
◆ Idea: suddividere il tempo di calcolo della macchina in intervalli prefissati (quanti). Ad
ogni intervallo, viene caricato un job ed eseguita una sua parte
◆ Intervalli a rapida rotazione danno l’illusione di un’interazione in tempo reale agli utenti (~
multitasking nei PC a singolo core)

Anni ‘70: microprocessori e Personal Computer


➔ Negli anni ‘70 diventano comuni le memorie ad accesso diretto (hard disk)
➔ 1971: l’Intel 4004 è il primo microprocessore
➔ Nascono i primi Personal Computer (PC)
➔ Vengono proposti i primi sistemi di basi di dati (DBMS)
Anni ‘70: legge di Moore
Elaborata già nel 1965 e tutt’ora non smentita.
Moore osservò che sin dall’invenzione del circuito integrato nel 1958. Il numero di transistor
che possono essere integrati in unico circuito raddoppia approssimativamente ogni 2 anni.

Anni ‘90 e 2000


➔ Diffusione esponenziale dei PC
➔ I dispositivi diventano sempre più piccoli e “portatili”
➔ Notebook, tablet, palmari
➔ Smartphone
Oggi
➔ La presenza dei calcolatori è pervasiva, si pensi agli smartphone e
ai dispositivi IoT
➔ L’informatica ha rivoluzionato diversi ambiti:
◆ Sicurezza e controllo
◆ Ricerca scientifica
◆ Sanità
◆ Comunicazione
◆ Economia
➔ Siamo nel pieno di una inarrestabile trasformazione digitale

5. Il calcolatore: Hardware
Definizioni e intuizione
L'hardware è la parte materiale di un computer, ossia tutte quelle parti elettroniche,
elettriche, meccaniche, magnetiche, ottiche che ne consentono il funzionamento.
La differenza tra hardware e software può essere chiarita con la seguente
metafora musicale:
➔ se l’hardware può essere considerato alla stregua di uno strumento musicale,
➔ il software corrisponde alla partitura,
➔ mentre l’informazione elaborata, ossia l’output, equivale alla musica eseguita

Architettura di Von Neumann


I calcolatori moderni sono basati sull’architettura di Von Neumann (1945), a prescindere
dalle specifiche implementazioni dei componenti
CARATTERISTICHE ESSENZIALI

Componenti principali
➔ Unità centrale di elaborazione (CPU), a sua volta articolata in
◆ Unità di controllo (CU)
◆ Unità aritmetico-logica (ALU)
◆ Registri
➔ Memoria centrale/principale (RAM), che immagazzina dati e istruzioni dei programmi:
ogni operazione estrae dati/istruzioni dalla memoria, li elabora e poi li rimanda alla memoria
➔ Unità di input (es., tastiera e mouse)
➔ Unità di output (es., monitor, memorie di massa/ottiche)
➔ Bus, più canali che collegano tutti i dispositivi fra loro
◆ un po’ come il sistema nervoso negli esseri viventi

Dati e istruzioni in memoria


Possiamo considerare tre livelli principali per quanto riguarda la flessibilità di una macchina /
di un calcolatore:
1. Macchina non programmabile: nasce per svolgere un compito specifico, come le
calcolatrici tradizionali
2. Prime macchine programmabili: sono macchine generali/universali, che possono
svolgere qualsiasi algoritmo; richiedono però una lenta e tediosa riconfigurazione fisica
mediante cavi e interruttori per essere riprogrammati (es., Colossus, ENIAC)
3. Architettura di Von Neumann: nella memoria principale della macchina vengono
memorizzati, al pari dei dati, anche i programmi da eseguire; ne risulta una macchina che
può eseguire compiti diversi in modo estremamente semplice e dinamico (EDSAC, 1949)

La CPU
➔ La CPU esegue i programmi memorizzati nella memoria centrale, prelevandone le
istruzioni, esaminandole, ed eseguendole in sequenza
➔ La CPU ha diversi componenti:
◆ L’unità di controllo (CU) trasferisce dati e istruzioni da/verso la memoria principale
(parole = sequenze di bit, es. 32 o 64)
◆ L’unità aritmetico-logica (ALU) esegue semplici operazioni aritmetiche e
booleane (es., somma o AND)
◆ I registri costituiscono una piccola memoria di lavoro interna alla CPU
estremamente veloce:
● Program Counter (PC): punta alla successiva istruzione che deve essere
recuperata per l’esecuzione dalla memoria
● Instruction Register (IR): memorizza l’istruzione correntemente in esecuzione

Registri e ALU
Il ciclo fetch-decode-execute
La CPU esegue ciascuna istruzione ripetendo una piccola serie di passi (ciclo
fetch-decode-execute), gestiti dalla CU:
1. Recupera l’istruzione da eseguire dalla memoria (puntata dal PC), e la memorizza nell’IR
2. Cambia il PC affinché punti alla successiva istruzione da eseguire
3. Determina il tipo di istruzione recuperata dalla memoria
4. Se l’istruzione necessita di dati contenuti in memoria, determina dove si trovano
5. Recupera i dati, se necessari, e li memorizza nei registri della CPU
6. Esegue l’istruzione tramite l’ALU
7. Ritorna al passo 1

Memoria cache
➔ Le CPU sono da sempre più veloci della memoria
principale
➔ Quando la CPU richiede dei dati in memoria, possono
trascorrere diversi cicli (ciclo ~ tempo necessario per
l’esecuzione di una semplice operazione) prima che tali dati
vengano trasferiti sui registri interni
➔ Soluzione: creare una memoria intermedia, piccola e
molto veloce, la cache (circa 3–5 volte più lenta dei registri

Memoria cache, dimensioni e struttura


➔ Tipicamente la cache è organizzata su più livelli: L1, L2, L3, …
➔ Al crescere del livello, aumenta la capienza, aumenta la “distanza” dal processore, e
diminuisce la velocità
➔ Tipicamente si va da qualche decina di KB per la cache di livello L1, all’ordine dei MB
per la cache di livello L3

Memoria cache, funzionamento


➔ Quali dati portare in memoria cache? Intuitivamente, quelli che più probabilmente
verranno utilizzati dalla CPU
➔ Principio di località: se la CPU ha richiesto dei dati in memoria principale, sul breve
periodo probabilmente utilizzerà dei dati a loro vicini (temporalmente e/o spazialmente)
➔ Quando è necessario un dato, la CPU lo cercherà prima in cache L1; se non disponibile
(cache miss), in cache L2; e così, via, fino eventualmente a richiederlo alla memoria

La CPU Valutazione delle prestazioni


➔ Numero di core (ciascuno contenente i propri registri, CU, ALUs, …): single, dual, quad,
octa
➔ Frequenza di clock, misurata in GHz ≈ miliardi operazioni al secondo: utile per
comparare processori appartenenti alla stessa famiglia (= a parità di architettura, numero di
core, …)
➔ Dimensione (in MB) e numero di cache: L1, L2, L3 In generale:
➔ Intel: Celeron (fascia bassa), i3 (fascia medio-bassa), i5 (fascia media), i7 (fascia
medio-alta), i9 (fascia alta)
➔ AMD: Athlon (fascia bassa), Ryzen 3/5/7/9 (fascia da medio-bassa ad alta)

La memoria
Nel calcolatore sono presenti varie
tipologie di memoria:
➔ Diverse caratteristiche di capacità,
velocità, costo e volatilità
➔ Tutte memorizzano l’informazione
sotto forma di 0/1, sfruttando diverse
tecnologie
➔ Possiamo organizzare le memorie in
uno schema a piramide

La memoria principale
➔ La memoria principale (RAM, Random Access Memory) memorizza dati e istruzioni sui
quali il calcolatore deve lavorare
➔ Dialoga direttamente con la CPU
➔ Capienza limitata (tipicamente 4–16 GB)
➔ Veloce (anche se 10–100 volte più lenta della CPU cache)
➔ Volatile: perde il suo contenuto allo spegnimento della macchina
➔ Può essere implementata con flip-flop (SRAM); oggi tipicamente si sfruttano altre
tecnologie (DRAM, SDRAM)
La memoria secondaria
➔ A prescindere dalla sua grandezza, la memoria principale non sarà mai sufficiente a
contenere tutta l'informazione che un utente medio vuole memorizzare
➔ Inoltre, allo spegnimento, la memoria principale perde le sue informazioni
➔ La memoria secondaria (o di massa) ha come scopo primario la memorizzazione
permanente delle informazioni al suo interno
◆ Capacità più elevata della RAM
◆ Tempo di accesso più elevato della RAM
➔ SSD, HDD, CD, DVD…
Dischi allo stato solido
➔ I dischi allo stato solido (SSD, solid-state disk) sono costituiti da celle di memoria flash
(simili a quelle delle chiavette USB) che memorizzano l'informazione tramite speciali
transistor
➔ A differenza degli hard disk, non hanno parti mobili:
◆ Maggiore resistenza agli urti e alle sollecitazioni
◆ Maggiore velocità di accesso e trasferimento dei dati (0.1 millisecondi, 15 volte più
veloce risp. hard disk)
➔ Svantaggi vs. HDD:
◆ Costo superiore
◆ Durata: una cella tipicamente supporta 100.000 scritture
◆ Dimensioni: 64 GB – 4 TB

Dischi magnetici
➔ Un disco magnetico (o hard disk, HDD, storicamente per distinguerlo dal
floppy disk) è costituito da 1–12 piatti di alluminio ricoperti da materiale magnetizzabile
➔ Inizialmente, i piatti potevano essere 50 cm in diametro; oggi, tipicamente variano dai 3
ai 9 cm
Dischi magnetici, lettura e scrittura
➔ Ciascun disco ruota e sulla sua superficie è posta una testina,
che può muoversi verso l'interno o l'esterno del disco
➔ La testina fluttua ad un'altezza di circa 0.5 micron
➔ Le testine scrivono i dati sulla superficie del disco
modificando la carica del materiale magnetizzabile, tramite
l'applicazione di una corrente positiva o negativa
➔ Similmente, la carica del materiale magnetizzabile induce una
corrente positiva o negativa nella testina; in questo modo si
effettua la lettura
6. Il calcolatore: Software
Il software costituisce la parte logica di un calcolatore
➔ Agisce come tramite tra l’utente e la macchina
➔ Guida l’hardware nell’esecuzione dei suoi compiti
Si divide in due componenti principali:
➔ Il Sistema Operativo
➔ I programmi applicativi (che sfruttano il SO)

Il software per i calcolatori viene classificato in 2 categorie:


1. applicativo —> applicazioni che risolvono o supportano l’utente nella risoluzione di
problemi specifici in determinati ambiti applicativi
2. di base – programmi generali che consentono l’interazione dell’utente con il
calcolatore, gestiscono le risorse in dotazione allo stesso e supportano l’esecuzione
del software applicativo.

Il software applicativo
Insieme dei programmi, non compresi nel sistema operativo, che svolgono attività e
compiti per determinati tipi di lavori, finalizzati a produrre certi risultati, soddisfando
specifiche esigenze dell’utente ()
➔ Elaboratori di testi (MS Word, LibreOffice Writer)
➔ Fogli elettronici (MS Excel, LibreOffice Calc)
➔ Elaboratori di presentazioni (MS PowerPoint, LibreOffice Impress)
➔ Browser web (MS Edge, Google Chrome, Mozilla Firefox, Apple Safari)
➔ Database (MS Access, PostgreSQL, Neo4j)
➔ Posta elettronica (MS Outlook, Mozilla Thunderbird, Apple Mail)
➔ Grafica (Adobe Photoshop, MS Paint, GIMP)
➔ Riproduttori multimediali (Windows Media Player, VLC)
I SW sottolineati sono open source, vale a dire il loro codice è libero per l’uso e
la modifica… impulso anche per l’accesso aperto ai dati e ai prodotti della
ricerca scientifica!

Il sistema operativo
➔ Il sistema operativo è il programma che controlla il funzionamento del calcolatore, ed
è sempre in esecuzione sulla macchina
➔ Fornisce all'utente diversi servizi, come la memorizzazione ed il recupero dei file e
l'esecuzione dei propri programmi, uso delle periferiche, …
➔ Esistono diversi sistemi operativi, (Windows, Solaris, Unix-like come Macintosh e Linux,
…)
➔ Sebbene essi forniscano agli utenti un'esperienza di utilizzo comparabile, le loro
caratteristiche interne li rendono piuttosto diversi l'uno dall'altro per i professionisti del
settore
➔ collezione di programmi di utilizzo generale per l’interazione tra utente e calcolatore,
la gestione delle risorse in dotazione allo stesso calcolatore e il supporto
all’esecuzione del software applicativo

Il sistema operativo
Cenni storici
➔ Le origini dei sistemi operativi sono da rintracciare nei primi sistemi batch
➔ Si trattava di software realizzati per la specifica macchina, a volte dal cliente stesso, e
potevano dunque essere molto diversi gli uni dagli altri (anche dato lo stesso modello di
macchina)
➔ 1956: GM-NAA I/O, sviluppato dalla divisione di ricerca della General Motors per il suo
IBM 704, viene considerato il primo sistema operativo realizzato e utilizzato in ambito
commerciale
➔ In tale contesto, il compito principale di un sistema operativo era semplificare
l’esecuzione e la transizione fra job
➔ Si limitavano principalmente a leggere l'input nell'ordine in cui era loro fornito, eseguire le
istruzioni in esso contenute, e generare l'output finale
➔ Nel tempo, si è assistito ad un progressivo arricchimento delle loro funzionalità

Funzionalità
Il sistema operativo si occupa tipicamente delle seguenti funzioni:
➔ Controllo dell’esecuzione di programmi (processi)
➔ Accesso ai dispositivi di I/O (periferiche)
➔ Archiviazione di dati e programmi nella memoria di massa
➔ Controllo degli accessi e protezione
➔ Monitoraggio e gestione delle risorse
➔ Gestione dei malfunzionamenti
➔ Dialogo con l’utente tramite GUI o CLI

STRUTTURA

Un concetto chiave che determina il grande successo dell’approccio stratificato è quello di


interfaccia
➔ Non è importante come un determinato strato sia realizzato al suo interno, ciò che conta
è che offra agli strati superiori esattamente le funzionalità che essi si aspettano di trovare,
richiamabili per mezzo di un insieme di comandi prefissati (interfaccia)
➔ Ad esempio, quando aprite un documento in Word salvato su disco, vi trovate nello
strato del software applicativo, il più alto/esterno
➔ Word, per aprire un file, invoca il comando open(percorso_file)
➔ Tale comando a sua volta utilizza funzionalità rese disponibili dagli strati inferiori fino ad
arrivare a dialogare con il disco
◆ Ѐ una sorta di catena di strati: SW applicativo > interprete dei comandi > gestore dei file
> gestore delle periferiche
➔ Quindi, non è Word a leggere direttamente il file su disco (dicendogli di spostare la
testina in uno specifico punto del piatto, ecc), bensì il sistema operativo, che offre tale
“servizio” a Word

Vantaggi della struttura stratificata:


➔ Semplicità: trovandosi a sviluppare un SW all’interno di uno strato (ad esempio un
nuovo programma applicativo) possono essere sfruttate tutte le funzionalità offerte dagli
strati sottostanti, senza preoccuparsi di come esse siano implementate
➔ Indipendenza: se viene modificata l’implementazione di uno strato rispettando
l’interfaccia, tale modifica è trasparente agli altri strati
◆ Word utilizzerà sempre il comando open(percorso_file) per aprire un file, a
prescindere dal file system o dalla tipologia di disco o dallo specifico disco utilizzato
➔ Sicurezza: tutte le operazioni svolte e gli accessi alle risorse avvengono in modo
mediato e controllato
◆ Banalmente, se l’utente potesse accedere direttamente alle funzionalità del disco,
potrebbe far compiere dei movimenti dannosi alla testina

Nucleo (Kernel)
➔ Il nucleo (o kernel) gestisce l’esecuzione dei programmi sulla CPU, decidendo quali
avviare, mettere in pausa, bloccare, …
➔ Un programma in esecuzione sulla macchina viene detto processo
➔ Il programma è quindi un insieme statico di istruzioni (come uno spartito musicale)...
➔ … mentre un processo è un'attività dinamica, le cui proprietà cambiano nel tempo
(come un musicista che suona lo spartito)
➔ Un processo, per la sua esecuzione, ha a disposizione un insieme di risorse assegnate
dal sistema operativo (in termini di calcolo e memoria)

La multiprogrammazione
➔ A differenza del musicista, che suona un pezzo musicale alla volta, all'interno del sistema
operativo sono tipicamente in esecuzione molti processi allo stesso tempo

➔ Questo è il concetto di multiprogrammazione (esecuzione multitasking) cioè in grado


di tenere in RAM contemporaneamente più programmi.

➔ Attraverso task manager (in Windows) o monitoraggio attività (in OS X) è possibile avere
un’idea dei processi in esecuzione nel sistema operativo

➔ Il tempo di calcolo fornito dal processore viene suddiviso in brevi intervalli di alcuni
millisecondi, detti quanti
➔ Al termine ogni intervallo, il processore può dedicarsi a un diverso processo (seguendo le
scelte dello scheduler)
➔ L'operazione con cui il processore passa da un processo all'altro viene detta context
switch ed implica il salvataggio dello stato del processo “uscente” ed il ripristino dello stato
del processo “entrante” (es., program counter, instruction register, dati nei registri e in
memoria principale)
➔ Intuitivamente, è come una persona che, mentre sta svolgendo un compito, viene
interrotta da un'altra attività
◆ Prima di dedicarsi alla nuova attività, la persona annota nel dettaglio quanto stava
facendo
◆ Terminata l'attività incombente, essa rilegge gli appunti e riprende il compito
precedente da dove l’aveva lasciato

Gestore della memoria, memoria virtuale

➔ Il gestore della memoria si occupa della memoria principale della macchina,


partizionandola fra i vari processi che la richiedono
➔ A volte, la memoria principale del calcolatore può risultare troppo piccola per caricare i
dati e il codice relativi a una o più applicazioni
◆ Un programma potrebbe aver bisogno, per la sua esecuzione, di 4 GB di memoria,
e potremmo avere a disposizione solamente 2 GB liberi
➔ La memoria virtuale dà l'illusione ad ogni processo di avere a disposizione una
memoria principale a lui dedicata e di grandi dimensioni, facendo uso della memoria di
massa
◆ Ciò evita anche che un processo possa accedere alle parti di memoria allocate ad
altri processi

➔ L'idea è suddividere la memoria necessaria a un’applicazione in porzioni dette pagine,


ciascuna di una dimensione prefissata
➔ Allo stesso modo, anche la memoria principale viene vista come suddivisa in porzioni,
dette frame
➔ A questo punto, le pagine vengono trasferite all’occorrenza dentro e fuori i frame della
memoria principale
➔ Anche qui, come per la memoria cache della CPU, vale il principio di località (spaziale e
temporale)
➔ Usare la memoria virtuale è meno efficiente che basarsi unicamente sulla memoria RAM
“fisica”
◆ In casi estremi può portare al fenomeno del thrashing, dove il calcolatore, invece
che eseguire i programmi, spende la maggior parte del tempo a trasferire pagine
da/verso la memoria principale

Gestore delle periferiche


➔Dagli anni 60’ i sistemi operativi hanno cominciato a inglobare un gestore con lo scopo di
consentire a ogni processo di lavorare su periferiche virtuali
◆ Es. stampante, scanner, monitor, tastiera, mouse, …
➔ In tal modo, ad esempio, Word per stampare una pagina in bianco e nero non deve
preoccuparsi di come comunicare nel dettaglio con una specifica stampante (HP, Epson,
Canon, ecc, e loro relativi modelli), ma può farlo sfruttando un'interfaccia uniforme
◆ Es. stampa(colore=b/n, qualità=alta, carta=A4, …)
➔ Dunque, quando stampate da Word, non è Word ad utilizzare direttamente la stampante,
ma il sistema operativo attraverso il gestore delle periferiche

DRIVER→ fornisce al sistema operativo tutti i dettagli operativi per gestire una periferica

➔ I driver, forniti dai produttori delle periferiche fisiche stesse, realizzano le funzionalità
dell’interfaccia “virtuale”, implementando le funzionalità che il sistema operativo si aspetta
di poter svolgere sulle periferiche di un determinato tipo
➔ Un driver è quindi una sorta di “traduttore”, che converte un comando generico, es.
stampa(...), nello specifico formato atteso dalla vostra stampante (che può variare molto tra
una stampante e l’altra)
◆ Permette di astrarre dalle caratteristiche tecniche dei singoli dispositivi
Driver scritti male sono la prima causa di instabilità e malfunzionamenti del calcolatore…

Il file system, File e cartelle


➔ La memorizzazione e la gestione dei file è delegata al file
system (FS), componente del sistema operativo che
fornisce i meccanismi necessari per l’accesso e
l’archiviazione delle informazioni in memoria secondaria
➔ Le informazioni sono memorizzate sotto forma di file,
ovvero un contenitore logico di dati (byte) correlati, che può
essere letto o scritto
➔ Il contenuto di un file è normalmente conforme ad un
particolare formato (identificato da un’estensione), e per
ciascun formato esistono una o più applicazioni che sono in
grado di interpretarne e/o modificarne il contenuto
➔ I file sono organizzati in una struttura ad albero grazie alle
directory (cartelle)
➔ Il FS è dunque un’astrazione attraverso la quale si può
gestire la memorizzazione dell’informazione, in modo da rendere uniforme il suo
trattamento, a prescindere dal dispositivo in uso (HDD, CD-ROM, …)

➔ Oltre ai dati in essi contenuti, i file possiedono anche una serie di metadati
(dati sui dati), che li descrivono

OPERAZIONI
➔ Le operazioni tipicamente supportate dal file system includono:
◆ Creazione, modifica e cancellazione di un file o di una cartella
◆ Cambio del nome di un file o di una cartella
◆ Spostamento e copia di un file o di una cartella
◆ Modifica dei metadati di un file o di una cartella
➔ A ciascun file nel file system è associato un percorso che lo identifica univocamente
all’interno della struttura ad albero
◆ cammino che si deve compiere per raggiungere un determinato file a partire dalla
radice dell'albero
◆ ecco perché è possibile avere due file con lo stesso nome in cartelle diverse, ma
non all’interno della stessa cartella
Interfaccia utente interfaccia uomo/macchina

Attraverso l’interfaccia utente, il sistema operativo acquisisce i dati e i comandi immessi in


input dall’utente e restituisce in output i risultati dell’elaborazione, consentendo
un’interazione reciproca
➔ GUI, Graphical User Interface
➔ CLI, Command Line Interface

AVVIO DELLA MACCHINA


7. RAPPRESENTAZIONE DELL’INFORMAZIONE
➔ In questa parte, studieremo come è possibile rappresentare diversi tipi di informazione
all’interno del calcolatore
➔ Osservazione fondamentale
◆ L’informazione nel mondo reale (analogico) utilizza un insieme infinito di variabili e
valori possibili
◆ Come vedremo, non è possibile fare ciò all’interno del calcolatore, data la natura
finita delle risorse a disposizione
◆ Il processo di digitalizzazione consente di passare da dati analogici a digitali (con
una perdita accettabile di informazione)

➔ Ricordiamo sin d’ora che una specifica sequenza binaria, ad esempio


1001011, non significa nulla di per sé:
◆ interpretata come una lettera ASCII, potrebbe essere “K”
◆ interpretata come un numero decimale, è “75”

Codifica di testi
➔ Idea: associare un diverso pattern di bit a ciascun carattere
◆ Il testo può così essere rappresentato dalla concatenazione dei pattern di bit associati
ai caratteri
➔ Problema: quali pattern associare ai diversi caratteri?
◆ Negli anni '40 e '50, sistemi diversi utilizzavano codifiche diverse
◆ Difficoltà riguardanti l’interoperabilità e lo scambio dei dati
➔ Soluzione: standardizzazione
L’ASCII (american standard Code for information interchange) è una codifica per la quale
7
ogni carattere è rappresentato da una sequenza di 7 bit (2 = 128 caratteri), proposto
inizialmente da IBM e adottato da ISO.
L’ASCII esteso è un ‘evoluzione dell’ascii originario, che grazie all’impiego di codici a un
byte consente di raddoppiare da 128 a 256 il numero di caratteri e quindi di rappresentare
anche altre lettere oltre che nelle diverse regioni del mondo.

Secondi 128 caratteri dipendenti dalle lingue che si vogliono supportare:


◆ ISO 8859-1 Latin 1: per le lingue dell'Europa occidentale
◆ ISO 8859-2: per le lingue dell'Europa orientale
◆ ISO 8859-5: per l'alfabeto Cirillico

➔ Problemi:
◆ 128 (o 256) caratteri sono insufficienti per certe lingue dell'Europa orientale o dell'Asia
◆ Non è possibile creare documenti che contengono caratteri provenienti da estensioni
ASCII diverse
◆ Queste sono grosse limitazioni, specialmente dall’avvento di Internet

UNICODE—> è una codifica dei caratteri gestita e diffusa da Unicode Consortium, un


consorzio internazionale di aziende produttrici di HW e SW finalizzato a favorire
l’interoperabilità, capacità dei sistemi informatici di cooperare e di scambiare informazioni
o servizi in modo affidabile ed efficiente.

Sviluppo dello standard Unicode nel 1991


➔ Unicode Transformation Formats (UTFs): principalmente UTF-8, 1.112.064 caratteri
rappresentabili
➔ Retrocompatibile con ASCII originale
➔ Caratteristiche
◆ Universale: abbastanza caratteri rappresentabili per tutte le lingue
● Non solo lettere e numeri, ma anche emoticon e piccole grafiche, es. ideogrammi ツ
◆ Non ambiguo: ad ogni codice corrisponde sempre un solo carattere
➔ Esistono anche UTF-16 e UTF-32, meno diffusi

CODIFICA FORMATI ED ESTENSIONI

➔ I singoli caratteri sono rappresentati come sequenze binarie, seguendo un determinato


standard (ASCII, Latin 1, UTF-8, …)
◆ Questa è la codifica
➔ Oltre ai caratteri, un file di testo tipicamente presenta altre informazioni
◆ Dimensioni e tipologia dei font, colori, immagini, …
➔ Per rendere tali informazioni comprensibili, è necessario stabilire dell opportune
convenzioni (che poi diventano standard “de facto”)
➔ Nascita di diversi formati, identificati dalle relative estensioni:
◆ .txt (testo semplice)
◆ .rtf (Rich Text Format)
◆ .doc, .docx (Microsoft Word)
◆ .odt (Open Document Text)
➔ Un formato di file di testo tipicamente permette di specificare anche la codifica utilizzata
per i caratteri (altrimenti, viene inferita)

RTF

Codifica di numeri
➔ Abbiamo visto come codificare caratteri, i quali includono anche caratteri numerici, es.
‘1’
➔ Tale modalità di codifica è utile per rappresentare l’informazione in modo da renderla
fruibile dagli esseri umani
➔ Tuttavia, considerare i numeri come caratteri e codificarli utilizzando ad esempio codici
ASCII sarebbe inefficiente (21 bit per codificare ‘375’)
➔ Sarebbe anche scomodo svolgere delle operazioni matematiche sui numeri rappresentati
così… un po’ come usare i numeri romani: X + XL - III = XLVII
➔ Se l'informazione è prettamente numerica, può essere utilizzato un approccio basato
sulla notazione posizionale: 10 + 40 - 3 = 47

CODIFICA DI IMMAGINI
CODIFICA DI SUONI
CODIFICA DI VIDEO

➔ Il processo di digitalizzazione comporta sempre una perdita di informazione rispetto al


mondo reale, a causa della natura finita delle risorse a disposizione del calcolatore
➔ Per il testo, le immagini, l’audio e i video occorre distinguere fra codifica e formato del
file
◆ La codifica rappresenta la “strategia” di rappresentazione dei dati in digitale (es.,
un’immagine rappresentata con una matrice RGBA 32 bit)
◆ Il formato identifica un protocollo che è stato concordato (de jure o de facto) per
organizzare i dati, in modo da renderli leggibili/scrivibili da un programma (es., formato
Bitmap, estensione .bmp)
➔ Oltre alla naturale perdita di informazione che avviene in fase di codifica, i formati
possono prevedere diverse tecniche di compressione (es., JPEG)

Multimedialità e multimodalità
➔ Ad esempio, la presentazione corrente è multimediale, in quanto utilizza
contemporaneamente testo e immagini
➔ Se la presentazione coinvolge più sensi per la trasmissione dell’informazione, allora è
anche multimodale
◆ Es., stimolo visivo da testo e immagini + stimolo uditivo dalla musica o effetti sonori
◆ Multimodale era la nostra spiegazione della codifica del suono fatta attraverso Audacity

9. Reti di calcolatori e Internet


➔ La necessità di condividere risorse e scambiare informazioni fra calcolatori ha portato
alla nascita di sistemi per la loro l'interconnessione, detti reti
➔ In questa parte del corso parleremo di come i calcolatori sono connessi fra loro, di come
vengono scambiate le informazioni, delle applicazioni delle reti (fra le quali il World Wide
Web), e dei relativi problemi di sicurezza

Classificazione per dimensione


➔ PAN, Personal Area Network: utilizzata per comunicazioni a breve distanza, ad
esempio fra smartphone e cuffie Bluetooth. interconnette un personal computer con
dispositivi periferici in raggio d’azione di qualche metro.
➔ LAN, Local Area Network: composta da un insieme di calcolatori e altri dispositivi
connessi all'interno di un singolo edificio, o un insieme di edifici (es., campus universitario)
➔ MAN, Metropolitan Area Network: rete di dimensioni intermedie, che copre un'intera
organizzazione o comunità ma limitata alla scala urbana
➔ WAN, Wide Area Network: connette dispositivi posti a grande distanza, in diverse città,
stati, o continenti si estende per una grande area geografica
➔ GAN global area network : che si estende a livello globale

Classificazione per topologia


Le connessioni tra dispositivi possono essere realizzate in diversi modi. Le strategie più
diffuse sono:
➔ Bus: dispositivi direttamente
connessi fra loro attraverso una
linea di comunicazione (es.,
Ethernet)
➔ Stella: ciascun dispositivo
dialoga con gli altri per mezzo di
un dispositivo centrale, che
smista e inoltra i messaggi (es.,
access point Wi-Fi)

Protocolli di comunicazione
➔ l ruolo dei protocolli è quello di disciplinare le comunicazioni attraverso una rete
➔ Senza protocolli, più dispositivi potrebbero cercare di comunicare nello stesso momento,
provocando interferenze, o non rimanendo in ascolto dei messaggi provenienti dagli altri
(es., CSMA/CD per le reti Ethernet)

Combinazione di reti
Reti omogenee
A volte è necessario connettere fra loro più reti al fine di creare un sistema di comunicazione
più esteso. Ciò può essere fatto sfruttando diversi dispositivi:
➔ un ripetitore inoltra i messaggi fra due diversi bus, eventualmente amplificando i segnali
➔ un bridge connette due diversi bus, similmente ad un ripetitore.
Tuttavia, inoltra da un bus all'altro solo i messaggi scambiati tra macchine che si trovano
sulle due reti opposte. In questo modo, le comunicazioni che avvengono fra le macchine di
una stessa rete non interferiscono con quelle fra le macchine dell'altra rete
➔ uno switch è un bridge che connette fra loro più di due bus
➔ Attraverso il collegamento delle reti omogenee, si ottiene una nuova rete più estesa, della
stessa tipologia delle reti componenti (es., collegamento di più reti Ethernet fra loro tramite
uno switch)
➔ Similmente a come accade collegando fra loro, all’interno di una casa, gli impianti
idraulici di bagno, cucina, lavanderia…

Reti eterogenee
➔ Spesso, le reti da connettere hanno caratteristiche incompatibili (es., diverse topologie,
diversi protocolli di comunicazione)
➔ In tal caso, si rendono necessarie strategie di connessione più complesse
➔ Si viene a creare una rete di reti, in cui le reti originali mantengono la loro individualità
➔ Tale rete di reti prende il nome di internet (da non confondere con Internet, con la “I”
maiuscola)
➔ Per fare un parallelismo, pensiamo al sistema viario
➔ Un grande campus universitario potrebbe avere una sua rete viaria interna, indipendente
da quella stradale esterna, e potrebbe essere collegata a quest’ultima tramite degli ingressi
(gateway)
➔ La stessa cosa potrebbe avvenire per una
sede di una grande azienda
➔ Le due reti viarie “interne”, che mantengono
la loro identità, sono collegate fra loro tramite
la rete stradale (rete internet)
Router
➔ La connessione tra reti viene gestita da dispositivi detti router
➔ Compito dei router è gestire l'inoltro di messaggi fra le reti
➔ Si consideri il caso in cui un dispositivo A posto in una rete WiFi voglia inviare un
messaggio ad un dispositivo B posto in una rete Ethernet, connesse in una rete internet:
a. A invia il messaggio al proprio access point WiFi
b. L'access point invia il messaggio al router associato (a meno che i due
dispositivi corrispondano)
c. Il router inoltra il messaggio ad un dispositivo router sulla rete Ethernet
di destinazione
d. Tale dispositivo diffonde il messaggio sul bus
e. B riceve il messaggio dal bus

Indirizzi locali e indirizzi globali


➔ L'inoltro dei messaggi si basa su un sistema di indirizzamento globale
➔ Ad ogni dispositivo connesso alla rete internet viene assegnato un indirizzo univoco, che
lo contraddistingue
➔ I router fanno uso di opportune tabelle di instradamento per determinare la direzione
verso cui inviare i vari messaggi
➔ Un po’ come succede inviando tramite corriere, dagli Stati Uniti, un pacco a via Dante
18, Cavalicco fraz. di Tavagnacco (UD), Italia

Internet
➔ Internet (con la “I” maiuscola) è il più famoso esempio di rete internet
➔ Rete globale che utilizza il protocollo TCP/IP per la gestione delle comunicazioni fra i
dispositivi
➔ Le radici si hanno negli anni '60, in diversi progetti DARPA (U.S. Defense Advanced
Research Projects Agency)
➔ Precursore di Internet è ARPANET, utilizzato negli anni '70 per connettere organizzazioni
militari e accademiche

Architettura di Internet
➔ Le reti che compongono Internet sono gestite da organizzazioni dette Internet Service
Provider (ISP)
➔ Le reti gestite dagli ISP possono essere classificate in una gerarchia, a seconda del ruolo
che giocano nella struttura generale di Internet:
◆ Al vertice della gerarchia si trovano i tier-1 ISP, che gestiscono WAN ad elevata capacità
e velocità, che si estendono su scala internazionale/intercontinentale (backbone)
◆ Alle reti dei tier-1 ISP si connettono le reti dei tier-2 ISP, che sono su scala regionale e
hanno capacità inferiori
◆ L'accesso alle reti degli ISP dei primi due livelli, che costituiscono il cuore di Internet,
viene fornito da un intermediario detto tier-3 ISP.
Quest'ultimo gestisce una propria rete indipendente, fornendo l'accesso ai clienti (es., TIM,
Fastweb, …)
Gerarchia di ISP

Protocolli TCP/IP
➔ Il funzionamento della rete Internet si basa sull’utilizzo della suite di protocolli
TCP/IP, che costituisce uno standard de facto sin dagli anni ‘70
➔ La suite ha due componenti principali:
◆ TCP, Transmission Control Protocol: gestisce il flusso dell’informazione a
pacchetto fra due dispositivi connessi alla rete
◆ IP, Internet Protocol: fornisce il sistema di indirizzamento dei dispositivi
connessi alla rete
➔ Sfruttando le funzionalità offerte dalla suite TCP/IP, sono state sviluppate diverse
applicazioni Internet, ciascuna basata su altri, specifici protocolli
◆ Posta elettronica: SMTP, POP3, IMAP
◆ Comunicazioni telefoniche: VoIP (Voice over IP)
◆ Streaming multimediali: RTSP
◆ Trasferimento file: FTP
◆ World Wide Web: HTTP

Indirizzi IP
➔ Ciascun dispositivo connesso alla rete Internet è identificato da un indirizzo univoco,
detto IP address (Internet Protocol address)
➔ Originariamente, un indirizzo IP era costituito da un pattern di 32 bit (IPv4, es.
255.110.145.0), che consente di identificare circa 4 miliardi di dispositivi
◆ Indirizzi da 0.0.0.0 a 255.255.255.255
➔ Ad oggi è in corso il (difficoltoso) passaggio verso indirizzi IP a 128 bit (IPv6), per
consentire uno spazio di indirizzamento più ampio
➔ Blocchi contigui di indirizzi IP sono assegnati agli ISP dall'ICANN (Internet Corporation
for Assigned Names and Numbers), una compagnia non-profit nata per coordinare l'uso di
Internet
➔ Gli ISP poi gestiscono l’assegnamento degli IP ai dispositivi dei propri clienti, in modo
statico o dinamico

Indirizzi mnemonici
➔ Utilizzare direttamente gli indirizzi IP sarebbe scomodo per gli esseri umani
➔ Internet dispone di un sistema di indirizzamento alternativo in cui i dispositivi sono
identificati da nomi mnemonici, es. uniud.it
➔ Tale sistema di indirizzamento è basato sul concetto di dominio, che può essere
considerato come una “regione” di Internet gestita da una singola autorità, quale
un'università, un'azienda, o un'agenzia governativa
➔ I domini vengono registrati presso l'ICANN da appositi enti detti registrar
➔ All'atto della registrazione, a un dominio viene assegnato un nome, univoco all'interno di
Internet
➔ Una volta registrato un nome di dominio, la relativa organizzazione può estenderlo
liberamente per ottenere ulteriori identificatori univoci al suo interno, che si riferiscono a
sottodomini (dimi.uniud.it) o macchine/dispositivi specifici all’interno di essi, ad esempio
datasciencelab.dimi.uniud.it

Passaggio da indirizzo IP a mnemonico


➔ Nonostante gli indirizzi mnemonici siano comodi per gli esseri umani, i dispositivi
connessi a Internet dialogano fra loro sfruttando gli indirizzi IP
➔ È quindi necessario un sistema per operare la conversione fra i due sistemi di
indirizzamento
➔ Tale conversione è effettuata attraverso l'uso di diversi server, detti name server, che
possono essere intuitivamente considerati come degli elenchi telefonici
➔ L'insieme di tali server prende il nome di Domain Name System (DNS)
➔ Il processo di utilizzare il servizio DNS per effettuare la traduzione fra i due sistemi di
indirizzamento viene detto DNS lookup

Transmission Control Protocol, TCP


➔ Si occupa di controllo della trasmissione, ovvero di rendere affidabile la comunicazione
dati in rete tra mittente e destinatario
➔ Il funzionamento è simile a quello di una spedizione postale fra due aziende
a. Bob dell’azienda A vuole inviare ad Alice dell’azienda B un insieme documenti, e li
consegna quindi al suo segretario
b. Il segretario di Bob impacchetta i documenti in più plichi/pacchetti, e su ogni plico
appone un’etichetta con la destinazione, il numero del plico ed il numero totale di plichi che
verranno spediti (es., plico 3/20). Li affida poi ad un corriere espresso che utilizza la rete
viaria
c. A questo punto i pacchi viaggiano indipendentemente su camion diversi all’interno della
rete viaria, fino a giungere all’azienda B
d. All’azienda B, la segretaria di Alice verifica quanto ricevuto, mette in ordine i plichi, li
apre, e riassembla in modo opportuno l’insieme di documenti, eventualmente chiedendo
nuovamente i plichi mancanti
e. Al termine del processo, Alice riceve i documenti dalla segretaria

Pila di protocolli di rete


Il World Wide Web
➔ Il World Wide Web è un'applicazione software che consente lo scambio di documenti e
altre risorse attraverso la rete Internet
➔ Trae origine dal lavoro del ricercatore Tim Berners-Lee al CERN di Ginevra, che intuì il
potenziale rappresentato dagli ipertesti, vale a dire, documenti di testo collegati fra loro da
link, a costituire una rete
➔ La prima implementazione ufficiale del World Wide Web risale al Dicembre 1990, e
conteneva la definizione di:
◆ un formato per la definizione di ipertesti (HTML), le “pagine web”
◆ un protocollo per trasferire ipertesti (HTTP) attraverso Internet
➔ In seguito, si ha l'estensione degli ipertesti agli ipermedia, vale a dire, documenti
contenenti anche audio, video, immagini

Paradigma Client/Server
➔ La maggior parte delle applicazioni Internet (e dei loro relativi protocolli) si basa sul
paradigma di comunicazione Client/Server, che prevede due entità
◆ L’entità Client che richiede il servizio: un qualsiasi programma che invia una richiesta e
aspetta una risposta
◆ L’entità Server che offre il servizio: macchina sempre in esecuzione, in ascolto di
richieste da parte dei client
➔ Si osservi che uno
stesso dispositivo
può ricoprire entrambi
i ruoli

➔ I software che
consentono agli utenti
di accedere agli
ipertesti (“pagine Web”) disponibili su Internet ricadono in due categorie principali
◆ Browser: risiede sulla macchina dell’utente e si occupa di recuperare il materiale da
esso richiesto, presentandolo in maniera ordinata e fruibile (es., Chrome, Edge, Firefox,
Safari)
◆ Web server: risiede su una macchina contenente ipertesti. Il suo compito è fornire
l’accesso a tali dati agli utenti che ne fanno richiesta

URL
➔ Al fine di poter
localizzare e
recuperare
documenti sul Web,
a ciascuno di essi
viene assegnato un
indirizzo univoco,
detto Uniform Resource Locator (URL)
➔ Un URL contiene tutta l'informazione di cui un browser necessita per contattare il
server e richiedere il documento desiderato (es., un ipertesto da visualizzare)

A volte, un URL consiste solamente della parte relativa al protocollo e al nome mnemonico
di una macchina, senza quelle relative al percorso e al
file da recuperare
➔ Ad esempio, http://www.google.com
➔ In tal caso, il web server installato sulla macchina restituisce una pagina
(documento) di default, tipicamente chiamata home page
➔ Infine, anche la parte relativa al protocollo può essere tipicamente ignorata.
In tal caso, il browser assume, di default, “http://”
➔ Ad esempio, www.google.com

WORLD WIDE WEB


➔ Obiettivo: creare uno spazio globale dell’informazione mettendo in connessione
documenti altrimenti scollegati fra loro (una sorta di biblioteca universale)
➔ Etichettando ogni frammento di informazione in questo spazio con un indirizzo, si ottiene
una rete di informazioni
➔ La diversità dei vari sistemi informatici è risolta tramite l’impiego di poche, semplici
regole comuni che permettono ai computer di dialogare tra loro
➔ Centrale è il modello dell’ipertesto (le “pagine web”), un formato di informazione non
sequenziale in cui sono presenti collegamenti per accedere a ulteriori informazioni o ad altri
documenti
➔ Si ricordi sempre: internet ≠ Internet ≠ World Wide Web

10. Cenni di sicurezza informatica


➔ Si stima che, una volta connesso a Internet, un dispositivo sarà soggetto ad almeno un
attacco nei primi 20 minuti
➔ La maggior parte degli attacchi si concretizza nel tentativo di installare codice malevolo
(malware) sui dispositivi
➔ Questo può essere di diversi tipi: virus, worm, trojan, spyware, …
Virus
➔ Un virus è un software che infetta un dispositivo inserendosi all'interno di programmi che
risiedono nella macchina bersaglio
➔ Quando l'utente avvia il programma, attiva inconsapevolmente anche il virus, che è
quindi in grado di replicarsi e svolgere operazioni più o meno distruttive sull'hardware o sul
software del sistema
➔ Un virus necessita quindi dell'intervento umano per la sua attivazione e diffusione, che
avviene tipicamente distribuendo copie del codice infetto ad utenti inconsapevoli
➔ Take home message: non aprite mai allegati e-mail provenienti da mittenti sconosciuti e
sospetti

Worm
➔ I worm, a differenza dei virus, non necessitano di un programma ospitante per operare:
sono a sé stanti
➔ Una volta che un worm è entrato nel sistema operativo, es. attraverso una connessione
di rete o un file scaricato, è in grado di copiarsi più volte e di diffondersi attraverso la
connessione di rete, senza intervento dell'utente
➔ Poiché ogni copia successiva di un worm può a sua volta auto-replicarsi, le infezioni si
possono diffondere molto rapidamente tra le reti
➔ Il risultato è un degrado delle prestazioni delle macchine infette, nonché un sovraccarico
dell'intera rete
➔ Take home message: non collegatevi a siti non attendibili

Worm Curiosità
➔ L'idea di un programma auto-replicante fu teorizzata per la prima volta da John von
Neumann nel 1949
➔ Il primo codice, sperimentale, in grado di auto-replicarsi e diffondersi si ebbe solo nel
1971 con Creeper, considerato il primo worm della storia, scritto per diffondersi su
ARPANET (primo antivirus Reaper, nel 1972)
➔ Morris viene considerato il primo worm dell'epoca moderna (1988), distribuito via Internet
➔ Creato da uno studente della Cornell University, USA, e poi diffuso dallo stesso tramite i
laboratori del MIT
➔ Inconsapevolmente, scatena un attacco che porta alla congestione e alla paralisi di una
buona parte di Internet, causando danni per milioni di dollari
➔ Robert Tappan Morris diventa la prima persona ad essere condannata negli USA per
pirateria informatica
➔ Nel 2006, diventa professore al MIT
Trojan
➔ Un trojan è un programma nocivo che penetra in un sistema camuffandosi da un
programma desiderato dall'utente, come un videogame
➔ Una volta nel sistema, il trojan può rimanere dormiente fino al verificarsi di una
condizione di attivazione, ad es. basata su una determinata data e ora
➔ Una volta attivato, il trojan inizia a svolgere attività dannose, come aprire le aprire le porte
ad altre infezioni
➔ A differenza dei virus e dei worm, i trojan non sono in grado di replicarsi
➔ Take home message: il sistema potrebbe essere infetto anche in assenza di sintomi;
eseguite regolari scansioni antivirus
Spyware
➔ Un'altra famiglia di software nocivi è data dagli spyware
➔ Obiettivo degli spyware è collezionare informazioni riguardanti i sistemi infettati
➔ Ad esempio, possono cercare di recuperare dati relativi all'utente del sistema con il fine
di delinearne un profilo di interesse commerciale
➔ In altri casi, l'attacco è più subdolo, come la registrazione dei pulsanti digitati dall'utente
sulla tastiera, con l'obiettivo di carpire password e numeri di carte di credito
➔ Infine, le informazioni raccolte vengono inviate all'attaccante
➔ Take home message: esistono più software antimalware; alcuni sono specializzati nella
rimozione di virus/worm/trojan, altri di spyware
Phishing
➔ Il termine phishing non si riferisce ad un software malevolo, ma ad una tecnica utilizzata
per ingannare l'utente affinché esso comunichi spontaneamente informazioni riservate
all'attaccante
➔ Un esempio è dato da email accuratamente camuffate in modo da sembrare a prima
vista lecite, ed in grado di superare i controlli anti-spam
➔ Ad esempio, un utente potrebbe ricevere una falsa email da parte di un servizio di
streaming al quale è abbonato, in cui viene invitato ad accedere al proprio account per
aggiornare determinate impostazioni. Cliccando su un link, l'utente viene invece indirizzato
su un sito malevolo
➔ Take home message: verificate sempre il mittente delle e-mail; se in dubbio, esaminate
gli indirizzi dei collegamenti riportati in esse prima di cliccarli

Denial of Service (DoS)


➔ Un attacco DoS mira a sovraccaricare una macchina o un'intera rete tramite l'invio di un
elevato volume di messaggi non desiderati
➔ In numero sufficiente, tali messaggi possono portare ad un rallentamento o ad un totale
blocco dei servizi forniti dalla macchina o rete oggetto dell'attacco
➔ La fase di attacco DoS è in genere preceduta dall'infezione di diversi sistemi con
software dormienti i quali, risvegliati nello stesso istante, iniziano a sommergere di
messaggi l'obiettivo
➔ L'insieme di dispositivi (spesso ignari) che prendono parte all'attacco viene detto botnet

Protezioni e cure
Firewall
➔ Una tecnica primaria di prevenzione degli attacchi è filtrare il traffico che attraversa un
determinato punto della rete, utilizzando un software detto firewall
➔ Ad es., un firewall potrebbe essere installato all'interno di un gateway che connette una
rete aziendale alla rete Internet
➔ Compito del firewall è bloccare i messaggi uscenti destinati a specifici indirizzi, o i
messaggi entranti provenienti da origini non affidabili
Filtri antispam
➔ I filtri antispam possono essere considerati come dei firewall specializzati, il cui compito
è distinguere le e-mail desiderate/lecite da quelle indesiderate/fraudolente
➔ Le tecniche utilizzate dai filtri antispam possono essere molto sofisticate e basate, ad
esempio, sull'analisi del testo e su strumenti di apprendimento
automatico (machine learning)
➔ I filtri non sono infallibili: a volte, alcuni messaggi di tipo spam possono essere
scambiati per leciti, e viceversa
➔ Take home message: se non trovate un messaggio, potrebbe essere finito nella cartella
“posta indesiderata”; viceversa, non è detto che tutti i messaggi non filtrati siano attendibili
Antimalware
➔ Software progettati per rilevare ed eliminare i software dannosi, proteggendo l'utente
➔ In commercio esistono moltissimi software del genere, ad esempio:
◆ Gratuiti: Avira, AVG, Avast, Windows Defender, Malwarebytes
◆ A pagamento: Kaspersky, McAfee
➔ Alcuni di essi svolgono una funzione specifica, ad esempio, gli antispyware (es.,
Superantispyware, Spybot), ormai poco usati
➔ Take home message: ogni giorno nascono nuove minacce. Un software antimalware, per
essere efficace, deve essere mantenuto aggiornato
HTTP vs HTTPS
➔ HTTP è il protocollo standard/originario di comunicazione tra un client ed un server Web
per il trasferimento di ipertesti
➔ La comunicazione tramite HTTP non è sicura: i dati sono trasferiti fra client e server in
chiaro, chiunque può intercettarli e leggerli (esempio)
➔ HTTPS è la “variante sicura” del protocollo HTTP: tutti i dati trasferiti fra client e server
sono cifrati, dunque, anche intercettandoli, non risultano leggibili a terze parti. Nel tempo ha
quasi del tutto sostituito HTTP
➔ Take home message: non inserite mai dati sensibili, numeri di carte di credito o
password se la comunicazione sta avvenendo tramite HTTP

11. L’ipertesto, HTML e CSS


➔ Un documento ipertestuale è simile ad un normale file di testo, in quanto contiene
caratteri codificati utilizzando ad esempio ASCII o Unicode
➔ Oltre al testo, un documento ipertestuale contiene anche dei simboli speciali, detti tag,
che descrivono come esso dovrebbe essere visualizzato a schermo e quali risorse
multimediali dovrebbero accompagnare il testo
○ Un po’ come abbiamo visto succedere nei file .rtf
➔ Intuitivamente, è un processo simile al fornire ad un tipografo un testo e delle immagini,
annotati con le indicazioni grafiche su come stamparli
➔ Oltre alle informazioni di formattazione, un documento ipertestuale specifica anche quali
parti del contenuto (a loro volta testo, immagini, video, ...) sono collegamenti cliccabili che
portano ad altri documenti
○ Dunque, un ipertesto è un testo non lineare

➔ Àncora: un’area del contenuto di un documento che è la fonte/destinazione di un link


➔ Browser: un programma che permette di leggere gli ipertesti, consentendo di
visualizzare il contenuto di documenti e di navigare da un documento all’altro (anche detto
client web)
➔ Ipermedia: ipertesto multimediale. Ad esempio, oltre al testo, immagini,suoni e video
➔ Ipertesto: testo non vincolato ad essere lineare
➔ Link: la relazione fra due àncore
➔ Navigazione: il processi di muoversi da un documento all’altro in una rete ipertestuale
➔ Rete: un insieme di nodi interconnessi; termine spesso esteso a tutti i nodi che sono
interconnessi
Come vedremo, tramite il linguaggio HTML (Hyper Text Markup Language) ed il linguaggio
CSS (Cascading Style Sheets) è possibile aggiungere informazioni rispettivamente di
strutturazione e formattazione al contenuto presente in una pagina web

HTML
➔ L'HTML (HyperText Markup Language) è stato sviluppato nei primissimi anni novanta da
Tim Berners-Lee al CERN di Ginevra, assieme al protocollo HTTP dedicato al trasferimento
di documenti in tale formato
➔ A partire dal 1994 il linguaggio ha avuto una forte diffusione in seguito ai primi utilizzi
commerciali del web
➔ Nello stesso anno nasce il World Wide Web Consortium (W3C), organizzazione non
governativa internazionale che ha come scopo quello di favorire lo sviluppo di tutte le
potenzialità del World Wide Web e di diffondere la cultura dell'accessibilità della Rete
➔ Il W3C stabilisce anche gli standard tecnici per il World Wide Web inerenti sia ai
linguaggi di markup che ai protocolli di comunicazione
➔ Nel 2014 è stata rilasciata la versione HTML 5, che permette di aggiungere al
documento ipertestuale controlli più sofisticati sulla grafica, interazioni dinamiche con
l'utente, animazioni interattive e contenuti multimediali
Sezioni HTML
Un documento HTML (dunque, anche una pagina Web)
si compone di 2 sezioni:
➔ head: contiene metadati (dati sui dati) riguardanti il
documento, quali: titolo, codifica utilizzata per i caratteri,
informazioni per i motori di ricerca, eccetera
➔ body: contiene gli elementi principali di un
documento, visualizzati dal browser: paragrafi, immagini,
collegamenti, tabelle, liste, eccetera
CSS
➔ L’HTML consente di definire la struttura, il contenuto di una pagina Web (organizzare il
testo in titoli e paragrafi, inserire un’immagine, specificare link ad altre risorse/pagine)
➔ Sebbene consenta anche di specificare alcune informazioni relative alla formattazione,
come vedremo non si tratta della soluzione migliore per farlo
➔ I fogli di stile a cascata (Cascading Style Sheets, CSS) hanno lo scopo fondamentale di
separare struttura e presentazione di una pagina Web

Cascading
La parola chiave di CSS è cascading:
➔ è prevista e incoraggiata la presenza di fogli di stile multipli, che agiscono uno dopo
l’altro, in cascata, per indicare le caratteristiche tipografiche e di layout di un documento
HTML
➔ ad esempio, un primo foglio di stile, generale, potrebbe indicare caratteristiche di default,
da applicare a tutto il contenuto della pagina web: ad esempio utilizzare il font “Futura” di
grandezza “15” e di giustificare il testo
➔ poi, utilizzando un secondo foglio di stile, si può specificare un trattamento diverso per
tutti i sottotitoli: ad esempio utilizzare il font “Futura” di grandezza “20” e di centrare il testo
➔ il secondo foglio di stile “sovrascrive”, per i sottotitoli, alcune delle direttive generali date
in precedenza dal foglio di stile più generico
Vantaggi del CSS
I vantaggi della separazione di competenze sono evidenti:
➔ cambiando il CSS si può dare un aspetto completamente diverso alla pagina Web,
senza modificarne la struttura del contenuto specificato dall’HTML
➔ lo stesso contenuto diventa riusabile in più contesti: ad esempio, in un ambito formale
e in uno informale… cambia più spesso l’aspetto visivo di una pagina che il suo contenuto
➔ una data regola di stile può essere specificata una sola volta, e poi essere applicata ad
ogni occorrenza di un dato elemento (es., per rendere ogni sottotitolo di colore blu e in
grassetto)
➔ si può materialmente dividere il lavoro fra chi gestisce il contenuto e chi si occupa della
parte grafica
➔ si ottiene un codice HTML molto più “pulito”

Tramite le classi è possibile attribuire a tag di diverso genere gli stessi attributi di
formattazione

Potrebbero piacerti anche