程序獲得線性區的情況:
建立乙個新的程序,fork+execve
正在執行的程序,裝入乙個不同的程式,pid不變,但是線性位址空間重新分配。execve()。
mmap檔案對映,建立乙個線性區來對映這個檔案
使用者態堆疊的擴充套件
ipc共享記憶體,與其他程序共享資料,核心給該程序分配乙個線性區
系統中的所有程序的記憶體描述符被mmlist欄位連線起來,組成乙個雙向鍊錶
鍊錶第乙個記憶體描述符是程序0的記憶體描述符
mm_user欄位,存放共享記憶體描述符的lwp(輕量級程序)的個數
核心執行緒的記憶體描述符,mm=null,active_mm=前乙個執行程序的active_mm
記憶體描述符的mmap欄位指向程序的第乙個線性區,mmap_cache欄位指向最近使用的線性區,優化訪問。
線性區採用兩種方式組織,雙向鍊錶(用於遍歷線性區)和紅黑樹(用於確定指定位址的線性區)
作業系統原理 程序位址空間
先回憶一下elf檔案的組織結構,可以看這篇文章 linux 鏈結與elf檔案。程式執行後程序位址空間布局則和作業系統密切相關。在將應用程式載入到記憶體空間執行時,作業系統負責 段與資料段的載入,並在記憶體中為這些段分配空間。linux的程序位址空間大致如下 核心虛擬儲存器包含了核心的 和資料結構。核...
linux 程序位址空間
乙個linux程序的虛擬位址空間分布如下圖所示,分為使用者空間和核心空間,對於乙個32位作業系統來說,4gb的空間分成兩部分,低位址的0 3g給使用者空間,高位址的3g 4g給核心空間 2.1 唯讀資料段 rodata,又叫做常量資料段 存放唯讀資料 字串常量和const修飾的全域性變數 const...
Linux程序位址空間
我們知道,在32位機器上linux 作業系統中的程序的位址空間大小是4g,其中0 3g是使用者空間,3g 4g是核心空間。其實,這個4g的位址空間是不存在的,也就是我們所說的虛擬記憶體空間。c程式一直由下列幾部分組成 a.正文段。這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常...