







Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Slides su eccezioni corso Calcolatori Elettronici
Tipologia: Dispense
1 / 13
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!








A.A. 2013-2014^ 1/25^ http:\borghese.di.unimi.it\
Riferimento al Patterson: 4.9 e B.
A.A. 2013-2014^ 2/25^ http:\borghese.di.unimi.it\
A.A. 2013-2014^ 3/25^ http:\borghese.di.unimi.it\
A.A. 2013-2014^ 4/25^ http:\borghese.di.unimi.it\
A.A. 2013-2014^ 7/25^ http:\borghese.di.unimi.it\
Interrupt accodati (gestiti come FIFO). Interrupt annidati (gestiti come LIFO).
Cosa suggerite di utilizzare per interrupt esterni? Cosa suggerite di utilizzare per interrupt interni?
Come gestire le code di interruzioni? Il problema sono gli interrupt annidati.
La soluzione è quella di fermare l’esecuzione di interrupt accodati quando occorre servire interrupt che richiedono annidamento.
Meccanismi di gestione di interrupt annidati:
Maschere di interrupt. La maschera di interrupt è una sequenza di bit in cui ogni bit corrisponde ad un livello di interrupt. Gli interrupt di un certo livello possono essere serviti solo se il corrispondente bit della maschera vale 1. E’ legata al programma. MIPS. Piorità di interrupt. Ad ogni tipo di interrupt viene associata una priorità, una priorità è anche associata ai vari stati del processore.
A.A. 2013-2014^ 8/25^ http:\borghese.di.unimi.it\
A.A. 2013-2014^ 9/25^ http:\borghese.di.unimi.it\
Insieme di registri a 32 bit denominato coprocessore 0. Molti gestiscono la paginazione della memoria.
Nome del registro
Numero del registro in coprocessore 0
Utilizzo
Bad/Addr 8 Registro contenente l’indirizzo di memoria a cui si è fatto riferimento (cf. “page fault”). Count 9 Timer (MIPS: 10ms). Compare 11 Valore da comparare con un timer. Genera un interrupt.
Status 12 Maschera delle interruzioni e bit di abilitazione. Stato dei diversi livelli di priorità (6 HW e 2 SW). Cause 13 Tipo dell’interruzione e bit delle interruzioni pendenti
EPC 14 Registro contenente l’indirizzo dell’istruzione che ha causato l’interruzione.
A.A. 2013-2014^ 10/25^ http:\borghese.di.unimi.it\
Interrupt mask , memorizzata nei bit 8-15 dello status register. Sono infatti previsti 8 diversi livelli di interrupt (6 interrupt hw e 2 sw). Il bit 8 della maschera di interrupt è relativo all'interrupt sw di livello 0, il bit 10 a quello hw di livello 2 e così via. Un bit a 1 nella maschera di interrupt significa che gli interrupt a quel livello sono abilitati. Vengono disabilitati ad esempio quando bit a priorità più elevata sono già in esecuzione (mascheramento).
A.A. 2013-2014^ 13/25^ http:\borghese.di.unimi.it\
0 Interrupt esterno (non si tratta di un’eccezione) 4 Indirizzo errato in una load 5 Indirizzo errato in una store 6 Errore sul bus durante il caricamento di un'istruzione 7 Errore sul bus in fase di trasferimento dati 8 Eccezione generata da syscall 9 Eccezione generata da breakpoint 10 Eccezione generata da istruzione riservata 12 Overflow aritmetico 13 Istruzione non valida.
I codici inseriti nel registro causa sono relativi ad eccezioni (eventi che si verificano all’interno della CPU).
A.A. 2013-2014^ 14/25^ http:\borghese.di.unimi.it\
Le eccezioni vengono trattate come una forma di hazard sul controllo.
Nel caso si verifichi un’eccezione nella fase di calcolo (overflow ad esempio di add $t2, $t3, $t4) occorre : fare il flush delle istruzioni già nella pipeline caricare l’indirizzo dell’entry point del programma di gestione delle eccezioni.
Flush delle istruzioni in: Fase di fetch Fase di decodifica Fase di calcolo della add (non deve scrivere il risultato = overflow)
A.A. 2013-2014^ 15/25^ http:\borghese.di.unimi.it\
A.A. 2013-2014^ 16/25^ http:\borghese.di.unimi.it\
Registro EPC: è un registro a 32 bit utilizzato per memorizzare l’indirizzo dell’istruzione coinvolta.
Registro causa: è un registro utilizzato per memorizzare la causa dell’eccezione; in MIPS sono 32 bit:
Segnali di controllo: CausaWrite – scrittura nel registro Causa. CausaInt – Dato per il registro Causa.
Modifiche ai registri di pipeline
Causa ed EPC appartengono al coprocessore 0
A.A. 2013-2014^ 19/25^ http:\borghese.di.unimi.it\
0x40 sub $11, $2, $ 0x44 and $12, $2, $ 0x48 or $13, $2, $ 0x4C add $1, $2, $ 0x50 slt $15, $6, $ 0x54 lw $16, 50($7) ...
0x800000180 mfc0 $k0, $13 # Cause register 0x800000184 andi $a0 $a0, 0x3C # Extract ExcCode Field ..... .......
..... EPC -> PC
Cosa succede se si verifica un overflow nell’istruzione di add?
A.A. 2013-2014^ 20/25^ http:\borghese.di.unimi.it\
0x40 sub $11, $2, $ 0x44 and $12, $2, $ 0x48 or $13, $2, $ 0x4C add $1, $2, $ 0x800000180 mfc0 $k0, $13 # Cause register 0x800000184 andi $a0 $a0, 0x3C # Extract ExcCode Field ..... ....... Change the value of $2 or $
EPC = EPC- ..... EPC -> PC 0x4C add $1, $2, $ 0x50 slt $15, $6, $ 0x54 lw $16, 50($7) ...
A.A. 2013-2014^ 21/25^ http:\borghese.di.unimi.it\
Max spazio di indirizzamento su 32 bit è di 2^32 = 4Gbyte.
.ktext
A.A. 2013-2014^ 22/25^ http:\borghese.di.unimi.it\
Controllo se è un’eccezione. Se è un’eccezione stampo un messaggio.
.ktext 0x80000180 la $s0, save0 # Handler is not re-entrant and can’t use sw $a0, 0($s0) # stack to save $a0, $a1 (data required are sw $a1, 4($s0) # stored in kernel data segment)
# First check mfc0 $k0, $13 # Move Cause into $k0 (=$26) in register file andi $a0, $k0, 0x7C # Extract ExcCode field (5 bits) 0x7C = 124 beq $a0, $zero, done # Branch if ExcCode=HW Interrupt (ExcCode=0) # Now diplay mov $a0, $k0 # Move Cause into $a mfc0 $a1, $14 # Move EPC into $a jal print_excp # Print exception error message. Parameters
.kdata save0: .word 0 save1: .word 0
Cause register
A.A. 2013-2014^ 25/25^ http:\borghese.di.unimi.it\