程序位址空間 輔助函式分析

2021-06-16 15:25:28 字數 1388 閱讀 7101

記憶體區操作函式分析

1431 /* look up the first vma which satisfies  addr < vm_end,  null if none. */

1432 struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr)

1433 else

1458 rb_node = rb_node->rb_right;

1459 }

1460 if (vma)

1461 mm->mmap_cache = vma;

1462 }

1463 }

1464 return vma;

1465 }

find_vma用來在記憶體區查詢第乙個結束位址在addr之後的vma,

1439 根據區域性性原理,核心首先檢查上次處理的區域是否包含本次所需的位址,即mmap_cache包含住這個位址,如果成立,那麼直接從1464返回。

1441~1463 不包含在mmap_cache中,那麼我們從紅黑樹的根節點開始,進行查詢.

1446 ~ 1459 紅黑樹的查詢很簡單,如果節點的結束位址大於addr並且開始位址小於addr,那麼說明已經找到,退出迴圈;否則在進入不同的樹分支。

1460~1461 用找到的vma更新mmap_cache

1073 /* look up the first vma which intersects the interval start_addr..end_addr-1,

1074 null if none. assume start_addr < end_addr. */

1075 static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)

1076

這個函式的作用是找到乙個vma,使得這個vma完全包含start_addr和end_addr定義的空間。

1407 unsigned long

1409 unsigned long pgoff, unsigned long flags)

1410

linux核心程序命名空間函式分析

struct pid 與 struct task struct 都是全域性的 核心的 struct pid 的 level 為最高的命名空間層次 全域性的命名空間層次為0 task struct.pid 為全域性的pid,find get pid pid t nr nr 必須為全域性pid t pi...

程序位址空間

這篇文章應該不能說是原創的,這裡的記錄都是我通過閱讀整理來的,並沒有太多的自己的想法。資料 現代作業系統 之所以去了解位址空間也是因為在學習dll的時候看到要將dll對映到程式的位址空間,不甚明了所以去查詢相關的資料。位址空間其實很好理解 當然針對早期的機器 早期的機器是沒有ram,rom,cach...

程序位址空間

kernel筆記 程序位址空間 2013 09 03 09 53 49 分類 linux 下圖是x86 64下linux程序的預設記憶體布局形式 下面逐一分析以上各個位址段的含義。text 段 段,從虛擬記憶體位址00400000開始,使用pmap 可以檢視到,這個位址是固定的 linux pmap...