Architettura degli elaboratori, 06 Ottobre 2006

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 voti (quelli positivi) verranno registrati immediatamente dopo la correzione. Chi non intendesse accettare un voto basso o intendesse fare un orale (se il voto fosse maggiore di 24), dovra' indicarlo sul compito.
  • 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
    Descrivere brevemente cosa si intende per "struttura a livelli dei sistemi di calcolo".
    Esercizio 2
    Si consideri la seguente versione dell'implementazione Mic-1 dell'istruzione SWAP.
    swap1      MAR=SP-1; rd
    swap2      MDR=TOS; wr
    swap3      MAR=SP; wr
    swap4      TOS=MDR; goto main1
    
    Tale versione, pur se piu' corta di quella proposta dal testo, in realta' non puo' funzionare a causa della presenza della "rd" in swap1 e della "wr" in swap2.
    Perche'?
    Esercizio 3
    Si supponga di aggiunto ad IJVM una nuova istruzione BOING e di aver inserito nel Control Store il codice Mic-1 che la realizza. Si supponga che il codice operativo di BOING sia 0x01 e che, per motivi a noi ignoti, sia impossibile inserire il segmento di codice Mic-1 che realizza BOING nel Control Store a partire dall'indirizzo 0x01.
    Scrivere le istruzioni (due o piu') da mettere nel microinterprete al posto dell'istruzione Main1 affinche' tutto possa funzionare comunque correttamente.
    Nello scrivere il codice si supponga che l'etichetta "boing1" corrisponda all'indirizzo del Control Store dove e' stato memorizzato il codice che realizza BOING.
    Commentare il codice. Codice non commentato non verra' neanche preso in considerazione.
    Esercizio 4
    Si consideri l'arbitraggio centralizzato del bus con schema daisy chaining (Fig.3-40(a) del testo).
    Si supponga che ogni dispositivo che puo' prendere possesso del bus abbia una linea di output chiamata reqM con cui fa richiesta del bus, e una linea di input chiamata grantM con cui riceve il permesso di utilizzare il bus. Tali linee sono collegate ad un chip contenente l'hardware Mic-1 che, programmato adeguatamente, puo' eseguire le azioni richieste dal tipo arbitraggio daisy chaining. In particolare, la linea reqM viene collegata al bit TOS[0] di Mic-1, mentre la linea grantM al bit LV[0] di Mic-1. Inoltre, la linea di Bus-grant (concessione del bus) della Fig.3-40(a) in input (che chiamiamo grantIN) viene collegata a OPC[0], la linea di Bus-grant in output (che chiamiamo grantOUT) viene collegata a SP[0], mentre la linea Bus-Request (richiesta del bus) viene collegata a PC[0].
    Riassumendo, gli elementi coinvolti e le connessioni sono:
    ----------
    |Arbitro | . . . .  ---------------------------------------------- . . . .
    |        |                                 ^ Bus-request
    |        | . . . . --Bus-grant---          |       --------------- . . . . 
    ----------	                 |         |       | 
    	  	        	 |grantIN  |       |grantOUT
                                   -------------------------
    		               |                       |
    	         	       |      MIC-1            |
    			       -------------------------
    			             ^            |
                                    reqM |            | grantM
    			             |           \/
    			          --------------------
    			          |                  |
    			          |  Dispositivo-n   | 
    			          |                  |
    				  --------------------
    				  






    grantIN ---> OPC[0]
    reqM ---> TOS[0]
    grantOUT < --- SP[0]
    grantM < --- LV[0]
    Bus-request < --- PC[0]
    Programmare il chip Mic-1 (scrivere cioe' un programma Mic-1) in modo da permettere a tale chip di gestire, per conto del dipositivo ad esso collegato, la richiesta del bus.
    Commentare il codice.
    Esercizio 5
    Cosa si intende per modalita' di indirizzamento? Descrivere brevemente le principali modalita' di indirizzamento ed il loro uso.
    Esercizio 6
    Nel precedente appello era presente un esercizio in cui si chiedeva di aggiungere l'istruzione IRADIX ad IJVM.
    Tale istruzione prende il valore in cima allo Stack e lo sostituisce con l'approssimazione intera della sua radice quadrata.
    Non si chiedeva di implementare completamente tale istruzione in Mic-1, pero' si voleva che l'istruzione IRADIX avesse quanto detto come effetto, supponendo di avere a disposizione un metodo IJVM, radint, che calcolava appunto l'approssimazione intera della radice quadrata.
    L'esercizio consisteva nello scrivere un programma Mic-1. Tale programma non doveva far altro che preparare lo Stack per l'invocazione del metodo radint e fare cio' che farebbe INVOKEVIRTUAL (conoscendo gia' il numero di variabili locali ed argomenti del metodo radint).
    Per risolvere correttamente l'esercizio occorreva anche implementare in Mic-1 il ritorno dal metodo radint, oppure la normale istruzione IRETURN era sufficiente? Giustificare adeguatamente la risposta.