Architettura degli elaboratori, 22 Gennaio 2009

Non e' ammesso l'uso di alcun testo, appunti o calcolatrici. Le risposte vanno scritte nel foglio di bella copia. Si raccomanda la massima SINTETICITA'. L'eccessiva verbosita' verra' considerata negativamente.
  • I risultati (sia positivi che negativi) verranno registrati sul portale CEA non appena corretti i compiti. Chi non intenda accettare un voto basso o desideri fare un orale in caso di voto basso (se quest'ultimo e' comunque maggiore di 24), deve comunicarlo per tempo al docente o all'assistente in aula ed indicarlo sul proprio elaborato.
  • Gli iscritti alla laurea triennale debbono essersi prenotati sul portale studenti del nostro ateneo, in caso cio' non sia stato fatto fatelo immediatamente presente al docente o all'assistente in aula.
  • Coloro che debbono sostenere l'esame da 9 crediti, uno volta superato lo scritto dovranno sostenere un orale sulla parte del programma del loro anno di corso non coperto dal programma di quest'anno.
  • Esercizio 1 In un sistema di calcolo organizzato a livelli cosa si intende per livello di microprogrammazione?
    Esercizio 2 E' possibile realizzare in Hw qualsiasi funzione f : {0,1}* --> {0,1}* ? Perche'?
    Esercizio 3 Scrivere un programma Mic-1 che interpreti la seguente istruzione che intendiamo aggiungere all'IJVM:
    ADDLCL varnum1 varnum2 la cui semantica e' la seguente
    M[LV + varnum1] <-- M[LV + varnum1] + varnum2 +2 (si pone nella variabile locale indicata da varnum1 la somma delle variabili locali indicate da varnum1 e varnum2 e si incrementa di 2 il risultato.
    I campi varnum solo lunghi un byte.
    Volendo, per semplicita', si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC, senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti non farlo in pratica creerebbe problemi).
    Esercizio 4 Scrivere un metodo assembly IJVM che calcoli il numero massimo di 1 consecutivi contenuti nella parola (di 32 bit) che viene passata come argomento al metodo.
    Esercizio 5 Nelprogramma del corso e' presente un esempio di I/O gestito ad interruzioni per la macchina del livello ISA del Tanenbaum. In tale esempio il controllo della presenza di interruzioni e' realizzato dall'interprete microprogrammato estendendo il microinterprete del Tanenbaum con le seguenti microistruzioni
    int1 if opc[15] goto main1; 
    
    int2 if (not(opc[0]) and not(opc[1]) ... and not(opc[7])) goto main1;
    
    int3 SP=MAR=SP+1; 
    
    int4 MDR=PC; wr; 
    
    int5 SP=MAR=SP+1;
    
    int6 MDR=OPC; wr; 
    
    int7 MAR=OxFF; rd; 
    
    int8 OPC[15]=1; 
    
    int9 PC=MDR; fetch; 
    
    int10 
    
  • Descrivere cosa fanno (e perche') tali microistruzioni. Non tutte le microistruzioni sono miscroistruzioni Mic-1. Quali non lo sono? perche' sono state aggiunte?
  • Modificare il precedente microcodice affiche' il gestore delle interruzioni venga eseguito ad interruzioni abilitate.
  • Dire brevemente e informalmente come si potrebbe far si che il gestore gestisca le interruzioni supponendo che esistano delle priorita' tra i vari devices.
  • Perche' il gestore delle interruzioni deve necessariamente essere realizzato con un segmento di codice IJVM e non in Mic-1?
  • E' possibile poter far si che il controllo della presenza di interruzioni sia realizzato in hardware? Se si, descrivere informalmente un modo possibile di farlo, se no, giustificare la risposta negativa.

    Esercizio 6 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?