Nella terminologia RISC-V un’eccezione è qualsiasi cambiamento non previsto dal flusso di controllo, mentre un’interrupt è un evento con cause esterne.
Tipi di eccezioni
Tipo di evento | Provenienza | Terminologia RISC-V |
---|---|---|
Richiesta di I/O | esterna | interrupt |
ecall | interna | eccezione |
Errore ALU / FPU (overflow, div. per 0, etc) | interna | eccezione |
malfunzionamenti hardware | entrambe | eccezione o interrupt |
accesso a indirizzo di memoria inesistente | interna | eccezione |
page fault (sistema operativo) | interna | eccezione |
utilizzo di un’istruzione non definita (sistema operativo) | interna | eccezione |
Come gestire un’eccezione/interrupt
Se si tratta di una ecall bisogna rispondere all’evento, se si tratta di un errore risolvibile bisogna riparare la situazione.
Se l’eccezione proviene dall’hardware
1. Interrompere l’esecuzione in modo sicuro e individuare la causa
- Bloccare l’istruzione corrente:
- Si salva il PC (Program Counter) in un registro detto SEPC per potere ripartire (se possibile),
- si salva lo stato della CPU.
- completare le istruzioni precedenti l’eccezione (se possibile),
- svuotare la pipeline: flush dell’istruzione che ha generato l’eccezione/ricevuto l’interruzione:
- scrivere la causa dell’eccezione nel registro dedicato SCAUSE che controlla tutti i dispositivi associati all’exception code associato all’eccezione asserita. In alternativa si usano le interruzioni vettorizzate, in cui l’indirizzo del codice di gestione della risposta è direttamente determinato dal tipo di eccezione
- salvare l’indirizzo dell’istruzione responsabile dell’eccezione,
- trasferire il controllo all’indirizzo pre-assegnato.
2. Eseguire la routine di gestione dell’interruzione e tornare all’esecuzione del codice iniziale
- Cambiare PC: occorre aggiungere al MUX del PC un ingresso con l’indirizzo
0x1C090000
scritto nel registro STVEC (Supervisor Trap Vector). Il PC salterĂ a0x1C090000
+ 4 * cause_code (contenuto in SCAUSE). - Se possibile, si torna a eseguire il codice iniziale ripristinando lo stato della CPU e ripristinando il PC a SEPC (dove avevamo salvato il PC dell’istruzione erronea).
todo aggiungere gli input vettorizzati a pag 6 del pdf 18, aggiungere differenza tra input vettorizzati e approccio con SCAUSE
Se l’eccezione proviene dal sistema operativo
- Esaminare la causa dell’eccezione,
- agire di conseguenza
- istruzione non implementata → kill
- page fault → caricare in memoria una pagina dal disco
- Restituire il controllo al processo (se possibile)
todo aggiungi il registro Status e le istruzioni per le eccezioni