Linux 内存管理之vmalloc
走進vmalloc
根據前面的系列文章,我們知道了buddy system是基于頁框分配器,kmalloc是基于slab分配器,而且這些分配的地址都是物理內存連續的。但是隨著碎片化的積累,連續物理內存的分配就會變得困難,對于那些非DMA訪問,不一定非要連續物理內存的話完全可以像malloc那樣,將不連續的物理內存頁框映射到連續的虛擬地址空間中,這就是vmap的來源)(提供把離散的page映射到連續的虛擬地址空間),vmalloc的分配就是基于這個機制來實現的。
vmalloc最小分配一個page,并且分配到的頁面不保證是連續的,因為vmalloc內部調用alloc_page多次分配單個頁面。
vmalloc的區域就是在上圖中VMALLOC_START - VMALLOC_END之間,可通過/proc/vmallocinfo查看。
數據結構
vmap_area 描述一段虛擬地址的區域,可以將struct vm_struct構成一個鏈表,維護多段映射。
vm_struct 管理虛擬地址和物理頁之間的映射關系
vmalloc
主要分以下三步:
從VMALLOC_START到VMALLOC_END查找空閑的虛擬地址空間(hole)
根據分配的size,調用alloc_page依次分配單個頁面.
把分配的單個頁面,映射到第一步中找到的連續的虛擬地址。把分配的單個頁面,映射到第一步中找到的連續的虛擬地址。
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
總結
以上是生活随笔為你收集整理的Linux 内存管理之vmalloc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兄弟j220怎么清零_BROTHER 兄
- 下一篇: 格式化Json字符串工具-HiJson