在浏览一个嵌入式处理器架构时,我看到了块MMU,它主要提到了内存保护功能。
我可以知道,
MMU如何提供这种保护以及为什么需要它? 什么是记忆保护的意思?
除了保护(如虚拟寻址)之外,MMU的其他用途是什么?
请考虑没有操作系统的嵌入式系统。
__卡努
答案 0 :(得分:19)
答案 1 :(得分:9)
MMU(内存管理单元)是希望拥有独立且受保护的内存空间的系统的基本块。我将保持这个简单,因为可以写关于内存管理硬件和策略的全书......
如果没有保护,在任何进程中运行的程序都可以访问任何其他进程的内存。即使您忽略了安全隐患,这也意味着一个程序中的错误可能会覆盖属于某个其他进程的内存。调试这类问题并不容易,因为症状与原因相差甚远。
因此,需要某种组织原则,以便每个进程只能查看和修改分配给它的内存。并且,由于错误发生,重要的是该组织应由硬件支持,以便即使意外访问错误的内存部分也很困难。
这样做的一个优点是,还可以使每个进程的内存映射看起来相同。链接器可以将每个程序定位在相同的起始地址,将堆栈和堆放入可预测的区域,并保留内存以与内核进行交互。
MMU是实现从进程使用的逻辑地址到硬件使用的物理地址的转换的硬件组件。它还提供安全功能,例如仅将某些内存部分标记为可执行文件。它提供了内核实现进程交换和虚拟内存所需的数据结构,因此进程B甚至无法看到属于进程A的内存页,但可信内核可以看到A和B都可以看到。
为了以实用的方式实现这一点,物理内存被分成页面,通常大小为4KB。每个逻辑地址都分为页码和偏移量。页码索引MMU中的表,该表将每个逻辑页面转换为某个物理地址。此转换发生在每个内存访问周期中。单个物理页面可以映射到无进程(在这种情况下可能也在一个空闲页面池中),只有一个或几个。
进程的堆栈,数据和堆通常由映射到该进程的页面组成。这有助于防止一个进程中的错误影响其他进程,因为每个进程只能写入自己的堆栈,数据和堆页面。
如果将同一页物理内存映射到多个进程,则这些进程可见。这就是Windows上的DLL或Unix上的.so的共享方式:保存程序文本的页面映射到链接到它的每个进程。
MMU有一种机制,在访问尚未映射到进程的页面时抛出异常。处理该异常可以实现虚拟内存,并在需求发生变化时增加分配给进程的内存量。
答案 2 :(得分:2)
内存保护意味着系统上的每个进程都在其自己的虚拟地址空间中运行,实际上,每个进程的运行就好像它有一个系统的主内存一样。这也意味着一个进程不能改变为另一个进程保留的内存;这对于系统稳定性和安全性至关重要(例如,程序不能简单地扫描系统内存以找到刚刚输入的密码)。
MMU提供了许多其他功能(虚拟内存,动态重定位等)。
这就是为什么以及为什么。要回答“如何”,您应该进一步reading。