内核的早期页表

刚才的那张页表实在是太粗糙了,我想可能是有什么历史原因导致的吧。到了真正的内核,怎么也得换个漂亮点的页表。

这次的页表就在arch/x86/kernel/head_64.S里面咯~

从cr3开始

在x86平台上保存页表起始地址的就是这个cr3寄存器了,那就先看看这个寄存器变成了谁呗。

    movq    $(early_level4_pgt - __START_KERNEL_map), %rax

    /* Setup early boot stage 4 level pagetables. */
    addq    phys_base(%rip), %rax
    movq    %rax, %cr3

嗯,这个东西稍微有点绕。phys_base是一个偏移,我们暂且认为就是0吧。所以这次加载到cr3中的地址是early_level4_pgt - __START_KERNEL_map。这里稍微解释一下下,如果实在理解不了,暂时先跳过。

加载到cr3的是一个物理地址,而我们编译出的内核vmlinux是一个ELF文件且最终会在虚拟地址空间运行,所以所有的符号都保存的是虚拟地址。上面这两个动作就是得到early_level4_pgt这个符号在运行时的物理地址。

不管怎么样知道加载到cr3的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值