实现完全 MCU 分区隔离:堆

曾几何时,嵌入式系统非常简单以至于很少使用堆。然而,从那时起,复杂性增长得如此之快,以至于大多数嵌入式系统,甚至是实时操作系统,现在都使用堆。如果只有一个堆在使用,堆效率就不是什么大问题。然而,在典型的分区系统中,可能有几个堆。多堆支持变得必要,因为在分区之间使用公共堆会破坏分区隔离。黑客可以破坏公共堆并关闭所有使用它的分区,或者可能通过公共堆入侵它们。在多堆情况下,堆效率和特性变得很重要。下面讨论了在完全分区的嵌入式系统中有用的各种堆特性。

双向链接块

堆由链接的块组成。在每个块中是堆使用的元数据和返回给用户的数据块。在dlmalloc(参见参考资料1)及其许多派生体中,块大小位于每个块的开头和每个空闲块的末尾。这实现了非常高的内存效率——每个正在使用的块只有 8 个字节。但是,只能向前跟踪(通过向堆开始添加大小),而不能向后跟踪整个堆。

嵌入式系统的更好设计是每个块中的前向链接和后向链接。这允许在空闲期间连续向前堆跟踪以查找断开的链接,并且当发现断开的链接时,向后跟踪以修复它。(在向前追踪时,也需要向后追踪检查每个链接。)堆包含重要信息,例如任务堆栈、内存保护阵列以及其他系统和应用程序控制结构。因此,堆自检和自愈对于暴露于背景辐射、电气干扰、过热和许多嵌入式系统遇到的其他环境现象的嵌入式系统非常重要——更不用说黑客了。

堆垃圾箱

dlmalloc 是最早使用heap bins 的堆之一,此后开发的大多数其他堆也使用它们。堆 bin 由双向链接的空闲块组成,在特定大小范围内,链接到 bin 头。通常,最小尺寸的 bin 只有一个尺寸,并按连续的块尺寸(例如 24、32、……、56)组织,直到最大尺寸。这被称为小仓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值