龙芯开源社区

 找回密码
 注册新用户(newuser)
12
返回列表 发新帖
楼主: pwp

16k页大小,那么32位地址怎么划分呢?

[复制链接]
发表于 2007-5-30 19:52:28 | 显示全部楼层

回复 #6 pwp 的帖子

与其这么分析数据,不如去看看内核代码,看如何处理从页表到内存地址的过程。
pgd内容逻辑上肯定是虚拟地址,具体由没有做一些简单的变换我也不确定,很久没有看了。按理pgd内容也不会由于swap而变化,这些数据确实不正常。

你这段程序有点问题 pgd + 4*i 是指针运算,增加了sizeof(long)*4*i,所以后面一片都已经超过了一个页的范围。
发表于 2007-6-2 18:43:41 | 显示全部楼层
还是看代码看明白了

loongson@debian:~/project/kernel/2.6.21.3/linux-2.6.21.3$ nm vmlinux | grep module_pg_dir
ffffffff804fc000 B module_pg_dir
loongson@debian:~/project/kernel/2.6.21.3/linux-2.6.21.3$ nm vmlinux | grep pgd_current
ffffffff80510000 B pgd_current
loongson@debian:~/project/kernel/2.6.21.3/linux-2.6.21.3$ nm vmlinux | grep swapper_pg_dir
ffffffff8050c000 B swapper_pg_dir
      64:    b8d81a00     dsll    k1,k0,0x2
      68:    05006107     bgez    k1,0x80
      6c:    00c01b3c     lui    k1,0xc000
      70:    2fd05b03     dsubu    k0,k0,k1
      74:    50801b3c     lui    k1,0x8050
      78:    e5ff0010     b    0x10
      7c:    00c07b67     daddiu    k1,k1,-16384
      80:    3cd81b00     dsll32    k1,k1,0x0
      84:    2fd05b03     dsubu    k0,k0,k1
      88:    51801b3c     lui    k1,0x8051
      8c:    e0ff0010     b    0x10
      90:    00c07b67     daddiu    k1,k1,-16384


这段代码的意思就是
vaddr>0xc000 0000时,页表在module_pg_dir
vaddr>0xc000 0000 0000 0000时,页表在swapper_pg_dir
发表于 2007-7-16 10:18:23 | 显示全部楼层
原帖由 kingkongmao 于 2007-5-30 05:21 PM 发表
我做了一个模块把内核生成的tlbrefill程序拷贝了出来(64位内核),然后反汇编了一下,很容易从中看出pgd,pmd,pt这些table是怎么划分的,反汇编如下:

       0:    00403a40     dmfc0    k0,$8
       4: ...


补充、总结一下 kingkongmao 的分析 ^_^

64bit 下,pgd_t,pmd_t,pte_t (定义为 unsigned long )应该为 8 字节,因此 16 KB 页下,每页可容纳的PGD,PMD,PTE 项为 16K/8 = 2K = 2^11,故而:

      10:    7ed01a00    dsrl32   k0,k0,0x1           /* logical shift right 33 bit */
      14:    f83f5a33     andi    k0,k0,0x3ff8

应该是使用 VA[46:36] 索引PGD,低3位置0,意在以8字节为单位索引PGD。用于索引PGD的VA 的位数正好为11位,与每页容纳的PGD 项相对应。

PMD 类似,使用 VA[35:25],11位索引 PMD。

PTE 则要注意,其使用 VA[24:15],10位索引 PTE,只因为每次要取2项共16个字节,因此要忽略VA[14],故而其低4位要为0。虽然使用10位索引,但其以16字节为单位,则实际的索引项数仍然为 2^11。

余下的 VA[13:0] 正好是页内位移,这样就完美了 :)

[ 本帖最后由 comcat 于 2007-7-16 11:57 AM 编辑 ]
发表于 2012-2-13 17:12:50 | 显示全部楼层
刚开始研究,附件不能下载了,管理者帮忙处理一下,谢谢!

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-7-21 18:29 , Processed in 0.190187 second(s), 16 queries .

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