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