Tema 9: Excepcions i interrupcions
18.1 Excepcions i interrupcions
Vegeu Secció 9.1, Secció 9.2, Secció 9.3 i Secció 9.4.
Problema 18.1 Responeu les preguntes següents sobre el mecanisme d’excepcions i interrupcions en RISC-V:
- Quina diferència hi ha entre una excepció i una interrupció? Doneu un exemple de cadascuna.
- Quan es produeix una excepció, el processador desa l’adreça de retorn al registre
mepc. A quina instrucció apuntamepcen cas d’excepció? I en cas d’interrupció? - Quins passos realitza el maquinari automàticament quan es produeix una excepció en mode M?
- Quina és la responsabilitat de la rutina de servei d’excepcions (RSE) pel que fa als registres generals? Per què és diferent de la convenció ABI habitual?
Problema 18.2 El registre mcause de RISC-V conté el codi de causa d’una excepció o interrupció. El bit de més pes indica si és una interrupció (1) o una excepció (0); els bits restants identifiquen el tipus.
- Indiqueu el valor de
mcauseper a cadascuna de les situacions següents:- Instrucció en adreça no alineada.
- Accés a memòria en adreça no alineada (lectura).
- Crida al sistema (
ecall) des de mode usuari. - Interrupció de temporitzador en mode M.
- El registre
mtvalconté informació addicional sobre la causa. Quin valor conté en cas d’una excepció per adreça no alineada en un accés a memòria?
Problema 18.3 Escriviu en assemblador RISC-V una rutina de servei d’excepcions (RSE) mínima que:
- Salvi tots els registres generals a la pila.
- Llegeixi
mcausei salti a un gestor específic si la causa és una crida al sistema (ecall) des de mode usuari (codi de causa 8); altrament, salti a un gestor d’error genèric. - Restauri tots els registres i retorni amb
mret.
Suposeu que el processador opera en mode M i que el registre sp apunta a una pila vàlida en entrar a l’RSE.
Problema 18.4 Responeu les preguntes següents sobre els registres mepc i mtvec:
- Una instrucció
lw t0, 0(t1)a l’adreça0x80001000causa una excepció perquèt1conté una adreça no alineada. A quina adreça apuntamepc? - Una interrupció de temporitzador arriba mentre s’executa la instrucció
lw t0, 0(a0)a l’adreça0x80002004. A quina adreça apuntamepc? Quan es reprèn l’execució ambmret, quina instrucció s’executa? - El camp
MODEdemtvec(bits 1:0) pot valer 0 (mode directe) o 1 (mode vectoritzat). Expliqueu la diferència. En mode vectoritzat, a quina adreça salta el processador per a una interrupció de temporitzador de màquina (codi 7)? - L’RSE ha d’incrementar
mepcen 4 per a les crides al sistema (ecall). Per què? Escriviu les instruccions necessàries.
18.2 Crides al sistema
Vegeu Secció 9.5.
Problema 18.5 En RISC-V, les crides al sistema es fan amb la instrucció ecall. El codi de servei es passa al registre a7 i l’argument principal a a0.
Escriviu fragments de codi assemblador RISC-V per a les operacions següents, usant els codis de servei de RARS:
- Imprimir l’enter emmagatzemat al registre
t0per la sortida estàndard. - Llegir un enter de l’entrada estàndard i deixar el resultat a
t1. - Imprimir la cadena de caràcters amb adreça base a
t2. - Finalitzar el programa.
Problema 18.6 Escriviu un programa complet en assemblador RISC-V que:
- Llegeixi dos enters de l’entrada estàndard.
- Imprimeixi el màxim dels dos seguit d’un salt de línia.
- Finalitzi correctament.
El programa ha de seguir les convencions del curs: el punt d’entrada és la primera instrucció del segment .text, i la sortida es fa amb li a7, 93 + ecall (codi de sortida a a0).
Problema 18.7 Escriviu un programa complet en assemblador RISC-V que:
- Declari un vector de 10 enters inicialitzats a zero.
- Llegeixi 10 enters de l’entrada estàndard i els escrigui al vector.
- Calculi la suma dels elements del vector.
- Imprimeixi la suma per la sortida estàndard.
- Finalitzi correctament.
18.3 Entrada/sortida
Vegeu Secció 9.6.
Problema 18.8 Responeu les preguntes següents sobre els mecanismes d’entrada/sortida:
- Quina diferència hi ha entre la sincronització per enquesta (polling) i la sincronització per interrupcions? Quins són els avantatges i inconvenients de cadascun?
- En un sistema amb E/S per interrupcions, quins passos cal seguir per habilitar les interrupcions en RISC-V (registres
mstatusimie)? - Quin és el rol del bit
MIEdel registremstatusi del bitMTIEdel registremieen el control de les interrupcions de temporitzador?
Problema 18.9 Un sistema RISC-V disposa d’un port en sèrie amb els registres mapats a memòria següents:
| Adreça | Registre | Descripció |
|---|---|---|
0xF0000000 |
UART_RX |
Dada rebuda (byte de menys pes) |
0xF0000004 |
UART_TX |
Dada a transmetre (byte de menys pes) |
0xF0000008 |
UART_STATUS |
Bit 0: dada disponible per llegir; bit 1: transmissor lliure |
Escriviu fragments de codi assemblador RISC-V que implementin:
- Una funció
uart_getcharque esperi fins que hi hagi una dada disponible i la retorni aa0. - Una funció
uart_putcharque esperi fins que el transmissor estigui lliure i transmeti el byte d’a0. - Un programa principal que llegeixi caràcters del port en sèrie i els retransmeti en majúscules fins que rebi un caràcter de nova línia (
'\n').
Problema 18.10 Un sistema RISC-V gestiona un teclat per interrupcions. El controlador del teclat té un registre d’estat a l’adreça 0xF0001000 (bit 0 = tecla disponible) i un registre de dades a 0xF0001004.
- Escriviu el codi assemblador per habilitar les interrupcions externes en mode M (bits
MIEdemstatusiMEIEdemie). - Escriviu una RSE mínima que, en rebre una interrupció externa (bit
MEIPdemipactiu), comprovi el registre d’estat del teclat (0xF0001000, bit 0) per confirmar-ne l’origen, llegeixi el caràcter del registre de dades i el desi a una variable globalcar, i retorni correctament. - Per distingir entre una interrupció de teclat i una altra interrupció externa, es pot usar el codi de causa o cal llegir directament el registre d’estat del dispositiu? Justifiqueu.
18.4 Fallada de pàgina
Vegeu Secció 9.7.
Problema 18.11 A RISC-V, la fallada de TLB (TLB miss) la resol el maquinari, amb el recorregut de la taula de pàgines (page-table walker), de manera transparent i sense generar cap excepció; quan el recorregut troba que la pàgina no és a la memòria física (bit V = 0 a la PTE), es genera una excepció de fallada de pàgina (Essencial 9.9), i, si l’accés no té permís (una escriptura amb E = 0), una de protecció. En canvi, en arquitectures amb TLB gestionat per programari (com MIPS), la mateixa fallada de TLB genera una excepció, i és una rutina de l’SO qui llegeix la taula de pàgines i actualitza el TLB (Aprofundiment 8.5).
- En RISC-V, quin codi de causa (
mcause) s’assigna a una fallada de pàgina en una lectura de dada? I en una escriptura? Quin valor prenmtvalen tots dos casos? - Descriviu els passos que ha de seguir l’RSE de RISC-V per gestionar una fallada de pàgina: com localitza la PTE a partir de
mtval, què fa segons el bit V, quin paper hi tésfence.vmai com es prepara la reexecució de la instrucció causant. - En un sistema amb TLB gestionat per programari, la rutina que atén una fallada de TLB accedeix a la taula de pàgines i pot provocar, al seu torn, una nova fallada de TLB si la pàgina que conté la taula tampoc no és al TLB. Expliqueu per què aquesta situació és problemàtica i com es pot evitar.