比方說,我們從頁面緩存文件的地址空間獲得了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