mstatus 寄存器:提供全局中断使能控制,通过 MIE 位来启用或禁用所有机器模式的中断。 mie 寄存器:提供具体类型的中断使能控制,通过各个位来启用或禁用特定类型的中断。 Xie寄存器 mstatus 寄存器位的描述 xIE 开启之后,可以响应中断,比如 M模式下可以响应中断的话,就开启MIE UIE (User Interrupt Enable) 位:总
当将陷阱委托给 S 模式时,scause寄存器会写入陷阱原因;sepc寄存器会写入引发陷阱的指令的虚拟地址;stval寄存器会写入特定于异常的数据;mstatus的 SPP 字段会写入发生陷阱时的活动特权级;mstatus的SPIE字段会写入发生陷阱时的SIE字段的值;mstatus的SIE字段会被清除。mcause、mepc和mtval寄存器以及mstatus的 MPP 和 ...
当处理器陷入S模式时,会把中断现场或触发异常时的指令对应的虚拟地址写入sepc寄存器中。 7.scause寄存器 scause寄存器用于保存S模式下的异常原因,详见第8章。 8.stval寄存器 当处理器陷入S模式时,stval寄存器会记录发生异常的虚拟地址。 9.sip寄存器
由 guest 所在的 U mode 陷入到 S mode 中,首先将 pc 切换到由 stvec 寄存器指向的中断向量地址,这段指令将会执行一段上下文切换代码,将需要保存的 guest 寄存器保存到一段 Trap Context 地址中(由 hypervisor 进行分配与维护,将在内存虚拟化章节中进行详细讲解),随后跳转到陷阱处理子系统...
顾名思义就是以全寄存器进行load/store访存,而不再是element。此时,load则是将连续长的data从指定的base addr开始连续搬回存到整个目的寄存器vd,store则是反过来。 spec中给出了为什么设计这种访存的原因: 这些指令(全寄存器加载/存储指令)旨在用于在不知道向量寄存器当前所存内容的类型或长度的情况下,或者在修改向量...
编写medeleg寄存器,将异常委托给主管模式。考虑ECALL和页面错误异常。 编写mstatus.FS以启用浮点(如果支持)。 将机器模式用户寄存器存储到堆栈或应用程序特定的帧指针。 用用户态软件的入口点编写mepc 执行mret指令进入用户模式。 Note:只有一组用户寄存器 (x1 - x31) 用于所有权限级别,因此应用软件负责在进入和退出...
S 模式发生 trap 的时候,sepc 寄存器会记录发生异常之前的 PC 指令的虚拟地址; 异常处理过程 当发生异常/中断的时候,一般会有 3 个步骤(这里以 S 模式为例): 1)CPU 自动做的事情: 保存当前 PC 值到 sepc 寄存器中; 将异常的类型更新到 scause 寄存器中; ...
6. 将 medeleg 寄存器写入以将异常委托给特权模式。考虑环境调用和页面错误异常。 7. 将 mstatus.FS 设为启用浮点运算(如果支持)。 8. 将机器模式用户寄存器存储到堆栈或特定于应用的帧指针。 9. 使用用户模式软件的入口点写入 mepc。 10. 执行 mret 指令以进入用户模式。
配置委托机制需要的寄存器: mideleg:与mie,mip类似,每一位都对应一个中断,这个对应的位置配置为1就把改为对应的中断委托给S模式 medeleg:与mideleg类似,每一位对应一个异常,把异常委托给S模式 之后的处理与M模式下的类似,有 模式有几个异常处理 CSR:sepc、stvec、scause、sscratch、stval 和 sstatus,它们执...