提问人:srikanth mucharla 提问时间:10/14/2022 最后编辑:artless noisesrikanth mucharla 更新时间:1/6/2023 访问量:201
ARM Trustzone 内存别名
ARM Trustzone memory aliasing
问:
我正在尝试了解 ARM Trustzone 实现,并遇到了内存别名,其中根据该地址的第 33 位将相同的内存解释为安全和不安全。我无法理解内存混叠的概念及其使用。你能用一些很好的例子详细解释一下吗?
答:
答案是尝试,
- 枚举术语“别名”的重载用法。
- 在引用文档的上下文中展示它的含义。
从字面上回答这个问题是困难的,可能不是OP的意图。
从根本上说,“内存别名”意味着两个地址引用同一个内存块。引用的文章更多地针对芯片设计人员,介绍如何解决 TrustZone 系统的问题以及在此类系统中开发 SOC 外设/总线。
我们可以通过指针在直接的“C”代码中具有别名。
void test(void)
{
char buffer[16];
char *p1 = &buffer[0], *p2 = p1 + 3.
strcpy(p1, "This is a test\n");
// confusion as pointers are referring to same memory chunk.
memcpy(p1,p2,strlen(p2)+1);
}
可以优化以执行单词移动。它可能以正向或反向方式复制。当指针别名时,传输内存的顺序和大小很重要。memcpy()
对于缓存,缓存值和“后备存储”(实际内存单元)可能不一致,这还会带来额外的复杂性。有缓存协议可以处理这个问题。协议取决于缓存类型。
- VIVT - 虚拟索引,虚拟标记
- PIPT - 物理索引,物理标记
- VIPT - 虚拟索引,物理标记。
Trustzone 处理物理地址,并增加了额外的一点。对于 SOC 供应商,您可以有一个外围设备,该外设使用两个内存地址来引用同一单元。这也是“混叠”。所以两个指针实际上背后有相同的记忆。这样可以方便地不在 SOC 模块中处理 TrustZone,而只是在总线连接中提供别名。因此,外设将响应两个不同的地址范围。这在 TrustZone 机制中是隐含的。安全地址清除“NS”(地址位 33),正常访问设置“NS”(地址位 33)。
缓存需要处理物理地址,这可能会导致缓存协议出现问题。一个简单的解决方法是不允许缓存重复的地址。“C”中的地址是相同的指针值;但被 CPU 世界修改。
你能用一些很好的例子详细解释一下吗?
不是真正的示例代码。我必须提供一些 Verilog 代码和总线连接到 SOC 外设和主机以及带有协议的缓存。我认为上面的解释在没有“例子”的情况下就足够了。
另一个需要帮助/搜索的主题可能是“完整地址解码”。非完整地址解码有时由硬件对存储设备完成。这也是一个别名,与本文试图阐明的大致相同。
上一个:LLVM 中的内存别名
评论