Sei sulla pagina 1di 16

Politecnico di Milano

Dip. di Elettronica, Informazione e Bioingegneria


prof.ssa Anna Antola prof.ssa Donatella Sciuto
prof. Luca Breveglieri prof.ssa Cristina Silvano

AXO – Architettura dei Calcolatori e Sistemi Operativi


Prova di mercoledì 6 novembre 2019

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 co-
municazione. Chiunque fosse trovato in possesso di documentazione relativa al corso – anche se non stret-
tamente 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
prima parte – traduzione da C ad assembler

Si deve tradurre in linguaggio macchina simbolico (assemblatore) MIPS il frammento di programma C ripor-
tato 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 descrivano l’area di attivazione della funzione const e l’allocazione delle variabili locali e dei parame-
tri di const nei registri.
3. Si traduca in linguaggio macchina il codice dello statement riquadrato nel prog. principale main.
4. Si traduca in linguaggio macchina il codice dell’intera funzione const (vedi tab. 4 strutturata).

/ sezione dichiarativa costanti e variabili globali /


#define SUP ...
int funct [8200] / 8192 = 2^13 e 32768 = 2^15 /
int inf = 0
int num
int print (int  val) / testata funz foglia print /
int const (int max, int idx)  / funzione const /
int err, curr, prev
prev = max
do 
idx--
curr = funct [idx]
if (curr == prev) 
err = print (&prev) / indirizzo di prev /
 / if /
prev = curr
 while (idx != 0) / do /
return curr
 / const /
void main ( )  / programma principale /
num = 8200
inf = const (SUP, num)
 / main /

AXO – prova di mercoledì 6 novembre 2019 pagina 2 di 16


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

spiazzamento

negativo ?
spiazzamento

positivo o
contenuto
rispetto a
simbolico
gp  0x 1000 8000

indirizzi
alti

NUM

INF

FUNCT [8199]

FUNCT [...]

indirizzi
FUNCT [0]
bassi

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

.data 0x 1000 0000 // segmento dati statici standard

.equ SUP, ... // costante SUP

AXO – prova di mercoledì 6 novembre 2019 pagina 3 di 16


punto 2 – area e registri di CONST (numero di righe non significativo)

area di attivazione di CONST

spiazz. rispetto
contenuto simbolico
a stack pointer
indirizzi alti

indirizzi bassi

allocazione dei parametri e delle


variabili locali di CONST nei registri

parametro / variabile locale registro

punto 3 – codice MIPS degli statement riquadrati di MAIN – (numero di righe non significativo)
// num = 8200

// inf = const (SUP, num)

AXO – prova di mercoledì 6 novembre 2019 pagina 4 di 16


punto 4 – codice MIPS dell’intera funzione CONST – (numero di righe non significativo)
CONST: addiu $sp, $sp, // COMPLETARE - crea area attiv.
// scrivere qui le direttive .equ per gli spiazzamenti in pila

// salvataggi di registri - NON VANNO RIPORTATI


// prev = max

DO: // idx--

// curr = funct [idx]

IF: // if (curr == prev)

THEN: // err = print (&prev) (indirizzo di prev)

ENDIF: // prev = curr

// while (idx != 0)

ENDDO: // return curr – SCRIVERE solo preparazione del valore uscita

AXO – prova di mercoledì 6 novembre 2019 pagina 5 di 16


seconda parte – assemblaggio e collegamento
Dati i due moduli assemblatore seguenti, si compilino le tre tabelle seguenti relative a:
 i due moduli oggetto prodotti dall’assemblatore
 le basi di rilocazione del codice e dei dati dei moduli
 la tabella globale dei simboli e la tabella del codice eseguibile
Le tabelle 1, 2 e 3 di entrambi i moduli MAIN e FUNCTION vanno compilate. Le tabelle 1 e 3 di entrambi i
moduli contengono già i codici operativi delle istruzioni (con le pseudo-istruzioni espanse).

modulo MAIN modulo FUNCTION

.data .data
MIN .word 32 FILL: .space 8
VECT .space 40 ELEM .word 80
MAX .space 4 .text
.text .globl FUNCTION
.globl MAIN FUNCTION: lw $t1, ELEM
MAIN: addi $t0, $zero, 28 beq $t1, $zero, FUNCTEND
sw $t0, MIN lw $t1, MIN
la $a0, VECT beq $t1, $zero, MAIN
jal FUNCTION FUNCTEND: jr $ra
MAINEND: sw $v0, MAX

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, senza prefisso 0x, e di
lunghezza giusta per il codice che rappresentano
esempio: un’istruzione come addi $t0, $t0, 15 è rappresentata come addi $t0, $t0, 000F
 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
esempio: lw $t0, RIL diventa lw $t0, 0000($gp) nell’oggetto e diventa lw $t0,
nnnn($gp) nell’eseguibile, dove RIL è un simbolo rilocabile che si riferisce a un dato globale e nnnn
è il valore opportunamente calcolato durante la generazione dell’eseguibile

AXO – prova di mercoledì 6 novembre 2019 pagina 6 di 16


(1) – moduli oggetto
modulo MAIN modulo FUNCTION

dimensione testo: dimensione testo:

dimensione dati: dimensione dati:

testo testo

indirizzo istruzione indirizzo istruzione


0 addi 0 lw
4 sw 4 beq
8 lui 8 lw
C ori C beq
10 jal 10 jr
14 sw 14

dati dati

indirizzo contenuto (in esadecimale) indirizzo contenuto (in esadecimale)

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 FUNCTION
MAINEND FUNCTEND
MIN FILL
VECT ELEM
MAX

tabella di rilocazione tabella di rilocazione

indirizzo cod. operativo simbolo indirizzo cod. operativo simbolo

AXO – prova di mercoledì 6 novembre 2019 pagina 7 di 16


(2) – posizione in memoria dei moduli
MAIN FUNCTION

base del testo: base del testo:

base dei dati: base dei dati:

(3) – tabella globale dei simboli


simbolo valore finale simbolo valore finale
MAIN FUNCTION

MAINEND FUNCTEND

MIN FILL

VECT ELEM

MAX

(3) – codice eseguibile


testo

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


0040 0000 addi

0040 0004 sw

0040 0008 lui

0040 000C ori

0040 0010 jal

0040 0014 sw

0040 0018 lw

0040 001C beq

0040 0020 lw

0040 0024 beq

0040 0028 jr

Non si richiede la tabella globale dei dati.

AXO – prova di mercoledì 6 novembre 2019 pagina 8 di 16


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), con un ingresso I 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 della porta logica XOR e del negatore, 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

diagramma temporale da completare

    1        1        1        1      1    1        1        1   

I  0    0        0        0        0      0       0    0         

                                                         

D1                                                         

                                                         

Q1  0                                                       

                                                         

D2                                                         

                                                         

Q2  0                                                       

                                                         

U                                                         

                                                         

CLK                                                         

AXO – prova di mercoledì 6 novembre 2019 pagina 9 di 16


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 0FFF 0004 add $t1, $t2, $t3 $t1 0x 1001 0000
lw $t2, 0x AAAF($t3) $t2 0x 0001 0115
beq $t1, $t3, 0x FFFE $t3 0x 1000 FFF5
addi $t3, $t1, 0x 7FFC memoria contenuto iniziale
0x 1000 4004 0x 0044 0FFF
0x 1000 AAA4 0x 1001 1112

1) Si completi in binario la rappresentazione macchina dell’istruzione add $t1, $t2, $t3

000000 100000
6 bit 5 bit 5 bit 5 bit 5 bit 6 bit

2) Dato il valore su 16 bit espresso in esadecimale 0x AAAF lo si interpreti come uno spiazzamento di
parola. A partire da questo, si determini su 32 bit con estensione di segno il valore corrispondente
allo spiazzamento di byte. Si esprima tale valore in esadecimale.

La pipeline NON è ottimizzata per la gestione dei conflitti di controllo. Si consideri il ciclo di clock 4 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 ‐ add  IF  ID  EX  MEM  WB           


istruzione 

2 ‐ lw    IF  ID  EX  MEM  WB         

3 ‐ beq      IF  IDstallo  ID  EX  MEM  WB     

4 ‐ addi        IFstallo  IF  ID  EX  MEM  WB   

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

______________________________________________________________________

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

______________________________________________________________________

AXO – prova di mercoledì 6 novembre 2019 pagina 10 di 16


Completare le tabelle.
I campi Istruzione e di tipo NumeroRegistro possono essere indicati in forma simbolica, tutti gli altri in esa-
decimale (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 4)
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 valore numerico

.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 4)
Mem.indirizzo RegWrite

MemWrite RegDest

MemRead MemtoReg

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

RF.RegLettura2 RF.DatoLetto2 RF.DatoScritto

AXO – prova di mercoledì 6 novembre 2019 pagina 11 di 16


seconda parte – gestione di conflitti e stalli
Si consideri la sequenza di istruzioni sotto riportata
1. lw $3, 32($1)
2. add $1, $3, $2
3. sw $1, 16($3)
4. beq $3, $1, 8

    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           


 

Si risponda alle domande seguenti, facendo l’ipotesi che la pipeline


 sia ottimizzata per la gestione dei conflitti di controllo (valutazione condizione di salto nello
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
dato istruzione
registro
percorso di  ciclo di clock dove 
b) si riportino in tabella 1 – prime tre co- istruzione  da cui 
coinvolto 
propagazione  è attivo il percorso 
lonne – le dipendenze di dato che risulta- dipende  e stalli  di propagazione 
no essere conflitti
c) si disegni in Tabella 2 il diagramma          
temporale della pipeline, mettendo in evi-
denza gli eventuali percorsi di propaga-          
zione che possono essere attivati per ri-
solvere i conflitti, e gli stalli eventualmen-          
te da inserire affinché la propagazione sia
efficace          
d) si indichino in Tabella 1 – ultima co-
lonna – i percorsi di propagazione effet-          
tivamente attivati e gli stalli associati, e
il ciclo di clock in cui risultano attivi  
Tabella 2 
  1  2  3  4  5  6  7  8  9  10  11  12  13  14 

                           

                           

                           

                           

AXO – prova di mercoledì 6 novembre 2019 pagina 12 di 16


e) 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(i) di propagazio-
ne

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 mercoledì 6 novembre 2019 pagina 13 di 16


esercizio n. 4 – domande su argomenti vari
logica combinatoria

Si vuole progettare la rete combinatoria che realizza una versione semplificata dell’unità di controllo
del processore pipeline MIPS.
L’unità di controllo in oggetto riceve in ingresso un “CODICE ISTRUZIONE” di 3 bit e genera 7 uscite da 1
bit ciascuna, le quali rappresentano una parte dei segnali di controllo della pipeline.
Nella tabella ingressi-uscite predisposta, a ogni configurazione di CODICE ISTRUZIONE (C2, C1, C0) è asso-
ciato il simbolico dell’istruzione stessa.
Si definisca la tabella ingressi-uscite del circuito, tenendo conto della seguente ulteriore specifica:
 se per una certa istruzione e per un certo segnale di controllo risulta indifferente generare il valore 0
oppure il valore 1, si scelga sempre di sintetizzare il segnale con uno 0

C2 C1 C0 RegDest ALUSrc Branch MemRead MemWrite RegWrite MemtoReg

ADD 0 0 0
SUB 0 0 1
AND 0 1 0
OR 0 1 1
SLT 1 0 0
LW 1 0 1
SW 1 1 0
BEQ 1 1 1

Si fornisca IN PRIMA FORMA CANONICA (Sum_Of_Products – SOP), senza semplificazioni, l’espressione


logica in funzione degli ingressi per le uscite seguenti:

ALUSrc = _________________________________________________________________________

RegWrite = _________________________________________________________________________

Si consideri poi l’espressione ottenuta al punto precedente per il segnale RegWrite e la si semplifichi
usando le regole dell’algebra fino a ottenere un’espressione costituita dalla somma di due soli termini:

RegWrite = _________________________________________________________________________

= _________________________________________________________________________

= _________________________________________________________________________

= _________________________________________________________________________

= _________________________________________________________________________

= _________________________________________________________________________

AXO – prova di mercoledì 6 novembre 2019 pagina 14 di 16


memoria cache
Si consideri una gerarchia di memoria per un processore MIPS composta da una memoria centrale da 4G
byte indirizzabile a byte con parole da 32 bit, e da una memoria cache istruzioni e una dati da 1K byte
ciascuna, entrambe a indirizzamento diretto (direct mapped), con blocchi da 256 byte.
Il tempo di accesso alla memoria cache (sia istruzioni sia dati) è pari a 1 ciclo di clock.
Il tempo di accesso alla memoria centrale è pari a 20 cicli di clock per la prima parola e a 5 cicli di
clock per le parole a indirizzi consecutivi (memoria interallacciata). Il bus dati è da 32 bit.

1. Indicare la struttura dell’indirizzo di memoria per accedere alla memoria cache.

2. Calcolare il tempo necessario per caricare un blocco dalla memoria centrale in caso di fallimento
(miss), in numero di cicli di clock.

3. Va in esecuzione un nuovo programma che accede, caricandolo in memoria cache, a un array di interi di
dimensione pari a 1032 byte. Calcolare il numero di fallimenti (miss) per la cache dati e mostrare
nella tabella i blocchi dell’array presenti in cache dati al termine del caricamento, numerandoli a
partire da 0 (numero di righe non significativo).

# fallimenti caricamento =

n. blocco cache dati n. blocco array

4. Calcolare il tempo totale di accesso alla memoria dati per questo programma, considerando che il
programma, dopo l’accesso di cui alla domanda precedente, accede sequenzialmente ai primi 100 ele-
menti dell’array e agli ultimi 8 elementi dell’array in un ciclo ripetuto 10 volte.

AXO – prova di mercoledì 6 novembre 2019 pagina 15 di 16


spazio libero per continuazione o brutta copia

AXO – prova di mercoledì 6 novembre 2019 pagina 16 di 16

Potrebbero piacerti anche