0

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

我们真的需要为每个进程提供页表吗?当有多个进程时可能会出现什么问题?

为简化起见,请忽略高速缓存。

4

1 回答 1

2

MMU 不仅仅将虚拟地址空间映射到不同大小的物理地址空间。MMU 最重要的一点是内存保护,即使两个地址空间大小相同,这也是相关的:
MMU 处理映射到物理内存页面的虚拟内存页面(例如 4 kB 大小)。

在大多数系统中,不仅有一个虚拟地址空间,而且每个进程都有一个虚拟地址空间。在 MMU 控制下,每个进程只能访问操作系统(对 MMU 进行编程)允许的页面。不同进程的大多数页面是相互隔离的,因此例如一个进程不能通过写入其内存来使另一个进程崩溃。

在操作系统控制下将虚拟页面映射到物理页面允许地址空间随机化,因此跨虚拟页面边界读取会导致读取随机数据而不是某些数据(防止缓冲区溢出攻击等)。

此外,即使只有一个进程,页面也可以被视为可读写、只读、只执行和禁止访问。这允许限制进程以允许的方式访问其自己的页面,例如,它可能无法执行存储的“数据”。
可以在此处找到更多信息。

于 2014-02-15T19:59:54.920 回答