日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 内存管理之vmalloc

發布時間:2023/12/20 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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構成一個鏈表,維護多段映射。

struct?vmap_area?{unsigned?long?va_start;?//vmalloc申請虛擬地址返回的起始地址unsigned?long?va_end;?//vmalloc申請申請虛擬地址返回的結束地址unsigned?long?flags;//掛接到vmap_area_root紅黑樹struct?rb_node?rb_node;?????????/*?address?sorted?rbtree?*///掛接到vmap_area_list鏈表struct?list_head?list;??????????/*?address?sorted?list?*/struct?llist_node?purge_list;????/*?"lazy?purge"?list?*///如果當前VA處于使用狀態(即在vmap_area_root為根的紅黑樹中和vmap_area_list鏈表中),vm有效,指向用于管理虛擬地址和物理頁之間的映射關系的描述符struct?vm_struct?*vm;struct?rcu_head?rcu_head; };
  • vm_struct 管理虛擬地址和物理頁之間的映射關系

struct?vm_struct?{struct?vm_struct?*next;?//指向下一個vm結構體void???*addr;?//當前vmalloc區域的虛擬地址的起始地址unsigned?long??size;?//當前vmalloc區域的虛擬地址的大小unsigned?long??flags;//vamlloc分配獲取的各個物理頁面并是不連續的,每個物理頁面用struct page描述,一個vm_struct對用到的管理所有物理頁面的struct page構成一個數組,而pages就是指向這個數組的指針。struct?page??**pages;unsigned?int??nr_pages;?//vmalloc映射的page數目phys_addr_t??phys_addr;?//用來映射硬件設備的IO共享內存,其他情況下為0const?void??*caller;?//調用vmalloc函數的函數的地址 };

vmalloc

主要分以下三步:

  • 從VMALLOC_START到VMALLOC_END查找空閑的虛擬地址空間(hole)

  • 根據分配的size,調用alloc_page依次分配單個頁面.

  • 把分配的單個頁面,映射到第一步中找到的連續的虛擬地址。把分配的單個頁面,映射到第一步中找到的連續的虛擬地址。


  • 推薦閱讀:

    專輯|Linux文章匯總

    專輯|程序人生

    專輯|C語言

    我的知識小密圈

    關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。

    歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~

    總結

    以上是生活随笔為你收集整理的Linux 内存管理之vmalloc的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。