程式位址空間
- 概念:程式位址空間也叫虛拟位址空間,在Linux下,每運作一個程式即一個程序,作業系統都會為其配置設定一個虛拟的位址空間,在32位作業系統下,作業系統配置設定的虛拟位址空間為0~4G。
- 程序的記憶體描述符(mm_struct):每個程序都有一個mm_struct,它是一個結構體,我們也把它叫做記憶體描述符,Linux就是通過這個結構體實作對記憶體的管理,mm_struct就是用來描述一個程序的虛拟位址空間
-
虛拟位址空間的配置設定情況
從下到上為:
受保護的區域 (0~4K)
代碼段 – 二進制機器指令
全局區 (已初始化全局變量 (data段) 未初始化全局變量(bss段))
堆 (從下往上存儲)
共享庫 (c标準庫及Linux系統IO函數)
棧 (從上往下存儲)
指令行參數
環境變量
核心區 (kernel)
示意圖如下
-
為什麼要引入虛拟位址空間
1、 虛拟位址空間能夠讓程序使用連續的記憶體位址。
2、 它能保證程序的獨立性
3、 它能進行記憶體通路控制,提高記憶體的使用率
-
Linux下記憶體管理
CPU通過程序描述符task_struct中指向記憶體描述符的一個指針找到記憶體描述符,進而通過mm_struct記憶體描述符查到頁表資訊,通過頁表将虛拟位址映射到實際的實體記憶體中,進而操作記憶體。
庫函數與系統調用接口
- 關系:庫函數其實是對系統調用接口的一層封裝,它們是上下級的調用關系,庫函數調用了系統調用函數。庫函數通過發起系統調用,調用系統調用接口,通過系統調用接口調用裝置驅動,再通過裝置驅動進而操作硬體裝置。
- 示意圖如下