0

我读过如果Linux内核虚拟地址在0xC0000000和(0xC0000000 + 896MB)之间。映射直接到物理地址。

也就是说,如果 RAM 位于 0x80000000。直接映射到 0xC0000000。

这是如何在 Linux 中实现的。是否有人告诉 MMU 每次虚拟地址在 0xC0000000 和 (0xC0000000 + 896MB) 之间时减去一个偏移量

4

1 回答 1

0

您不是在问 Linux 如何进行地址转换,而是在问 MMU 是如何进行的。

Linux 所做的只是在内存中建立一个称为页表的数据结构,并将 MMU 指向它。

页表包含描述如何处理每个虚拟地址空间块的条目(块的大小通常在 4KB-1MB 范围内,具体取决于您的平台和配置)。您可以将其映射到物理地址、设置权限标志或在尝试访问它时导致页面错误。

每次进行内存访问时,MMU 都会遍历该表以计算出要做什么(并在某处保存它的缓存)。

于 2014-07-09T00:07:14.770 回答