Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Istruzioni
Si scriva solo negli spazi previsti nel testo della prova e non si separino i fogli.
Per la minuta si utilizzino le pagine bianche inserite in fondo al fascicolo distribuito con il testo della prova. I
fogli di minuta, se staccati, vanno consegnati intestandoli con nome e cognome.
È vietato portare con sé libri, eserciziari e appunti, nonché cellulari e altri dispositivi mobili di calcolo o
comunicazione. Chiunque fosse trovato in possesso di documentazione relativa al corso – anche se non
strettamente attinente alle domande proposte – vedrà annullata la propria prova.
Tempo a disposizione 2 h : 00 m
/ variabili globali /
/ stringa inizializzata, termina con il carattere NULL /
char animal [ ] = “RAT”
int n = 1
int off [ ] = 13, -14, 14
/ funzione ricorsiva /
int ping (int ptr, char string)
int tmp = 0
if (strlen (string) > 0)
string [0] = string [0] – ptr
tmp = ping (ptr - 1, &string [1]) + tmp - 65
/ if /
return tmp
/ ping /
spiazzamento
contenuto indirizzo assoluto
rispetto a
simbolico iniziale (in hex)
gp 0x 1000 8000
punto 1 – codice MIPS della sezione dichiarativa globale (numero di righe non significativo)
spiazz. rispetto
contenuto simbolico
a stack pointer
indirizzi alti
$ra salvato +4
indirizzi bassi
Il registro a0 andrà salvato in pila da parte della funzione PING, prima di chiamare la funzione STRLEN, e poi
andrà ripristinato subito dopo; pertanto la pila verrà estesa di una parola.
ptr $a0
string $a1
tmp $s0
punto 3 – codice MIPS dello statement riquadrato in MAIN (num. righe non significativo)
// nota: li, sll e addu possono essere compattate in addiu $a0, $t0, 8
// rientro
addiu $sp, $sp, 8 // elimina area attivazione
jr $ra // rientra a chiamante
Prima di chiamare STRLEN, il reg a0 va salvato (STRLEN lo modifica), e dopo va ripristinato. Prima di
chiamare PING ricorsivamente, non occorre salvarne gli argomenti (non sono usati dopo la chiamata).
dimensione testo: 28 hex (40 dec) dimensione testo: 20 hex (32 dec)
testo testo
indirizzo indirizzo
istruzione istruzione
di parola di parola
0 lui $a0, 0x 0000 0 lw $s0, ($a0)
4 ori $a0, $a0, 0x 0000 4 addi $s1, $zero, 0x 0005
8 jal 0x 0000000 8 beq $s0, $zero, 0x 0001 (= +1)
C lw $a0, 0x 0000($gp) C addu $s1, $a0, $s1
10 lui $v0, 0x 0000 10 lw $s2, ($s1)
14 ori $v0, $v0, 0x 0001 14 bne $s0, $s1, 0x 0000
18 syscall 18 sw $s0, 0x 0000($gp)
1C lui $v0, 0x 0000 1C jr $ra
20 ori $v0, $v0, 0x 000A 20
24 syscall 24
28
2C
dati dati
indirizzo indirizzo
contenuto contenuto
di parola di parola
0 ꞌWꞌ ꞌAꞌ ꞌLꞌ ꞌLꞌ 0 0x 0000 0000
4 ꞌAꞌ ꞌBꞌ ꞌYꞌ 0x00
indirizzo indirizzo
cod. operativo simbolo cod. operativo simbolo
di parola di parola
0 lui STR (parte %hi) 8 beq SKIP
4 ori STR (parte %lo) 14 bne MAIN
8 jal ROUTINE 18 sw SUMFL
C lw STR
Il simbolo LEN dichiarato tramite .eqv è una pura costante e si può non mettere in tabella simboli (la
direttiva .eqv ha lo stesso significato di #define in C, e non ha rilevanza ai fini della rilocazione).
base del testo: 0x 0040 0000 base del testo: 0x 0040 0028
base dei dati: 0x 1000 0000 base dei dati: 0x 1000 0008
NELLA TABELLA DEL CODICE ESEGUIBILE SI CHIEDONO SOLO LE ISTRUZIONI DEI MODULI
MAIN E ROUTINE CHE ANDRANNO COLLOCATE AGLI INDIRIZZI SPECIFICATI
testo
... ...
... ...
0x 0040 0030 beq $s0, $zero, 0x 0001 (= +1) // ROUTINE: beq $s0, $zero, SKIP
... ...
0x 0040 003C bne $s0, $s1, 0x FFF0 (= -16) // ROUTINE: bne $s0, $1, MAIN
... ...
0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1
IN
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0
SEL
D1
0 0 0 0
Q1
D2
0 0 0 0
Q2
CLK 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1
IN
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0
SEL
0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0
D1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1
Q1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1
D2
0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0
Q2
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
U
CLK 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
Sono dati il seguente frammento di codice macchina MIPS (simbolico), che inizia l’esecuzione all’indirizzo
indicato, e i valori iniziali per alcuni registri e parole di memoria.
La pipeline NON è ottimizzata per la gestione dei conflitti di controllo. Si consideri il ciclo di clock 5 in cui
l’esecuzione delle istruzioni nei vari stadi è la seguente:
ciclo di clock
1 2 3 4 5 6 7 8 9 10
4) Dire se il salto condizionato bne viene preso (taken) e calcolarne l’ind. di destinazione:
t1 t7 salto preso;
ind. dest.(BTA) = 0x 0090 000C + (0x 0000 0005 * 4) = 0x 0090 0020 ______
segnali all’ingresso dei registri di interstadio (subito prima del fronte di SALITA del clock – ciclo 5)
IF (addi) ID (sw) EX (sw-stallo) MEM (add)
registro IF/ID registro ID/EX registro EX/MEM registro MEM/WB
.WB.MemtoReg .WB.MemtoReg .WB.MemtoReg
X 0 0
.WB.RegWrite .WB.RegWrite .WB.RegWrite
0 0 1
.M.MemWrite .M.MemWrite
1 0
.M.MemRead .M.MemRead
0 0
.M.Branch .M.Branch
0 0
.PC .PC .PC
0090 0008 0090 0004 0090 0004+ (0000 0008)*4
= 0090 0024
.istruzione .(Rs) ($s7) iniziale
addi 1000 FFFF
.(Rt) ($t1) finale .(Rt) ($t1) iniziale
0055 CCCC 1002 0001
.Rt .R .R
$t1 n.d. $t2
.Rd
****************
.imm/offset esteso .ALU_out .ALU_out
0000 0008 **************** 2469 579A
.EX.ALUSrc .Zero .DatoLetto
1 0 ****************
.EX.RegDest
X
segnali di altre unità funzionali (subito prima del fronte di SALITA del clock – ciclo 5)
Mem.indirizzo RegWrite
2469 579A add 1 lw
MemWrite RegDest
0 add 0 sw-stall
MemRead MemtoReg
0 add 1 lw
NOTA BENE: per percorsi attivi nello stesso ciclo di clock e riferiti alla stessa istruzione, utilizzare una
sola colonna per rappresentarli.
Tabella 3
istruzione che ne
usufruisce
2 (lw) 3 (sub)
v.s.
EX / MEM.R $3 (add)
(sub)
0
EX / MEM.RegWrite 1 (add)
(stallo)
MUX di propagazione
interessato
PA PB
ingresso di selezione
segnali di uscita
di propagazione
MUX PA
10 00
dell’unità
ingresso di selezione
MUX PB
00 01
1) Si indichi la struttura degli indirizzi di memoria per le memorie cache (istruzioni e dati sono uguali)
2) Qual’è la dimensione del blocco in parole da 32 bit? 256 byte / 4 byte per parola = 64 parole
3) Quanti blocchi contiene ciascuna cache (sono uguali) ? da prima, 211 = 2048 blocchi
4) Il tempo di accesso alla memoria centrale è pari a 10 cicli di clock per la prima parola del blocco e a 2
cicli di clock per le parole a indirizzi successivi (memoria interallacciata). Il bus dati è da 32 bit. Si
calcoli il tempo necessario per caricare un blocco di memoria in cache in caso di fallimento (miss).
penalità di fallimento: 10 cicli + 2 cicli (64 1) parole = 136 cicli di clock _______________
5) Si calcoli il tempo medio di accesso alla memoria considerando che il tempo di accesso alla cache è pari
a 1 ciclo di clock, lo hit rate (tasso di successo) della cache istruzioni è pari al 98 %, e lo hit rate
della cache dati è pari al 90 %. Si supponga che il 25 % delle istruzioni eseguite siano lw e sw.
In generale il tempo medio di accesso alla memoria vale 100 / 125 (T medio di accesso alla cache
istruzioni) + 25 / 125 (T medio di accesso alla cache dati).
T medio di accesso alla cache istruzioni: 1 + 0,02 136 =3,72 cicli di clock ________________
T medio di accesso alla cache dati: 1 + 0,1 136 =14,6 cicli di clock ______________________
T medio di accesso alla memoria: 0,8 2,72 + 0,2 14,6 = 2,176 + 2,92 = 5,896 cicli di clock ___
Si consideri un bus con queste ipotesi: il bus è sincrono e svolge un’operazione (arbitraggio, lettura,
scrittura) entro un ciclo di clock; i segnali di controllo sono attivi alti; tutti i segnali hanno ritardo di
propagazione nullo. Si svolgano i punti seguenti:
1) Il processore è master, quando un controllore di DMA (DMAC) chiede (e ottiene) il controllo del bus
tramite arbitraggio centralizzato con segnali BUS_BUSY, BUS_REQ e BUS_GRANT. L’arbitro del bus
(componente del processore) ha ritardo di 10 ns. Il DMAC ha ritardo di 5 ns.
Si completi il diagramma temporale sotto (scrivendo 0 o 1), fino a quando il DMAC ha acquisito il
controllo del bus e il bus è tornato nella situazione iniziale (numero di colonne non significativo):
DMAC richiede controllo del bus (attivando req), arbitro garantisce dopo 10 ns (attivando grant) e
rilascia il controllo del bus (disattivando busy), DMAC toglie richiesta dopo 5 ns (disattivando req) e
assume il controllo del bus (riattivando busy), arbitro toglie grant dopo 10 ns (disattivando grant): Il
bus torna in situazione iniziale in 5 ns: totale 30 ns. (colonna in bold)
2) Quanto tempo occorre affinché il controllo del bus sia pienamente trasferito al DMAC ?