核心中與驅動相關的記憶體操作之六(vmalloc)
阿新 • • 發佈:2019-02-07
vmalloc是在整個虛擬空間分配出一段記憶體,它所面向的處理物件是CPU整個虛擬記憶體空間,而kmalloc是CPU的邏輯地址空間.邏輯地址空間也是"虛擬"的,只不過它和實體地址空間保持著線性關係的一種"虛擬地址空間",可以說,邏輯地址是虛擬地址的一個子集.
1.原型:
void *vmalloc(unsigned long size)
2.引數說明:
size:
目標分配記憶體的大小.
3.返回值:
成功返回分配記憶體的地址,失敗返回NULL.
4.應用場景:
4-1.vmalloc面向的記憶體分配是整個虛擬空間的,即不一定是邏輯地址空間;
4-2.vmalloc分配出來的記憶體空間在實體記憶體空間上不一定是連續的;
4-3.vmalloc分配的記憶體空間投影到實體記憶體空間是非線性的;
4-4.vmalloc分配記憶體後會引起核心對頁表的修改,這是因為它和實體記憶體空間是非線性的;
4-5.開銷比較大,因為它有個頁表重新修改的過程;
4-6.效率不高,因為它有個頁表重新修改的過程;
4-7.基於上述兩點,不推薦使用vmalloc來分配記憶體;
4-8.用vmalloc分配出來的記憶體需要用vfree來釋放.
5.例項:
和kmalloc使用場合一樣,只不過考慮到其效率問題,不建議使用.