早期計算機中,程式是直接執行在物理記憶體上的,換句話說就是程式在執行過程中訪問的都是實體地址,如果這個系統只執行乙個程式,只要這個程式所需的記憶體不要超過該機器的物理記憶體就好,但系統都是支援多工,多程序的,這個時候我們就要考慮到將系統內有限的物理記憶體如果有效第分配給多個程式了,這個事情我們稱之為記憶體管理
先要知道幾個技術點:
1)程序位址空間不能隔離;
2)記憶體使用的效率低;
3)程式執行的位址不能確定
linux引入了虛擬記憶體。就是程式和物理記憶體之間引入了虛擬記憶體的這個概念。程式只能看見虛擬記憶體,不能訪問物理記憶體,每個程式都有自己獨立的程序位址空間,這樣給予做到了程序隔離
現在需要解決怎麼從虛擬位址對映到實體地址。因為i程式最終是要執行到物理記憶體中的,主要有分段和分時技術兩種技術;
基本思路就是將程式所需的記憶體位址空間大小的虛擬空間對映到某個實體地址空間
分段技術解決了程序之間控制隔離和程式位址重定位的問題,但是對於記憶體對映仍然是以程式交換為單位的,記憶體的使用效率仍然很低。
就是把記憶體位址空間分為若干個很小的固定大小的頁,每一頁的大小由記憶體決定,這樣做是為了提高記憶體和磁碟的利用率,
linux中一般頁的大小是4kb,我們把程序的位址空間按頁分割,把常用的資料和**裝載到記憶體中,不常用的**和資料儲存在磁碟中。
分頁機制的實現需要硬體的實現,這個硬體的名字叫做mmu,專門負責從虛擬位址到實體地址的轉換。
Linux記憶體管理
本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...
Linux記憶體管理
本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心,...
Linux記憶體管理
首先我要說,我這是轉貼,轉的cu論壇上 nonameboy 的帖子,你可以連線過去看看。今天因為要解釋系統中可用記憶體的大小,用google看了半天,還有在cu上找了關天,竞然沒有發現有比較好的章,估計很多人都沒有注意到,懂了以後又沒有整理出來。在cu上看了很多文章說什麼memory leak和li...