kmalloc函式的原型是:
#include void *kmalloc(size_t size, int flags);
kmalloc函式說明
******size是要分配的塊大小
******flags分配方式,控制kmalloc分配記憶體的方式
******在沒有阻塞的情況下,分配記憶體快,並且對於分配到的記憶體塊,不對該記憶體塊清零,分配到的記憶體塊裡儲存著原來它儲存的內容.
******kmalloc分配到的記憶體塊是連續的物理記憶體.
kmalloc的分配標誌解讀(這些標誌在標頭檔案中)
1. gfp_kernel
******最一般的使用分配標誌,代表執行在核心空間的程序而進行的記憶體分配.
******當所請求分配的記憶體不夠一頁的時候,gfp_kernel讓當前程序睡眠,來等待夠一頁記憶體大小的時候,才能獲得正確分配到的記憶體.
******使用gfp_kernel的函式必須是可重入的函式,並且不能在原子上下文中執行.
(可重入函式:簡單來說就是可以被中斷的函式,也就是說,可以在這個函式執行的任何時刻中斷它,轉入os排程下去執行另外一段**,而返回控制時不會出現什麼錯誤)
(上下文的概念:對於乙個程序,執行過的部分稱為程序的上文,正在執行的部分稱為程序的正文,還沒執行性程序的下文)
(原子操作:通俗滴說就是從開始到最後的執行完成,中間不能被打斷)
******gfp_kernel分配標誌,不能用在中斷處理函式中,tasklet (在某些方面類似核心定時器),核心定時器中.
2.gfp_atomic
******用來從中斷處理和程序上下文之外的其他**中分配記憶體,從不睡眠.
3. gfp_user
******為使用者空間頁來分配記憶體,可能睡眠.
4.gfp_dma
記憶體分配 kmalloc
kmalloc 記憶體分配引擎是乙個功能強大的工具,下面我們來講解一下這個函式。kmalloc 函式分配記憶體時有幾個特點 1 獲取記憶體空間時不會對記憶體空間進行清零,也就是說,分配給它的區域仍然保持著原有的資料。2 它分配的區域在物理記憶體中也是連續的。3 kmalloc最常用的標誌是gfp k...
核心中的kmalloc函式詳解
一 kmalloc函式詳解 include void kmalloc size t size,int flags 給 kmalloc 的第乙個引數是要分配的塊的大小.第 2 個引數,分配標誌,非常有趣,因為它以幾個方式控制 kmalloc 的行為.最一般使用的標誌,gfp kernel,意思是這個分...
核心中的kmalloc函式詳解
一 kmalloc函式詳解 include void kmalloc size t size,int flags 給 kmalloc 的第乙個引數是要分配的塊的大小.第 2 個引數,分配標誌,非常有趣,因為它以幾個方式控制 kmalloc 的行為.最一般使用的標誌,gfp kernel,意思是這個分...