天天看點

Linux程式位址空間及庫函數與系統調用接口

程式位址空間

  • 概念:程式位址空間也叫虛拟位址空間,在Linux下,每運作一個程式即一個程序,作業系統都會為其配置設定一個虛拟的位址空間,在32位作業系統下,作業系統配置設定的虛拟位址空間為0~4G。
  • 程序的記憶體描述符(mm_struct):每個程序都有一個mm_struct,它是一個結構體,我們也把它叫做記憶體描述符,Linux就是通過這個結構體實作對記憶體的管理,mm_struct就是用來描述一個程序的虛拟位址空間
  • 虛拟位址空間的配置設定情況

    從下到上為:

    受保護的區域 (0~4K)

    代碼段 – 二進制機器指令

    全局區 (已初始化全局變量 (data段) 未初始化全局變量(bss段))

    堆 (從下往上存儲)

    共享庫 (c标準庫及Linux系統IO函數)

    棧 (從上往下存儲)

    指令行參數

    環境變量

    核心區 (kernel)

    示意圖如下

    Linux程式位址空間及庫函數與系統調用接口
  • 為什麼要引入虛拟位址空間

    1、 虛拟位址空間能夠讓程序使用連續的記憶體位址。

    2、 它能保證程序的獨立性

    3、 它能進行記憶體通路控制,提高記憶體的使用率

  • Linux下記憶體管理

    CPU通過程序描述符task_struct中指向記憶體描述符的一個指針找到記憶體描述符,進而通過mm_struct記憶體描述符查到頁表資訊,通過頁表将虛拟位址映射到實際的實體記憶體中,進而操作記憶體。

庫函數與系統調用接口

  • 關系:庫函數其實是對系統調用接口的一層封裝,它們是上下級的調用關系,庫函數調用了系統調用函數。庫函數通過發起系統調用,調用系統調用接口,通過系統調用接口調用裝置驅動,再通過裝置驅動進而操作硬體裝置。
  • 示意圖如下
Linux程式位址空間及庫函數與系統調用接口

繼續閱讀