一、虛擬內存分配和分頁

在計算機系統中內存管理模塊是最重要的模塊之一,以linux來說,整個內核(kernel)源碼中有近三分之一上的篇幅是與內存管理相關的。而作爲應用程序來說,也離不開內存的分配和回收,不管是在靜態的編譯階段還是在程序運行過程中的動態分配。內存是最重要的部分,同時也是最難掌握使用的一部分,用好了可以最少的內存消耗獲得最大的性能,而反之就是內存的極度浪費。所以將此部分作爲學習整個libc的第一部分來組織是必然的。學好並掌握了此部分,對其他的各部分會有較大幫助。

本文分四部分來說明整個和libc中的內存管理:

  • 進程地址空間
  • 內存的分配與回收
  • 常駐內存段
  • 鎖頁

 

  1. 進程地址空間

內存作爲進程最基本的資源之一,存在多種不同的方式進行內存的組織,虛擬線性地址空間是其中的一種方式。每一個進程都有一個線性的虛擬內存空間,爲什麼說它爲線性的呢?舉個例子c語言中的指針,大家都知道指針就是內存的地址,是一個數值,這個數值從0開始到一個足夠大的值,在32爲的linux系統中應用程序可以使用的最大值是3G,也就是說指針值可以是0~3G中的任意值,所以說它爲線性地址。在x86系列的cpu系列中,dos系統是屬於分段的,這裏要把段地址和線性地址區分開,而在linux中所用的地址爲線性地址(其實這裏的線性地址是經過分段單元將段地址轉化而來的)。要弄清楚什麼是段地址什麼是現行地址可以參考intel技術手冊和linux內核相關書籍。這裏只要記住應用程序使用線性地址,而c語言指針就是一個虛擬地址值就行了。

在一般的情況下,虛擬內存被分成4k字節大小的塊,叫做頁,每頁大小爲4k。系統中引入頁單元也是爲了管理的需要。

 

 

  1. 內存的分配與回收
  2. 常駐內存段
  3. 鎖頁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章