32位機有0---4G的虛擬內存地址空間
(32位共有2^32 = 4x2^30個數,一個數對應內存中一個字節,故內存中共有4x2^30B=4G的地址空間)
虛擬內存各區的存儲內容,如上的內存結構圖所示,
.text :存儲代碼段
.data :存儲數據,定義的變量在此處
heap:堆,由低地址向高地址,malloc的空間在此處
stack:棧,由高地址向低地址,函數及函數裏定義的變量在此處
以上各部分佔用0-3G,,稱爲用戶空間
3G-4G稱爲內核區(內核空間)
其中,PCB(進程控制塊)位於此地址空間中;
0-4G的虛擬內存空間,是在程序運行,進程產生的時候,纔會有的。
但虛擬內存並不是真實存在,程序、數據其實都是存在物理內存的。物理內存並一定有4G大小。
所以,就需要將虛擬內存與物理內存進行對應,媒介就是MMU
例如:0x8123a300 int value = 1; 0x8123a300 就是虛擬內存地址;
寫程序的時候,使用的是虛擬地址。
MMU的作用:
1)虛擬地址與物理地址映射
2)設置修改內存訪問級別,權限高的能訪問內核區,權限低的訪問用戶區。