比方说,我们从页面缓存文件的地址空间获得了struct page
。如何从结构页面获取关联数据的物理地址?
我们如何从这个struct page
获得4KB数据的起始物理地址?
我想应该是data
指针里面struct sk_buff
,但我没有找到它。
编辑
感谢垫子和llya的答案。
看完答案后,我认为第一个问题是确定struct page
是否位于ZONE_NORMAL
或ZONE_HIGHMEM
。
在文件I/O期间,当我们没有找到缓存页面时,我们将首先使用page_cache_alloc_cold()
分配一个新页面。 page_cache_alloc_cold()
将最终调用alloc_pages()
,看起来它将使用ZONE_HIGHMEM
(它在x86中是内核内存区域,起始于PAGE_OFFSET
+ 896M)用于其作业。
所以
- 我想垫的答案是适合页
ZONE_NORMAL
- 假设我们使用
kmap()
找到与结构页面相关联的4KB数据的起始物理地址,是正确的,我们应该使用(unsigned long)(&page)-PAGE_OFFSET
来查找存储结构本身的物理地址?
请更正。
将'page'想象成mem_map'数组中的一个项目。 – 2012-04-04 18:23:07