1. 程式人生 > >Linux虛擬記憶體

Linux虛擬記憶體

Linux採用虛擬段頁式儲存方式來管理記憶體,程式的基本邏輯儲存單元,也可以說是程式段。Linux中有四個段,程式碼段,資料段,BSS段,堆疊段。虛擬地址從低到高依次是:程式碼段,資料段,BSS段,堆疊段。其中程式碼段為程式本身(二進位制指令),資料段為程式碼中初始化了的全域性變數和靜態變數,BSS段為為初始化的全域性變數和靜態變數,堆為程式設計師申請的記憶體空間,棧是編譯器用來存放函式區域性變數,引數等資料的位置。將程式的邏輯儲存單元分配好後,每個段在記憶體中以頁為基本單元進行儲存。我們在程式中,用取地址符取的地址,叫做邏輯地址,也叫做虛擬地址。虛擬地址由段號和段內偏移量組成。MMU通過段機制檢視段表來尋找該段號對應的頁號,該頁號和段偏移量組成的地址是線性地址;通過頁機制檢視頁表,找到該頁號對應的物理號,物理號和偏移量組成的地址,即為實體地址。
還有一種老的記憶體管理機制叫做記憶體分割槽,它分為固定分割槽和可變分割槽。固定分割槽指的是每次放入記憶體的作業大小是固定的。可變分割槽指的是放入記憶體中的大小隨作業而變化。固定分割槽不可以執行較大程式,可變分割槽會生成內碎片。記憶體分割槽會用到一種覆蓋技術,指掉入記憶體的頁一般會覆蓋掉不同時執行的部分。也就是頁1已經在記憶體中了,現在頁2也要掉入記憶體,系統判斷,頁1和頁2不會同時執行,就將頁1用頁2覆蓋掉。
交換技術是虛擬記憶體提出來的,在電腦磁碟中有一個交換分割槽,當記憶體中的某頁當前不需要時,就將它交換出來,而將需要的交換進去。
若寫不對,敬請指正。