gpt4 book ai didi

linux - 内核如何设置注册cr3?

转载 作者:太空狗 更新时间:2023-10-29 12:10:45 25 4
gpt4 key购买 nike

我知道处理器的 mmu 使用寄存器 cr3 将线性地址转换为物理地址,前提是 cr3 正确设置为 物理地址 页目录。但是内核分配完页表后,如何找到页表的物理地址并设置cr3呢?

编辑:我说的是 linux 内核。

最佳答案

我假设困扰你的是:假设(一旦切换到保护模式)内核只写入虚拟地址,那么这意味着它写入它创建的页表(例如,对于新进程) 到虚拟地址。但既然内核必须将一个物理地址放入cr3,那么它如何将页表的虚拟地址转换为物理地址呢?

简短的回答基本上就是玛格丽特所说的:页表在内核地址空间中找到,内核密切跟踪那里的虚拟->物理映射。

为了更具体一点,Linux 在内核中区分了两种类型的虚拟地址:

  • 内核虚拟地址——可以(概念上)映射到任何物理地址;和
  • 内核逻辑地址 - 是具有线性映射到物理地址的虚拟地址

内核将页表放在逻辑地址中,因此您只需要关注这些即可进行讨论。

将逻辑地址映射到其对应的物理地址只需要减去一个常量(参见 Linux 中的 __pasource code)。

例如在x86上,物理地址0对应逻辑地址0xC0000000,物理地址0x8000对应逻辑地址0xC0008000。

因此一旦内核将页表放在一个特定的逻辑地址中,它就可以很容易地计算出它对应于哪个物理地址。

更多详情,您可以阅读相关Linux Device Drivers chapter .

关于linux - 内核如何设置注册cr3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45239165/

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