【发布时间】:2015-10-29 15:27:27
【问题描述】:
在linux内核中,页地址、虚拟地址和物理地址有什么区别?另外,如果我有 struct page 地址,我怎样才能找到它的虚拟地址?
有人可以就Linux内核版本3.10解释清楚吗?
提前感谢您的回答。
【问题讨论】:
标签: linux linux-kernel
在linux内核中,页地址、虚拟地址和物理地址有什么区别?另外,如果我有 struct page 地址,我怎样才能找到它的虚拟地址?
有人可以就Linux内核版本3.10解释清楚吗?
提前感谢您的回答。
【问题讨论】:
标签: linux linux-kernel
物理地址是 RAM 中的地址。一旦达到可用物理内存的限制,内核必须分配某个地方,那个地方就是虚拟地址空间。虚拟内存的映射使得您拥有比物理内存更多的可用内存,这是通过将虚拟内存分成称为页面的块来完成的。
每个虚拟地址都映射到物理内存中的一个位置,其中物理地址与虚拟地址之间存在一对多的关系,即,有许多虚拟地址映射到同一个物理位置。这种映射是通过页表中的地址转换来完成的。
页面是虚拟内存的最小单位。页面大小因架构和实现而异,但在 x86 for Linux 上为 4 KiB。使用虚拟内存时,您必须读取整个页面,而不仅仅是一个块。当您说“页面地址”时,您可能指的是页面中可以找到特定虚拟地址的索引。
在对我的答案进行事实核查时,我发现了一些很好的pages,它可能会帮助您更好地理解虚拟内存。前 2 个是 Wikipedia,相当笼统,后两个是 Linux 特定的:
【讨论】: