Materia:Architetture degli elaboratori
Da Wikiversità, l'università aperta.
Questo modulo necessita di essere "wikificato", ovvero formattato secondo gli standard di Wikiversità (vedi l'elenco degli articoli da wikificare). Collabora anche tu a rendere questo articolo conforme alle linee guida (vedi anche qui) poi rimuovi questo avviso.
Questa pagina contiene il testo delle lezioni legate alla materia generale, per una più agevole lettura necessita di essere divisa in lezioni.
Per una lista completa delle materie da suddividere in lezioni, consulta la relativa categoria.
|
SSD = INF/01 |
||
|
Presentazione Uno degli elementi fondamentali che ha permesso ai personal computer di entrare nelle case di tutto il mondo è la sua relativa facilità di utilizzo. L'utente moderno è abituato a lavorare con interfacce user-friendly che mascherano la complessa serie di eventi che ha luogo all'interno del calcolatore. Tuttavia, per comprendere il modo di procedere e le problematiche relative alla costruzione e all'utilizzo di queste macchine, è necessario analizzarne il comportamento più in profondità. Questa materia si propone di fornire le nozioni di base riguardo alla logica digitale, al linguaggio macchina, alla struttura dei componenti e al loro impiego all'interno di un sistema a microprocessore. Risulta quindi essere una tappa fondamentale per chiunque volesse approfondire gli argomenti legati ad un calcolatore elettronico moderno.
PrerequisitiPer la comprensione approfondita del corso occorre aver acquisito dimestichezza con le modalità di codifica dei dati e aver appreso i fondamenti di programmazione di alto livello. In particolare sono indispensabili le nozioni riguardanti la codifica binaria ed esadecimale. È consigliata inoltre la conoscenza del linguaggio C che, pur essendo un linguaggio di alto livello, presenta molte caratteristiche che lo accomunano ad un linguaggio Assembly. Lo studente imparerà a conoscere gli elementi costituenti di un calcolatore elettronico e ne conoscerà sommariamente la composizione fisica e logica. Il corso é molto lungo e complesso, ma al suo termine molte delle problematiche che quotidianamente rallentano il computer non saranno più un mistero per lo studente che saprà non solo descrivere e conoscere al meglio i componenti del proprio computer, ma sarà anche in grado di acquistarne uno adatto alle proprie esigenze di studio/lavoro. |
Programma
|
|
Risorse |
Verifiche d'apprendimento È possibile, e fortemente consigliato, integrare le lezioni e valutare la propria preparazione attraverso queste esercitazioni. È possibile verificare la conoscenza di un argomento specifico o dell'intero programma.
|
|
Utenti interessati
Modifica Leonardo Tretola
|
Presunzione
Si presume che queste lezioni siano indipendenti nella loro stesura, questo per descrivere nel modo più definito possibile i livelli della Architettura.
Si utilizzerà come esempio due architetture particolari. La prima é quella del MIPS e la seconda é una versione SEMPLIFICATA di quella che é l'architettura della Java Virtual Machine. Si presume che, per visonarne al meglio le differenze, lo studente conosca i principi fondamentali della programmazione in ambiente C/C++ e Java.
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 che 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. Passaronon 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 Babbage dall'Univesità di Cambrige 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 dispositivo é stato 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 '30 (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 fù. 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 od 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 Template: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 '50, 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) e' 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 '80 fece la sua apparizione VLSI (Very Large Scale Integration). Questo rese possibile integrare nei ciruiti 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).
Componentistica
Osservando l'architettura proposta da Von Neumann possiamo descrivere un computer come la somma di alcune componenti indispensabili.
Il profano che osserva l'interno di un computer per la prima volta si perde nell'osservare tutti i collegamenti, le scatolette scintillanti.. Lo studente di questo corso, invece dovrà osservare con maggiore attenzione.
Ecco alcuni schemi logigi di un computer moderno:
- tabella -
- CPU
- Memorie
- Le periferiche di Input/Output
Architettura a Livelli
Per poter meglio descrivere cosa sia e come funzioni un computer é necessario osservarlo ed astrarlo in modo più consono. L'immagine sottostante chiarisce come viene pensato e come é strutturato:
Ogni livello é una particolare branca dell'informatica moderna. Durante il [Corso di Fondamenti d'Informatica] abbiamo potuto osservare al meglio il Livello 0 (Logica Digitale) e abbiamo scoperto come semplici porte logiche possano formare dei circuiti che sono in grado di memorizzare l'informazione (latch,flip-flop,..) ma anche di trasformarla (shifter,ALU).
Il livello 0: Logica Digitale
Il livello 1: La Micro-Programmazione
Il livello 2: ISA
Il livello 3: Il Sistema Operativo
Questo livello verrà discusso meglio nel Corso di Sistemi Operativi e nel relativo Laboratorio.
Il livello 4: ASSEMBLY
Il livello 5: Language Level
Questo livello viene visto in modo approfondito nei Corsi di:
- Programmazione
- Programmazione ad Oggetti
- Basi di Dati
- Etc..
Non é nel nostro interesse visionare questo livello, se non con riferimenti semplici provenienti dalla stesura di codice MIC / MAL.