Eserciziario di Microistruzioni, Memorie, Pipeline e Teoria
Creato da Enrico Giordano Serena Cavaletti
2
Indice Microistruzioni Regole ed accorgimenti ............................................................................................................ 4 Architettura di riferimento per le microistruzioni .............................................................. 10 Esercizio 1: MOVL (%EAX), %EBX ...................................................................................... 11 Esercizio 2: ADDL (%EBX), %EAX ...................................................................................... 12 Esercizio 3: CALL (%EAX) ................................................................................................... 13 Esercizio 4: JZ (%EAX) .......................................................................................................... 14 Esercizio 5: JZ (%EAX)+%SI ................................................................................................. 15 Esercizio 6: CALL (%EAX) (3 bus) ........................................................................................ 16 Esercizio 7: JMP (%EAX) (3 bus) ........................................................................................... 17 Esercizio 8: JNZ (%EAX) ........................................................................................................ 18 Esercizio 9: JNZ (%EAX + %EBX) ........................................................................................ 19 Esercizio 10: CALL (%EAX + %EBX) ..................................................................................... 20 Esercizio 11: CALL (%EAX + $4) .......................................................................................... 21 Memorie Ram, Cache e Virtuali Regole ed accorgimenti ............................................................................................................ 22 Esercizio 1 prima parte: dimensioni dell'indirizzo ................................................................... 25 Esercizio 1 seconda parte: rapporto tra presenza/assenza di Cache ......................................... 26 Esercizio 2 prima parte: dimensione memoria virtuale ............................................................ 28 Esercizio 2 seconda parte: processi in stato di "fuori memoria" .............................................. 29 Esercizio 2 terza parte: specificare calcolo valore R .30 Esercizio 3: dimensioni dell'indirizzo della Cache e Ram ...................................................... 31 Esercizio 4: numero di Page Fault ............................................................................................ 33 3 Esercizio 5: dimensioni dell'indirizzo della Cache e Ram ...................................................... 35 Esercizio 6: dimensioni memoria Cache ................................................................................. 37 Esercizio 7: dimensioni dell'indirizzo della Cache e Ram ...................................................... 40 Esercizio 8: numero di Page Fault .......................................................................................... 42 Esercizio 9: dimensioni dell'indirizzo della Cache e Ram ..................................................... 43 Esercizio 10: dimensioni dell'indirizzo della Cache e Ram ................................................... 45 Esercizio 11: dimensioni dell'indirizzo della Ram ................................................................. 47 Esercizio 12: dimensioni dell'indirizzo della Ram ................................................................. 48 Esercizio 13: dimensioni dell'indirizzo della Ram ................................................................. 50 Pipeline Regole ed accorgimenti ............................................................................................................ 51 Esercizio 1 ................................................................................................................................ 52 Esercizio 2 ................................................................................................................................ 53 Esercizio 3 ................................................................................................................................ 54 Esercizio 4 ................................................................................................................................ 55 Esercizio 5 ................................................................................................................................ 56 Domande di teoria Domanda 1: pipeline ................................................................................................................ 57 Domanda 2: predizione dei salti ............................................................................................... 58 Domanda 3: unit di controllo cablate o microprogrammate ................................................... 59 Domanda 4: ottimizzazioni CPU .............................................................................................. 60 Domanda 5: meccanismo di Interrupt ....................................................................................... 61 Domanda 6: motivazioni di una Pipeline .................................................................................. 62 Domanda 7: memorie associative e non associative ................................................................. 63 Domanda 8: ottimizzazioni CPU .............................................................................................. 64
4
Microistruzioni: regole ed accorgimenti
Per svolgere questi esercizi, necessario innanzitutto sapere come funzionano le istruzioni Assembly Intel (in sintassi AT&T). Ci importante perch non bisogna imparare a memoria tutte le microistruzioni, ma bisogna ragionare per istruire il nostro microprocessore. Un buon esperimento consiste nel creare dei piccoli programmi in Assembly e vedere, tramite il Debugger, quali registri vengono modificati e come viene impostato in particolare il PC, il registro puntatore di Stack ESP e EBP. Capire bene le microistruzioni significa evitare i Segmentation Fault nella creazione di programmi in Assembly; spesso per, dalle Segmentation Fault si imparano le microistruzioni. Bisogna tener presente che un solo valore per volta pu passare nel bus; per sicurezza, ricordarsi sempre di controllare che non si stiano manipolando due valori differenti in un'unica microistruzione. Ad esempio, se devo utilizzare il valore del registro EAX e lo devo sommare al valore di EBX, sicuramente uno dei due deve essere salvato in un registro ausiliario della ALU (in alcune architetture di riferimento si chiama Y, in altre V).
Particolare attenzione verso queste scritture (indirizzamenti):
%EAX Indirizzamento diretto a registro: il valore viene prelevato dal registro;
(%EAX) Indirizzamento indiretto a registro: il valore si trova nell'indirizzo di memoria puntato da eax, quindi occorre decodificarlo inviando il valore del registro EAX nel registro MAR (Memory Address Register), aspettare la lettura in memoria (WMFC), prelevare il valore ottenuto tramite MDR (Memory Data Register). 5
4(%EAX) Come per lindirizzamento indiretto, con laggiunta che il valore ottenuto da MDR deve essere sommato al valore prima della parentesi (in questo caso 4). $4(%EAX) Indirizzamento indiretto con spiazzamento: come per l'istruzione sopra, con l'aggiunta che, dopo la somma di 4, deve essere aggiunto lo spiazzamento.
Bisogna ricordare infine di dividere la fase di Fetch, che in tutte le microistruzioni uguale, la fase di Decode, che in alcuni casi non presente, e la fase di Execute. Di seguito vengono riportate alcune istruzioni Assembly Intel 80X86 e la relativa sequenza di passi.
MOV src, dst Il valore di src viene spostato in dest, bisogna quindi prelevare il valore del primo registro src e caricarlo nel registro dst. Questa istruzione consente linizializzazione di un registro o di unarea di memoria. Accetta inoltre i modificatori l,w e b per indicare la dimensione delloperatore src.
ADD src, dest Viene sommato il valore di src a dest e il valore ottenuto viene caricato in dest; bisogna perci prelevare il valore del primo registro src e caricarlo nel registro ausiliario della ALU, poi prelevare il valore di dest e direttamente sommarlo al valore, precedentemente caricato nel registro ausiliario, tramite il comando ADD (segnale di controllo della ALU), per poi salvarlo nel registro di uscita della ALU (chiamato Z). Infine il valore in Z deve essere inviato in dest.
SUB src, dest Questa non molto differente dalla ADD; semplicemente bisogna fare il complemento a 2 di src ed eseguire le medesime microistruzioni di ADD. 6 J value Questa indica che deve essere eseguito un salto verso value (pu essere un'etichetta, un valore di registro, ecc...) in base alla situazione descritta dopo J:
JZ: Jump if Zero JE: Jump if Equal JNE: Jump if Not Equal JL : Jump if Less JLE: Jump if less or equal JG: Jump if Great JGE: Jump if greater or equal
Si porta un'eccezione per JMP, ovvero salto incondizionato, in cui si salta direttamente senza controlli. Prima di tutto, oltre alla fase di Fetch, bisogna controllare se il valore ottenuto da una precedente CMP (Compare) soddisfa la condizione; se non la soddisfa, la microistruzione finisce subito, altrimenti bisogna eseguire il salto. Deve perci essere decodificato il valore value che pu provenire da diversi luoghi, in base alla situazione, (se un'etichetta, proviene dall'OFFSET, se un registro proviene da esso, se un indirizzamento vedere sopra). Una volta ottenuto il valore deve essere sommato al valore di PC e dopo essere stato sommato, deve essere inserito nel PC.
N.B. Si fa un'eccezione per i salti assoluti, in quanto il valore value deve essere inserito direttamente in PC senza somma.
7 PUSH value L'operazione di Push consiste nell'inserire un valore value nella cima dello Stack; occorre perci decrementare il registro ESP di 4 per puntare ad una cella vuota dello Stack (superiore a quella attuale), caricare il nuovo valore di ESP sia in ESP sia in MAR, prendere il valore value e caricarlo nel registro MDR e dare il comando WRITE, in modo da scrivere il valore nella cella prescelta. Dopo WMFC l'istruzione termina. Pu essere seguito solo dalle lettere w (16 bit) o l (32 bit). Il registro ESP viene decrementato di tanti byte quanti ne vengono messi sullo stack ( 4 con l e 2 con w)
POP dest L'operazione di Pop consiste del prelevare il valore della cima dello Stack e caricarlo nel luogo dest; l'esatto opposto della Push. Deve essere incrementato di 4 il valore di ESP in modo da puntare ad una cella sottostante (quindi non vuota) dello Stack, salvare il nuovo valore di ESP in ESP e caricarlo in MAR, poi si d il comando di lettura READ e, dopo WMFC, si preleva il valore ottenuto da MDR e si carica nella destinazione dest. Pu essere seguito solo dalle lettere w (16 bit) o l (32 bit). Il registro ESP viene incrementato di tanti byte quanti ne vengono messi sullo stack ( 4 con l e 2 con w)
N.B. Il recupero di informazioni dello stack mediante pi chiamate dellistruzione POP deve avvenire nellordine inverso del loro inserimento nello stack mediante le istruzioni PUSH.
CALL value e RET Call indica una chiamata a funzione; la funzione identificata da value, che pu essere un indirizzo, un'etichetta, un indirizzamento diretto. Si pu dire che prima viene eseguita un'operazione di Push del valore di PC; infatti viene caricato il valore incrementato di 4 di ESP in MAR, poi viene 8 caricato il valore di PC in MDR e si d il comando di scrittura. Questo serve perch si salva in una cella (possibilmente vuota) dello Stack il valore di ritorno della funzione, cio il valore del PC (per cos dire serve al microprocessore per ricordarsi cosa stava facendo prima di iniziare ad eseguire la funzione chiamata), per poi riottenerla con l'istruzione finale della funzione chiamata RET. La RET estra dalla cima dello stack un valore, lo interpreta come indirizzo di unistruzione e fa saltare il processore a tale istruzione (il valore sullo stack corrisponde allindirizzo dellistruzione successiva allistruzione CALL). In poche parole esegue l'esatto opposto di CALL, cio preleva dallo Stack il valore di PC.
N.B. Al momento dellesecuzione della RET in cima allo stack deve essere presente il valore che era stao messo dalla CALL. Quindi nella funzione il numero di istruzioni PUSHW (e PUSHL) deve essere uguale al numero di istruzione POPW (e POPL) affinch al momento dellesecuione della RET lo stack sia nelle stesse condizioni in cui si trovava allinizio della funzione. Le microistruzioni dellistruzione RET sono:
1. PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2. WMFC, Z OUT , PC IN
3. MDR OUT , IR IN
4. ESP OUT , SELECT[4], ADD, Z IN
5. Z OUT , ESP IN , MAR IN , READ 6. WMFC 7. MDR OUT , PC IN, END
9
Dopo la fase di Push di PC, bisogna fare attenzione al tipo di salto: Salto Assoluto: il valore value deve essere inserito direttamente in PC; PC=[Value] Salto Relativo: il valore value deve essere sommato a PC e il valore ottenuto deve essere inserito nel registro PC; PC=[PC+Value]
Ovviamente tutti gli esercizi possono avere delle varianti di tema; pu succedere che si presenti una ADD non semplicemente tra 2 valori, ma ad esempio ADD $4(%eax + %ebx), %ecx (un caso un po' assurdo). Bisogna essere in grado di unire tutte le varianti e scindere l'istruzione in altrettante istruzioni conosciute, in modo da non sbagliare. Sicuramente un buon esercizio pu aiutare a riconoscere le parti. Di seguito si trova l'architettura di riferimento per svolgere gli esercizi. buona cosa ricordarla a memoria per svolgere gli esercizi durante l'esame.
10 Architettura di riferimento per le microistruzioni
11 Esercizio 1
Elencare le micro istruzioni relative alla completa esecuzione della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola e che (%EBX) rappresenti un metodo di indirizzamento indiretto a registro (usare solamente le righe necessarie):
MOVL (%EAX), %EBX
Soluzione:
1. PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2. WMFC, Z OUT , PC IN Fetch 3. MDR OUT , IR IN
4. EAX OUT , MAR IN , READ 5. WMFC 6. MDR OUT , EBX IN , END
Commenti: Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4.Esce il valore di EAX e viene passato al registro degli indirizzi MAR per la lettura 5. Aspetto 7. Lindirizzo viene passato a EBX. Termine istruzione
12 Esercizio 2
Elencare le micro istruzioni relative alla completa esecuzione della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola e che (%EBX) rappresenti un metodo di indirizzamento indiretto a registro (usare solamente le righe necessarie):
ADDL (%EBX), %EAX Soluzione:
1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.EBX OUT , MAR IN , READ 5.WMFC, EAX OUT , V IN
6.MDR OUT , SELECT[V], ADD, Z IN
7.Z OUT , EAX IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4. Esce il valore contenuto in EBX e viene passato al registro MAR affinch possa fare la codifica dell'indirizzo 5. Si attende la risposta del MAR attraverso il comando WMFC (il valore deve essere letto dalla memoria); nel frattempo, siccome il BUS non occupato, il valore contenuto nel registro EAX viene memorizzato temporaneamente nel registro ausiliario della ALU, V 6. Il contenuto del valore precedentemente puntato dal contenuto di EBX esce dall'MDR e viene sommato a EAX in quanto il metodo di indirizzamento indiretto a registro 7. Il risultato della somma dei due registri viene memorizzato in EAX. Termine dell'istruzione.
13 Esercizio 3
Elencare le micro istruzioni relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro e che l'indirizzo di salto della procedura sia relativo al PC:
CALL (%EAX)
Soluzione:
1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.ESP OUT , SELECT[4], SUB, Z IN
5.Z OUT ,ESP IN ,MAR IN Salvataggio stack 6.PC OUT , MDR IN , WRITE 7.WMFC, EAX OUT , MAR IN , READ 8.WMFC,PC OUT ,V IN
9.MDR OUT , SELECT[V], ADD, Z IN
10.Z OUT , PC IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
Salvataggio dello stack:
4. Viene decrementato il valore dell'ESP (stack pointer) per puntare ad una cella vuota dello Stack, inizio dell'operazione di PUSH nella pila di PC. 5. ESP viene caricato nella MAR per la fase di scrittura. 6. Il PC passa nel registro dei dati MDR e viene eseguita l'operazione di scrittura, salvando in memoria (nella cella nuova dello Stack) l'indirizzo attuale di PC. 7.Attesa scrittura.Nel frattempo il valore di EAX viene passato al MAR come indirizzo di memoria. 8.Attesa lettura; nel frattempo PC viene caricato nel registro V, siccome il BUS non occupato. 9.Dal MDR esce il valore puntato dal contenuto di EAX che viene sommato al PC in quanto il salto relativo. 10. L'indirizzo reale dell'istruzione da eseguire viene passato al PC. Termine dell'istruzione.
14 Esercizio 4
Elencare le micro istruzioni relative al caricamento, decodifica ed esecuzione della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro e che il salto condizionato sia di tipo diretto:
JZ (%EAX) Soluzione: 1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.if (!ZERO) END, EAX OUT , MAR IN , READ 5.WMFC, PC OUT , V IN
6.MDR OUT , SELECT[V], ADD, Z IN
7.Z OUT , PC IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4. Se il risultato non zero termine dell'istruzione, altrimenti il contenuto di EAX viene passato al MAR come un indirizzo e viene letto 5. Attesa per l'interpretazione dell'indirizzo; nel frattempo, siccome il BUS non occupato, il valore corrente del PC viene messo nella locazione registro ausiliario della ALU , V 6. L'indirizzo prodotto da MDR viene sommato a quello del PC attuale 7. L'indirizzo della prossima istruzione da eseguire viene messo nel PC. Termine dell'istruzione.
15 Esercizio 5
Elencare le micro istruzioni (insieme dei segnali di controllo) relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro e che il salto condizionato sia di tipo diretto:
JZ (%EAX)+%SI
Soluzione:
1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.if (!ZERO) END, EAX OUT , MAR IN , READ 5.WMFC, SI OUT , V IN
6.MDR OUT , SELECT[V], ADD, Z IN
7.Z OUT , V IN
8.PC OUT , SELECT[V], ADD, Z IN
9.Z OUT , PC IN , END Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4. Se il risultato non zero termine dell'istruzione, altrimenti il contenuto di EAX viene passato al MAR come un indirizzo e viene letto 5. Attesa per l'interpretazione dell'indirizzo; nel frattempo il valore di SI viene messo nel registro ausiliario V 6. L'indirizzo prodotto da MDR viene sommato a SI e viene memorizzato in Z 7. Il valore contenuto in Z viene trasferito in V 8. Il valore di V viene sommato al valore attuale del PC, il tutto viene salvato in Z 9. L'indirizzo della prossima istruzione da eseguire viene messo nel PC. Termine dell'istruzione.
16 Esercizio 6
Elencare le micro istruzioni (insieme dei segnali di controllo) relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia TRE BUS, che l'istruzione sia composta da una sola parola, che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro e che il salto sia di tipo relativo:
CALL (%EAX)
Soluzione:
1.PC OUT A , NOP, MAR IN C , READ 2.PC OUT A , SET CARRY-IN, ADD, PC IN C , WMFC Fetch 3.MDR OUT B , IR IN
4.ESP OUT A , SET CARRY-IN, SUB, ESP IN C ,MAR IN C
5.PC OUT A , NOP, MDR IN C , WRITE Salvataggio stack 6.WMFC
7.EAX OUT A , NOP, MAR IN C , READ 8.WMFC 9.MDR OUT A , PC OUT B , ADD, PC IN C , END.
Commenti:
Fetch: 1. Il valore corrente del PC viene passato nel registro MAR 2. Il valore del PC viene incrementato di uno 3. Viene passato al registro delle istruzioni l'indirizzo della prossima istruzione da eseguire
Salvataggio stack: 4. Il valore dello stack pointer viene decrementato,salvato e passato al registro degli indirizzi. 5. Il valore del PC precedentemente incrementato di uno passa nel memory date register 6. Attesa scrittura del PC nello stack.
7. Il contenuto del registro EAX viene passato al MAR per esser interpretato 8. Attesa 9. Il contenuto di EAX esce dal MDR come un indirizzo che viene sommato al PC in quanto il salto relativo, il nuovo indirizzo dell'istruzione da eseguire viene quindi memorizzato nel PC affinch l'esecuzione possa continuare.
17 Esercizio 7
Elencare le micro istruzioni (insieme dei segnali di controllo) relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia TRE BUS, che l'istruzione sia composta da una sola parola e che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro (usare solamente le righe necessarie). Salto relativo:
J MP (%EAX)
Soluzione:
1.PC OUT A , NOP, MAR IN C , READ 2.PC OUT A , SET CARRY-IN, ADD, PC IN C , WMFC Fetch 3.MDR OUT B , IR IN
4.EAX OUT A , NOP, MAR IN , READ 5.WMFC 6.MDR OUT A , NOP, PC IN , END
Commenti:
Fetch: 1. Viene scaricato il valore del PC e trasferito al MAR per essere interpretato 2. Il valore corrente del PC viene incrementato di uno e il nuovo valore ottenuto PC+1 viene memorizzato in PC 3. L'indirizzo elaborato dal MDR viene trasferito nell'IR
4. Il valore di EAX viene passato al MAR per essere interpretato come un indirizzo 5. Attesa dell'interpretazione 6. L'indirizzo ottenuto viene passato al PC in modo tale che quest'ultimo contenga l'indirizzo della prossima istruzione da eseguire. Fine.
18 Esercizio 8
Elencare le microistruzioni relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%EAX) rappresenti un metodo di indirizzamento indiretto a registro e che l'indirizzo di salto della procedura sia relativo al PC
J NZ (%EAX)
Soluzione:
1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.if (ZERO) END, EAX OUT , MAR IN , READ 5.WMFC, PC OUT , V IN
6.MDR OUT , SELECT[V], ADD, Z IN
7.Z OUT , PC IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4. Se il risultato zero termine dell'istruzione, altrimenti il contenuto di EAX viene passato al MAR come un indirizzo e viene letto (per ottenere il valore effettivo) 5. Attesa per l'interpretazione dell'indirizzo, il valore corrente del PC viene messo nella locazione V 6. L'indirizzo ottenuto da MDR viene sommato a quello del PC attuale 7. L'indirizzo della prossima istruzione da eseguire viene messo nel PC. Fine dell'istruzione.
19 Esercizio 9
Elencare le micro istruzioni relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%Exx) rappresenti un metodo di indirizzamento indiretto a registro e che l'indirizzo di salto della procedura sia assoluto:
J NZ (%EAX +%EBX) Soluzione:
1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.if (ZERO) END, EAX OUT , V IN
5.EBX OUT , SELECT[V], ADD, Z IN
6.Z OUT , MAR IN , READ 7.WMFC 8.MDR OUT ,PC IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
4. Se il risultato zero termine dell'istruzione, altrimenti il contenuto di EAX viene passato in V 5. EBX viene sommato al valore di EAX ed il risultato viene memorizzato in Z 6. La somma ottenuta viene passata al MAR come un indirizzo da interpretare 7. Attesa 8. L'indirizzo della prossima istruzione da eseguire (quindi la somma di EAX ed EBX), viene caricato nel PC (il salto infatti assoluto). Termine istruzione.
20 Esercizio 10
Elencare e commentare le micro istruzioni relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%Exx) rappresenti un metodo di indirizzamento indiretto a registro e che l'indirizzo di salto della procedura sia assoluto:
CALL (%EAX +%EBX) Soluzione: 1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fetch 3.MDR OUT , IR IN
4.ESP OUT , SELECT[4], SUB, Z IN
5.Z OUT , ESP IN , MAR IN Salvataggio Stack 6.PC OUT ,MDR IN ,WRITE 7.WMFC, EAX OUT ,V IN
8.EBX OUT , SELECT[V], ADD, Z IN
9. Z OUT , MAR IN , READ 10.WMFC 11.MDR OUT ,PC IN , END.
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
Salvataggio dello stack: 4. Viene decrementato il valore dell'ESP (stack pointer) per puntare ad una cella vuota dello Stack, inizio dell'operazione di PUSH nella pila di PC. 5. ESP viene caricato nella MAR per la fase di scrittura. 6. Il PC passa nel registro dei dati MDR e viene eseguita l'operazione di scrittura, salvando in memoria (nella cella nuova dello Stack) l'indirizzo attuale di PC. 7. Attesa scrittura, Nel frattempo il valore di EAX esce e viene salvato nel registro ausiliario della ALU V 8. Il valore di EBX viene sommato a EAX 9.EAX+EBX viene passato al registro degli indirizzi MAR per la lettura 10.Attesa (ci che uscir da MDR sar il nuovo valore di PC cio l'indirizzo dell'istruzione da eseguire) 11.L'indirizzo reale dell'istruzione da eseguire viene passato al PC in quanto il salto assoluto. Termine istruzione
21 Esercizio 11
Elencare e commentare le micro istruzioni relative alla completa esecuzione (caricamento, decodifica, esecuzione) della seguente istruzione assembler (Intel 80386 AT&T), assumendo che la CPU abbia un solo BUS, che l'istruzione sia composta da una sola parola, che (%Exx) rappresenti un metodo di indirizzamento indiretto a registro, che $4 sia un indirizzamento immediato e che l'indirizzo di salto della procedura sia assoluto (usare solamente le righe necessarie e commentare ogni istruzione):
CALL (%EAX +$4)
Soluzione: 1.PC OUT , MAR IN , READ, SELECT[4], ADD, Z IN
2.WMFC, Z OUT , PC IN Fecth 3.MDR OUT , IR IN
4.ESP OUT , SELECT[4], SUB, Z IN
5.Z OUT , ESP IN ,MAR IN Salvataggio Stack 6.PC OUT , MDR IN , WRITE 7.WMFC, EAX OUT ,V IN
8. OFFSET(IR) OUT ,SELECT[V], ADD, Z IN
9.Z OUT ,MAR IN , READ 10.WMFC 11.MDR OUT , PC IN , END
Commenti:
Fetch: 1. Viene caricato, letto tramite MAR ed incrementato il PC (nell'architettura Intel a 32 bit, per fare ci bisogna incrementare di 4) 2. Viene messo in PC il valore PC+4 3. Escono i dati da MDR che vanno messi nel registro delle istruzioni (IR)
Salvataggio dello stack: 4. Viene decrementato il valore dell'ESP (stack pointer) per puntare ad una cella vuota dello Stack, inizio dell'operazione di PUSH nella pila di PC. 5. ESP viene caricato nella MAR per la fase di scrittura. 6. Il PC passa nel registro dei dati MDR e viene eseguita l'operazione di scrittura, salvando in memoria (nella cella nuova dello Stack) l'indirizzo attuale di PC. 7. Attesa scrittura nello Stack, mentre il valore di EAX viene caricato nel registro ausiliario V (la seconda operazione non fa parte del salvataggio dello stack, ma stata scritta sulla stessa riga per risparmiare un ciclo, in quanto il BUS in quel momento non era occupato).
8. L'offset di IR che contiene il valore 4 (poich una costante) viene sommato a EAX 9. Il risultato della somma passa al registro degli indirizzi MAR, in quanto il metodo di indirizzamento indiretto. 10.Attesa lettura 11.Il valore letto passa nel PC,in quanto il salto assoluto. Termine struzione 22 Memorie Ram, Cache e Virtuali: regole ed accorgimenti
Per questo argomento, esistono vari tipi di esercizio. Il pi semplice quello di trovare la dimensione dell'indirizzo della Ram e della Cache. Per questo tipo di esercizio, utile imparare delle piccole formule. Questi infatti si svolgono sempre allo stesso modo, ossia bisogna identificare la dimensione dei campi che compongono l'indirizzo. I campi sono: PAROLA, BLOCCO, ETICHETTA. Innanzitutto bisogna identificare la dimensione dell'indirizzo; per fare ci, bisogna semplicemente prendere il numero di parole nella Ram e scomporlo in potenza di 2. Si otterr perci un numero 2 n
, il cui n sar il numero corrispondente alla dimensione dell'indirizzo. Sapere quanto valgono, in potenze di 2, 1KB, 1MB, 1GB ecc.. pu agevolare loperazione:
Se quindi il numero di parole nella Ram 4M parole: 4 = 2 2 1MB = 2 20 2 20 *2 2 = 2 22 22 bit (Dimensione dellindirizzo) Successivamente bisogna scoprire la dimensione del campo PAROLA; per fare ci, bisogna considerare il numero di parole per blocco e trasformarlo in potenza di 2. Si ottiene perci il numero 2 n , il cui n il numero corrispondente alla dimensione del campo PAROLA. Per il campo BLOCCO, necessario ottenere la dimensione della Cache (a volte indicata con # Cache, altre con dim. Cache); per far ci, occorre dividere il numero di parole nella Cache per il 23 numero di parole per blocco. Infine bisogna ottenere il Cache Set, dividento la dimensione della Cache per il tipo di set (dato nella consegna, come per esempio 4 set associativa, il 4 il numero di set da utilizzare convertendolo in potenza di 2). Il tutto si potrebbe riassumere attraverso delle formule: Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco Per ottenere infine il campo ETICHETTA, occorre ottenere la dimensione della Ram, dividendo il numero di parole nella Ram per il numero di parole del blocco; dopo ci, si divide il numero appena ottenuto per il Cache Set. Come prima, possiamo riassumere il tutto attraverso delle formule: Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco
Per completare l'esercizio, occorre disegnare l'indirizzo ottenuto e verificare se la somma delle dimensioni dei campi restituisce un risultato uguale alla dimensione dell'indirizzo.
Il disegno avr una forma del genere:
ETICHETTA BLOCCO PAROLA Bit Bit bit
bit Etichetta + bit Blocco + bit Parola = bit dim. Indirizzo.
24 In alcuni esercizi pu capitare che vengano chieste le dimensioni dellindirizzo della Cache. Per trovare tali dimensioni basta ridurre in potenza di 2 le parole della Cache e sottrarre i bit dei campi Blocco e Parola (questi due campi rimangono invariati, si va a modificare solo il campo Etichetta). Il risultato sar la nuova dimensione del campe Etichetta. Es. Cache 4-set associativa 8k parole
ETICHETTA BLOCCO PAROLA 11 bit 5 bit 6 bit
8k = 2 3 *2 10 = 2 13 13 bit per lindirizzamento 13 5 (bit Blocco) - 6 (bit Parola) = 2 bit (campo Etichetta) ETICHETTA BLOCCO PAROLA 2 bit 5 bit 6 bit
N.B. La Cache pu essere anche essere: accesso diretto: in questo caso non teniamo conto del Cache Set perch vale 1 (2 0 =1) completamente associativa: non esiste il campo Blocco e per calcolare il campo Etichetta basta sottrarre dai bit dellindirizzamento i bit del campo Parole.
Un altro tipo di esercizio quello di considerare quanti Cache miss avvengono durante l'esecuzione di un programma, in base alla grandezza della Cache o della Ram (in assenza di Cache). Di solito questi esercizi sono particolari per ogni situazione, per in pratica basta calcolare quanto viene occupata la Cache o la Ram caricando in esse il codice del programma e i dati e calcolare quanti e quali dati devono essere sostituiti ciclicamente. La stessa cosa riguarda le memorie virtuali, in cui o viene chiesto di determinare i bit che corrispondono alla lunghezza dell'indirizzo logico oppure di calcolare quante pagine devono essere sovrascritte da nuovi dati ciclicamente. 25 Esercizio 1 Prima parte
Si consideri una CPU dotata di memoria cache 4-associativa di 8K parole con 64 parole per blocco. Questa CPU collegata ad una memoria RAM da 4M parole.
Definire le dimensioni dell'indirizzo necessario a indirizzare tutta la memoria RAM e definire le dimensioni dei campi PAROLA, BLOCCO ed ETICHETTA in cui questo indirizzo pu essere suddiviso. Motivare la risposta con un opportuno schema.
Soluzione:
Cache 4-set associativa 8k parole Blocco 64 parole Ram 4M parole
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 4M parole = 2 2 * 2 20 = 2 22 22 bit per l'indirizzo
Dimensione del campo parola:
64 parole per blocco 64 = 2 6 6 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 8k parole / 64 parole 8k / 64 = 2 13 / 2 6 = 2 7
Blocco = 2 7 / 2 2 (4-set associativa) = 2 5 5 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco dim. Ram = 4M parole / 64 parole 4M / 64 = 2 22 / 2 6 = 2 16 Etichetta = 2 16 / 2 5 = 2 11 11 bit necessari a costruire il campo Etichetta
11 + 5 + 6 = 22 Sommati i campi danno le dimensioni dellindirizzamento. ETICHETTA BLOCCO PAROLA 11 bit 5 bit 6 bit 26 Esercizio 1 Seconda parte
Si assuma che la cache appena descritta sia utilizzata per i dati, che sia inizialmente vuota e che utilizzi un algoritmo di sostituzione dei blocchi di tipo LRU (sostituzione dell'elemento meno utilizzato di recente). La CPU esegue un programma che accede in sequenza a tutti gli elementi di un array di 8320 parole (ogni elemento ha le dimensioni di una parola) che memorizzato a partire dall'indirizzo 0. Questa operazione di scansione effettuata all'interno di un ciclo che viene eseguito 5 volte. Si assuma che il tempo di accesso alla cache sia di 1T e che il tempo di accesso alla memoria sia di 10T (entrambi i tempi si riferiscono alla lettura di una parola). Calcolare il rapporto (fattore di miglioramento) tra il sistema in presenza di cache e in assenza di cache per l'esecuzione di questo programma.
Soluzione:
Cache 4-set associativa 8k parole tempo di accesso in lettura pari ad 1T
Blocco 64 parole Ram 4M parole tempo di accesso in lettura pari a 10T
Algoritmo LRU
Array 8320 parole
Essendo la cache 4-set associativa, essa ha 2 2 blocchi per set, quindi 4 blocchi per set. La cache contiene 8k parole, quindi 8192 (8*1024) parole e 8 set che chiameremo set0,set1,...,set7. L'array contiene 8320 parole e siccome in cache ne possono risiedere massimo 8192, si ha che 128 parole (siccome il blocco formato da 64 parole 128 / 64 = 2 che il numero di blocchi corrispendente alle parole) restano fuori dalla cache e dovranno essere caricate sovrascrivendo altri blocchi.
La scansione dell'array viene effettuata all'interno di un ciclo che viene eseguito 5 volte. Il tempo di trasferimento dalla cache alla CPU dipende soltanto dalla dimensione dell'array e della velocit di accesso, quindi indipendente dalla dimensione della cache:
8320*5*1T = 41600T il tempo totale di trasferimento dalla cache alla CPU dell'array.
Calcoliamo ora il numero di accessi alla Ram per caricare la cache.
1^ ciclo 130 blocchi dalla Ram alla cache (la cache inizialmente vuota). Utilizzando l'algoritmo LRU i blocchi 128 e 129 sostituiscono rispettivamente i blocchi 0 e 1 che occupano il set0 e il set1.
2^ - 5^ ciclo I blocchi 0 e 1 dovranno essere ricaricati dalla Ram, quindi sostituiranno i blocchi 8 e 9 del set0 rispettivamente set1. In questo modo tutti i blocchi del set0 e set1 veranno sostituiti con blocchi prelevati dalla Ram. In totale verranno fatti 16*2 accessi alla Ram per ogni ciclo. I set2,...,set7 rimangono inalterati.
-> ESERCIZO IMPOSSIBILE!!! 27 Trasferimento di un blocco dalla Ram alla Cache: 64 (parole) * 10T (tempo di accesso in Ram)
(130+32*4)*64*10T = 165120T il tempo di trasferimento dalla Ram alla cache.
Da cui si ottiene il tempo totale per l'esecuzione del programma
- IN PRESENZA DI CACHE 41600T + 165120T = 206720T
-IN ASSENZA DI CACHE 8320 * 5 * 10T = 416000T
In presenza di Cache l'esecuzione del programma circa 2 volte pi veloce.
In questo caso l'algoritmo LRU opera sempre la scelta peggiore. Se avessimo usato l'algoritmo FIFO il numero di "cache miss" sarebbe stato, durante i cicli 2^ - 5^ , di 4 per ogni ciclo, quindi si otterrebbe un fattore di miglioramento, tra il sistema in presenza di cache e in assenza di cache, maggiore di 3.
28 Esercizio 2 Prima parte
Si consideri un sistema a memoria virtuale con spazio logico di 4G parole, una memoria fisica di 32M parole e dimensione delle pagine di 16K parole.
Determinare il numero di bit che definiscono:
Lunghezza indirizzo logico: Di cui per Num. Pag. Logica per lo spiazzamento
Lunghezza indirizzo fisico: di cui per Num. Pag. Fisica per lo spiazzamento
per calcolare il numero pagina logica (indirizzo logico): 32 14 = 18 per calcolare il numero pagina logica (indirizzo fisico): 25 14 = 11
Lunghezza indirizzo logico: 32 Di cui per Num. Pag. Logica: 18 Per lo spiazzamento: 14 Lunghezza indirizzo fisico: 25 Di cui per Num. Pag. Logica: 11 Per lo spiazzamento: 14
29 Esercizio 2 Seconda parte
Nella seguente tabella sono riportati alcuni valori del parametro R (numero di pagine residenti per processo); sapendo che il Sistema Operativo occupa permanentemente 448 pagine e che sono stati creati 22 processi, indicare per ogni valore di R il numero di processi in stato di "fuori memoria" ossia che non possono avere tutte le pagine in memoria.
Soluzione:
Dato R il numero di pagine residenti per processo, si ha:
Sistema Operativo: occupa 448 pagine permanentemente
Numero Processi: 22
dim. Memoria fisica / dim. Pagina = Num. totale di pagine
2 25 / 2 14 = 2 11 = 2048 pagine
2048 - 448 = 1600 pagine libere
1600 / 40 = 40 => 22 40 = 22 < 40 Non ci sono processi fuori memoria 1600 / 80 = 20 => 22 20 = 2 processi fuori memoria 1600 / 160 = 10 => 22 10 = 12 processi fuori memoria 1600 / 320 = 5 => 22 5 = 17 processi fuori memoria 1600 / 800 = 2 => 22 2 = 20 processi furoi memoria
R 40 80 160 320 800 Numero di processi fuori memoria 0 2 12 17 20
30 Esercizio 2 Terza parte
Specificare come stato calcolato il valore per R = 160:
Soluzione:
I processi in totale sono 22 e il numero di pagine residenti per processo 160, quindi il numero di pagine necessarie per far rimanere i processi in memoria sarebbe 22 * 160 = 3520. Il numero di pagine disponibili per 1600. E' quindi evidente che i processi i quali possono restare attivi in memoria sono 10 (in quanto 10 * 160 = 1600) e per cui quelli fuori memoria sono 12 (22 - 10 = 12).
31 Esercizio 3
Si consideri una memoria cache 4-set associativa della dimensione di 32 Kbyte con 1024 byte per blocco. La cache collegata ad una memoria di 1Mbyte indirizzabile per byte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache 4-set associativa 32 kbyte
Blocco 1 kbyte
Ram 1 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 1M parole = 2 20 20 bit per l'indirizzo
Dimensione del campo parola:
1 KB = 2 10 10 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 32KB / 1 KB 2 5 *2 10 / 2 10 = 2 15 / 2 10 = 2 5
Blocco = 2 5 / 2 2 (4-set associativa) = 2 3 3 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco dim. Ram = 1MB / 1KB 2 20 / 2 10 = 2 10 Etichetta = 2 10 / 2 3 = 2 7 7 bit necessari a costruire il campo Etichetta
7 + 3 + 10 = 20 Sommati i campi danno le dimensioni dellindirizzamento. ETICHETTA BLOCCO PAROLA 7 bit 3 bit 10 bit 32
Dimensioni dell'indirizzo per la Cache:
32 kbyte = 2 5 *2 10 / 2 10 = 2 15 / 2 10 = 2 5
quindi si hanno 15 bit per l'indirizzo
Le dimensioni dei campi parola e blocco restano uguali, quindi si riduce la dimensione del campo etichetta che diventano: 15 - 10 - 3 = 2 bit
infatti 10 + 3 + 2 = 15
ETICHETTA BLOCCO PAROLA 2 bit 3 bit 10 bit 33
Esercizio 4
Si consideri un programma che accede in sequenza a tutti gli elementi di un array di 10000 parole (ogni elemento ha dimensione di una parola). Questa operazione di scansione effettuata all'interno di un ciclo che viene eseguito 10 volte. Si assuma che le dimensioni di una pagina siano di 1k parole. Il programma occupa due pagine ed il suo working set composto da 10 pagine. Quanti page fault avvengono durante l'esecuzione del programma considerando che nessuna pagina del programma residente in memoria al momento della sua esecuzione?
Soluzione:
l codice occupa due pagine.
Parte di dati: 10000 parole (dati) / 1024 parole (dimensione pagina) = 9.76 Quindi servono 10 pagine per caricare tutto il programma.
Codice 1 Codice 2 Dati 1 Dati 2 Dati 3 Dati 4 Dati 5 Dati 6 Dati 7 Dati 8
1^ ciclo: Considerando che la memoria non contiene nessuna pagina del programma,avvengono 12 page fault (2 per il caricamento del programma e 10 per il caricamento dell'array. La mappa della memoria alla fine della scansione :
Codice 1 Codice 2 Dati 9 Dati 10 Dati 3 Dati 4 Dati 5 Dati 6 Dati 7 Dati 8
2^ - 10^ ciclo: utilizzando l'algoritmo LRU: Le pagine Dati 9 e Dati 10 hanno sostituito le pagine Dati 1 e Dati 2 nel ciclo precedente, pagine che sono necessarie nel secondo ciclo di scansione. Per caricare la memoria, utilizzando LRU, la pagina Dati 1 sostituisce la pagina Dati 3 e la pagina Dati 2 sostituisce la pagina Dati 4. In questo modo non si avr mai una pagina Dati utile nella memoria.
2^ - 10^ ciclo: utilizzando l'algoritmo FIFO: Nel ciclo di scansione 1^ la pagina Dati 9 ha sostituito la pagina Dati 8 e poi stata sostituita dalla pagina Dati 10. La mappa della memoria, prima del secondo ciclo, la seguente:
Codice 1 Codice 2 Dati 1 Dati 2 Dati 3 Dati 4 Dati 5 Dati 6 Dati 7 Dati 10
Con l'algoritmo FIFO l'unica pagina che viene ripetutamente cambiata l'ultima pagina, in cui 34 verranno caricate rispettivamente le pagine Dati 8,Dati 9, Dati 10. Concludendo,il numero di page fault :
Possiamo dire che,nel caso in cui la dimensione dei dati eccede leggermente la dimensione della memoria allocata, l'algoritmo vincente FIFO mentre l'algoritmo LRU falisce sempre.
35 Esercizio 5
Si consideri una memoria cache 4-set associativa della dimensione di 16 Kbyte con 512 byte per blocco. La cache collegata ad una memoria di 2Mbyte indirizzabile per byte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache 4-set associativa 16 kbyte
Blocco 512 byte
Ram 2 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 2M parole = 2 * 2 20 = 2 21 21 bit per l'indirizzo
Dimensione del campo parola:
512 byte = 2 9 9 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 16KB / 512 byte 2 4 *2 10 / 2 9 = 2 14 / 2 9 = 2 5
Blocco = 2 5 / 2 2 (4-set associativa) = 2 3 3 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco dim. Ram = 2MB / 512 byte 2
* 2 20 / 2 9 = 2 12 Etichetta = 2 12 / 2 3 = 2 9 9 bit necessari a costruire il campo Etichetta
9 + 3 + 9 = 21 Sommati i campi danno le dimensioni dellindirizzamento.
ETICHETTA BLOCCO PAROLA 9 bit 3 bit 9 bit 36
Dimensioni dell'indirizzo per la Cache:
16 kbyte = 2 4 *2 10 = 2 14
quindi si hanno 14 bit per l'indirizzo
Le dimensioni dei campi parola e blocco restano uguali, quindi si riduce la dimensione del campo etichetta che diventano: 14 - 9 - 3 = 2 bit
ETICHETTA BLOCCO PAROLA 2 bit 3 bit 9 bit
37 Esercizio 6
Si consideri una CPU dotata di memoria cache di 128K byte con 64 byte per blocco. Questa CPU collegata ad una memoria RAM da 16M byte indirizzabile per byte. Definire le dimensioni dell'indirizzo necessario a indirizzare tutta la memoria RAM e definire le dimensioni dei campi PAROLA, BLOCCO (o SET) ed ETICHETTA in cui questo indirizzo pu essere suddiviso. Definire queste dimensioni per una memoria cache di tipo:
ad accesso diretto 2-set associativa completamente associativa
Soluzione:
Cache accesso diretto 2-set associativa completamente associativa 128 kbyte
Blocco 64 byte
Ram 16 Mbyte
Accesso diretto
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 16M parole = 2 4 * 2 20 = 2 24 24 bit per l'indirizzo
Dimensione del campo parola:
64 byte = 2 6 6 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 128KB / 64 byte 2 7 *2 10 / 2 6 = 2 17 / 2 6 = 2 11 Siccome si tratta di accesso diretto possiamo tralasciare il set cache in quanto sarebbe 2 0 =1 Quindi: 11 bit necessari a costruire il campo Blocco
Etichetta = 2 18 / 2 10 = 2 8 8 bit necessari a costruire il campo Etichetta
ETICHETTA BLOCCO PAROLA 8 bit 10 bit 6 bit
8 + 10 + 6 = 24 Sommati i campi danno le dimensioni dellindirizzamento. 39
Completamente Associativa
Dimensione del campo parola:
64 byte = 2 6 6 bit necessari per costruire il campo Paola
Il campo BLOCCO non esiste perch una memoria completamente associativa.
Dimensione del campo etichetta:
bit indirizzo della Ram - bit parola = Dimensione del campo etichetta
24 - 6 = 18
ETICHETTA PAROLA 18 bit 6 bit
18 + 6 = 24 Sommati i campi danno le dimensioni dellindirizzamento.
40 Esercizio 7
Si consideri una memoria cache completamente associativa della dimensione di 64 Kbyte con 1024 byte per blocco. La cache collegata ad una memoria di 16 Mbyte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache completamente associativa 64 kbyte
Blocco 1024 byte
Ram 16 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 16M parole = 2 4 * 2 20 = 2 24 24 bit per l'indirizzo
Dimensione del campo parola:
1024 byte = 2 10 10 bit necessari per costruire il campo Paola
Dimensione del campo etichetta: bit indirizzo della Ram - bit parola = Dimensione del campo etichetta
24 - 10 = 14
ETICHETTA PAROLA 14 bit 10 bit
14 + 10 = 24 Sommati i campi danno le dimensioni dellindirizzamento.
41 Dimensioni dell'indirizzo per la Cache:
64 kbyte = 2 16
quindi si hanno 16 bit per l'indirizzo
Le dimensioni dei campi parola e blocco restano uguali, quindi si riduce la dimensione del campo etichetta che diventano: 16 10 = 6 bit
ETICHETTA PAROLA 6 bit 10 bit
42 Esercizio 8
Si assuma che un computer con memoria virtuale, strutturata a pagine di 4Kbyte, sia dotato di 64Mbyte di memoria fisica. Si consideri un programma con un codice di 7.2Kbyte che accede ciclicamente in sequenza a tutti gli elementi di un array di 1000 record in cui ogni campo composto da 2 numeri interi. Quale deve essere la dimensione del working set perch si abbiano dei page fault solamente nella fase di caricamento del programma con esecuzione del primo ciclo di accesso agli elementi dellarray? Quanti page fault si avrebbero durante l'esecuzione del programma ipotizzando che il working set abbia una pagina meno di quanto definito nel punto precedente e che il ciclo di accesso venga ripetuto 10 volte?
Soluzione:
Dim pagina 4 kbyte memoria fisica 64 Mbyte codice 7,2 kbyte array 1000 record di cui ogni campo contiene 2 numeri interi
La dimensione del Working Set perch si abbiano dei page fault solamente nella fase di caricamento del programma con esecuzione del primo ciclo di accesso agli elementi dell'array di 4 pagine.
Ipotizzando che il working set abbia una pagina in meno di quanto definito nel punto precedente e che il ciclo di accesso venga ripetuto 10 volte, il numero di page fault che si avrebbero durante l'esecuzione del programma 22, infatti:
Si consideri una memoria cache 2-set associativa della dimensione di 64 Kbyte con 1024 byte per blocco. La cache collegata ad una memoria di 4Mbyte indirizzabile per byte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache 2-set associativa 64 kbyte
Blocco 1 Kbyte
Ram 4 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 4M parole = 2 2 * 2 20 = 2 22 22 bit per l'indirizzo
Dimensione del campo parola:
64 byte = 2 6 6 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 64Kbyte / 1 Kbyte 2 6 *2 10 / 2 10 = 2 16 / 2 10 = 2 6 Blocco = 2 6 / 2 (2-set associativa) = 2 5 5 bit necessari a costruire il campo Blocco
Etichetta = 2 12 / 2 5 = 2 7 7 bit necessari a costruire il campo Etichetta
ETICHETTA BLOCCO PAROLA 7 bit 5 bit 10 bit
7 + 5 + 10 = 22 Sommati i campi danno le dimensioni dellindirizzamento. 44
Dimensioni dell'indirizzo per la Cache:
64 Kbyte = 2 6 * 2 10 = 2 16 quindi sono necessari 16 bit per lindirizzo
Le dimensioni dei campi parola e set restano uguali, quindi si riduce la dimensione del campo etichetta che diventano:
16 - 5 -10 = 1 bit
ETICHETTA BLOCCO PAROLA 1 bit 5 bit 10 bit
45 Esercizio 10
Si consideri una memoria cache 4-set associativa della dimensione di 32 Kbyte con 1024 byte per blocco. La cache collegata ad una memoria di 4Mbyte indirizzabile per byte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache 4-set associativa 32 kbyte
Blocco 1024 byte
Ram 4 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 4M parole = 2 2 * 2 20 = 2 22 22 bit per l'indirizzo
Dimensione del campo parola:
1024 byte per blocco 1024 = 2 10 10 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 32 Kbyte / 1 Kbyte 2 5 *2 10 / 2 10 = 2 15 / 2 10 = 2 5
Blocco = 2 5 / 2 2 (4-set associativa) = 2 3 3 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco dim. Ram = 4M parole / 1 Kbyte 4M / 1Kbyte = 2 22 / 2 10 = 2 12 Etichetta = 2 12 / 2 3 = 2 9 9 bit necessari a costruire il campo Etichetta
9 + 3 + 10 = 22 Sommati i campi danno le dimensioni dellindirizzamento. ETICHETTA BLOCCO PAROLA 9 bit 3 bit 10 bit 46
Dimensioni dell'indirizzo per la Cache:
32 Kbyte = 2 5 * 2 10 = 2 15
Le dimensioni dei campi parola e set restano uguali, quindi si riduce la dimensione del campo etichetta che diventano:
15 - 3 -10 = 2 bit
ETICHETTA BLOCCO PAROLA 2 bit 3 bit 10 bit
47 Esercizio 11
Si consideri una CPU dotata di memoria cache 2-associativa di 8K parole con 64 parole per blocco. Questa CPU collegata ad una memoria RAM da 8M parole. Definire le dimensioni dell'indirizzo necessario a indirizzare tutta la memoria RAM e definire le dimensioni dei campi PAROLA, BLOCCO ed ETICHETTA in cui questo indirizzo pu essere suddiviso. Motivare la risposta con un opportuno schema.
Soluzione:
Cache 2-set associativa 8k parole
Blocco 64 parole
Ram 8M parole
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 8M parole = 2 3 * 2 20 = 2 23 23 bit per l'indirizzo
Dimensione del campo parola:
64 parole per blocco 64 = 2 6 6 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 8 Kbyte / 64 2 3 *2 10 / 2 6 = 2 13 / 2 6 = 2 7
Blocco = 2 7 / 2 (2-set associativa) = 2 6 6 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
Etichetta = dim. Ram / Cache Set dim. Ram = parole Ram / parole Blocco dim. Ram = 8M / 64 8M / 64 = 2 3 *2 20 / 2 6 = 2 23 / 2 6 = 2 17 Etichetta = 2 17 / 2 6 = 2 11 11 bit necessari a costruire il campo Etichetta
ETICHETTA BLOCCO PAROLA 11 bit 6 bit 6 bit
11 + 6 + 6 = 23 Sommati i campi danno le dimensioni dellindirizzamento 48 Esercizio 12
NB: questo esercizio non pu essere svolto con la notazione moderna in quanto il numero del set non esprimibile in potenza di 2. Occorre perci considerare il numero del set come 2 n set nei calcoli, non come n-set (come per la risoluzione degli altri esercizi).
Si consideri una memoria cache 3-set associativa della dimensione di 64 Kbyte con 1024 byte per blocco. La cache collegata ad una memoria di 4 Mbyte indirizzabile per byte. Definire le dimensioni ed il significato delle parti dell'indirizzo della cache e dell'indirizzo della RAM.
Soluzione:
Cache 3-set associativa 64 kbyte
Blocco 1024 byte
Ram 4 Mbyte
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 4M parole = 2 2 * 2 20 = 2 22 22 bit per l'indirizzo
Dimensione del campo parola:
1 Kbyte 1024 byte = 2 10 10 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 64 Kbyte / 1 Kbyte 2 6 *2 10 / 2 10 = 2 16 / 2 10 = 2 6
Questo risultato va ora diviso per 2 nset quindi: Blocco = 2 6 / 2 3 (3-set associativa) = 2 3 3 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta:
bit indirizzo della Ram - bit parola - bit set = Dimensione del campo etichetta quindi 22 - 10 - 3 = 9
ETICHETTA BLOCCO PAROLA 10 bit 3 bit 9 bit
10 + 3 + 9 = 22 Sommati i campi danno le dimensioni dellindirizzamento 49
Dimensioni dell'indirizzo per la Cache:
64 Kbyte = 2 6 *2 10 = 21 6 quindi si hanno 16 bit per l'indirizzo
Le dimensioni dei campi parola e set restano uguali, quindi si riduce la dimensione del campo etichetta che diventano:
16 - 3 -10 = 3 bit
ETICHETTA BLOCCO PAROLA 3 bit 3 bit 10 bit
50 Esercizio 13
NB: questo esercizio non pu essere svolto con la notazione moderna in quanto il numero del set non esprimibile in potenza di 2. Occorre perci considerare il numero del set come 2 n set nei calcoli, non come n-set( come per la risoluzione degli altri esercizi).
Si consideri una CPU dotata di memoria cache 3-set associativa di 8K parole con 64 parole per blocco. Questa CPU collegata ad una memoria RAM da 8M parole. Definire le dimensioni dell'indirizzo necessario a indirizzare tutta la memoria RAM e definire le dimensioni dei campi PAROLA, BLOCCO ed ETICHETTA in cui questo indirizzo pu essere suddiviso. Motivare la risposta con un opportuno schema.
Soluzione:
Cache 3-set associativa 8k parole
Blocco 64 parole
Ram 8M parole
Dimensioni dell'indirizzo necessario ad indirizzare tutta la memoria Ram:
dim. Ram 8M parole = 2 3 * 2 20 = 2 23 23 bit per l'indirizzo
Dimensione del campo parola:
64 parole per blocco 64 = 2 6 6 bit necessari per costruire il campo Paola
Dimensione del campo blocco:
Blocco = dim. Cache / Tipo Set dim. Cache = parole Cache / parole Blocco dim. Cache = 8 Kbyte / 64 2 3 *2 10 / 2 6 = 2 13 / 2 6 = 2 7
Questo risultato va ora diviso per 2 n set quindi: Blocco = 2 7 / 2 3 (3-set associativa) = 2 4 4 bit necessari a costruire il campo Blocco
Dimensione del campo etichetta: bit indirizzo della Ram - bit parola - bit set = Dimensione del campo etichetta quindi
23 - 4 - 6 = 13
ETICHETTA BLOCCO PAROLA 13 bit 4 bit 6 bit
13 + 4 + 6 = 23 Sommati i campi danno le dimensioni dellindirizzamento 51 Pipeline: regole ed accorgimenti Questo tipo di esercizi consiste nell'elencare le varie fasi di Fetch, Decode, Execute e Write di una istruzione Assembly in base alle situazioni proposte e in base alle dipendenze di altre istruzioni. Nella migliore delle ipotesi, un'istruzione parte con la sequenza F, D, E, W, la successiva parte invece con la fase di Fetch subito dopo la fase di Fetch dell'istruzione precedente. Graficamente: Istruzione 1 F D E W Istruzione 2 F D E W
Qualora invece un'istruzione dipenda da quella precedente, la sua fase di Fetch inizia all'istante dello stato di Decode della funzione precedente, la fase di Decode perdura per tutto il tempo delle altri stati dell'istruzione precedente (quindi Decode, Execute, Write) pi una fase aggiuntiva dopo la Write. La fase di Execute inizia dopo la fase aggiuntiva di Decode. Graficamente: Istruzione 1 F D E W Istruzione 2 F D D D E W
Qualora invece ci siano 3 istruzioni e l'ultima dipende dalla prima ma non dalla seconda, lo stato in pi descritto precedentemente deve essere in pi rispetto alla prima istruzione (cio da quella che dipende l'istruzione considerata). Graficamente: Istruzione 1 F D E W Istruzione 2 F D E W Istruzione 3
F D D E W
Vediamo che la terza istruzione parte solo DOPO che la prima istruzione ha finito.
Innanzitutto buona cosa leggere bene ogni istruzione elencata per capire le dipendenze. Per capire quali sono le istruzioni dipendenti tra loro, basta vedere quali registri vengono utilizzati. Se due istruzioni usano lo stesso registro, bisogna sicuramente aspettare la fase di Write per iniziare la fase di Execute (come gi descitto prima). 52 Esercizio 1 Si consideri una CPU con una pipeline a 4 stadi (F, D, E, W). Si riporti nel seguente diagramma, per ogni istruzione, lo stadio della pipeline coinvolto in ogni istante di clock. Si ipotizzi la pipeline vuota al tempo 1.
Soluzione: 20 Clock/istruzione 1 2 3 4 5 6 7 8 9 10 11 addl %eax, %ebx F D E W movl ind, %ecx F D E W subl %ebx, %ecx F D D D E W jz loop F D D D E W
Commenti: 1. Listruzione parte normalmente con F D E W 2. La seconda istruzione non ha registri in comune con la prima, quindi non dobbiamo aspettare che finisca per iniziare la fase di Exwcute. 3. Nella terza istruzione vediamo che il registro ECX usato nellistruzione precedente, quindi dobbiamo aspettare che la seconda istruzione termine e aggiungere uno stato di Decode prima di partire con lExecute. 4. Nellultima istruzione si presenta listruzione J, in questo caso dobbiamo sempre aspettare che listruzione precedente abbia finito e aggiungere uno stato di Decode, prima di partire con lExecute.
53 Esercizio 2
Si consideri una CPU con una pipeline a 4 stadi (F, D, E, W). Si riporti nel seguente diagramma, per ogni istruzione, lo stadio della pipeline coinvolto in ogni istante di clock. Si ipotizzi la pipeline vuota al tempo 1.
Soluzione: 20 Clock/istruzione 1 2 3 4 5 6 7 8 9 10 11 mull %eax, %ebx F D E W movl %ecx, ind F D E W cmpl %ebx, 0h F D D E W jnz inizio F D D D E W
Commenti: 1. Listruzione parte normalmente con F D E W 2. La seconda istruzione non ha registri in comune con la prima, quindi non dobbiamo aspettare che finisca per iniziare la fase di Exwcute. 3. Vediamo che la terza e la prima istruzione hanno in comune il registro EBX, quindi dobbiamo aspettare che la prima istruzione termini e aggiungere uno stato di Decode, prima di partire con lExecute. 4. Nellultima istruzione si presenta listruzione J, in questo caso dobbiamo sempre aspettare che listruzione precedente abbia finito e aggiungere uno stato di Decode, prima di partire con lExecute.
54 Esercizio 3
Si consideri una CPU con una pipeline a 4 stadi (F, D, E, W). Si riporti nel seguente diagramma, per ogni istruzione, lo stadio della pipeline coinvolto in ogni istante di clock. Si ipotizzi la pipeline vuota al tempo 1 e che la condizione del salto sia falsa.
Soluzione:
20 Clock/istruzione 1 2 3 4 5 6 7 8 9 10 11 cmpl %eax, %ebx F D E W jz START F D D D E W subl %ebx, %ecx F D D D E W movl %edx, DATA F D E W
Commenti: 1. Listruzione parte normalmente con F D E W 2. Nella seconda istruzione si presenta listruzione J, in questo caso dobbiamo sempre aspettare che listruzione precedente abbia finito e aggiungere uno stato di Decode, prima di partire con lExecute.. 3. Alla terza istruzione vediamo che il registro EBX usato nella prima istruzione ma possiamo notare che tale istruzione si completata al punto 4, dovendo noi partire al punto 5 non ci crea nessun problema. Dobbiamo stare per attenti perch nelle specifiche dellesercizio ci stato detto che la condizione del salto falsa, quindi dobbiamo aspettare che listruzione del salto finisca, aggiungere uno stato di Decode e solo dopo partire con lExecute. 4. Nella quarta e ultima istruzione non abbiamo registri in comune con nessuna delle precedenti istruzioni quindi possiamo far partire lExecute prima che si completi la precedente.
55 Esercizio 4
Si consideri una CPU con una pipeline a 4 stadi (F, D, E, W). Si riporti nel seguente diagramma, per ogni istruzione, lo stadio della pipeline coinvolto in ogni istante di clock. Si ipotizzi la pipeline vuota al tempo 1.
Soluzione:
20 Clock/istruzione 1 2 3 4 5 6 7 8 9 10 11 12 13 14 loop: addl %eax, %ebx F D E W movl ind, %ecx F D E W subl %ebx, %ecx F D D D E W jz loop F D D D E W movl %ecx, ind F D E W
Commenti: 1. Listruzione parte normalmente con F D E W 2. La seconda istruzione non ha registri in comune con la prima, quindi non dobbiamo aspettare che finisca per iniziare la fase di Exwcute. 3. Nella terza istruzione vediamo che il registro ECX usato nellistruzione precedente, quindi dobbiamo aspettare che la seconda istruzione termine e aggiungere uno stato di Decode prima di partire con lExecute. 4. Nella quarta istruzione si presenta listruzione J, in questo caso dobbiamo sempre aspettare che listruzione precedente abbia finito e aggiungere uno stato di Decode, prima di partire con lExecute. 5. Come vediamo nellultima istruzione non ci sono registri in comune quindi possiamo far partre la fase di Execute prima che si completi la precedente.
56 Esercizio 5
Si consideri una CPU con una pipeline a 4 stadi (F, D, E, W). Si riporti nel seguente diagramma, per ogni istruzione, lo stadio della pipeline coinvolto in ogni istante di clock. Si ipotizzi che la pipeline sia vuota al tempo 1 e che jz faccia riferimento allistruzione subl.
Soluzione:
20 Clock/istruzione 1 2 3 4 5 6 7 8 9 10 11 12 13 addl %eax, %ebx F D E W movl %ebx, %ecx F D D D E W subl %eax, %ecx F D D D E W jz loop F D D D E W
Commenti:
1. Listruzione parte normalmente con F D E W 2. La seconda istruzione vediamo che il registro EBX usato nellistruzione precedente, quindi dobbiamo aspettare che la prima istruzione termini e aggiungere uno stato di Decode prima di partire con lExecute. 3. Nella terza istruzione vediamo che il registro ECX usato nellistruzione precedente, quindi dobbiamo aspettare che la seconda istruzione termini e aggiungere uno stato di Decode prima di partire con lExecute. 4. Nellultima istruzione si presenta listruzione J, in questo caso dobbiamo sempre aspettare che listruzione precedente abbia finito e aggiungere uno stato di Decode, prima di partire con lExecute.
57
Domande di teoria Domanda 1
Una CPU con una pipeline a 2 stadi viene sostituita con una CPU con una pipeline a 4 stadi. Se il tempo totale di esecuzione di una singola istruzione rimasto invariato, qual il minimo ed il massimo incremento delle prestazioni che si pu attendere?
Soluzione:
Una pipeline ad n stadi in grado di aumentare le prestazioni idealmente di n volte e di raggiungere lo scopo di riuscire ad eseguire una istruzione a ciclo di clock. Quindi se da una pipeline a due stadi si passa ad una a quattro stadi, essa pu aumentare idealmente le prestazioni di due volte. Il minimo incremento delle prestazioni che si pu ottenere di una volta.
Laumento degli stadi nella pipeline aumenta anche la probabilit di stallo della CPU. In condizione di istruzione di salto, nel caso in cui lalgoritmo di predizione dei salti fallisca, dato che pi istruzioni vengono eseguite in parallelo, si annulla il vantaggio della pipeline con la perdita delle istruzioni fino a quel momento erroneamente elaborate, quindi possibile che non si ottenga alcun incremento in quanto aumentando gli stadi della pipeline aumentano le condizioni di criticit, quindi si potrebbero formare delle bolle che manderebbero in stallo la CPU.
58
Domanda 2
Descrivere il meccanismo e l'utilit della predizione dei salti.
Soluzione:
I salti interrompono il flusso della pipeline e per minimizzare il numero di interruzioni necessario uno schema di brach prediction. I salti sono molto frequenti, in media uno ogni 6 istruzioni; nei processori superscalari che eseguono anche 4 istruzioni per ciclo di clock, la predizione dei salti molto importante. Molti schemi di brach prediction hanno un algoritmo che tiene traccia del comportamento di un certo salto l'ultima volta che stato eseguito. Infatti sese stato eseguito un salto nella precedente istruzione, si far l'ipotesi che il salto avvenga nuovamente. La pipeline ora contiene un'istruzione di salto condizionato e altre istruzioni successive, ma non si sa ancora se tali istruzioni serviranno o meno. Se il salto verr eseguito, l'esecuzione del programma potr continuare tranquillamente, se invece non verr eseguito, tutte le istruzioni caricate nella pipeline dovranno essere eliminate.
La predizione dei salti si divide in due tipi: quella statica e quella dinamica.
Predizione STATICA (compile-time): realizzata dal compilatore. La parola di codice operativo dell'istruzione indica all'unit di prelievo delle istruzioni se deve prevedere che il salto sia effettuato o meno. Il risultato della predizione lo stesso ogni volta che si incontra una data istruzione di salto.
Predizione DINAMICA(run-time): L'hardware del processore determina la probabilit che un salto venga eseguito ogni volta che si incontra una certa istruzione. Ci pu essere ottenuto mantenendo traccia del risultato della decisione di salto l'ultima volta che tale istruzione stata eseguita e ipotizzando che la decisione nella presente istanza possa essere la stessa.
59
Domanda 3
Quali sono le motivazioni che fanno preferire la realizzazione di unit di controllo cablate rispetto a quelle microprogrammate. Definire lo schema di un controllore cablato indicando i segnali utilizzati e la funzione dei blocchi presenti.
Soluzione:
Le unit di controllo cablate sono pilotate da un segnale di clock. Ogni stato del contatore corrisponde ad uno dei passi dellistruzione in esecuzione. Il tempo di clock minimo il t max di propagazione della rete combinatoria nel caso peggiore, quindi le unit di controllo cablate vantano una buona velocit.
Le unit di controllo microprogrammate sono invece molto pi lente, per prelevare le istruzioni successive da eseguire devono continuamente accedere alla memoria. Schema del controllore cablato:
I segnali di controllo richiesti sono univocamente determinati da:
- contenuto del contatore dei passi di controllo - contenuto del registro delle istruzioni - contenuto del codice di condizione e di altri flag di stato che rappresentano gli stati di diverse parti della CPU e delle linee di controllo legate ad esse.
Inoltre per ogni istruzione caricata in IR, una sola delle linee di uscita del decodificatore delle istruzioni posta a a 1, le altre sono poste a 0.
60
Domanda 4
Elencare le ottimizzazioni che devono essere eseguite sull'architettura di un calcolatore per raggiungere l'obiettivo di avere, per la maggioranza delle istruzioni, CPI = 1
Soluzione:
Ottimizzazioni per ottenere CPI medio = 1
1. Architettura a tre bus 2. Incremento PC separato 3. Cache 4. No operazioni su memoria 5. Cache dati separata dalla cache del programma 6. Alu in cui tutte le operazioni vengono eseguite in un ciclo di clock 7. Pipeline
61
Domanda 5
Si descriva il meccanismo di interrupt.
Soluzione:
Un interrupt un meccanismo che permette, ad un avento esterno al calcolatore, di provocare il trasferimento del controllo da un programma ad un altro, attraverso la ISR (Interrupt Service Routine) seguendo il Principio di trasparenza, ossia il programma o il processo in esecuzione non deve ricevere interruzioni o modifiche dall'interrupt, lasciando intatto il suo flusso di esecuzione.
Quando il processore riceve un interrupt, prima termina l'esecuzione in corso (per il principio di trasparenza, un processo non deve essere interrotto, perci si attende prima che la prossima fase di Fetch abbia luogo), poi carica nel PC l'indirizzo della prima istruzione della procedura di risposta interrupt.
2 Quando si verifica un interrupt il contenuto corrente del PC (che punta all'istruzione i+1) dev'essere memorizzato in una locazione temporanea. Devono essere salvate anche tutte le informazioni che possono essere modificate durante la risposta interrupt.
Terminato l'interrupt, per il principio di trasparenza, devono essere ripristinati tutti i registri modificati durante la fase di interrupt.
62
Domanda 6
Quali sono le motivazioni che spingono i microprocessori moderni a essere dotati di una pipeline.
Soluzione:
Lo scopo di adottare le pipeline nei processori moderni quello di ridurre il pi possibile il CPI medio
e di ottenere CPI medio = 1. Le pipeline sono delle strutture interne alla CPU; esse sono dotate di pi stadi (come ad esempio Fetch, Decode, Execute e WriteBack) e permettono di ridurre il CPI aumentando l'IPS. Per avere dei netti miglioramenti in quantit di tempo indispensabile cercare di fare entrare la CPU in stallo il meno possibile, di tenerla quindi sempre a regime. Per fare questo, un meccanismo indispensabile la predizione dei salti (branch prediction). Teoricamente se una pipeline ha n stadi, aumenta l'efficienza di n volte. In realt non cos poich aumenta la probabilit di dipendenza fra i dati, motivo per cui i processori moderni cercano di avere molti stadi ma non eccessivi, ed un sistema di branch prediction il pi affidabile possibile.
63
Domanda 7
Quali sono i vantaggi e gli svantaggi delle memorie completamente associative rispetto alle memoria non associative.
Soluzione:
Memorie completamente associative:
Vantaggi Svantaggi Non ci sono blocchi di Cache predefiniti ove memorizzare i blocchi di Ram, quindi la Cache utilizzabile per intero ed i conflitti di blocco compaiono solo quando la Cache piena. Questo implica massima libert nella scelta di dove posizionare in Cache il blocco di Ram. E' necessario un algoritmo di ricerca per trovare i blocchi ricercati all'interno della Cache. Lo spazio della Cache usato in modo molto efficiente. Costo elevato.
Memorie non associative:
Vantaggi Svantaggi Facile da realizzarsi. Non molto flessibile. Unico blocco in Cache ove memorizzare uno specifico blocco della Ram, quindi sufficiente confrontare i bit pi significativi dell'indirizzo con l'etichetta associata al blocco della Cache per sapere se il blocco presente in Cache oppure no.
64
Domanda 8
Quali sono i vantaggi di una cache a indirizzamento diretto?
Soluzione:
Nella cache ad accesso diretto il set composto da un solo blocco e ogni blocco della RAM ha un unico posto in cache ove essere memorizzato. I bit pi significativi dell'indirizzo vengono confrontati con l'etichetta associata al blocco della Cache: se coincidono, la parola cercata si trova in quel blocco della Cache, altrimenti non c' altra posizione ove cercarla e bisogna caricarla dalla Ram. Il metodo di indirizzamento diretto facile da realizzarsi (anche se non molto flessibile), inoltre, qualora un programma facesse riferimento sempre e solo a specifiche zone di memoria della RAM, l'intera RAM non verrebbe utilizzata, rallentando notevolmente l'esecuzione del programma.