Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1322445
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: LINUX

2011-04-01 14:29:03

下面是我从一个网页上拷过来的,


#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)
根据给出页地址求出对应的页帧号。两个结构相减,得出的是丙都之间的对象个数,加上起始帧号偏移,即给出页地址的相对绝对页号。

#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET))
根据给出的页帧号计算出对应的页帧号。页基地址加上页帧号是相对偏移的页地址,减去一个偏移页帧号即页对象对应的地址。



想问page_to_pfn(page) 这个传进来的只是一个指向struct page结构的指针,并不是page的物理地址,那么怎么根据这个得到pfn呢?



我理解的pfn就是物理地址的前20位,不知我理解的对不对?

楼主应该说一下平台先...不同的平台这个实现应该是不同的...
x86上的话是这个page结构直接减去全局mem_map就可以了。
而NUMA上是先通过这个page结构获取起所属的节点. 然后用page减去节点的局部lmem_map。再加上这个节点在全局虚拟mem_map中的索引就可以得到。
其他平台不熟悉...

等于把书上的东西又重复了一遍,呵呵



我想问的是:

想问page_to_pfn(page) 这个传进来的只是一个指向struct page结构的指针,并不是page的物理地址,那么怎么根据这个得到pfn呢?



我理解的pfn就是物理地址的前20位,不知我理解的对不对?

个人理解:
每一个物理页面,对应一个page结构。这些page结构是按它对应的物理页面的地址顺序,顺序存放在mem_map数组中的。所以,page结构在mem_map数组中的偏移,就代表了page结构对应第几个物理页面。
pfn就是指page结构对应的物理页面序号。

在NUMA中,每个内存节点有自己的page结构数组(pglist_data->node_mem_map),属于不同节点的page是放在各自的node_mem_map数组中的。
而pfn应该是一个全局的值,不同内存节点的物理页面有着同一套序号,所以每个内存节点也记录了自已的起始序号(pglist_data->node_start_pfn),而page_to_pfn时应该加上这个起始序号。
__________________________________
 , welcome~
I am thirst for magic...

楼上,老兄,感谢

我理解的pfn就是物理地址的前20位,不知我理解的对不对?


还是pfn就是page在mem_map中的数组下标?

如果是数组下标的话,我理解应该是从0~max_pfn

应该是以1为单位递增的,但是如果用page结构的地址减去mem_map的地址得出的pfn肯定不是以1为单位递增的?


我哪里理解的不对?

我的理解是, pfn = 物理地址 >> PAGE_SHIFT, 也可以说是物理地址的前20位吧

(struct page*)page - (struct page*)mem_map, 其结果应该是以1为单位的吧, 而不是以sizeof(struct page)为单位吧. 
(TYPE*)a - (TYPE*)b = ((char*)a - (char*)b) / sizeof(TYPE)
应该是这样的吧~
__________________________________
 , welcome~
I am thirst for magic...



QUOTE:
楼上,老兄,感谢

我理解的pfn就是物理地址的前20位,不知我理解的对不对?


还是pfn就是page在mem_ ...
unbutun 发表于 2010-10-19 20:19 


这个宏返回的是数组下标。
理解了指针相减就明白了
假如page的实际地址是 p1,   mem_map的地址是 p2;
那么这个宏结果就是  (p1-p2)/sizeof(struct page) + PHYS_PFN_OFFSET;




QUOTE:
我的理解是, pfn = 物理地址 >> PAGE_SHIFT, 也可以说是物理地址的前20位吧

(struct page*)page - (stru ...
kouu 发表于 2010-10-19 23:05 




    明白了,谢谢
阅读(1105) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~