Architettura degli Elaboratori 1 Luglio 2004
Niente appunti o calcolatrici. Risposte nel foglio di bella copia.
Massima SINTETICITA', l'eccessiva verbosita' verra' considerata negativamente.
Un esercizio di Mic e quello di IJVM vanno svolti svolti obbligatoriamente
(quello di IJVM si puo' decidere di non farlo solo se si ha l'esonero).
Esercizio 1.
(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.
Dire poi perche' in un sistema di calcolo organizzato a livelli almeno un livello
deve essere necessariamente realizzato per compilazione (traduzione).
(b)
Il latch SR e' un circuito combinatorio? Giustificare brevemente.
Dire brevemente perche' in un latch SR la configurazione di input S=1, R=1 non viene utilizzata.
Esercizio 2
(a)
Supponete di voler aggiungere all'insieme di istruzioni IJVM la nuova istruzione
PLURIDUP num
che duplica il valore presente in cima allo stack per un numero di volte pari a num (num e' sempre un numero non negativo rappresentato con un byte).
Per esempio, l'effetto di eseguire PLURIDUP 3 e' lo stesso che eseguire DUP DUP DUP. L'effetto di PLURIDUP 0 e' nullo.
Scrivere un segmento di codice Mic-1 che realizzi l'istruzione PLURIDUP num.
Commentare il codice.
N.B. Codice non commentato NON verra' valutato.
(b)
Descrivere il funzionamento della IFU presente nell'architettura Mic-2.
Esercizio 3
(a)
Scrivere il metodo assembly IJVM che calcoli la funzione H utilizzando
l'algoritmo descritto dalla seguente definizione ricorsiva di H.
H(x) = if (x=0) then 2 else 1+H(x-1)
Commentare il codice.
N.B. Codice non commentato NON verra' valutato.
(b)
Descrivere brevemente il funzionamento di un arbitro del bus centralizzato che usa lo schema "daisy chaining". Vantaggi, svantaggi.
Esercizio 4
(a)
Il formato delle microistruzioni Mic-1 e' a lunghezza fissa o variabile?
Qual e' il vantaggio che si ha? e lo svantaggio? Stesse domande per le istruzioni IJVM.
(b)
Supponiate che un programma in assembler IJVM, tradotto e caricato
nella Method Area sia formato dal codice
corrispondente ad un .main e dal codice di due metodi A e B.
Supponiate inoltre che il codice dei due
metodi sia formato dallo stesso numero di byte n.
Se volessimo sostituire al posto di A e B altri due metodi, C e D,
anch'essi formati da n byte,
quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?
E se invece volessimo "invertire" di posto nella Method Area
i codici di A e di B, quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?
Motivare le risposte.