gpt4 book ai didi

linux - 我在阅读 head.s(Linux 内核文件之一)时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 11:43:26 24 4
gpt4 key购买 nike

head.s 中的代码片段如下所示:

movl $swapper_pg_dir-0xc0000000,%eax
movl %eax,%cr3 /* set the page table pointer.. */
movl %cr0,%eax
orl $0x80000000,%eax
movl %eax,%cr0 /* ..and set paging (PG) bit */

内核在开启分页机制之前(当然PE标志现在已经开启),将临时Page Directory Table的地址加载到%cr3

问题是:
我认为内核应该直接将 $swapper_pg_dir 值放入 %eax 而不是 $swapper_pg_dir-0xc0000000。我知道我错了,但为什么呢?

最佳答案

内核将内存视为基于 0xC0000000。任何内存分配,指针或全局,都位于 0xC0000000 到 0xFFFFFFFF 之间。然而,对于 HW Controller ,例如 MMU 或任何协处理器,内存窗口可能基于 0x00000000。

因此,当将指向表或描述符的指针加载到硬件引擎时,它必须基于 0x00000000

关于linux - 我在阅读 head.s(Linux 内核文件之一)时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31694531/

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