Oggi andremo ad affrontare il tema del calcolatore, in particolar modo il contenuto di questa
lezione è strutturato in tre ambiti principali: lo studio del calcolatore, l’analisi dei precursori
del calcolatore per poi spostarci verso le macchine programmabili.
Che cos'è il calcolatore?
Il protagonista della scena dell'informatica e l’artefice dell'informatizzazione è proprio il
calcolatore digitale o definito anche come calcolatore to CUR, computer o elaboratore e
dunque la macchina dedicata all'elaborazione automatica delle informazioni digitali,
macchina dotata di capacità universali in questo ambito. I calcolatori sono entrati ormai nella
nostra vita quotidiana, tutti conosciamo le straordinarie capacità delle macchine per
l'elaborazione delle informazioni e iniziamo a vedere quali sono questi elementi.
Innanzitutto l'elaboratore è in grado di compiere operazioni matematiche ad altissima
velocità (una comune calcolatrice tascabile è superiore ad esempio a qualsiasi essere
umano nel calcolo aritmetico), è inoltre in grado di registrare enormi quantità di informazioni
in spazi ridottissimi , fenomeno della miniaturizzazione, quindi un disco ottico di pochi
centimetri diametro in grado di contenere un interi ciclopedia e allo stesso modo di ritrovare i
dati richiesti Con un incredibile rapidità e quindi in proprio frazioni di secondo. Altro elemento
da considerare è la possibilità di trasmettere le informazioni a grandi distanze e con enorme
velocità: due calcolatori quindi situati a migliaia di chilometri di distanza sono in grado di
scambiarsi milioni di informazioni in pochi secondi. Inoltre è in grado di governare quelli che
sono dispositivi meccanici che compiono operazioni di precisione, quali ad esempio i robot,
è in grado anche di eseguire programmi che svolgono compiti molteplici quale
l'elaborazione di testi, la gestione di archivi, l'effettuazione di calcolo scientifico, gestione
della contabilità. I calcolatori ormai sono diffusi in tutte quelle che possiamo definire attività
produttive, amministrative e professionali dove sono in grado di offrire prestazioni sempre
più elevate a costi sempre più bassi; essi sono ormai i componenti essenziali all'interno della
nostra società, basti pensare che senza di essi cesserebbero di funzionare le fabbriche, le
banche, le scuole, gli alberghi, i tribunali e allo stesso tempo si fermerebbero tutti quelli che
sono i mezzi pubblici, diventerebbero inutilizzabili apparecchiature mediche,
elettrodomestici, telefoni e automobili. Tale dipendenza si accresce a mano a mano che si
compie il passaggio verso la società dell'informazione. Per quest'ultima uno sciopero
generale informatico e quindi l’ipotetica e contemporanea interruzione di tutti i calcolatori nel
mondo equivarrebbe di fatto alla paralisi totale.
Tuttavia Il Calcolatore, strumento che viene utilizzato dalla molteplicità di soggetti, resta per
tutti ancora uno sconosciuto, poiché non tutti siamo in grado di conoscere caratteristiche e
potenzialità dello strumento: anche se interagiamo quotidianamente con il calcolatore, di
fatto ne ignoriamo la storia, la struttura e i principi di funzionamento.
Le macchine e gli algoritmi per elaborare l'informazione
Quali sono le caratteristiche che determinano per il calcolatore la possibilità di ritenerlo un
protagonista all'interno della nostra epoca e uno strumento che per noi lo si può intendere
come ineliminabile nella quotidianità che ne andiamo diciamo a svolgere tutti i giorni?
Il funzionamento del calcolatore è di fatto dovuto alla combinazione di due componenti:
l'hardware, che rappresenta l'insieme dei dispositivi materiali (ciò che noi quindi possiamo
toccare con mano) e che elaborano l’ informazione stessa, mentre dall'altro il software cioè
l'insieme dei programmi informatici che governano il funzionamento del calcolatore, andando
quindi ad indicare in un modo preciso ed univoco le elaborazioni da seguire
STORIA...
Possiamo quindi trovare le radici dell'informatica in due linee di ricerca che di fatto però
possono convergere fra loro : da un lato il tentativo di realizzare macchine capaci di
elaborare le informazioni e dall'altro invece il tentativo di definire procedimenti ,che possiamo
intendere come precisi e univoci, ossia gli algoritmi, che sono poi in grado di elaborare le
informazioni.
L'idea quindi di poter utilizzare dispositivi materiali per le informazioni non è un un'idea
nuova: l’abaco o pallottoliere ad esempio risale a circa 7000 anni fa e anche l'idea poi di
definire metodi precisi per elaborare le informazioni ha una lunga storia. Per esempio
Euclide, grande matematico greco vissuto ad Alessandria d'Egitto tra il IV e il III secolo a.C.,
inventò un famoso algoritmo per effettuare il calcolo del massimo comune divisore. Il nome
però algoritmo deriva da un matematico persiano Mohammed al-Khwarizmi, vissuto nel IX
secolo, i cui scritti contribuirono proprio ad introdurre in Europa i numeri decimali e l'algebra.
In particolar modo proprio al-Khwarizmi indicò quelle che sono le regole precise da seguire,
passo dopo passo, e che noi abbiamo ad utilizzare sin dalle scuole elementari per
aggiungere, sottrarre, moltiplicare e dividere quelli che sono i numeri decimali. Questi
possiamo definirli come delle procedure, quindi degli algoritmi che ci sembrano ovvi e alle
volte anche banali ma che rappresentano poi un enorme progresso rispetto alle precedenti
tecniche per poter eseguire calcoli numerici.
Un altro soggetto che andò a costruire uno strumento elettronico fu Blaise Pascal che nel
XVII secolo realizzò la Pascalina, ossia una macchina in grado di compiere addizioni e
sottrazioni. Lo stesso Leibniz andò a perfezionare la pascalina, costruendo invece un
apparecchio che era anche in grado di eseguire le moltiplicazioni. Tanto la pascalina quanto
l'apparecchio di Lyoness erano poi delle calcolatrici automatiche ma meccaniche quindi non
erano elettroniche, esse quindi funzionavano grazie a una serie di ingranaggi a delle ruote
dentate e non mediante il passaggio di elettroni, cosa che avviene nei computer moderni.
Inoltre potevano eseguire di volta in volta solo una delle operazioni rientranti nella loro
competenza, ad esempio una sola addizione, quindi non le possiamo definire come
macchina programmabili poiché non potevano di fatto eseguire automaticamente un’intera
combinazione di tali operazioni secondo le indicazioni che ne abbiamo fornito.
PROGRAMMABILITÀ
Per trovare quindi le origini della programmabilità si deve un po' uscire dall'ambito della
matematica e della filosofia e ci si deve spostare in ambito tecnologico, anzi anche
industriale. Infatti agli inizi dell'Ottocento un artigiano francese Joseph Marie Jacquard
inventò un nuovo tipo di telaio che era in grado di tessere da solo e quindi automaticamente
diversi tipi di trame. Le trame da tessere si indicavano inserendo nel telaio speciali carte
perforate e la posizione dei fori determinava la scelta dei fili e le altre attività che avrebbe
dovuto svolgere la macchina.
Al telaio di Jacquard si sarebbe poi anche ispirato il matematico inglese Charles Babbage, il
quale, dopo aver progettato una macchina in grado di calcolare i logaritmi, concepì proprio il
motore analitico Ossia una macchina dotata di una competenza generale capace di eseguire
qualsiasi calcolo. La peculiarità del motore analitico era proprio la sua programmabilità,
ossia oltre ad essere in grado di compiere le operazioni aritmetiche di base, il motore
analitico era in grado di eseguire qualsiasi combinazione digitale di operazioni pertanto la
combinazione delle operazioni da eseguire (ciò che noi poi andiamo attualmente a definire
come programma) si specificava mediante istruzioni riportate su queste schede perforate. Le
istruzioni indicate nelle schede venivano poi registrate nella memoria interna al motore
analitico che avrebbe proceduto poi alla loro esecuzione, restituendo il risultato nel motore
analitico, l’organo di calcolo che poi effettuata le operazioni aritmetiche e l'organo delle
istruzioni già eseguite proprio dei risultati ottenuti. Esso quindi anticipava la struttura del
moderno calcolatore che, come il motore analitico, può suddividersi in varie componenti.
Babbage però non riuscì a superare i problemi tecnici connessi alla costruzione del suo
motore, in quanto si tratta di un complesso sistema di ruote dentate, leve e ingranaggi ed il
tuo motore analitico rimase poi in realtà un progetto.
Invece Lady Augusta Ada Lovelace fu affascinata proprio dalla macchina di Babbage e in
realtà scrisse per essa alcuni programmi ed è celebre per essere diventata la prima
programmatrice della storia. Ella immaginò che il motore analitico potesse giocare a scacchi
e perfino comporre musica, anticipando quelle che sono oggi le ricerche di intelligenza
artificiale.
Tra gli antenati del moderno calcolatore noi possiamo menzionare la macchina calcolatrice,
anch’essa meccanica e basata su schede perforate, costruita poi dall'ingegnere americano
Herman Hollerith ed utilizzata per calcoli attinenti al censimento americano del 1890.
Negli anni trenta si ottennero Però alcuni risultati fondamentali nel campo quello della teoria
degli algoritmi da parte di grandi logici e matematici come Alan turing, Kurt Godel e Alonzo
Church.
In particolare si giunse poi alla formulazione della tesi Church-Turing secondo la quale
qualsiasi problema algoritmico, ossia qualsiasi problema per il quale esista una precisa
procedura di soluzione può essere risolto utilizzando macchine semplici in grado di svolgere
poche operazioni elementari. Inoltre si stabilì la possibilità di realizzare macchine universali,
capaci di fatto di elaborare qualsiasi tipo di algoritmo. Tali macchine eseguono quindi una
procedura esattamente definita ma essa è astratta, Cioè non è finalizzata ad un risultato
particolare: essa consiste nell'eseguire qualsiasi programma che venga fornito alla
macchina, andando poi di fatto ad applicare a dati di input per tali programmi.
I moderni calcolatori corrispondono al concetto di macchina universale benché ancora non
esistessero quando quel concetto veniva definito e debbono proprio la loro universalità alla
capacità di accogliere non solo i dati ma anche i programmi: possono quindi eseguire
qualsiasi programma consistente in operazioni sui numeri binari e confrontati tra tali numeri,
applicandolo poi a qualsiasi combinazione di dati.
EQUIVALENZA DELLA MACCHINE UNIVERSALI
Infine si determinò anche l'equivalenza di tutte le macchine universali cioè ogni macchina
universale, opportunamente programmata, è in grado di eseguire qualsiasi algoritmo ma
allora ciascuna macchina universale è in grado di eseguire anche l'algoritmo che determina
il funzionamento di qualsiasi altra macchina universale e di conseguenza ogni macchina
universale,una volta programmata secondo l'algoritmo che descrive il funzionamento di una
diversa macchina universale, è in grado di elaborare anche i programmi scritti per
quest'ultima. Quindi di fatto ogni macchina universale è capace di emulare qualsiasi
altra macchina universale, spetta poi ad Alan Turing il merito di aver circoscritto l'ambito
dei problemi che ammettono una soluzione algoritmica. Non è vero che Un calcolatore
opportunamente programmato può fare qualsiasi cosa, vi sono cose che di fatto nessun
calcolatore è in grado di fare cioè problemi che non sono deducibili e che non sono di fatto
poi computabili fra loro.
Un'ulteriore evoluzione avvenuta grazie allo stesso Alan turing è stata poi la possibilità di
realizzare anche altre macchine tra le quali ad esempio il Colossus stesso di Alan turing,
utilizzato proprio per andare a decifrare quelli che sono i codici utilizzati dall'esercito
tedesco, lo Zuse che venne comunque realizzato tramite lo Z3 (primo calcolatore basato sul
sistema binario degli anni ‘30-’40) ed utilizzato per la progettazione di aeroplani ed infine l’
ENIAC (Electronic Numerical Integrator and Computer 1941-45), basato sul sistema
decimale ed utilizzato per calcolare le traiettorie dei proiettili.
Il calcolatore inizialmente veniva utilizzato quale strumento per svolgere una serie di
operazioni ma che erano di natura meccanica, quindi non avevamo la realizzazione
dell'elaboratore così come adesso la andiamo ad immaginare e quindi con un insieme di
hardware e software che all'interno sono strumentazioni elettroniche che funzionano tramite i
circuiti, ma avevamo un sistema di ingranaggi che era in grado di eseguire una serie di
operazioni ed in particolar modo la caratteristica essenziale di questi strumenti era data
proprio dalla possibilità di eseguire una singola operazione per volta, quindi io programmo
lo strumento per realizzare una singola attività che poi doveva essere nuovamente
riprogrammata. Con l'evoluzione dell'elaboratore, grazie soprattutto anche a Lady Augusta,
la prima programmatrice della storia, abbiamo avuto anche strumenti che erano in grado di
essere configurati ed essere programmati e quindi erano in grado di svolgere le operazioni
di volta in volta, senza dover essere nuovamente riconfigurati. Abbiamo assistito di fatto a un
passaggio progressivo tra quella che era una prima processione di elaboratore (con
ingranaggi) ad una evoluzione dell'elaboratore che poi ha portato a quelli che noi adesso
definiamo calcolatori elettronici.
I PRIMI CALCOLATORI
Per trovare i primi calcolatori moderni, definiti anche poi digitali ed elettronici, dobbiamo
spostarci al tempo della seconda guerra mondiale, quando i primi calcolatori poi furono
inventati contemporaneamente ma indipendentemente nei vari paesi belligeranti. In
Inghilterra ad esempio un gruppo di matematici e ingegneri, guidato proprio da Alan Turing,
realizzò il Colossus nel 1941, un calcolatore elettronico a di fatto però non programmabile. Il
colossus fu impiegato con successo nel decifrare i codici utilizzati per la comunicazione
dell'esercito tedesco. In contrapposizione a questo, in Germania Konrad zuse, tra la fine
degli anni 30 e l'inizio degli anni 40, realizzò lo Z3, il primo calcolatore programmabile basato
poi sul sistema binario. Il Calcolatore di Zuse trovò qualche impiego nella progettazione di
aeroplani ma il terzo Reich non seppe poi cogliere l'importanza dell'invenzione. Negli Stati
Uniti infine tra il 1941 ed il 1945, presso l'Università della Pennsylvania, fu realizzate invece
l’ ENIAC (Electronic Numerical Integrator and Computer) elettronico e universale però
basato ancora su un sistema decimale e non su un sistema binario come siamo abituati
adesso a vedere l'elaboratore elettronico. Infatti la finalità principale fu proprio quella di
utilizzarlo per calcolare quelle che sono le traiettorie dei proiettili.
All'inizio degli anni ‘50 avvenne il salto tecnologico che poi consentì di passare ai primi veri
calcolatori moderni: si trattava della registrazione del programma stesso all'interno della
memoria del calcolatore e ciò consentiva di accedere con rapidità alle singole istruzioni da
eseguire ma soprattutto compiere anche salti condizionati. In base ai risultati già ottenuti
potevano essere eseguite o saltate certi istruzioni del programma. La memorizzazione
interna del programma caratterizza proprio alla macchina di Von Neumann. L'architettura
adottata nei moderni calcolatori fu definita negli anni 40 da un gruppo di lavoro cui
partecipava il matematico statunitense anche se di origini ungheresi John Von Neumann.
L’elaboratore era composto da due unità l'unità di controllo (dette control unit - CU) e l'unità
di calcolo o unità aritmetico-logica che costituisce poi l'unità centrale di elaborazione (la
CPU, detta anche processore). Essi attuano una stretta cooperazione: la prima identifica
l'istruzione da eseguire e i relativi dati, la seconda invece esegue l'operazione. Dati ed
istruzioni vengono prelevati dalla memoria centrale (definita anche in memoria principale,
primaria o interna) nella quale vengono trasferiti i risultati delle elaborazioni.
La memoria centrale è un dispositivo di memorizzazione ad alta velocità di lettura e scrittura
tipicamente volatile, quindi si cancella quando il calcolatrice spegne. Essa deve essere poi
distinta da quelle che sono le memorie di massa (dette anche secondaria esterne oppure
periferiche) costituite da dispositivi, solitamente dischi magnetici o ottici, capaci di contenere
permanentemente grandi quantità di informazioni. Affinché le informazioni che sono
contenute all'interno delle memorie di massa (sia i dati che i programmi) possono essere
elaborate dalle unità centrale di elaborazione esse debbono esser trasferite e quindi
riprodotte all'interno della memoria centrale, la sola che è direttamente accessibile all'unità
centrale. Ciò significa che l'esecuzione di un software residente sul disco di un computer ne
comporta poi la sua duplicazione. Il software quindi deve essere copiato nella memoria
centrale e questo poi è un aspetto rilevante anche per forni