256 字节中的崩溃恢复

这是一篇关于exhubris监督器的博客文章,主要介绍了在Hubris系统中监督器的作用、工作原理以及exhubris监督器的实现minisuper等内容:

  • Hubris中监督器的作用Hubris的一个强大功能是能够处理驱动程序和其他应用逻辑中的崩溃,通过称为监督器的机制将特定的崩溃处理行为留给应用程序员。当Hubris应用中的任务崩溃时,内核会记录崩溃信息、向监督器任务发布通知并选择另一个任务运行,而具体的崩溃处理行为由监督器决定。
  • 无监督器时的情况:如果应用不包含监督器任务,当应用中的任何任务崩溃时,内核会将通知 0 发布给配置文件中的第一个任务(通常不是监督器),导致崩溃的任务处于Faulted状态无法运行,并且可能引发任务堆积的问题。
  • 最小监督器minisuperexhubris仓库中包含一个最小监督器minisuper,它是一个简单的 Rust 可执行文件,通过sys_recv_notification等待任务崩溃通知,使用find_faulted_taskreinitialize_task这两个内核 IPC 来处理崩溃任务,实现了立即重新初始化并运行崩溃任务的策略,以防止任务堆积。
  • reinitialize_task防止任务堆积的原理reinitialize_task操作在重新启动目标任务时,还会对其他依赖于崩溃任务的任务进行处理,使其处于有效状态并能够继续前进,从而避免了任务堆积的问题。
  • 谁监督监督器:如果监督器崩溃,内核会将其保留,其他崩溃的任务将不会被重新启动,可能导致任务堆积。可以使用硬件看门狗定时器来确保系统在监督器死亡时能够重新启动。exhubris库提供了no-panic特性,可帮助编写不会崩溃的监督器。
  • 监督的成本Hubris需要一个监督器任务,这会增加应用的任务数量,但增加的成本很小,通常不会影响在最小的微控制器上的运行。
  • 结论:理解了监督器任务在Hubris应用中的作用,并且知道如何编写自己的监督器。监督器任务只是Hubris让应用程序员掌握主动权的几个地方之一,这种设计决策效果良好,并且minisuper的实现证明了崩溃恢复不必昂贵和复杂就能有用。
阅读 8
0 条评论