Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2017/18
parte 1: in generale
Il concetto di astrazione
L’astrazione e il calcolatore
L’astrazione e il calcolatore
Istruzioni e operazioni
Linguaggio: definizione
Il linguaggio macchina
Il dilemma
Che fare?
Esecutori e linguaggi
M1 J2
I2
I0
M0 Problema: chi decide che J2
I1 si trasforma nella sequenza I2
I 0 I 1?
Deve essere tutto
automatico!
Come passare da L1 a L0
Traduzione (o compilazione)
Un apposito programma (compilatore) traduce il programma PL1, scritto
in linguaggio L1, in un programma PL0, scritto in linguaggio L0;
il nuovo programma PL0 viene quindi eseguito.
M1
---------
---------
---------
I2
M0 I0
Traduttore J2
---------
I1 ---------
---------
Programma Programma
equivalente scritto in L1
scritto in L0
Architettura degli elaboratori
Come passare da L1 a L0
Interpretazione
Un apposito programma (interprete) esamina il programma PL1, scritto in
linguaggio L1, e, istruzione per istruzione, lo traduce nel linguaggio L0 e
lo esegue.
M1
I2 J2
Interprete
I0
M0
I1
Interpretazione
Compilazione
Costruzione di un compilatore
Al giorno d’oggi:
Design e implementazione di compilatori (da un linguaggio dato):
disciplina matura
Esistono molti strumenti software per semplificare il task.
è facile definire nuovi linguaggi ad-hoc, ad alto livello, pensati per
gestire contesti specifici, e dotarsi di compilatori per tali linguaggi
(o interpreti – in questo caso si parla spesso di «linguaggi di scripting»)
Nota: i buoni compilatori ottimizzano il codice che producono
Macchina virtuale M1
Macchina virtuale M2
Livello n Mn (Ln)
Programmi tradotti in L1 o in L0
.... in modo che possano essere
eseguiti da M1 o da M0
Livello 2 M2 (L2)
Programmi tradotti in L0 in
modo che possano essere
Livello 1 M1 (L1) eseguiti da M0
Programmi eseguiti
Livello 0 M0 (L0) direttamente dal calcolatore
(macchina reale)
Calcolatore a n livelli
Per scrivere i programmi per il livello n non è necessario conoscere come viene
effettuata la traduzione e quindi l’esecuzione.
I programmi possono essere
eseguiti direttamente dalla macchina reale;
tradotti direttamente nel linguaggio L0;
interpretati da un interprete che viene a sua volta interpretato da un altro
interprete ...;
...
La conoscenza dei livelli intermedi è importante per chi voglia capire
come funziona un calcolatore (analisi);
come si progetta una macchina virtuale (sintesi).
Livello 1: la microarchitettura
Livello 1 Microarchitettura
Esecuzione
diretta
(Hardware)
Livello 0 Logica digitale
Livello 1: la microarchitettura
Control Unit:
cablata o microprogrammata?
Control Unit Microprogrammata
il funzionamento del Data Path viene controllato da un programma
chiamato microprogramma;
si tratta di un interprete delle istruzioni di livello 2;
era la soluzione più diffusa in passato, tanto che il termine µ-
programmazione era a volte sinonimo di µ-architettura.
Control Unit Cablata
il funzionamento del Data Path viene controllato direttamente tramite
dispositivi hardware;
la sequenza di operazioni associate alle istruzioni di livello 2 non viene
generata da un interprete ma viene gestita direttamente via hardware.
Interpretazione
Livello 2 Instruction Set parziale
Livello 1 Microarchitettura
Livello 1 Microarchitettura
Livello 1 Microarchitettura
Linguaggi di alto livello come C, C++, Java, Ada, LISP, Prolog, ...
Sono utilizzati per la realizzazione di programmi applicativi.
Il più delle volte la traduzione è affidata a un compilatore, mentre in alcuni
casi si usa un interprete (e.g. Java)
I linguaggi ad alto livello non fanno parte degli scopi di questo corso.
Livello 6: le applicazioni
Livello 1 Microarchitettura
Es:
adobe photoshop, microsoft word, microsoft powerpoint,
libreoffice calc, google chorme, final cut pro,
blender, unity, etc, etc, etc
Esecuzione diretta
Livello 0 Logica digitale (Hardware)
I livelli: sommario
I calcolatori sono progettati come una serie di livelli ognuno dei quali si
basa sul livello precedente.
Ogni livello rappresenta una diversa astrazione con strutture dati e
funzionalità diverse.
L’insieme di tipi di dati, operazioni e caratteristiche di ogni livello prende il
nome di ARCHITETTURA.
La descrizione dell’architettura di un livello presenta l’insieme delle
caratteristiche visibili all’utente di quel livello (e.g. ad un programmatore di
applicazioni interessa sapere quanta è la memoria disponibile)
Livelli alti:
linguaggi potenti ed espressivi
linguaggi più «vicini all’uomo»
sintassi delle istruzioni: intuitiva
macchine virtuali
più cross platform (cross.browser, cross OS, …)
Livelli bassi:
linguaggi dai comandi semplici
linguaggi più «a misura di macchina»
pochi tipi di istruzione base
sintassi delle istruzioni: spesso non intuitiva (non è fatta per noi umani)
semantica delle istruzioni: molto semplice
(quindi serviranno più istruzioni per fare le stesse cose)
Livello più basso: esecutore hardware (macchina fisica)
sono dio
https://xkcd.com/676/
Architettura degli elaboratori