linux内核页目录,RAM小于896MB时页全局目录的初始化

同学你好,我觉得你没把处理器的分页机制弄清楚。

说我的拙见啊,32bit, pgd-pmd-pte 按10bit-10bit-10bit切开

pgd/pmd/pte是不是各占1024项,

pgd (1)

+-----+

|    |  0   每个pgd 覆盖4M的地址映射

+-----+

|    |  1

+-----+                  pmd (2)

|    |  x       ----> +------+

+-----+                 |    |   0    每个pmd负责4k的地址映射

|    |  1023          +------+

+-----+                 |    |   1

+------+                        pte(3)

|    |   y     ---------->  +------+

+------+                      |    |  0

|    |   1023               +------+

+------+                      |    |  1

+------+

|    |  z每个pte指向具体映射到哪个物理页

+------+

|    |  1023

+------+

要存放1024个pgd/pmd/pte表项需要3个page,也就是pgd,pmd,pte各需要4kB的空间。

你贴的代码是如何初始化x这个地方值,显而易见如果不需要pmd/pte再细分映射,在pgd这一级一次建立4M的huge page映射关系,那么是不是就只需写pgd就可以了。

ps 你贴的代码注释不是也将的很明白了吗?

pmd = one_md_table_init(pgd); /*返回pgd*/

phys_addr += PTRS_PER_PTE * PAGE_SIZE; /* 0x400000 */  物理地址是按照4M单位映射的

【 在 mousestuman 的大作中提到: 】

: pgd = swapper_pg_dir + pgd_index(PAGE_OFFSET); /* 768 */

: phys_addr = 0x00000000;

: while (phys_addr 

: ...................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值