一、記憶體分區
二、kmalloc:
在使用者空間,我們使用一個面向堆的記憶體配置設定函數malloc來配置設定連續的堆空間,在核心中對應使用kmalloc
1、配置設定的空間連續 2、配置設定的記憶體裡面儲存了原有的資料
#include <linux/slab.h>
void *kmalloc(size_t size, int flags);
flag:
- 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: