關於kmalloc vmalloc 和malloc

用戶態的malloc是申請堆空間的用戶態函數。可網上很多人覺得malloc在內核態的調用函數是kmalloc或vmalloc,這是不對的 kmalloc是基於slab的,它在通用緩存區申請分配內存(這些緩存用於分配和釋放不是很頻繁的請求),通用緩存區一共26塊緩存塊,使用DMA和常規分配各佔有13個。緩存

當調用vmalloc時,先調用kmalloc分配一塊能夠存放申請的所有物理頁框描述符的空間,最後直接調用alloc_page每次申請一個物理頁框(實際上vmalloc調用的是每cpu高速緩存中的頁框)。函數

言歸正傳:內存

malloc首先得到的是線性區間,並無得到物理內存,由於內核就是這麼強硬,愛咋咋滴^^。當用戶向這個線性區間寫入時一定產生缺頁,進入缺頁處理程序,經判斷,這是一個匿名映射(當內存不足時能夠將這個區間的數據交換的swap中),而後在高端內存直接調用__alloc_pages(原本高端內存就是給用戶使用的)。因請求

相關文章
相關標籤/搜索