最近看到"一般情況下,Linux系統中,行程的4GB記憶體空間被劃分成為兩個部分------用戶空間和內核空間"比較疑惑的是為什么是4g空間呢,難道是32位的?這個是虛擬地址還是物理地址?好困惑,不知道哪位大神能幫忙科普下呢
uj5u.com熱心網友回復:
32位的最大空間是4Guj5u.com熱心網友回復:
32位CPU平臺,提供4G的虛擬地址空間,4G虛擬機地址空間,分為1G內核空間和3G用戶空間;所有行程共享1G內核空間,每個行程獨自使用自己的3G用戶空間uj5u.com熱心網友回復:
并不是說一定要4g,應該是最大4G把。。uj5u.com熱心網友回復:
在32位機上,每個行程4G,這是CPU定死的。程式可以使用的一般是低3G,是作業系統內核定死的。至于程式自己在低3G中能用多少,那是程式編程決定的。uj5u.com熱心網友回復:
行程的地址空間指的是虛擬地址,也就是即使機器上只插了1GB的記憶體條,對于每個行程來講其虛擬地址空間也都是4GB,其中應用程式使用低3GB的空間(每個行程獨享自己的3GB),作業系統使用高1GB的空間(共享同一個1G內核空間)4GB的這個數在硬體上的計算是由暫存器和地址總線的位數得來的,由于x86_32體系中暫存器和地址總線都是32位的,所以可尋址的空間為2^32=4GB,但是如果啟用了PAE(Physical Address Extension,物理地址擴展),將地址線從32位擴展到36位,則可以尋址2^36=64GB的地址空間
如果是x86_64架構的計算機上,由于2^64太大表示地址空間太大,所以大部分CPU廠商只使用了64位的暫存器,但并沒有使用64位的地址總線而一般是48位,則虛擬地址空間為2^48=256TB,此時Linux的虛擬地址空間的劃分方式為對半分,用戶空間:128TB,內核空間:128TB,由于內核空間的擴大,所以一般情況下x64的Linux就沒有了高端記憶體區域的概念,所有記憶體都可以永久映射到內核空間了
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/44531.html
標籤:內核源代碼研究區
下一篇:匯編分頁機制
