brk()用於使用者程序向核心申請空間,進一步說用於擴充套件使用者堆疊空間,或者**使用者堆疊空間。
asmlinkage unsigned long sys_brk(unsigned long brk)
1.malloc為小空間申請,brk()為大塊空間申請。
2.sys_brk()包括兩部分
增長動態分配區
unsigned long do_brk(unsigned long addr, unsigned long len)
釋放動態分配區
int do_munmap(struct mm_struct *mm, unsigned long addr, size_t len)
1.2獲取涉及到的所有vma結構鍊錶
1.3處理單個vma結構,主要包括:
1.3.1迴圈處理該vma涉及到的目錄表dir
1.3.1.1迴圈處理vma涉及到的頁面表項pte
1.3.1.2將pte指向的頁面脫鏈,釋放
1.4釋放vma結構,調整釋放範圍邊界落到某個vma內部的vma邊界
1.5看看能否釋放整個目錄表
2.1檢查增長是否超過頂部堆疊區,增長區需要落到空洞中
2.2vma flag一致,可以合併vma
2.3否則需要單獨成乙個新vma
2.4建立記憶體頁面對映
Linux核心原始碼 閱讀方法
url 通常linux會有以下目錄 arch 子目錄包括所有和體系結構相關的核心 它還有更深的子目錄,每乙個代表一種支援的體系結構 include 子目錄包括編譯核心所需要的大部分 include 檔案。它也有更深的子目錄,每乙個支援的體系結構乙個。include asm 是這個體系結構所需要的真實...
Linux核心原始碼閱讀 1
1 作業系統的基本知識 2 對c語言比較熟悉,最好要有組合語言的知識和gnu c對標準c的擴充套件的知識的了解。另外在閱讀之前,還應該知道linux核心源 的整體分布情況。我們知道現代的作業系統一般由程序管理 記憶體管理 檔案系統 驅動程式 網路等組成。看一下linux內 核源 就可看出,各個目錄大...
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...