Eccezioni. Università degli Studi di Milano Corso di Laurea in Informatica, A.A

Documenti analoghi
Gestione delle eccezioni.

7 May INTERRUPT ED ECCEZIONI I. Frosio

15 April INTERRUPT ED ECCEZIONI I. Frosio

Eccezioni ed interrupt. I. Frosio M.Marchi


Esercitazione 6 Datapath multiciclo Eccezioni in PCSPIM

Laboratorio di Architettura degli Elaboratori LabArch 2006 Secondo Quadimestre, a.a Docente: H. Muccini

Interrupt ed Eccezioni

Manualino minimale MIPS

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Università degli Studi di Cassino

Modi di esecuzione user / kernel

Università degli Studi di Cassino

Convenzioni per la chiamata a procedure

Convenzioni di chiamata a procedure

Fetch Decode Execute Program Counter controllare esegue prossima

Istruzioni di trasferimento dati

Istruzioni di controllo del flusso

Università degli Studi di Cassino e del Lazio Meridionale

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Macchina di Riferimento: argomenti

Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento

Linguaggio Assembly e linguaggio macchina

Controllo di flusso. Università degli Studi di Milano Corso di Laurea in Informatica, A.A

Linguaggio Assembly e linguaggio macchina

Controllo di flusso. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Linguaggio Assembly e linguaggio macchina

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Architettura degli Elaboratori

Laboratorio di Architettura degli

MIPS! !


Architettura e funzionamento del calcolatore

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Il linguaggio Assembly. Architettura degli Elaboratori e delle Reti Turno I

Architettura dei calcolatori e sistemi operativi. Architettura MIPS e set istruzioni Capitolo 2 P&H

Richiami sull architettura del processore MIPS a 32 bit

Gestione delle eccezioni (CPU multiciclo) La CPU pipeline

Università degli Studi di Milano - Corso Architettura degli elaboratori e delle reti Turno 1 Prof. Borghese. Cognome e nome dello studente:

Architettura degli. Assemblatore Nomenclatura MARS. Dott. Franco Liberati

Architettura degli Elaboratori

Architettura degli Elaboratori II Laboratorio

L'architettura del processore MIPS

Laboratorio di Architettura degli Elaboratori LabArch 2006 Secondo Quadimestre, a.a Docente: H. Muccini

Assembly (3): le procedure

ISA e linguaggio macchina

Assembly (3): le procedure

CPU multiciclo eccezioni CPU pipeline

Memorie e contatori. Laboratorio di Architetture degli Elaboratori I Corso di Laurea in Informatica, A.A Università degli Studi di Milano

Indirizzamento, lettura e scrittura della memoria

MIPS Instruction Set 2

La struttura delle istruzioni elementari: il linguaggio Macchina. Sommario

COMPITINO #1 di CALCOLATORI ELETTRONICI 1 del COGNOME NOME

Architettura degli Elaboratori e Laboratorio. Matteo Manzali Università degli Studi di Ferrara Anno Accademico

Lezione 20. della CPU MIPS. Prof. Federico Pedersini Dipartimento di Informatica Università degli Studi di Milano

p = 7. E = bias + p = = E = s e m

Lezione 20. della CPU MIPS. Prof. Federico Pedersini Dipartimento di Informatica Università degli Studi di Milano

8 March : LABORATORIO 01 ISA & ASSEMBLY REGISTER FILE INTRODUZIONE A SPIM OPERAZIONI ARITMETICHE. I. Frosio

Indirizzamento, lettura e scrittura della memoria

Richiami sull architettura del processore MIPS a 32 bit

15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio

Il linguaggio macchina

Assembly IV Le procedure

Il linguaggio assembly

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a Docente: H. Muccini

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Linguaggio macchina e register file

L unità di controllo di CPU a singolo ciclo

Sono tipicamente causati da dispositivi hardware. normale flusso di esecuzione viene interrotto, e la CPU passa a gestire l interrupt

Architettura e funzionamento del calcolatore

Lezione XII: La gestione delle eccezioni in MINIX

Il processore: unità di controllo

Interrupts and Exceptions

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

ISA (Instruction Set Architecture) della CPU MIPS

La CPU a singolo ciclo

COMPITINO #1 di CALCOLATORI ELETTRONICI 1 del COGNOME NOME

La CPU a singolo ciclo

CPU a singolo ciclo. Lezione 18. Sommario. Architettura degli Elaboratori e delle Reti

Università degli Studi di Milano - Corso Architettura II Prof. Borghese Appello del

Università degli Studi di Roma La Sapienza

slt $t1,$t2,$t3 if ($t2<$t3) $t1=1; Confronto tra registri slti $t1,$t2,100 if ($t2<100)$t1=1; Cfr. registro-costante

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Corso di Architettura (Prof. Scarano) 10/05/2002

Architettura di una CPU

Un quadro della situazione. Lezione 15 Il Set di Istruzioni (2) Le operazioni e gli operandi. Dove siamo nel corso. Cosa abbiamo fatto

Il Linguaggio Assembly: Le procedure

Università degli Studi di Cassino

Laboratorio di Architetture degli Elaboratori II (A.A )

Architettura degli elaboratori CPU a ciclo singolo

System Calls, Register Spilling

Un quadro della situazione. Lezione 14 Il Set di Istruzioni (2) Dove siamo nel corso. I principi di progetto visti finora. Cosa abbiamo fatto

Gestione dei sottoprogrammi. temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma

Procedure annidate. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Transcript:

Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2018-2019 Eccezioni Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135 Milano (MI) Ufficio S242 nicola.basilico@unimi.it +39 02.503.16294 Turno B Marco Tarini Dipartimento di Informatica Via Celoria 18-20133 Milano (MI) Ufficio 4010 marco.tarini@unimi.it +39 02.503.16217

Eccezioni cambiamento di flusso Atteso: branch e jump Non atteso: eccezioni Eccezioni sincrone: dato segmento dati e segmento testo, si verificano sempre ad un tempo t determinato (overflow, salti a istruzioni non definite...) Eccezioni asincrone (interrupt): avvengono ad un tempo t non determinato dal programma in esecuzione (I/O, errori hardware,...)

Eccezioni Fetch Decodifica Calcolo Lettura / scrittura Write back Eccezione (es. istruzione non riconosciuta) Eccezione (es. overflow) Interrupt

Eccezioni Le eccezioni vanno gestite attraverso la chiamata ad una procedura speciale: l exception handler Chiamata all exception handler: non prevede né passaggio di parametri, né valori di ritorno deve preservare interamente lo stato del programma che ha causato l eccezione (compresi i registri $t) fa uso di informazioni per la gestione dell eccezione che l hardware ha lasciato in alcuni registri speciali

I registri per la gestione di eccezioni Registro Cause: causa dell eccezione specificata da un Exception Code (unsigned int, bit 2-6), indica anche gli interrupt che erano ancora da servire Registro EPC: exception program counter, indirizzo (nel segmento testo) a cui sta la faulting instruction Registro BadVaddr: indirizzo errato nel caso di una address exception Registro Status: interrupt mask e bit di controllo

Esempi Bad Address in text read Overflow

Gestione SW di un eccezione Eccezione L HW scrive in EPC l indirizzo dell istruzione che ha causato l eccezione (faulting instruction) Scrittura delle informazioni nei registri di coprocessor 0 L HW scrive in Cause un codice che specifica il motivo dell eccezione L HW scrive in PC l indirizzo 0x80000180 (exception handler); qui è presente una procedura del sistema operativo per la gestione delle eccezioni Gestione dell eccezione da parte dell OS Continue Ritorno all istruzione EPC+4 Exit Exception handler (OS) Vediamo nel dettaglio come vengono svolte queste operazioni dal SW

Gestione SW di un eccezione Come avviene la lettura e scrittura nei registri del coprocessore 0? # copiare dal registro $13 del coprocessore 0 (Cause register) al registro $t0 mfc0 $t0, $13 # copiare dal registro $t0 al registro $14 del coprocessore 0 (EPC) mtc0 $t0, $14 # load word dall indirizzo 100($t3) al registro $13 del coprocessore 0 lwc0 $13, 100($t3) # store word dal registro $13 del coprocessore 0 in memoria swc0 $13, 50($t2)

Gestione SW di un eccezione L exception handler non deve alterare lo stato corrente di registri e memoria ha a disposizione due registri riservati $k0 e $k1 nel caso debba fare register spilling, non userà lo stack ma la apposita area.kdata Nome Numero Utilizzo Preservato durante le chiamate $zero 0 costante zero Riservato MIPS $at 1 riservato per l assemblatore Riservato Compiler $v0-$v1 2-3 valori di ritorno di una procedura No $a0-$a3 4-7 argomenti di una procedura No $t0-$t7 8-15 registri temporanei (non salvati) No $s0-$s7 16-23 registri salvati Si $t8-$t9 24-25 registri temporanei (non salvati) No $k0-$k1 26-27 gestione delle eccezioni Riservato OS $gp 28 puntatore alla global area (dati) Si $sp 29 stack pointer Si $s8 30 registro salvato (fp) Si $ra 31 indirizzo di ritorno No

Gestione SW di un eccezione Suddividiamo logicamente la gestione di un eccezione nelle tre fasi operative di prologo, corpo della procedura ed epilogo Prologo: stampa le informazioni relative all eccezione sollevata Corpo: valuta la possibilità di ripristinare il flusso di esecuzione e, nel caso di un interrupt, esegue una procedura specifica per la sua gestione Epilogo: ripristina lo stato del processore e dei registri, fa riprendere l esecuzione dall istruzione successiva a quella che ha causato l eccezione

Exception Handler (preambolo) Definizione del segmento dati: vengono preallocate le stringhe contenenti i vari messaggi di errore (che dipendono dal tipo di eccezione) e due variabili locali (s1 e s2).kdata m1_:.asciiz " Exception " m2_:.asciiz " occurred and ignored\n" e0_:.asciiz " [Interrupt] s1:.word 0 s2:.word 0 [ ]

Exception Handler (prologo-1) Cause

Exception Handler (prologo-1) Cause move $k1 $at sw $v0 s1 sw $a0 s2 # Salvo $at (usato per pseudo istruzioni) # è necessario usare $v0 e $a0, quindi li salvo in memoria (no stack!) mfc0 $k0 $13 # copio Cause in $k0 (1) srl $a0 $k0 2 # estraggo campo ExcCode (shift right logical) (2) andi $a0 $a0 0x1f # and con 00..0011111 (3)

Exception Handler (prologo-1) Cause move $k1 $at sw $v0 s1 sw $a0 s2 # Salvo $at (usato per pseudo istruzioni) # è necessario usare $v0 e $a0, quindi li salvo in memoria (no stack!) mfc0 $k0 $13 # copio Cause in $k0 (1) srl $a0 $k0 2 # estraggo campo ExcCode (shift right logical) (2) andi $a0 $a0 0x1f # and con 00..0011111 (3) Esempio: Estrazione di ExcCode con Aritmetic Overflow (codice 12): (1) Cause Register: 0000000000000000000000000 01100 00 (in Spim vedremo 110000) (2) Shift a destra di 2 bit: 00 0000000000000000000000000 01100 (3) AND con 0x1F (11111): 00 0000000000000000000000000 01100

Exception Handler (prologo-2) # Stampo informazioni sull eccezione. li $v0 4 la $a0 m1_ syscall # syscall 4 (print_str) li $v0 1 # syscall 1 (print_int) srl $a0 $k0 2 # Extract ExcCode Field andi $a0 $a0 0x1f syscall li $v0 4 # syscall 4 (print_str) andi $a0 $k0 0x3c # 3C=00111100 lw $a0 excp($a0) nop syscall

Exception Handler (corpo-3) Prima cosa da fare: controllare se è possibile riprendere l esecuzione, altrimenti eseguire exit Se la causa non è «bus error on instruction fetch» (codice 6 (0x18), 00...0011000) allora $pc è valido, in caso contrario in $pc c è un valore errato e sono necessari controlli aggiuntivi bne $k0 0x18 ok_pc nop # Bad PC exception requires special checks

Exception Handler (corpo-3) Prima cosa da fare: controllare se è possibile riprendere l esecuzione, altrimenti eseguire exit Se la causa non è «bus error on instruction fetch» (codice 6 (0x18), 00...0011000) allora $pc è valido, in caso contrario in $pc c è un valore errato e sono necessari controlli aggiuntivi bne $k0 0x18 ok_pc nop # Bad PC exception requires special checks Se è proprio un errore di fetch, controllo se in EPC ho un indirizzo valido (sintatticamente) mfc0 $a0 $14 # copio EPC in $a0 andi $a0 $a0 0x3 # Is EPC word-aligned? (0x3=11) beq $a0 0 ok_pc # branch se gli ultimi due bit di EPC non sono 1 (divisibile per 4) nop

Exception Handler (corpo-3) Prima cosa da fare: controllare se è possibile riprendere l esecuzione, altrimenti eseguire exit Se la causa non è «bus error on instruction fetch» (codice 6 (0x18), 00...0011000) allora $pc è valido, in caso contrario in $pc c è un valore errato e sono necessari controlli aggiuntivi bne $k0 0x18 ok_pc nop # Bad PC exception requires special checks Se è proprio un errore di fetch, controllo se in EPC ho un indirizzo valido (sintatticamente) mfc0 $a0 $14 # copio EPC in $a0 andi $a0 $a0 0x3 # Is EPC word-aligned (0x3=11)? beq $a0 0 ok_pc # branch se gli ultimi due bit di EPC non sono 1 (divisibile per 4) nop Nel caso in cui anche EPC non sia valido, non mi resta che fare exit (l esecuzione non può continuare dopo l eccezione). li $v0 10 syscall # Exit on really bad PC ok_pc:

Exception Handler (corpo-4) Controllo se c è stato un interrupt. In quel caso verrà gestito con del codice specifico. ok_pc: li $v0 4 la $a0 m2_ syscall # syscall 4 (print_str) srl $a0 $k0 2 andi $a0 $a0 0x1f bne $a0 0 ret nop # Extract ExcCode Field # 0 means exception was an interrupt # Interrupt-specific code # Don't skip instruction at EPC since it has not executed. Se non è un interrupt passo all epilogo della gestione

Exception Handler (epilogo-5) Calcolo l indirizzo da cui riprendere l esecuzione e lo copio in EPC ret: # Return from (non-interrupt) exception. Skip faulting instruction # at EPC to avoid infinite loop. mfc0 $k0 $14 addiu $k0 $k0 4 mtc0 $k0 $14 # Bump EPC register # Skip faulting instruction # write back EPC

Exception Handler (epilogo-5) Calcolo l indirizzo da cui riprendere l esecuzione e lo copio in EPC ret: # Return from (non-interrupt) exception. Skip faulting instruction # at EPC to avoid infinite loop. mfc0 $k0 $14 addiu $k0 $k0 4 mtc0 $k0 $14 # Bump EPC register # Skip faulting instruction # write back EPC Ripristino i registri a lo stato del processore: $v0, $a0, $at, e i registri Cause e Status # Restore registers and reset processor state lw $v0 s1 lw $a0 s2 move $at $k1 # Restore $at # Restore other registers mtc0 $0 $13 # Clear Cause register mfc0 $k0 $12 # Set Status register ori $k0 0x1 # Interrupts enabled mtc0 $k0 $12

Exception Handler (epilogo-5) Calcolo l indirizzo da cui riprendere l esecuzione e lo copio in EPC ret: # Return from (non-interrupt) exception. Skip faulting instruction # at EPC to avoid infinite loop. mfc0 $k0 $14 addiu $k0 $k0 4 mtc0 $k0 $14 # Bump EPC register # Skip faulting instruction # write back EPC Ripristino i registri a lo stato del processore: $v0, $a0, $at, e i registri Cause e Status # Restore registers and reset processor state lw $v0 s1 lw $a0 s2 move $at $k1 # Restore $at # Restore other registers mtc0 $0 $13 # Clear Cause register mfc0 $k0 $12 # Set Status register ori $k0 0x1 # Interrupts enabled mtc0 $k0 $12 # Return from exception on MIPS32: eret # setta exception level a 0 # ritorna a istruzione indirizzata da EPC

Esempio Cosa succede quando facciamo una jump a 0xffffffff (esempio nelle slides precedenti)? E un eccezione di codice 6? bne $k0 0x18 ok_pc nop Sì In EPC ho 0xffffffffc, è allineato? mfc0 $a0 $14 andi $a0 $a0 0x3 beq $a0 0 ok_pc nop Sì da quale istruzione riparto? Calcolo indirizzo dell istruzione da cui ripartire (EPC+4): mfc0 $k0 $14 addiu $k0 $k0 4 mtc0 $k0 $14

Università degli Studi di Milano Laboratorio di Architettura degli Elaboratori II Corso di Laurea in Informatica, A.A. 2017-2018 Hanno contribuito alla realizzazione di queste slides: Nicola Basilico Marco Tarini Iuri Frosio Jacopo Essenziale