2008-11-18 92 views
2

在Linux內核中,給定task_structmm我可以訪問進程的列表vm_area_struct s。鑑於這些vm_area_struct s,我如何獲得實際上對應於此vma的struct page虛擬區域至頁面

我試着在mm/memory.c之類尋找函數,但是我不知所措。

編輯:這個想法是找出vma中的哪些頁面當前在內存中,哪些不在內存中。但我不要希望有人告訴我如何做到這一點,因爲這是我需要自己弄清楚的家庭作業的一小部分。但我似乎無法弄清楚如何找到與這個vma相對應的頁面。如果我能找到頁面,我想我可以檢查它們是否有有效的pfn。

回答

1

從你的評論到另一個答案(編輯:其他答案似乎已被刪除),似乎你想讀取用戶空間。獲得用戶空間頁面的功能是get_user_pages(),但這很可能不是你想要的;你可能想要copy_from_user/copy_to_user

+0

我相信,只要get_user_pages()發現頁面不存在於物理內存中就會產生頁面錯誤。但我認爲follow_page()可能會訣竅。讓我檢查一下。 – FreeMemory 2008-11-18 19:45:10

0

我沒有直接回答了手,但鑑於你已經有了你要開始從結構也不會帶你長的使用lxr.linux.no

導航結構,從http://lxr.linux.no/linux+v2.6.29/+code=vm_area_struct看看。您可以查找定義,查看使用單個結構的位置等等。如果您已經知道要查找的最終結構名稱,則可以反轉並向上導航,直到達到毫米。

請注意,如果您的網絡連接不太好,您可能希望通過獲取發行版的lxr軟件包並在本地生成索引來安裝索引源的本地副本。過去在400MHz/128MB的機器上需要2個小時,現在它應該快得多。