這篇文章主要講解了“Linux分區頁框分配器怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux分區頁框分配器怎么使用”吧!
頁框分配在內核里的機制我們叫做分區頁框分配器(zoned page frame allocator),在linux系統中,分區頁框分配器管理著所有物理內存,無論你是內核還是進程,都需要請求分區頁框分配器,這時才會分配給你應該獲得的物理內存頁框。當你所擁有的頁框不再使用時,你必須釋放這些頁框,讓這些頁框回到管理區頁框分配器當中。
有時候目標管理區不一定有足夠的頁框去滿足分配,這時候系統會從另外兩個管理區中獲取要求的頁框,但這是按照一定規則去執行的,如下:
內核中根據不同的分配需求有6個函數接口來請求頁框,最終都會調用到__alloc_pages_nodemask。
可以看頁框分配器的核心函數是__alloc_pages_nodemask,在講這個函數之前我們先看下兩個標志:
struct page *
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,
nodemask_t *nodemask)
{
page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac);//fastpath分配頁面:從pcp(per_cpu_pages)和伙伴系統中正常的分配內存空間
......
page = __alloc_pages_slowpath(alloc_mask, order, &ac);//slowpath分配頁面:如果上面沒有分配到空間,調用下面函數慢速分配,允許等待和回收
......
}
在頁面分配時,有兩種路徑可以選擇,如果在快速路徑中分配成功了,則直接返回分配的頁面;快速路徑分配失敗則選擇慢速路徑來進行分配??偨Y如下:
如果分配的是單個頁面,考慮從per CPU緩存中分配空間,如果緩存中沒有頁面,從伙伴系統中提取頁面做補充。
分配多個頁面時,從指定類型中分配,如果指定類型中沒有足夠的頁面,從備用類型鏈表中分配。最后會試探保留類型鏈表。
感謝各位的閱讀,以上就是“Linux分區頁框分配器怎么使用”的內容了,經過本文的學習后,相信大家對Linux分區頁框分配器怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。