MMU用于借助与该进程对应的页表将虚拟地址转换为正在运行的进程的物理地址。 让我们假设虚拟地址空间等于物理地址空间。在这种情况下我们真的需要MMU,因为我们不会遇到相同虚拟地址空间映射到不同物理地址的情况吗?
让我们说
Virtual Address
| 20 bits (V) | 12 bits(PO) |
Physical Address
| 20 bits(PPN) | 12 bits(PO) |
where V = Virtual Page
PO = Page offset
PPN = Physical Page Number
我们真的需要每个流程的Page Table吗? 当有多个流程时可能会出现什么问题?
请忽略缓存以简化。
答案 0 :(得分:2)
MMU不仅仅是将虚拟地址空间映射到不同大小的物理地址空间。 MMU最重要的一点是内存保护,即使两个地址空间具有相同的大小,它也是相关的:
MMU处理映射到物理存储器页面的页面(例如4kB大小)的虚拟存储器。
在大多数系统中,不仅有一个虚拟地址空间,而且每个进程都有一个虚拟地址空间。在MMU控制下,每个进程只能访问操作系统允许的页面(对MMU进行编程)。大多数不同进程的页面彼此隔离,因此例如一个进程不能通过写入其内存来崩溃另一个进程。
OS控制下的虚拟页面到物理页面的映射允许地址空间随机化,使得跨虚拟页面边界的读取导致读取随机数据而不是某些数据(防止例如缓冲区溢出攻击)。
此外,即使只有一个进程,页面也可以被视为读写,只读,仅执行和禁止访问。这允许限制进程以允许的方式访问其自己的页面,例如,它可以使得无法执行存储的“数据” 可以找到更多信息here。