我知道linux在内存管理中使用三个级别的页面表。
我对页面的内容感到困惑,table.Does页面表包含下一级页面表、基地址还是包含页面帧号? 如果它包含页帧号,那么如何获得该特定页表的基地址?它存储在哪里?
如果有人向我澄清了这件事,那就太好了。
发布于 2012-09-03 06:48:20
如果您讨论的是x86(/64),那么每个页面表条目(终端除外)都包含下一个页表的物理地址,终端PTE包含实际代码/数据页的物理地址。
由于页表是作为页本身组织的,它们的物理地址自然是页大小的倍数。
在PTE中存储完整的物理地址是没有意义的,12个最小的位总是为零(如果页面大小为4KB),因此它们不会存储在PTEs中(并且PTEs中的恢复空间用于控制标志,例如内核/用户、只读/可写、可执行、呈现、脏、访问等)。像这样截断的地址通常被称为页面帧号,因为它们只不过是页码(如果您将从0到地址4096的页面的所有页面计数,等等)。
您的问题的最终答案与所有血淋淋的细节是在相关的CPU手册。
https://stackoverflow.com/questions/12242868
复制相似问题