# Cenni di storia dei calcolatori
## Introduzione al corso di Architetture

Prima di parlare in maniera dettagliata di come sia fatta l'architettura a livelli che vogliamo studiare é necessario fare una introduzione storica. I computer non esistono da sempre. Il primo uomo che abbia realizzato un computer è il francese Blaise Pascal (nel cui onore é stato battezzato un linguaggio di qualche tempo fa..) che nel 1642 - a soli 19 anni - progettò e realizzò un meccanismo di contabilità. Era un aggeggio completamente meccanico; un computer a manovella. Le sole operazioni che era in grado di compiere erano addizione e sottrazione. Passarono 30 anni prima che Leibniz aggiungesse a quella macchina le operazioni moltiplicazione e divisione che costruirono la prima vera calcolatrice del mondo. Trecento anni fa.
Nulla successe poi per quasi 150 anni..
Quando un giorno un tizio di nome Charles Babbage dell'Università di Cambridge creò 'difference engine' un dispositivo meccanico che come quello di Pascal poteva soltanto sottrarre e addizionare. Esso venne utilizzato per la navigazione marittima.
La cosa più interessante del 'difference engine' era il suo modo di produrre output. Esso stampava su un disco (non un vinile) grazie all'ausilio di una punta in ferro. Era pertanto in grado di produrre dischi perforati che potevano anche essere re-introdotti nell'elaboratore.
L'evoluzione di 'difference engine' fu 'analytical engine', un dispositivo composto di una memoria, un mill (unità di calcolo), la possibilità di ricevere input (da schede prestampate) e la possibilità di produrre un output (sempre su schede).
Questo fu il primo dispositivo programmabile. E contrariamente a quello che la presunzione maschile induce a pensare, il primo hacker fu donna, Ada Augusta Lovelace (figlia di un poeta famoso). In suo onore un moderno linguaggio di programmazione ha preso il suo nome.
Sfortunatamente stiamo parlando di dispositivi meccanici per cui molto ingombranti e pieni di bug. Babbage (che possiamo considerare il padrino di tutti i computer moderni) stesso era costretto ad aprire e controllare tutte le ruote dentate ed i collegamenti prima di sottoporre una scheda prestampata al dispositivo.
Questi gli inizi.
Poi negli anni trenta (1930) un tedesco di nome Konrad Zuse costruì una macchina computazionale automatica utilizzando dispositivi elettromagnetici. Questi suoi studi, non di certo finanziati dal governo, vennero considerati di secondo piano rispetto alla guerra che stava per iniziare.. Ci si aspettava (in Germania) che la guerra finisse presto e, vincitori, si sarebbe potuto sviluppare il progetto. Così non fu. Il progetto di Zuse fu vittima dei bombardamenti e non influenzò in modo utile le macchine che vennero dopo. Nonostante tutto é necessario menzionarlo, in quanto anche le sue idee erano innovative.
Diversi furono gli studiosi che si cimentarono nell'evoluzione di questi dispositivi calcolatori. Tra questi spicca Howard Aiken che nel 1944 all'Università di Harvard presentò Mark I, una macchina in grado di gestire 72 parole di 23 digits ciascuna. Era in grado di svolgere una operazione (istruzione) in 6 secondi circa.
Gli studi continuarono fino a produrre Mark II. Da quel momento tutti i dispositivi computazionali automatici divennero obsoleti. L'era dell'elettronica era iniziata.

### Prima Generazione (1945-1955)

Il primo computer, purtroppo, non fu costruito per fare qualcosa di veramente utile. I primi computers infatti (costruiti durante la Guerra Mondiale) erano destinati alla traduzione di codici per sventare attacchi, da questo a quel popolo. Ricordiamo tra queste ENIGMA (Germania) ma anche COLOSSUS (Gran Bretagna). Nel 1943 viene creato ENIAC (Electronic Numerical Integrator And Computer). Consisteva di 18.000 valvole e di 1500 releè, pesava qualcosa come 30 tonnellate e consumava 140 KiloWatts. Architetturalmente era costituito da 20 registri da 10 digits nei quali venivano rappresentati numeri interi. "Sfortunatamente" la sua completa realizzazione avvenne al termine della Guerra (1946) ed i suoi scopi bellici non erano più utili.
Ma l'interesse nei calcolatori elettronici era stato svegliato..
Nel 1949 venne creato EDSAC dall'Università di Cambridge. Il suo successore: EDVAC (Electronic Discrete Variable Automatic Computer).
Dal progetto ENIAC un professore del Princeton's Institute on Advanced Studies noto col nome di John Von Neumann creò un progetto che é rimasto ai giorni nostri, e dal quale inizieremo a discutere il nostro corso..
Egli descrisse una architettura di nome IAS che poteva essere generalizzata per la costruzione di questi dispositivi. Vennero introdotti nel discorso congegni come un accumulatore, una memoria, una unità di controllo, dispositivi di input e di output.
Nel nostro excursus storico appare una Azienda che inizialmente costruiva carte meccaniche scrivibili (schede perforabili): IBM. Gli interessi di IBM nei calcolatori era molto leggero, fino ad arrivare al 1953 quando produsse 701.
701 aveva 2048 parole da 36 bits con due istruzioni per parola. Questa macchina fu la prima ad interessare il mercato dell'industria in meno di un decennio. Tre anni dopo nacque 704, un computer che era in grado di gestire 4K di memoria con istruzioni a 36 bits ed un hardware in grado di svolgere calcoli in vircola mobile.
Nel 1958 vede la luce 709, un computer completo e migliorato rispetto al 704.

### Seconda Generazione (1955-1965)

Nel 1948 i Bell Labs inventarono i transistors. Gli inventori (John Bardeen, Walter Brattain, William Shockley) ricevettero il premio Nobel per la Fisica (1956). In poco più di un decennio i transistors (transistori in Italiano) rivoluzionarono il mercato dai computer fino a rendere obsoleti, alla fine degli anni cinquanta, i computers costruiti con le valvole.
Il primo calcolatore a transistors fu costruito nei laboratori del M.I.T. e prese il nome di TX-0 (Transistored eXperimental computer 0). Da questo progetto prese spunto anche Kenneth Olsend che fondò una società di nome DEC (Digital Equipment Corporation) che creò il PDP-1 (1961).
PDP-1 era un computer composto da 4K di memoria da parole a 18 bits e cicli di risposta per produrre un output di circa 5 micro-secondi.
Come costi di produzione il PDP-1 costava circa $120,000 mentre il 7090 (successore di 709 by IBM) costava milioni di dollari!!! Questo fece la fortuna di DEC che vendette diversi modelli del suo PDP-1.
Tra questi modelli venduti almeno uno finì al M.I.T. che produsse una innovazione che al giorno d'oggi sembra quasi scontata: il display! Uno schermo di 512x512 punti!! Più che sufficiente per creare il primo videogioco: SPACEWAR!
Diversi anni dopo nacque PDP-8 che costava molto meno ($16,000) e che aveva una caratteristica evolutiva molto importante: il BUS. Una raccolta di cavi paralleli utilizzati per connettere i dispositivi interni del computer.
Grazie a questa DEC divenne il nuovo leader nel business dei minicomputers.
L'altra Azienda interessata ai computers (IBM) produsse con i transistors il 7090 e successivamente il 7094. Quest'ultimo era in grado di utilizzare 32K di memoria interna con parole da 36 bits.
7090 e 7094 (ed il suo successore 1401) segnarono la fine delle macchine prodotte sul modello ENIAC ma dominarono il mercato dei computers fino agli anni '60.
Dobbiamo menzionare anche un'altra Azienda nata in quegli anni: CDC (Control Data Corporation). Essa produsse il 6600 (non un Nokia!!) , il 7600 e Cray-1.
Anche B5000 (prodotto dall'Azienda Burroughs) è da menzionare. Questa macchina, in particolare, prevedeva la possibilità di impiegare un linguaggio antecedente al Pascal (Algol 60) e includeva nel suo hardware la possibilità di compilare un programma.
Era nata l'era del software così come la intendiamo noi. Sfortunatamente B5000 fu abbandonata subito..

### Terza Generazione (1965-1980)

Correva l'anno 1958 quando Robert Noyce riuscì a sistemare diversi transistors in un'unica unità chiamata : CHIP.
Questo permetteva di costruire computers di dimensioni ristrette, più veloci dei loro predecessori e nello stesso tempo meno cari. Questa terza generazione di computers produsse il primo dei problemi che riscontriamo al giorno d'oggi e che è il collo di bottiglia che ci impedisce di evolvere in modo esponenziale: la retro-compatibilità.
Infatti nel 1964 IBM produsse due modelli di computer (7094 e 1401) che, incredibilmente, non erano compatibili tra loro. Scrivere un programma per 7094 non significava che esso potesse funzionare anche 1401. Quando venne il tempo di aggiornare questi prodotti, IBM introdusse una singola linea di produzione chiamata System/360 che veniva predisposta sia per i calcoli matematici più utili che per la computazione commerciale.
I due modelli antecedenti potevano essere sostituiti dai nuovi modelli System/360. 1401 venne sostituito da System/360 modello 30 e 7094 fu sostituito da System/360 Modello 75. Il modello 75 era grande e veloce (ed anche molto costoso), ma il software creato su un System/360 era compatibile anche con gli altri della stessa serie. Ovviamente un programma scritto su una macchina modello 30 funzionava benissimo sul modello 75, ma non viceversa. Infatti il programma costruito sul modello 75 poteva non riuscire a stare completamente all'interno della memoria del modello 30.
Tre sono le novità introdotte da queste architetture:
* Introdurre la multiprogrammazione.
Consentiva di avere diversi progrogrammi in esecuzione. Questi, mentre uno attendeva per operazioni di input/output, l'altro proseguiva nella computazione.
* Introdurre la microprogrammazione.
Strumento molto utile in quanto definì due grandi famiglie di microarchitetture.
* Riuscire ad indirizzare 2 alla 24 (16 MB) indirizzi di memoria.
Che per allora era quasi infinito.
Nel trascorrere del tempo e nelle nuove innovazioni tecnologiche 16MB di memoria indicizzabile non furon più sufficienti per i programmatori. In particolare a metà degli anni '80 IBM abbandonò questa quantità preferendo costruire una memoria di 2 alla 32 bytes.
Nonostante questa introduzione, utilizzare 4GB di memoria divenne a sua volta un posto piuttosto stretto dove mettere i dati.
DEC produsse il suo PDP-11 il successore a 16 bit del PDP-8. In molti aspetti PDP-11 era "fratello" di System/360. Avevano in comune ad esempio la possibilità di utilizzare registri a parole e memorie organizzate in Byte, dai costi veramente irrisori rispetto agli inizi.

### Quarta Generazione (1980-???)

Dagli anni ottanta fece la sua apparizione VLSI (Very Large Scale Integration). Questo rese possibile integrare nei circuiti prima decine di migliaia, poi centinaia di migliaia ed infine milioni di transistors su un singolo chip. Questo conduce a computers sempre più piccoli e veloci. Siamo entrati nell'era dei nostri computers moderni.
Prima del PDP-1 i computers erano giganteschi, composti di una infinità di valvole ed eccessivamente costosi. Soltanto alcuni dipartimenti erano in grado di acquistare un computer.
Con l'avvento di VLSI chiunque (potenzialmente) poteva avere un Centro di Elaborazione Dati (CED) in azienda. Così inizia l'era dei personal computers (computers personali).
Con essi arriva anche la possibilità di creare le proprie applicazioni, utilizzare fogli di calcolo, produrre immagini (anche se all'inizio non di elevatissima risoluzione).