Module os::trap

source · []
Expand description

Trap handling functionality

For rCore, we have a single trap entry point, namely __alltraps. At initialization in init(), we set the stvec CSR to point to it.

All traps go through __alltraps, which is defined in trap.S. The assembly language code does just enough work restore the kernel space context, ensuring that Rust code safely runs, and transfers control to trap_handler().

It then calls different functionality based on what exactly the exception was. For example, timer interrupts trigger task preemption, and syscalls go to syscall().

Modules

context 🔒

Implementation of TrapContext

Structs

trap context structure containing sstatus, sepc and registers

Functions

enable timer interrupt in sie CSR

initialize CSR stvec as the entry of __alltraps

Unimplement: traps/interrupts/exceptions from kernel mode Todo: Chapter 9: I/O device

handle an interrupt, exception, or system call from user space

set the new addr of __restore asm function in TRAMPOLINE page, set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table, finally, jump to new addr of __restore asm function