Introduzione Informatica - Home di homes.di.unimi.it

Introduzione
Informatica: disciplina che cerca di dare un fondamento scientifico ad argomenti
come la progettazione di computer, la programmazione, l’elaborazione delle
informazioni, le soluzioni algoritmiche dei problemi, il processo algoritmico stesso.
Uno dei concetti di base dell’informatica è la nozione di algoritmo che, almeno
informalmente, può essere definito come una sequenza finita di operazioni per
l’esecuzione di una determinata operazione. Un classico esempio di algoritmo è una
ricetta. Da un punto di vista empirico, l’esecuzione di un algoritmo implica spesso
(ma non sempre!) l’esecuzione ripetitiva di alcune operazioni elementari. Sarebbe
comodo avere una macchina che esegue tali operazioni al posto di un operatore
umano…
Per fare “funzionare” un algoritmo c’è bisogno di un esecutore. Ad esempio,
nell’algoritmo ricetta c’è bisogno dell’esecutore “cuoco”. L’algoritmo deve essere
rappresentato in qualche modo, es. sottoforma di una sequenza di frasi nella ricetta (o
sottoforma di zeri ed uni per un esecutore macchina). Ogni rappresentazione di un
algoritmo è detta programma.
Att.ne! Un algoritmo è definito tale solo se termina in un numero finito di passi. Si
possono definire delle sequenze di istruzioni che non terminano mai, o che terminano
a volte sì, a volte no. Se tale requisito non è soddisfatto, si parla di procedure di
calcolo, non di algoritmi. Non è detto che le procedure di calcolo siano inutili: si
pensi ad esempio ad una procedura di calcolo per stimare le infinite cifre decimali di
π; un programmatore potrebbe usare tale procedura di calcolo per entrare nel
guinness dei primati come l’uomo che ha calcolato il valore di π con la massima
precisione fino a quel momento…
E’ importante inoltre notare che non tutti i problemi possono essere risolti mediante
un algoritmo. E’ ad esempio impossibile scrivere realizzare un programma che dato
un qualunque programma e il relativo input e` in grado di decidere se il programma
termina su quell’input! Quindi non tutti i problemi sono risolvibili da un
calcolatore…
E’ importante anche notare che, una volta che sia stato specificato un algoritmo in
maniera corretta, l’esecutore non deve essere in grado di comprendere le operazioni
che sta effettuando, né il significato dei simboli che manipola. In tal senso, il PC è un
semplice esecutore di istruzioni, mentre l’intelligenza è completamente contenuta
nella logica dell’algoritmo che viene eseguito. Tali argomenti sono ad oggi oggetto di
ricerca. Sono oggetto di ricerca anche la verifica della correttezza degli algoritmi, la
valutazione del loro costo computazionale, l’individuazione di problemi che non
prevedono soluzioni generali in tempi ragionevoli.
1
Il programma deve essere codificato in modo tale che l’esecutore possa
comprenderlo. Sarebbe difficile per un essere umano interpretare una ricetta in
linguaggio macchina! L’attività di sviluppo di una programma, della sua codifica in
un opportuno formato e del suo inserimento nella macchina è detta programmazione.
Per riassumere, vi è un esecutore (es. cuoco, circuiti logici, …), cioè un oggetto fisico
che è in grado di eseguire determinate operazioni. Con la programmazione:
- vengono definite le azioni che l’esecutore deve intraprendere;
- vengono codificate in un opportuno linguaggio (comprensibile
dall’esecutore);
- vengono passate all’esecutore utilizzando una codifica opportuna.
L’informatica studia dunque i calcolatori, gli algoritmi, le applicazioni.
Deve essere ben chiara allora la distinzione tra hardware e software: l’hardware è
equipaggiamento fisico del computer, costituito da componenti meccanici, elettrici,
ed elettronici che fanno svolgere al calcolatore un insieme di funzioni generiche (si
puo` prendere a calci!), il software è l’equipaggiamento logico del computer,
costituito da programmi che utilizzano i componenti dell’hardware integrandoli al
fine di svolgere compiti specifici (si puo` solo imprecargli contro!).
Tra gli obiettivi dell’informatica vi sono: progettare calcolatori sempre più potenti e
veloci, sempre più aperti a possibili integrazioni con altri artefatti tecnologici, sempre
più facilmente utilizzabili da chiunque. Progettare software per migliorare l’uso
attuale, per impiegare il calcolatore in aree nuove, per aiutare la ricerca in altre
discipline scientifiche.
Vediamo un po’ di storia della sviluppo dei calcolatori. Ovviamente, sviluppo di HW
e SW vanno a braccetto: man mano che si ampliano le possibilità di eseguire calcoli
sempre più velocemente e su quantità di dati sempre più grandi, cresce anche
l’esigenza di trovare soluzioni algoritmiche efficienti.
Come detto, gli algoritmi di calcolo nascono all’interno della comunità matematica.
Una volta “trovato” un algoritmo, però, è stato necessario trovare un esecutore
dell’algoritmo, dal momento che il più delle volte un algoritmo è una sequenza
ripetitiva (noiosa!) di passi da eseguire.
L’abaco è una prima rudimentale forma di esecutore di un algoritmo. In realtà,
l’abaco di per sé serve solo alla memorizzazione dei dati, quindi per avere un
esecutore bisogna considerare la coppia abaco + essere umano, dal momento che è
questo sistema ad eseguire le operazioni sull’abaco.
Nel XVII sec. compaiono le prime macchine per il calcolo automatico: Pascal,
Leibniz progettano macchine meccaniche per operazioni elementari (es. addizione)
nelle quali si inseriscono i dati e si leggono i risultati sulla base della posizione degli
ingranaggi (dunque la codifica avviene attraverso la posizione degli ingranaggi).
2
Babbage, nel XVIII sec., introduce la prima macchina programmabile: attraverso una
opportuna codifica del programma su schede di cartone preforato è possibile
determinare il comportamento della macchina.
Nella prima metà del ‘900 si costruivano ibridi elettromeccanici per operazioni di
calcolo. Si passa quindi ad un approccio totalmente digitale, e basato su circuiti
elettronici. Alla fine degli anni ’40 fu costruito l’ENIAC, Electronic Numerical
Integrator and Calculator,
alla Moore School of Electrical Engineering
dell’Università della Pensylvania, quello che è riconosciuto come il primo calcolatore
della storia. Con l’avanzare del progresso tecnologico il costo dei chip si abbassa
mentre la potenza di calcolo che si può racchiudere in poco spazio aumenta. Alla fine
degli anni ’70 compaiono i primi personal computer, destinati all’uso personale. La
prima casa produttrice è la Apple. Nel 1981 la IBM produce il suo primo PC, che
viene equipaggiato con il software di una giovane azienda, la Microsoft. Si arriva
quindi fino ai nostri giorni…
Breve panoramica sull’hardware
A grandi linee, un calcolatore moderno è composto da diversi elementi: processore
(Central processing unit, CPU), memoria (Random access memory, RAM),
periferiche. I diversi elementi sono collegati da un bus, una sorta di filo (o, meglio, un
gruppo di fili) che viene utilizzato per l’invio di dati / comandi tra i diversi
componenti.
In generale, la CPU esegue dei comandi (elaborazione dei dati), mentre nella
memoria troviamo sia dati che programmi, memorizzati nello stesso modo. Tale
architettura è stata suggerita da Von Neumann negli anni ’40, e su tale architettura si
basa la quasi totalità dei calcolatori esistenti. L’architettura di Von Neumann non è
comunque l’unica possibile.
E’ possibile classificare i calcolatori sulla base di diversi criteri. Una classica
divisione è la seguente: Mainframe (grande capacità di memoria e di elaborazione,
accessibili da centinaia di utenti “contemporaneamente”, utenti: grandi imprese, enti
pubblici), Minicomputer (elevata capacità di elaborazione, accessibili da decine di
utenti “contemporaneamente”, utenti: medie e grandi imprese), Workstation (elevata
capacità di elaborazione, accessibili da pochi utenti “contemporaneamente”, utenti:
piccole imprese, laboratori di ricerca), Personal computer (buona capacità di
elaborazione, accessibile da un solo utente alla volta, automazione di ufficio, uso
personale), Supercalcolatori (grande capacità di elaborazione, elaborazione
scientifica, modelli matematici, in via di estinzione per elevato rapporto
costo/prestazioni), Sistemi multiprocessore (grande capacità di elaborazione,
elaborazione scientifica, modelli matematici, rapporto costo/prestazioni inferiore
rispetto ai supercalcolatori).
Breve panoramica sul SW
3
Vi è SW di sistema, che si occupa del funzionamento in generale del calcolatore (es.
accensione, riconoscimento delle periferiche più comuni come tastiera e video, …) e
il SW applicativo (programmi destinati all’utente finale, es. word processor).
Se vogliamo vedere come interagiscono HW, SW di sistema e SW applicativo,
possiamo disegnare una torta con nel centro l’HW. Il software di sistema, ed in
particolare il sistema operativo OS, si occupa di comunicare con l’HW per garantirne
il corretto funzionamento e per eseguire le operazioni più elementari. Il SW di
sistema è composto anche da altre utilities, ad esempio per la compilazione dei
programmi (per la traduzione di un programma da un linguaggio comprensibile al
programmatore a un linguaggio comprensibile alla macchina). Il SW applicativo sta
ad un livello più alto. Tra gli esempi applicativi si possono citare: Calcolo scientifico
Grafica Musica e video Archivi e sistemi informativi Medicina e altre scienze
Robotica e controllo di processi industriali Comunicazione, …
4