c - 没有 MMU 的内存保护

标签 c memory memory-management

我想知道在没有 MMU 支持的情况下如何保护内存。我试图用谷歌搜索它,但没有看到任何有值(value)的论文或研究。那些处理它的人只处理错误,例如未初始化的指针,而不是由于软错误导致的内存损坏,也就是说,由于硬件 transient 故障破坏了写入内存位置的指令。

我想知道这一点的原因是因为我在没有任何内存保护的专有多核平台上工作。现在我的问题是,是否可以使用软件来保护内存,特别是对于由于软错误(而不是程序员的错误)导致的野写。对此的任何帮助将不胜感激。

最佳答案

如果您正在寻找运行时内存保护,唯一明智的选择是硬件支持。硬件是在错误的内存访问造成损坏之前进行干预的唯一方法。任何软件解决方案都容易受到它试图防止的内存错误的影响。

借助软件,您可以实现验证/检测方案。您可以定期检查当前正在运行的程序不应访问的内存部分,看看它们是否已更改(可能通过对这些区域进行 CRC 校验)。但是,当然,如果流氓程序损坏了保存校验和的区域,或者保存检查程序代码的区域,那么一切都将失败。

即使是这种软件检查解决方案也更像是一种调试实用程序,而不是永久性的运行时保护。没有 MMU 的设备很可能是小型嵌入式设备,没有备用周期来不断检查设备的内存。

通常没有 MMU 的设备被设计为运行没有内核或其他任何东西的单个程序,因此没有什么需要保护的。如果您需要运行多个程序并觉得需要保护,您可能需要更高级的硬件来支持您正在寻找的那种功能。

关于c - 没有 MMU 的内存保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7220675/

相关文章:

c - 如何从一美元.美分金额中分离出美分?

c++ - 读取到 VC++ 中的 boost 内存映射文件的末尾

c - 总线错误: 10 when scanning address space in c

c - C中的内存消耗

C:分配比需要更多的内存有好处吗?

android - 在 Android 上运行 "Hello World!"ANSI C 程序?

c - 如何读取/写入匿名共享映射?

memory-management - 在 Linux 中插入模块时出错 -- 1 无法分配内存

objective-c - 检测 NSView 何时被释放

客户端服务器 tcp/ip 聊天室应用程序