天天看點

【kmalloc】配置設定核心記憶體

一、記憶體分區

【kmalloc】配置設定核心記憶體

二、kmalloc:

在使用者空間,我們使用一個面向堆的記憶體配置設定函數malloc來配置設定連續的堆空間,在核心中對應使用kmalloc

【kmalloc】配置設定核心記憶體

1、配置設定的空間連續    2、配置設定的記憶體裡面儲存了原有的資料 

#include <linux/slab.h> 
void *kmalloc(size_t size, int flags);       

flag:

【kmalloc】配置設定核心記憶體
GFP_ATOMIC
用來從中斷處理和程序上下文之外的其他代碼中配置設定記憶體. 從不睡眠.
GFP_KERNEL
核心記憶體的正常配置設定. 可能睡眠.
GFP_USER
用來為使用者空間頁來配置設定記憶體; 它可能睡眠.
GFP_HIGHUSER
如同 GFP_USER, 但是從高端記憶體配置設定, 如果有. 高端記憶體在下一個子節描述.
GFP_NOIO GFP_NOFS
這個标志功能如同 GFP_KERNEL, 但是它們增加限制到核心能做的來滿足請求. 一個 GFP_NOFS 配置設定不允許進行任何檔案系統調用, 而 GFP_NOIO 根本不允許任何 I/O 初始化. 它們主要地用在檔案系統和虛拟記憶體代碼, 那裡允許一個配置設定睡眠, 但是遞歸的檔案系統調用會是一個壞注意.

上面列出的這些配置設定标志可以是下列标志的相或來作為參數, 這些标志改變這些配置設定如何進行:

__GFP_DMA
這個标志要求配置設定在能夠 DMA 的記憶體區. 确切的含義是平台依賴的并且在下面章節來解釋.
__GFP_HIGHMEM
這個标志訓示配置設定的記憶體可以位于高端記憶體.
__GFP_COLD
正常地, 記憶體配置設定器盡力傳回"緩沖熱"的頁 -- 可能在處理器緩沖中找到的頁. 相反, 這個标志請求一個"冷"頁, 它在一段時間沒被使用. 它對配置設定頁作 DMA 讀是有用的, 此時在處理器緩沖中出現是無用的. 一個完整的對如何配置設定 DMA 緩存的讨論看"直接記憶體存取"一節在第 1 章.
__GFP_NOWARN
這個很少用到的标志阻止核心來發出警告(使用 printk ), 當一個配置設定無法滿足.
__GFP_HIGH
這個标志辨別了一個高優先級請求, 它被允許來消耗甚至被核心保留給緊急狀況的最後的記憶體頁.
__GFP_REPEAT __GFP_NOFAIL

__GFP_NORETRY

size:

【kmalloc】配置設定核心記憶體

繼續閱讀