Sei sulla pagina 1di 18

Politecnico di Milano

Dip. di Elettronica, Informazione e Bioingegneria


prof. Luca Breveglieri prof.ssa Donatella Sciuto
prof. Gerardo Pelosi prof.ssa Cristina Silvano

AXO – Architettura dei Calcolatori e Sistemi Operativi


Prova di lunedì 9 novembre 2020

Cognome ________________________ Nome ________________________

Matricola _____________________ Firma ____________________________

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.

Non è possibile lasciare l’aula conservando il tema della prova in corso.

Tempo a disposizione 2 h : 00 m

Valore indicativo di domande ed esercizi, voti parziali e voto finale:

esercizio 1 (6 punti) _________________________

esercizio 2 (2 punti) _________________________

esercizio 3 (6 punti) _________________________

esercizio 4 (2 punti) _________________________

voto finale: (16 punti) ______________________


esercizio n. 1 – linguaggio macchina
Si deve tradurre in linguaggio macchina simbolico (assemblatore) MIPS il frammento di programma C
riportato sotto. Il modello di memoria è quello standard MIPS e le variabili intere sono da 32 bit. Non si
tenti di accorpare od ottimizzare insieme istruzioni C indipendenti. Si facciano le ipotesi seguenti:
 il registro “frame pointer” fp non è in uso
 le variabili locali sono allocate nei registri, se possibile
 vanno salvati (a cura del chiamante o del chiamato, secondo il caso) solo i registri necessari
Si chiede di svolgere i quattro punti seguenti (usando le varie tabelle predisposte nel seguito):
1. Si descriva il segmento dei dati statici dando gli spiazzamenti delle variabili globali rispetto al registro
global pointer gp, e si traducano in linguaggio macchina le dichiarazioni delle variabili globali.
2. Si descriva l’area di attivazione della funzione ping, secondo il modello MIPS, e l’allocazione dei
parametri e delle variabili locali della funzione ping usando le tabelle predisposte
3. Si traduca in linguaggio macchina il codice dello statement riquadrato nella funzione main.
4. Si traduca in linguaggio macchina il codice dell’intera funzione ping (vedi tab. 4 strutturata).

/ variabili globali /
/ stringa inizializzata, termina con il carattere NULL /
char animal [ ] = “RAT”
int n = 1
int off [ ] =  13, -14, 14 

int strlen (char ) / funzione che modifica arg /

/ 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 /

int main ( )  / programma principale /


n = ping (&off [2], animal)
printf ("\n num = %d, new animal: %s", n, animal)
return 0
 / main /

AXO – prova di lunedì 9 novembre 2020 pagina 2 di 18


punto 1 – segmento dati statici (numero di righe non significativo)

spiazzamento
contenuto indirizzo assoluto
rispetto a
simbolico iniziale (in hex)
gp  0x 1000 8000

OFF [2] indirizzi alti

... ... ...

OFF [0]

ANIMAL [3]

... ... ...

ANIMAL [0] indirizzi bassi

punto 1 – codice MIPS della sezione dichiarativa globale (numero di righe non significativo)

.data 0x 1000 0000 # segmento dati statici standard

ANIMAL: .asciiz “RAT” // varglob array stringa ANIMAL (4 char)

AXO – prova di lunedì 9 novembre 2020 pagina 3 di 18


punto 2 – area di attivazione della funzione PING

spiazz. rispetto
contenuto simbolico
a stack pointer
indirizzi alti

indirizzi bassi

punto 2 – allocazione dei parametri


e delle variabili locali di PING nei registri

parametro o variabile locale registro

punto 3 – codice MIPS dello statement riquadrato in MAIN (num. righe non significativo)

// n = ping (&off [2], animal)


MAIN:

AXO – prova di lunedì 9 novembre 2020 pagina 4 di 18


punto 4 – codice MIPS della funzione PING (numero di righe non significativo)
PING: addiu $sp, $sp, // COMPLETARE
// direttive EQU e salvataggio/ripristino registri - NON VANNO RIPORTATI
// tmp = 0

IF: // if (strlen (string) > 0)

THEN: // string [0] = string [0] - ptr

// tmp = ping (ptr - 1, &string [1]) + tmp - 65

ENDIF: // return tmp

// rientro

AXO – prova di lunedì 9 novembre 2020 pagina 5 di 18


seconda parte – assemblaggio e collegamento
Dati i due moduli assemblatore seguenti, si compilino le tabelle relative a:
1. il modulo oggetto di ROUTINE (il modulo oggetto di MAIN prodotto dall’assemblatore e le relative tabelle
sono già dati)
2. le basi di rilocazione del codice e dei dati di entrambi i moduli
3. la tabella globale dei simboli e la tabella del codice eseguibile

modulo MAIN modulo ROUTINE


.data
.data
SUMFL: .word 0
STR: .asciiz "WALLABY"
.eqv LEN, 5
// N.B.: la direttiva asciiz aggiunge
il char NULL al termine della stringa, .text
per terminarla .globl ROUTINE
.text ROUTINE: lw $s0, ($a0)
.globl MAIN addi $s1, $zero, LEN
MAIN: la $a0, STR beq $s0, $zero, SKIP
jal ROUTINE addu $s1, $a0, $s1
lw $a0, STR SKIP: lw $s2, ($s1)
li $v0, 1 bne $s0, $s1, MAIN
syscall sw $s0, SUMFL
li $v0, 10 jr $ra
syscall

Regola generale per la compilazione di tutte le tabelle contenenti codice:


 i codici operativi e i nomi dei registri vanno indicati in formato simbolico
 tutte le costanti numeriche all’interno del codice vanno indicate in esadecimale, con o senza prefisso 0x,
e di lunghezza giusta per il codice che rappresentano
esempio: un’istruzione come addi $t0, $t0, 15 è rappresentata: addi $t0, $t0, 0x000F
 nei moduli oggetto i valori numerici che non possono essere indicati poiché dipendono dalla rilocazione
successiva, vanno posti a zero e avranno un valore definitivo nel codice eseguibile

AXO – prova di lunedì 9 novembre 2020 pagina 6 di 18


(1) – moduli oggetto

modulo MAIN modulo ROUTINE

dimensione testo: 28 hex (40 dec) dimensione testo:

dimensione dati: 08 hex (8 dec) dimensione dati:

testo testo
indirizzo indirizzo
istruzione istruzione
di parola di parola
0 lui $a0, 0x 0000 0
4 ori $a0, $a0, 0x 0000 4
8 jal 0x 0000000 8
C lw $a0, 0x 0000($gp) C
10 lui $v0, 0x 0000 10
14 ori $v0, $v0, 0x 0001 14
18 syscall 18
1C lui $v0, 0x 0000 1C
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ꞌ
4 ꞌAꞌ ꞌBꞌ ꞌYꞌ 0x00

tabella dei simboli tabella dei simboli


tipo può essere T (testo) oppure D (dato) tipo può essere T (testo) oppure D (dato)
simbolo tipo valore simbolo tipo valore
MAIN T 0x 0000 0000
STR D 0x 0000 0000

tabella di rilocazione tabella di rilocazione

indirizzo indirizzo
cod. operativo simbolo cod. operativo simbolo
di parola di parola
0 lui STR (parte %hi)
4 ori STR (parte %lo)
8 jal ROUTINE
C lw STR

AXO – prova di lunedì 9 novembre 2020 pagina 7 di 18


(2) – posizione in memoria dei moduli

modulo MAIN modulo ROUTINE

base del testo: base del testo:

base dei dati: base dei dati:

(3) – tabella globale dei simboli

simbolo valore finale simbolo valore finale

NELLA TABELLA DEL CODICE ESEGUIBILE SI CHIEDONO SOLO LE ISTRUZIONI DEI MODULI
MAIN E ROUTINE CHE ANDRANNO COLLOCATE AGLI INDIRIZZI SPECIFICATI

(3) – codice eseguibile

testo

indirizzo codice (con codici operativi e registri in forma simbolica)

...

0x 0040 0008

0x 0040 000C

...

0x 0040 0030

...

0x 0040 003C

0x 0040 0040

...

AXO – prova di lunedì 9 novembre 2020 pagina 8 di 18


spazio libero per continuazione o brutta copia

AXO – prova di lunedì 9 novembre 2020 pagina 9 di 18


esercizio n. 2 – logica digitale
Sia dato il circuito sequenziale composto da due bistabili master-slave di tipo D (D1, Q1 e D2, Q2, dove
D è l’ingresso del bistabile e Q è lo stato / uscita del bistabile), due ingressi IN e SEL, e un’uscita U,
descritto dal circuito seguente:

Si chiede di completare il diagramma temporale riportato qui sotto. Si noti che:


 si devono trascurare completamente i ritardi di propagazione delle porte logiche e i ritardi di
commutazione dei bistabili
 i bistabili sono il tipo master-slave la cui struttura è stata trattata a lezione, con uscita che commuta
sul fronte di discesa del clock (come indicato anche in figura)

tabella dei segnali (diagramma temporale) da completare


 per i segnali D1, Q1, D2, Q2 e U, ricavare, per ogni ciclo di clock, l’andamento della forma d’onda
corrispondente riportando i relativi valori 0 o 1
 a solo scopo di chiarezza, per i segnali di ingresso IN e SEL è riportata anche la forma d’onda per
evidenziare la corrispondenza tra questa e i valori 0 e 1 presenti nella tabella dei segnali complessiva
 notare che nel primo intervallo i segnali Q1 e Q2 sono già dati (rappresentano lo stato iniziale)

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

AXO – prova di lunedì 9 novembre 2020 pagina 10 di 18


0 0 0 0

0 0 0 0

AXO – prova di lunedì 9 novembre 2020 pagina 11 di 18


esercizio n. 3 – microarchitettura del processore pipeline
prima parte – pipeline e segnali di controllo

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.

indirizzo codice MIPS registro contenuto iniziale


0x 008F FFF8 lw $t1, 0x FFFC($s7) $t1 0x 1002 0001
add $t2, $t2, $t2 $t2 0x 1234 ABCD
sw $t1, 0x 0008($s7) $t7 0x AAAA BBBB
addi $t2, $t1, 0x 7FFC $s7 0x 1000 FFFF
bne $t1, $t7, 0x 0005 memoria contenuto iniziale
0x 1000 FFFB 0x 0055 CCCC

1) Si completi in binario la rappresentazione macchina dell’istruzione lw $t1, 0x FFFC($s7)

000010
6 bit 5 bit 5 bit 16 bit

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 

1 – lw  IF  ID  EX  MEM  WB           


istruzione 

2 – add    IF  ID  EX  MEM  WB         

3 – sw      IF  IDstallo  ID  EX  MEM  WB     

4 ‐ addi        IFstallo  IF  ID  EX  MEM  WB   

  5 ‐ bne            IF  ID  EX  MEM  WB 

2) Calcolare il valore dell’indirizzo di memoria dati nell’istruzione lw (load):

_______________________________________________________________________________

3) Calcolare il valore di $t2 + $t2 dell’istruzione add (addizione):

_______________________________________________________________________________________

4) Dire se il salto condizionato bne viene preso (taken) e calcolarne l’ind. di destinazione:

________________________________________________________________________

AXO – prova di lunedì 9 novembre 2020 pagina 12 di 18


Completare le tabelle.
I campi Istruzione e di tipo NumeroRegistro possono essere indicati in forma simbolica, tutti gli altri in
esadecimale (prefisso 0x implicito). Utilizzare n.d. se il valore non può essere determinato. N.B.: tutti i
campi vanno completati con valori simbolici o numerici tranne quelli precompilati con *******.

segnali all’ingresso dei registri di interstadio (subito prima del fronte di SALITA del clock – ciclo 5)
IF ID EX MEM
registro IF/ID registro ID/EX registro EX/MEM registro MEM/WB
.WB.MemtoReg .WB.MemtoReg .WB.MemtoReg

.WB.RegWrite .WB.RegWrite .WB.RegWrite

.M.MemWrite .M.MemWrite

.M.MemRead .M.MemRead

.M.Branch .M.Branch

.PC .PC .PC

.istruzione .(Rs)

.(Rt) .(Rt)

.Rt .R .R

.Rd
****************
.imm/offset esteso .ALU_out .ALU_out
****************
.EX.ALUSrc .Zero .DatoLetto
****************
.EX.RegDest

segnali di altre unità funzionali (subito prima del fronte di SALITA del clock – ciclo 5)
Mem.indirizzo RegWrite

MemWrite RegDest

MemRead MemtoReg

ATTENZIONE: LA TABELLA SOTTO È RELATIVA AL CICLO 6 (non 5)


segnali relativi al RF (subito prima del fronte di DISCESA interno al ciclo di clock – ciclo 6)
RF.RegLettura1 RF.DatoLetto1 RF.RegScrittura

RF.RegLettura2 RF.DatoLetto2 RF.DatoScritto

AXO – prova di lunedì 9 novembre 2020 pagina 13 di 18


seconda parte – gestione di conflitti e stalli
Si consideri la sequenza di istruzioni sotto riportata
1. add $3, $1, $2
2. lw $4, 32($3)
3. sub $4, $3, $4
4. beq $3, $4, -8 // il salto NON VIENE PRESO
5. sw $4, 16($3)
    ciclo di clock 

    1  2  3  4  5  6  7  8  9  10  11  12  13 

1  IF  ID  EX  MEM  WB                 


   
istruzione 

2    IF  ID  EX  MEM  WB               


   

3      IF  ID  EX  MEM  WB             


   

4        IF  ID  EX  MEM  WB           


 
      ID    EX  IF 
MEM  WB         
  5 
 
Si risponda alle domande seguenti, facendo l’ipotesi che la pipeline:
 sia ottimizzata per la gestione dei conflitti di controllo (valutazione cond. di salto in stadio ID)
 sia dotata di tutti i percorsi di propagazione (EX/EX, MEM/EX, MEM/MEM, EX/ID e MEM/ID)

a) si riportino nel diagramma temporale Tabella 1 (numero di righe non significativo) 


sopra predisposto tutte le dipendenze di istruzione percorso di  ciclo di clock dove 
dato (verde dip; rosso conflitti) istruzione  da cui 
registro
propagazione  è attivo il percorso 
b) si riportino in Tabella 1 – prime tre dipende 
coinvolto 
e stalli  di propagazione 
colonne – le dipendenze di dato che
risultano essere conflitti          
c) si disegni in Tabella 2 il diagramma
temporale della pipeline, mettendo in          
evidenza gli eventuali percorsi di
propagazione che possono essere attivati
         
per risolvere i conflitti, e gli stalli
eventualmente da inserire affinché la          
propagazione sia efficace
d) si indichino in Tabella 1 – ultima          
colonna – i percorsi di propagaz.
effettivamente attivati e gli stalli Tabella 2 
associati, e il ciclo di clock dove sono attivi
  1  2  3  4  5  6  7  8  9  10  11  12  13  14 
             

             

             

             

             

AXO – prova di lunedì 9 novembre 2020 pagina 14 di 18


Si consideri lo schema di PROCESSORE PIPELINE CON STALLO E PROPAGAZIONE, e i percorsi di
propagazione effettivamente attivati e riportati in Tabella 1 della domanda precedente. Per ciascun
ciclo di clock in cui è attiva almeno una propagazione (solo di tipo EX/EX o MEM/EX), si completi
una colonna della Tabella 3 con le informazioni richieste.
Per i registri di interstadio che sono stati scritti in conseguenza di uno stallo, si indichi V.S. (valore di
stallo). Se il valore non può essere calcolato si usi n.d.

NOTA BENE: per percorsi attivi nello stesso ciclo di clock e riferiti alla stessa istruzione, utilizzare una
sola colonna per rappresentarli.

Tabella 3 

ciclo di clock dove


è attiva almeno
una propagazione

istruzione che ne
usufruisce

tipo (o tipi) di
propagazione

ID / EX.Rs
segnali di ingresso all’unità di propagazione

ID / EX.Rt

EX / MEM.R

EX / MEM.RegWrite

MEM / WB.R

MEM / WB.RegWrite

MUX di propagazione
interessato

ingresso di selezione
segnali di uscita

di propagazione

MUX PA
dell’unità

ingresso di selezione
MUX PB

AXO – prova di lunedì 9 novembre 2020 pagina 15 di 18


esercizio n. 4 – domande su argomenti vari
domanda 1 – memoria cache
Si consideri una gerarchia di memoria composta dalla memoria centrale di 4 G byte indirizzabile a byte con
parole da 32 bit, e da una memoria cache istruzioni e una memoria cache dati da 512 K byte ciascuna,
entrambe a indirizzamento diretto (direct mapping) con blocchi da 256 byte e strategia di scrittura
write-through (scrittura immediata). Si svolgano i punti seguenti:

1) Si indichi la struttura degli indirizzi di memoria per le memorie cache (istruzioni e dati sono uguali)

indirizzo di memoria: _______________________________________________________

spiazzamento: _____________________________________________________________

indice: ___________________________________________________________________

etichetta: _________________________________________________________________

2) Qual’è la dimensione del blocco in parole da 32 bit?

3) Quanti blocchi contiene ciascuna cache (sono uguali) ?

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: ______________________________________________________________

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.

T medio di accesso alla cache istruzioni: _______________________________________________

T medio di accesso alla cache dati: ___________________________________________________

T medio di accesso alla memoria: ____________________________________________________

AXO – prova di lunedì 9 novembre 2020 pagina 16 di 18


domanda 2 – funzionamento del bus

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):

operazione (transazione) di arbitraggio


BUS_BUSY 1
BUS_REQ 0 1
BUS_GRANT 0
tempo (ns) 0 5 10 15 20 25 30 35 40

2) Quanto tempo occorre affinché il controllo del bus sia pienamente trasferito al DMAC ?

Tempo: _________________________________________________________________________

3) A quale frequenza di clock massima può funzionare questo bus ?

Frequenza: ______________________________________________________________________

AXO – prova di lunedì 9 novembre 2020 pagina 17 di 18


spazio libero per continuazione o brutta copia

AXO – prova di lunedì 9 novembre 2020 pagina 18 di 18

Potrebbero piacerti anche