中断嵌套,NMI 和异常

本节总结了中断、NMI和异常的嵌套。

•一个中断可以抢占另一个中断,一个异常可以抢占另个异常,但NMI不能抢占另一NMI,解释如下:

–如果核心处于NMI处理模式,并且遇到另一个NMI,则此新NMI将被屏蔽。

因此,NMI不能抢占另一个NMI。

–如果核心处于异常处理模式,并且遇到另一个异常,则会发生异常嵌套。有关更多详细信息,请参阅退出异常处理模式。

–如果内核处于中断处理模式,并且遇到另一个中断,则可能会发生中断嵌套。

抢占也发生在中断、异常或NMI之间,解释如下:

–如果核心处于中断处理模式,并且遇到异常,则核心将进入异常处理模式。

–如果核心处于NMI处理模式,并且遇到异常,则核心将进入异常处理模式。

–如果内核处于中断处理模式,并且遇到NMI,则内核将进入NMI处理模式。

–如果核心处于异常处理模式,并且遇到NMI,则核心将进入NMI处理模式。

–注意:全局中断使能位mstaus。当内核处于异常/NMI处理模式时,MIE会自动清除为零,因此内核在此不会接受任何中断(除非软件在异常/NMI处理器中显式打开mstatus.MIE)。

两级NMI/Exception State存储堆栈

如上一节所述,Nuclei处理器内核可以支持3种NMI/Exception抢占:

•NMI抢占异常

•一个异常抢占另一个异常

•一个异常抢占另一个NMI

•注意:由于内核处于NMI处理模式时NMI被屏蔽,因此一个NMI不能抢占另一个NMI。

为了确保上下文(如mepc、mcause等)在嵌套过程中不被破坏,Nuclei处理器核心实现了一个可配置的硬件功能,即自定义的两级NMI/Exception State保存堆栈,它可以保存多达三级的NMI/Exception核心执行状态。

在这里插入图片描述输入NMI/Exception抢占

当采取NMI或异常时,Nuclei处理器内核的硬件行为如下:

•停止执行当前程序,跳到新的PC执行。

–如果是异常陷阱,则跳转目标PC是在mtvec中定义的地址。

–如果是NMI陷阱,则跳转目标PC是mnvec中定义的地址。

•NMI/Exception是在机器模式下处理的,因此当核心发生一次NMI/Exception时,特权模式将切换到机器模式。

•按照两级NMI/Exception State Save Stacks(第42页)中所示的方式更新以下相关CSR的指定字段:

–mepc:记录遇到处理NMI/Exception的PC,并可用于在退出处理NMI/Exception后恢复PC。

–msaveepc1:一级NMI/Exception State Save Stack,记录mepc的值。当核心从处理NMI/Exception返回时,此CSR用于恢复mepc的值。

–msaveepc2:二级NMI/Exception State保存堆栈,记录msaveepc1的值。当内核从处理NMI/Exception返回时,此CSR用于恢复msaveepc1的值。

–mstatus:遵循RISC-V标准特权体系结构。

*MPIE:在处理NMI/Exception之前保存MIE的值。

*MPP:在进行NMI/Exception处理之前,保存Privilege Mode的值。

–msavestatus:

*MPIE1:一级NMI/Exception State Save Stack,记录MPIE的值。使用此CSR

以在内核从处理NMI/Exception返回时恢复MPIE的值。

*MPIE2:二级NMI/Exception State Save Stack,记录MPIE1的值。该CSR

用于在内核从处理NMI/Exception返回时恢复MPIE1的值。

*MPP1:一级NMI/Exception State Save Stack,记录MPP的值。此CSR用于

当核心从处理NMI/Exception返回时,恢复MPP的值。

*MPP2:二级NMI/Exception State Save Stack,记录MPP1的值。该CSR

用于在内核从处理NMI/Exception返回时恢复MPP1的值。

–mcause:保存处理NMI/Exception的原因。

–msavecause1:一级NMI/Exception State Save Stack,记录mcause的值。

–msavecause2:二级NMI/Exception State Save Stack,记录msavecause 1的值。

–msubm:

*TYP:保存当前处理NMI/Exception的陷阱类型

*PTYP:记录TYP的值。

*PTYP1:一级NMI/Exception State Save Stack,记录PTYP的值。使用此CSR

以在内核从处理NMI/Exception返回时恢复PTYP的值。

*PTYP2:二级NMI/Exception State Save Stack,记录PTYP1的值。该CSR

用于在内核从处理NMI/Exception返回时恢复PTYP1的值。

退出NMI/Exception抢占

在处理完NMI/Exception之后,核心最终需要退出NMI/Exception处理程序,并返回执行主程序或处理下一级被抢占的NMI/Exception。在退出当前NMI/Exception处理程序之前,需要通过执行mret指令来恢复相关的CSR和核心状态。硬件行为

处理器在执行mret指令后的:
•停止执行当前程序,并从CSR mepc定义的PC地址开始。

•根据mstatus的值。MPP以更新特权模式。

•以相反的方式更新相关CSR的字段,如两级NMI/Exception State Save所示:

–mepc

–msaveepc1

–msavestatus

–mcause

–msavecause1

–msubm

TYP
PTYP
PTYP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值