2014-07-18 77 views
0

讓我們來考慮下面的代碼:使用alloc_pages分配頁面是否也分配結構?

struct page * str_page = alloc_pages(some flags, 4); 
str_page++; 

在第一行中有16頁將被分配和指向第一個分配頁的struct page被保存到str_page
然後我增加這個指針,它現在指向這個結構的後面。
現在是指向第二個分配頁面的struct page嗎?

一般的問題是:
結構是否對所有分配頁還與分配alloc_pages()或這些結構實際上早些時候內核由它分配和處理?

回答

1

是現在指向結構分配的第二頁的頁面大小遞增指針的地址?

通常是這樣。主要是因爲alloc_pages分配連續的頁面(vs稀疏/分散),只有通過這種方式才能實現。

但是,我建議你不要那麼做。如果你想獲得特定物理頁面的結構頁面,你應該使用pfn_to_page/phys_to_page來代替(顯然page_to_phys/page_to_pfn用於反向操作)。我不認爲有什麼保證結構頁面是如何在內存中佈局的。

所有分配的頁是否結構也與alloc_pages(撥)或這些結構實際上是由內核早先分配,並通過它來處理?

它們只是對預分配頁面的引用。實際頁面在啓動時由內核分配,並由內核管理。

0

下似乎表明頁面是連續的:

http://www.makelinux.net/books/lkd2/ch11lev1sec3

這意味着,遞增str_page指針將由大小str_page遞增值,讓您在內存中的下一個頁面。

在c中,這就是它的工作原理。當你增加一個指針類型,您可以通過該類型