ecall指令行为
当用户程序调用 ecall (Environment Call) 时,硬件原子性地完成以下步骤(软件无法打断):
- 权限提升: Mode: User → Supervisor。
- 保存 PC:
sepc← 当前pc。 - 保存原因:
scause← Trap 类型 (例如 Syscall 为 8)。 - 关闭中断:
sstatus的 SIE 位清零 (防止 Trap 过程中再来一个中断搞乱现场)。 - 跳转:
pc←stvec。
注意:
- 硬件不会切换页表。
- 硬件不会切换栈。
- 硬件不会保存通用寄存器(除了 PC)。
- 这些脏活累活全都要靠
uservec(软件) 来做。