記憶體區操作函式分析
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...