Architettura degli Elaboratori 20 Giugno 2003

Niente appunti o calcolatrici. Risposte nel foglio di bella copia. Massima SINTETICITA', l'eccessiva verbosita' verra' considerata negativamente.

Esercizio 1.
(a) Avete cinque righe a disposizione (scritte normali e non una di piu') per dire perche' e' conveniente organizzare a livelli i sistemi di calcolo. E due righe per dire cos'e' il Semantic Gap.
(b) Cos'e' un Multiplexer? Come si puo' usare un multiplexer per convertire dati da paralleli a seriali?
Esercizio 2
(a) A cosa serve la linea WAIT in un bus sincrono? Cosa la rimpiazza nei bus asincroni?
(b) Supponete di volere aggiungere al linguaggio IJVM l'istruzione POPTWO, che ha zero argomenti e che elimina due elementi dalla cima dello Stack. Scrivere il microcodice Mic-1 che realizza tale istruzione e che quindi andrebbe aggiunto al codice della realizzazione microprogrammata di IJVM.
Esercizio 3
(a) La tabella sotto riportata rappresenta la struttura di una memoria cache a mappatura diretta composta da 8 linee, ciascuna avente porzione Dati di 4 parole.
Si supponga che inizialmente la cache sia vuota e che il processore indirizzi byte della RAM mediante indirizzi di 9 bit abcdefghi aventi il seguente formato: i bit ab per il tag, i bit cde per la linea, i bit fg per la parola, i bit hi per il byte. Si supponga che il processore esegua la seguente sequenza di indirizzamenti:
100011000, 100111001, 110011000, 101010011, 100000000, 110010011, 001010001, 110100011,  010001100, 011010011
(a) Si completi la tabella in modo che rappresenti lo stato della cache dopo che il processore abbia eseguito l'intera sequenza di indirizzamenti (supponendo che nel frattempo nessun evento esterno influenzi i bit di validita'). Per la porzione Dati si indichi semplicemente con M[abcde], dove abcde e' l'indirizzo della linea di RAM caricata nella linea cde di cache.
        Valida
|
Linea v Tag Dati
-------------------
000 | 0 | | |
-------------------
001 | 0 | | |
-------------------
010 | 0 | | |
-------------------
011 | 0 | | |
-------------------
100 | 0 | | |
-------------------
101 | 0 | | |
-------------------
110 | 0 | | |
-------------------
111 | 0 | | |
-------------------

(b) La seguente sequenza di byte (abbiamo lasciato per leggibilita' i nomi dei codici operativi)
 0x00 0x04 0x03 0x00
BIPUSH 0xAA
ILOAD 0x09
IADD
GOTO 0x00 0x05
dovrebbe essere il risultato della traduzione di un metodo assembly IJVM
.method zumpappero(a,i,j,k)
.var
bambi
tippete
fiorellino
.end-var

> ISTRUZIONI DI ZUMPAPPERO <

.end-method
In realta' la sequenza di byte fornita non puo' essere il risultato della traduzione del metodo zumpappero, per tanti motivi. Elencarli e discuterli molto brevemente.
Esercizio 4
(a) 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.
Se volessimo "invertire" di posto i codici di A e di B, quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?

(b)
Una macchina ha le seguenti caratteristiche:
Dimensione istruzioni: 32 bit
Numero registri indirizzabili: 8
Numero celle : 4K (quindi indirizzabili con 12 bit)
Si intende progettare un codice ad espansione per codificare il seguente insieme di istruzioni:
31 istruzioni con due indirizzi di memoria e un indirizzo di registro;
7 istruzioni con due indirizzi di memoria;
n istruzioni con un indirizzo di memoria ed un indirizzo di registro.

Qual e' il valore massimo di n? Giustificare brevemente la risposta.