Architetture degli Elaboratori, 1 Marzo 2001


Non e' ammesso l'uso di alcun testo, appunti o calcolatrici. Le risposte ai quesiti vanno scritte nel foglio di bella copia.
Si raccomanda la massima SINTETICITA' negli esercizi che richiedano una spiegazione scritta. L'eccessiva verbosita' verra' considerata negativamente.



Esercizio 1
(a) Identificare nella macchina Mic-1 quali sono le parti che corrispondono alla componente Controllo di Sequenza.

(b) Discutere brevemente come un impianto Hi-Fi puo' venire visto come una macchina astratta, identificando le varie componenti (che in qualche caso possono essere praticamente inesistenti).

Esercizio 2
(a) Fornire la definizione di insieme di operatori booleani funzionalmente completo. Dimostrare che l'insieme { piripi' } e' funzionalmente completo, dove piripi' e' l'operatore booleano ternario definito dalla seguente tavola di verita'
a b c | piripi'(a,b,c)
----------------------
0 0 0 |     1
0 0 1 |     0
0 1 0 |     0
0 1 1 |     1
1 0 0 |     1
1 0 1 |     0
1 1 0 |     0
1 1 1 |     0

(b) Presa la funzione f(a,b,c,d) il cui valore e' 1 quando il numero rappresentato in binario da abcd e' primo o divisibile per 3: (ricordare che 1 non e' primo e 0 non e' divisibile per 3)


Esercizio 3
(a) Scrivere del microcodice Mic-2 (Due!) che interpreti l'istruzione NOEXECZ che vogliamo aggiungere ad IJVM.
Si suppone che le 10 istruzioni che seguono NOEXECZ in ogni programma siano tutte istruzioni senza argomenti (cioe' formate da un solo byte, il codice operativo. Come IADD, per intenderci) tra cui c'e' almeno un'istruzione che ha il codice operativo che inizia con un 1.
La semantica di NOEXECZ e' la seguente:
delle prossime istruzioni salta le istruzioni che precedono la prima il cui codice operativo inizia con un 1 e salta anche quest'ultima.
In altre parole l'istruzione che dovra' essere eseguita dopo NOEXECZ e' quella successiva alla prima istruzione dopo NOEXECZ che ha il codice operativo che inizia con un 1.

(b) Consideriamo la prima microistruzione del microinterprete Mic-1 per IJVM:
Main1  PC=PC+1; fetch; goto(MBR)
e la microistruzione che realizza l'istruzione WIDE:
wide1  PC=PC+1; fetch; goto(MBR or 0x100)
Se il microinterprete, nell'esecuzione di Main1, trova in MBR il codice operativo di WIDE, saltera' a wide1.
Ora, il valore di MBR nella microistruzione wide1 dovra' essere quello prelevato dalla memoria attraverso il fetch in Main1.
Questo fatto non e' in contraddizione con la seguente affermazione del Tanenbaum? (paragrafo 4.1.2 del testo):
..una lettura dalla memoria su qualsiasi porta iniziata al termine del ciclo k fornisce dati che non si possono usare nel ciclo k+1, ma solo nel ciclo k+2 o piu' tardi.
Infatti se consideriamo le microistruzioni che realizzano l'istruzione POP vediamo che c'e' una microistruzione nulla proprio per attendere che la parola letta diventi utilizzabile, come e' scritto anche nel commento al microcodice:
pop1 MAR=SP=SP-1; rd        Legge la parola vicina alla cima dello Stack  
pop2                        Aspetta che TOS sia letto dalla memoria
pop3 TOS=MDR; goto Main1    Copia una nuova parola in TOS
Dunque? c'e' contraddizione?
Inoltre, cosa fa' l'istruzione WIDE di IJVM?
Perche' nel goto di wide1 c'e' "or 0x100" ?
Esercizio 4
(a) Descrivere in dettaglio il comportamento dell'istruzione INVOKEVIRTUAL di IJVM.

(b) Supponete di avere un metodo Java che calcola il fattoriale di un numero in modo ricorsivo. Scrivere il codice IJVM che traduce tale metodo (cioe' tutta la parte che va inserita nella Method Area).
Scrivere inoltre il codice che realizza la chiamata del metodo con parametro attuale 3.


Esercizio 5
Si supponga di avere un calcolatore con 232 byte di memoria e dimensione di blocco di 4 byte.
Quanti bit sono necessari per una cache diretta che contenga 64K byte di dat i?


Esercizio 6
L'architettura del PicoJavaII prevede, oltre i normali registri, anche un banco di 64 registri da 34 bit. Qual e' il loro scopo? Il processo di dribbling riguarda tali registri. In cosa consiste?

Esercizio 7
(a) C'e' differenza e, se c'e', qual e' la diferenza tra il contatore di locazione dell'istruzione utilizzato dall'assemblatore e il program counter?
Dopo tutto entrambi memorizzano l'indirizzo dell'istruzione seguente di un programma.

(b) Per quale motivo la traduzione in linguaggio macchina di una serie di procedure sorgente scritte in assembler non e' eseguita direttamente, ma ciascuna procedura e' tradotta singolarmente in un formato intermadio e i diversi moduli vengono in una seconda fase collegati dal meccanismo di linking?

Esercizio 8
Cos'e' un algoritmo di routing? Quando un algoritmo di questo tipo si dice statico?, quando dinamico?
Il dimensional routing algorithm e' un algoritmo di routing senza deadlock usato per griglie rettangolari. Quali nodi si attraversano utilizzando questo algoritmo per andare dal nodo (3,7,5) a quello (6,9,8) in una griglia tridimensionale?