Esercizi sulle Macchine Astratte
Esercizio 1
Ho un sistema di calcolo in cui il livello superiore implementa una macchina astratta il cui linguaggio e' il linguaggio
JAVA. Voglio implementare sopra questo livello la macchina astratta corrispondente al linguaggio di
microprogrammazione Mic-1. Posso farlo?
Se si, perche' cio' e' possibile ed in che modo posso realizzarlo?
Soluzione.
Esercizio 2
La componente "memoria" di una Macchina Astratta deve necessariamente essere realizzata in hardware? Perche'?
Soluzione.
Esercizio 3
HASKELL e' un linguaggio di programmazione funzionale, basato cioe' su
un modello computazionale differente da quello che e' alla base dei linguaggi
di programmazione imperativi.
La nozione di Macchina Astratta per
linguaggi di programmazione come HASKELL (MAF, Macchina Astratta Funzionale) e' simile a quella descritta nel corso?
Una MAF ha le stesse componenti di una MA ?
se si, le componenti di una MAF
hanno funzioni differenti dalle relative componenti di una MA?
oppure una MAF e' essenzialmente diversa da una MA?
se si, pensare a come potrebbe essere la sua struttura.
Esercizio 4
Si consideri il linguaggio di programmazione che abbia programmi definiti
dalla seguente grammatica:
Programma ::= Istr | Istr;Programma
Istr ::= m[Index]<-0 | m[Index]<-1 | m[Index]<-m[Index] | if B then Istr
| input(Index) | output(Index)
B ::= m[Index]=0 | m[Index]=1 | m[Index]=m[Index]
Index ::= 0,1,2,3
dove il significato delle istruzioni e' il seguente:
m[x] <- 0 (nella cella di memoria di indirizzo x poni 0)
m[x] <- 1 (nella cella di memoria di indirizzo x poni 1)
m[x] <- m[y] (nella cella di memoria di indirizzo x poni il contenuto della
cella di indirizzo y)
if B then I (se B e' vera allora esegui I)
input(Index) (leggi da tastiera un valore ammissibile e inseriscilo in m[Index]
output(Index (scrivi su monitor il valore in m[Index]
Index, potendo essere solo 0,1,2,3, inplica che la
memoria per i dati associata al nostro linguaggio ha solo quattro celle.
Inoltre queste celle della parte di memoria riservata ai dati sono formate da un unico bit (possiamo memorizzarci solo
0 oppure 1).
Ovviamente questo linguaggio non e' universale (non ha la potenza
computazionale per descrivere qualsiasi algoritmo).
Dire, motivando dettagliatamente la risposta, perche' la Macchina Astratta associata al linguaggio descritto
puo' essere realizzata SOLAMENTE in Hardware.
Soluzione.
Esercizio 5
(a)
Descrivere la componente Interprete delle Macchine Astratte.
(b)
Potrebbe accadere che nell'implementazione della MA del livello 5 di un sistema di calcolo la componente memoria sia esattamente
la componente memoria del livello 3 ?
Soluzione.
Esercizio 6
E' possibile avere delle macchine astratte senza la componente Interprete?
Motivare brevemente la risposta.
Soluzione.
Esercizio 7
(a)
E' possibile avere un sistema di calcolo organizzato a livelli in cui esistano
tre livelli corrispondenti alla macchina astratta del linguaggio Java?
Motivare brevemente la risposta.
(b)
Dire perche' e' indispensabile che in un sistema di calcolo organizzato a livelli
esista il livello 6.
Soluzione.
Esercizio 8
(a)
Avete cinque righe a disposizione (scritte normali e non una di piu') per dirmi
perche' e' conveniente organizzare a livelli i sistemi di calcolo.
(b)
Dire perche' in un sistema di calcolo organizzato a livelli almeno un livello deve essere necessariamente
realizzato per compilazione (traduzione).
Soluzione.
Esercizio 9
Qual'e' il numero teorico massimo di livelli in un sistema di calcolo? Perche'?
Soluzione.
Esercizio 10
Perche' in un sistema di calcolo strutturato a livelli non puo'
esserci piu' di un livello realizzato per traduzione?
Soluzione.
Esercizio 11
Spiegare perche' in una macchina astratta realizzata al livello 1
di un sistema di calcolo, la componente "gestione della memoria" e'
praticamente inesistente.
Soluzione.
Esercizio 12
(a)
In quali casi e' possibile avere un sistema di calcolo organizzato a
livelli in cui tutti i livelli sono realizzati in hardware?
(b)
In un sistema di calcolo organizzato a
livelli, cosa si intende quando si dice che "un livello non e' completamente coperto
da quello superiore"? Fornire un possibile esempio.
Soluzione.
Esercizio 13
(a)
Riguardo molti microprocessori
si parla di backward compatibility
(compatibilita'). Visto che un microprocessore puo' esser visto come
la realizzazione hardware (di parte) di una macchina astratta,
qual e', secondo voi, il significato di backward compatibility in termini di macchine astratte?
in altre parole, cosa significa che una macchina astratta e' backward compatible?
(b)
La Macchina di Turing e' alla base della nostra definizione di Macchina Astratta.
Quindi una Macchina di Turing potrebbe esser vista anche come una semplicissima
macchina astratta. Dire brevemente cosa fa l'interprete di una macchina di Turing.
In una macchina di Turing universale ci sono sempre due interpreti,
uno, per modo di dire, "hardware", e l'altro "software". E' vero? Perche'?
Soluzione.
Esercizio 14
Una cucina dotata di tutto, compresa una persona che sta cucinando,
puo' esser vista come la realizzazione hardware di una macchina astratta?
Se si, identificarne la varie componenti. Se no, spiegarne il motivo.
Soluzione.
Esercizio 15
E' possibile che una macchina astratta che tipicamente sarebbe realizzata
in hardware venga realizzata per traduzione o compilazione su una macchina
astratta corrispondente ad un linguaggio ad alto livello come Java o C?
Esercizio 16
(a)
Si consideri la struttura a livelli di un calcolatore.
Si motivi l'introduzione di tale
struttura.
Si spieghi cos'e' il semantic gap.
Possibile soluzione. (by Camillo Bosco)
(b)
Si veda un'impresa di costruzioni come un sistema di calcolo che realizza edifici abitabili.
Si descrivano almeno 2 dei suoi livelli di macchina astratta (uno puo' essere il livello "muratore").
Possibile soluzione. (by Camillo Bosco)
Esercizio 17
Cosa si intende per "realizzazione" di una Macchina Astratta per interpretazione?
e per compilazione (traduzione)?
Esercizio 18
Delle varie fasi del ciclo di un interprete in una macchina astratta, qual e'
quella piu' lenta a venire eseguita? Perche'?
Possibile soluzione.
Esercizio 19
E' possibile avere un sistema di calcolo organizzato a livelli in cui esistano tre livelli corrispondenti alla macchina astratta del linguaggio Java?
Motivare brevemente la risposta.
Dire poi perche' in un sistema di calcolo organizzato a livelli almeno un livello
deve essere necessariamente realizzato per compilazione (traduzione).
Soluzione.
Esercizio 20
Cosa significa, in un sistema di calcolo a livelli, che
"un livello che realizza una macchina astratta non copre del tutto il livello sottostante"?
Esercizio 21
Descrivere le componenti Interprete e Controllo Sequenza di una generica macchina astratta.
Esercizio 22
Si consideri la seguente frase presa dalle note del corso:
"La gerarchia di macchine astratte di un sistema di calcolo
non termina necessariamente con l'implementazione di un linguaggio di programmazione HLL L."
Commentarla, spiegandone il significato.
Esercizio 23
Commentare e chiarire il senso della seguente frase: "È da notare che nella pratica non è raro che un livello realizzi una macchina astratta che non copre del tutto il livello sottostante ma ne potenzia alcune delle caratteristiche, lasciandone trasparire del tutto altre."
Esercizio 24
Si consideri un sistema a livelli contenente i livelli L1, L2 ed L3.
L1 e' realizzato in hardware e tale che il tempo di esecuzione di un'istruzione di L1
e' di K secondi.
I livelli L2 ed L3 sono invece interpretati. Ogni istruzione di L2 viene realizzata
con n istruzioni di L1. Ogni istruzione di L3 viene realizzata con n istruzioni di L2.
Il linguaggio L3 e' m volte piu' potente del linguaggio L2 (per ogni cosa che fa
un'istruzione di L3, ce ne vogliono m di L2 per fare la stessa cosa. In breve,
lo stesso algoritmo si realizza in L2 con un programma m volte piu' lungo di uno equivalente
in L3).
Siano P3 e P2 due programmi semanticamente equivalenti scritti, rispettivamente,
in L3 e L2 (semanticamente equivalenti significa che calcolano la stessa cosa).
Fornire delle espressioni che esprimano il tempo di esecuzione di P3 e di P2 in
modo da poter confrontare tali tempi tra loro e poter decidere (fissati n ed m)
se, dal punto di vista della velocita' di esecuzione,
convenga eseguire P3 sul livello 3 oppure P2 sul livello 2.
Giustificare brevemente la soluzione proposta.
Soluzione.
Esercizio 25
Descrivere brevemente cosa si intende per "struttura a livelli dei sistemi di calcolo".
Esercizio 26
Si consideri la seguente frase presa dalle note del corso:
Una programmazione consapevole ed adeguata per una particolare
realizzazione di una macchina astratta e' possibile solo se l'utente
conosce non solo la struttura della macchina astratta, ma anche quali
componenti sono stati realizzati direttamente in hardware,
quali emulati, quali interpretati.
Infatti, scegliere un modo piuttosto che un altro di realizzare un
algoritmo puo' risolversi in un guadagno di prestazioni,
dovuto alla maggiore efficienza della realizzazione di alcune
componenti della macchina astratta rispetto ad altri.
E' un'affermazione condivisibile? Giustificare brevemente la risposta.
Esercizio 27
Si consideri il linguaggio di programmazione, che chiameremo VSL (Veeery Simple Language),
che ha i programmi definiti dalla seguente grammatica:
Programma ::= Istr; | Istr;Programma
Istr ::= m[x]<-0 | m[x]<-1 | m[x]<-m[y] | m[x]<-m[y]ANDm[z] | m[x]<-m[y]ORm[z] | if B then Istr
B ::= m[x]=0 | m[x]=1 | m[x]=m[y]
dove il significato delle istruzioni e' il seguente:
m[x] <- 0 (nella cella di memoria di indirizzo x poni 0)
m[x] <- 1 (nella cella di memoria di indirizzo x poni 1)
m[x] <- m[y] (nella cella di memoria di indirizzo x poni il contenuto della
cella di indirizzo y)
m[x] <- m[y]ANDm[z] (nella cella di memoria di indirizzo x poni l'OR del contenuto della
cella di indirizzo y con quello della cella z)
m[x] <- m[y]ORm[z] (nella cella di memoria di indirizzo x poni l'OR del contenuto della
cella di indirizzo y con quello della cella z)
Inoltre x, y e z possono avere come valori solo 0, 1, 2, 3. Questo significa che la
memoria per i dati associata al nostro linguaggio ha solo quattro celle.
Inoltre queste celle della parte di memoria riservata ai dati sono formate da un unico bit (possiamo memorizza
rci solo
0 oppure 1).
Ovviamente questo linguaggio non e' universale (non ha la potenza
computazionale per descrivere qualsiasi algoritmo).
Realizzare modo compilativo la macchina astratta VSL sopra la macchina
astratta JAVA.
Realizzare modo interpretativo la macchina astratta VSL sopra la macchina
astratta JAVA.
Realizzazione compilativa, by Danilo Vaccalluzzo.
Esercizio 28
Che relazione esiste tra le Macchine di Turing ed il concetto di Macchina Astratta Imperativa?
Ogni macchina astratta e' comunque imperativa, o possono esserci altre nozioni di macchina
astratta? Giustificare.
Esercizio 29
Fornire la definizione di Macchina Astratta.
Esercizio 30
Descrivere le possibili realizzazioni di macchine astratte. Descrivere inoltre il concetto di struttura
a livelli dei sistemi di calcolo e discutere dei vantaggi della struttura a livelli.
Esercizio 31
(a)
Fornire la definizione di Macchina Astratta e descriverne le componenti.
(b)
Come e' possibile realizzare una macchina astratta? Cosa si intende per
organizzazione a livelli di un sistema di calcolo?
(c)
E' possibile avere un sistema di calcolo organizzato a livelli in cui esistano
tre livelli corrispondenti alla macchina astratta del linguaggio C++?
Motivare brevemente la risposta.
Esercizio 32
Implementare in modo compilativo ed in modo interpretativo il linguaggio WHILE di [SR]
Esercizio XX
Esercizio XX