软件异常恢复方法及嵌入式系统与流程
本技术涉及嵌入式系统,具体涉及一种软件异常恢复方法及嵌入式系统。
背景技术:
1、基于risc-v对称多处理(symmetric multiprocessing,smp)架构的嵌入式实时系统,通过在多个核心(处理器核)之间划分任务,可在特定时间内执行更多任务,从而提高系统的处理能力与实时响应性能。在系统运行过程中,个别核心可能出现由内存访问违例、栈溢出、空指针解引用和/或算法逻辑错误等软件异常导致的操作系统(operating system,os)异常,从而引起看门狗超时,进而使得该核心无法继续正常执行当前任务。为使系统恢复到正常状态,需要一套有效的异常处理与恢复机制。目前,常见的多核系统异常处理方法包括:通过看门狗超时异常触发全局复位使整个系统重新启动。
2、上述异常处理方案在一定程度上实现了异常恢复,但存在恢复时延较长的问题。传统的看门狗超时异常触发全局复位的方案需要经过完整的bootloader引导流程,包括初始化系统时钟、存储控制器、外设等硬件资源,以及将os固件从flash等非易失性存储器拷贝到静态随机存取存储器(static random-access memory,sram)或双倍速率同步动态随机存取存储器(double data rate sdram,ddr sdram)等易失性存储器中的过程,这一流程耗时可达数十毫秒甚至更长时间,对于实时性要求高的嵌入式系统而言是不可接受的。
技术实现思路
1、本技术提供一种软件异常恢复方法及嵌入式系统,以解决现有嵌入式多核系统异常处理方法需要进行系统级重启而导致恢复时延较长的问题。
2、根据第一方面,一种实施例中提供一种软件异常恢复方法,应用于采用risc-v对称多处理架构的嵌入式系统,所述嵌入式系统包括一个主核和至少一个从核,所述方法包括:
3、响应于所述嵌入式系统的第一处理器核发生看门狗异常,所述第一处理器核基于核间中断和共享内存全局变量,将其异常状态同步至所述嵌入式系统中的其他各个处理器核,所述第一处理器核为所述主核或所述至少一个从核之一;
4、各所述从核执行用于使处理器核进入等待状态的第一指令,以进入休眠状态;
5、所述主核将所有所述从核复位,并将所述主核的mepc寄存器的值设置为操作系统固件的初始化入口地址,所述初始化入口地址指向的程序代码位于已加载所述操作系统固件的随机存取存储器中;
6、所述主核执行用于从异常处理返回并跳转至指定地址的第二指令,以直接跳转到所述初始化入口地址执行第一初始化操作;
7、所述主核在执行所述第一初始化操作的过程中将所有所述从核解复位;
8、各所述从核响应于被解复位,从所述初始化入口地址执行第二初始化操作。
9、一实施例中,所述第一处理器核基于核间中断和共享内存全局变量,将其异常状态同步至所述嵌入式系统中的其他各个处理器核,包括:
10、所述第一处理器核将所述共享内存全局变量的值设置为表示所述嵌入式系统已发生异常的值;
11、所述第一处理器核通过写msip寄存器资源中与所述其他各个处理器核对应的软件中断挂起位,向所述其他各个处理器核发送核间中断,以使所述其他各个处理器核读取所述共享内存全局变量。
12、一实施例中,当所述第一处理器核为所述主核时,各所述从核执行所述第一指令包括:
13、各所述从核在收到所述核间中断后,读取所述共享内存全局变量,并在确认所述共享内存全局变量指示所述嵌入式系统已发生异常后,执行所述第一指令。
14、一实施例中,当所述第一处理器核为所述至少一个从核之一时,各所述从核执行所述第一指令包括:
15、所述第一处理器核在向所述其他各个处理器核发送所述核间中断后执行所述第一指令;
16、所述其他各个处理器核中的从核在收到所述核间中断后,读取所述共享内存全局变量,并在确认所述共享内存全局变量指示所述嵌入式系统已发生异常后,执行所述第一指令。
17、一实施例中,所述方法还包括:
18、响应于所述第一处理器核的异常/中断函数被触发,读取所述第一处理器核的mcause寄存器的值,所述异常/中断函数为异常处理函数或核间中断函数;
19、判断所述mcause寄存器的bit63是否为0;
20、当bit63为0时,确认所述异常/中断函数为所述异常处理函数,并判断所述mcause寄存器的exccode域段的值是否为0xfff;
21、当所述exccode域段的值为0xfff时,确认所述第一处理器核发生看门狗异常。
22、一实施例中,所述响应于所述第一处理器核发生看门狗异常,还包括:
23、读取所述第一处理器核的硬件线程标识寄存器的值,以判断所述第一处理器核为所述主核还是所述至少一个从核之一。
24、一实施例中,在所述主核将所有所述从核复位之前,还包括:
25、所述主核通过轮询休眠状态寄存器中与各所述从核对应的比特位,确认各所述从核是否进入所述休眠状态;
26、相应地,所述主核将所有所述从核复位,包括:对于每个从核,所述主核在确认所述每个从核进入休眠状态后,将所述每个从核复位。
27、一实施例中,所述主核将所有所述从核复位,以及所述主核将所有所述从核解复位,分别通过写各所述从核对应的复位/解复位控制寄存器实现。
28、一实施例中,所述主核将各所述从核逐一或并行地复位,以及将各所述从核逐一或并行地解复位。
29、根据第二方面,一种实施例中提供一种嵌入式系统,采用risc-v对称多处理架构,包括一个主核和至少一个从核,所述嵌入式系统在任一处理器核发生看门狗异常时被配置为执行如本技术第一方面任一实施例所述的软件异常恢复方法。
30、依据上述实施例的软件异常恢复方法及嵌入式系统,首先,当表示任一处理器核(主核或从核)的第一处理器核发生看门狗异常时,第一处理器核通过核间中断和共享内存全局变量,将异常状态同步至系统中的其他各个处理器核。核间中断能够即时通知其他核心,保证了通信的实时性;共享内存全局变量提供了可靠的状态标识,使其他核心能够确认系统已进入异常状态,避免将其他核间通信消息误判为异常通知。两者配合确保了所有核心一致地同步进入恢复流程,提高了多核异常状态同步的可靠性。其次,各从核先执行第一指令进入休眠状态后,主核才对所有从核执行复位操作。先休眠后复位的方式确保了从核在受控的静止状态下被复位,避免了在从核仍在执行指令或处于不可控状态时复位可能引发的时序冲突或状态不一致问题,保证了复位过程的安全性和确定性。继而,主核在异常处理函数中将mepc寄存器的值直接设置为操作系统固件的初始化入口地址,并通过执行第二指令跳转至该入口执行第一初始化操作。由于该初始化入口地址指向的程序代码位于已加载 os 固件的随机存取存储器中,且看门狗异常不导致易失性存储器数据丢失,因此主核无需从flash中重新加载 os 固件,也无需重新执行传统的多级固件引导流程。异常恢复路径从传统的完整链路缩短为从异常处理函数直接跳转至os固件的初始化入口,显著缩短了恢复时延。最后,主核在执行第一初始化操作的过程中将所有从核解复位,从核响应解复位后从同一初始化入口开始执行第二初始化操作。所有处理器核最终汇聚至统一的os固件初始化入口进行恢复,无需引入额外的外部固件或特权级软件来接管异常流程,也无需修改操作系统的调度器逻辑,恢复路径集中、逻辑简洁,实现成本低。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com