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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux内核 -内存管理模块概图

發布時間:2023/11/27 生活经验 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核 -内存管理模块概图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.從進程(task)的角度來看內存管理

  1. 每個進程對應一個task_struct;
  2. 每個task_struct 里面包含指向mm_struct 的指針mm,
    mm_struct 里面的主要成員:
    a. 指向vma鏈表的頭指針:mmap
    b. 指向vma紅黑樹的根節點: mm_rb
    c. 指向進程列表的指針pgb;
  3. vma(vm_area_struct): 進程虛存管理的最基本的管理單元應該是struct vm_area_struct了,它描述的是一段連續的、具有相同訪問屬性的虛存空間,該虛存空間的大小為物理內存頁面的整數倍。通常,進程所使用到的虛存空間不連續,且各部分虛存空間的訪問屬性也可能不同。所以一個進程的虛存空間需要多個vm_area_struct結構來描述。
    結構體的主要成員:
    a. vma的起始和結束地址;
    b. 指向vma 前后節點的指針
    c. 指向當前vma在紅黑樹中的位置指針;
    d. 指向當前vma所歸屬的mm_struct 的指針;

2.從物理頁面(page)的角度來看待內存管理

  1. mem_map[] 里面包含了所有的物理頁面,可以通過索引來訪問。
  2. 每一個物理頁面用 struct page來表示,page 里面的主要成員介紹:
    a. flags里面包含了當前頁面的標志
    另外也包含了其所屬的zone的標志。
    b. mapping:表示這個頁面指向的地址空間。反響映射(reverse mapping)時使用,比如頁面回收時。
    c. _mapcount:表示這個頁面被進程映射的個數。
    d. _count:內核中引用該頁面的次數,當其為0時,表示這個頁面空閑。

  3. struct zone:
    zone 里面的主要成員介紹:
    a. watermark[]: zone的3個水位值:min/low/high, 在kswapd頁面回收中會用到;
    b. lowmem_reserve[]: zone中遺留的內存:
    https://blog.csdn.net/kickxxx/article/details/883573
    kernel在分配內存時,可能會涉及到多個zone,分配會嘗試從zonelist第一個zone分配,如果失敗就會嘗試下一個低級的zone(這里的低級僅僅指zone內存的位置,實際上低地址zone是更稀缺的資源)。我們可以想像應用進程通過內存映射申請Highmem 并且加mlock分配,如果此時Highmem zone無法滿足分配,則會嘗試從Normal進行分配。這就有一個問題,來自Highmem的請求可能會耗盡Normal zone的內存,而且由于mlock又無法回收,最終的結果就是Normal zone無內存提供給kernel的正常分配,而Highmem有大把的可回收內存無法有效利用。
    因此針對這個case,使得Normal zone在碰到來自Highmem的分配請求時,可以通過lowmem_reserve聲明:可以使用我的內存,但是必須要保留lowmem_reserve[NORMAL]給我自己使用。
    同樣當從Normal失敗后,會嘗試從zonelist中的DMA申請分配,通過lowmem_reserve[DMA],限制來自HIGHMEM和Normal的分配請求。
    c. zone_pgdat: 指向內存節點
    在UMA系統上,只使用一個NUMA結點來管理整個系統內存
    d. lruvec: LRU的鏈表集合,用于內存頁面回收(page reclaim)
    共5個鏈表:
    匿名頁面的不活躍鏈表、匿名頁面的活躍鏈表
    文件頁面的不活躍鏈表、文件頁面的活躍鏈表
    不可回收頁面鏈表

struct lruvec {struct list_head lists[NR_LRU_LISTS];struct zone_reclaim_stat reclaim_stat;
#ifdef CONFIG_MEMCGstruct zone *zone;
#endif
};
enum lru_list { LRU_INACTIVE_ANON = LRU_BASE, LRU_ACTIVE_ANON = LRU_BASE + LRU_ACTIVE, LRU_INACTIVE_FILE = LRU_BASE + LRU_FILE, LRU_ACTIVE_FILE = LRU_BASE + LRU_FILE + LRU_ACTIVE,LRU_UNEVICTABLE,NR_LRU_LISTS
};

3.task里面的vma和page怎么關聯呢?

下一節詳細研究

總結

以上是生活随笔為你收集整理的linux内核 -内存管理模块概图的全部內容,希望文章能夠幫你解決所遇到的問題。

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