[英]Find page in memory for Process (linux-kernel)
基本上我有一個程序可以找到進程的所有VMA,但我想查看頁面表中該頁面的頁面。 我很難過。 我知道進程的task_struct有一個字段
pgd_t *pgd; /* page global directory */
這只是所有頁面的索引數組嗎?
我在“/mm/memory.c”中找到了這個函數
/*
* Do a quick page-table lookup for a single page.
*/
struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
unsigned int flags)
我可以傳遞一個VMA,但我不確定地址和標志應該是什么。 或許這不是我想要的? 有什么建議?
聽起來你想做一個基本的頁面漫步。
給定一個pgd
,可以通過尋找有效的條目迭代pud
的,然后通過迭代pud
S和等“。
一種方法是使用以下方法:
// iterate through your address space
for (i = 0; i < PAGE_SIZE / sizeof(*pud); i++) {
pud = pud_offset(pgd, PUD_SIZE * i);
// Check if the pud is valid
if (pud_none(*pud) || pud_bad(*pud))
continue;
// And so on
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.