QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1257|回复: 5

关于Page Global Directory初始化的问题!

[复制链接]
发表于 2003-8-18 12:24:48 | 显示全部楼层 |阅读模式
我现在看的是ULK2。
内核的PGD初始化时,swapper_pg_dir的值关系到PGD在RAM中的位置。
但是我没看到书上写这个值是如何设定的,请高手指点一下。谢谢!
发表于 2003-8-18 23:27:31 | 显示全部楼层
jjww, can u explain this? i forget it already.  
回复

使用道具 举报

发表于 2003-8-27 12:58:27 | 显示全部楼层

Re: 关于Page Global Directory初始化的问题!

[quote:c0c324e1c5="ttao_wu"]我现在看的是ULK2。
内核的PGD初始化时,swapper_pg_dir的值关系到PGD在RAM中的位置。
但是我没看到书上写这个值是如何设定的,请高手指点一下。谢谢![/quote]

swapper_pg_dir的值是在内核连接后确定的,而整个内核连接后的首地址由vmlinux.lds文件指定,是0xC0100000。swapper_pg_dir的值就是0xC0100000加上它在整个内核中的偏移量。head.s中有如下语句:

.org 0x1000
ENTRY(swapper_pg_dir)

也就是说swapper_pg_dir的偏移是0x1000,因此最终swapper_pg_dir的值是0xC0101000。

内核初始化CR3寄存器的语句如下:
movl $swapper_pg_dir-__PAGE_OFFSET,%eax
movl %eax,%cr3

这里的__PAGE_OFFSET就是0xC0000000。因此最终cr3中的内容是0x101000。由于内核加载时被放在内存的1MB开始的地方,也就是0x100000,这样0x101000恰好就是页目录表的起始地址。
回复

使用道具 举报

发表于 2003-8-27 21:28:26 | 显示全部楼层
hehe, thx.
回复

使用道具 举报

 楼主| 发表于 2003-8-28 11:37:03 | 显示全部楼层
明白了,非常感谢!
希望以后多多指导哈!
回复

使用道具 举报

发表于 2003-9-14 23:55:55 | 显示全部楼层
我的理解:

CR3是PDE在物理内存的地址

而PDE映射到虚拟地址是0xC0101000.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:50 , Processed in 0.042645 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表