gpt4 book ai didi

memory-management - Linux 是否对页目录和页表使用自映射?

转载 作者:行者123 更新时间:2023-12-04 02:22:04 27 4
gpt4 key购买 nike

我问这个问题是因为我很好奇 Linux 内核是如何工作的。根据http://i-web.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/02-VirtualMemory/VirtualMemory.ppt Windows 在其页目录和名为 self-map 的页表中使用特殊条目,以便能够从内核虚拟地址空间操作页目录/表内容。如果有人熟悉 Linux 内存管理,请告诉我 Linux 内核是否以类似或不同的方式处理这个问题。谢谢。

最佳答案

是的,在 Linux 中页表也被映射到地址空间。但是某些体系结构中的分页数据结构可能会使用物理地址。所以它在 Linux 中没有修复。但是您可以轻松访问该表。

这是访问页表的内核代码

struct mm_struct *mm = current->mm;
pgd = pgd_offset(mm, address);
pmd = pmd_offset(pgd, address);
pte = *pte_offset_map(pmd, address);

了解更多关于 Linux 内存管理的信息 see this

IA32上的cr3寄存器存放的是页表基址指针(pgd指针),它存放的是物理地址。这是 true even for Windows (因为它是 x86 处理器的特性,而不是操作系统的特性)。

阅读this article了解 IA32 分页。

编辑2: Task struct包含 mm_struct与该任务(因此是一个进程)的内存管理相关的实例,这个 mm_struct 有一个 pgd_t * pgdload_cr3cr3 寄存器中加载页目录表的物理地址,但它采用 pgt 的虚拟地址。所以mm_struct包含了pgt的虚拟地址。

由于页表位于内核空间中,并且内核虚拟内存直接映射到 ram,因此它只是简单的宏。

关于memory-management - Linux 是否对页目录和页表使用自映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com