問:每個進程所擁有的4G獨立的虛擬內存空間是什么意思?linux系統的虛擬4G空間中,高位的1G是用於系統內核運行的,那么每個進程都有4G的話豈不都要運行內核了,這樣是不是很浪費很低效?
答:Linux不大清楚,不過看你描述和Windows類似。32位的Windows,每個進程也有4G地址空間的,僅僅是地址空間,不是實際的內存,需要使用時,向系統申請,系統會分配實際的內存給你,並將你進程中的地址和實際地址進行映射,當然這個映射對你來說是透明的,進程A的地址0x00001000可能映射到實際地址0x10002000,進程B的地址0x00001000可能映射到實際地址0x30003F00,各個進程的地址空間是獨立的。
地址空間也有個例外,其中高位的1G,就是3G~4G這個地址段是系統內核使用的,應用程序不可直接訪問,這段內存地址對於所有進程是相同的,如果0xF0000000在進程A中表示顯存開始地址,那么0xF0000000在進程B中也是表示顯存開始地址。
虛擬內存是很重要的機制,WindowsNT之前win98什么的就是所有進程共用地址空間,雖然少了一道轉換,但一個進程可以對所有進程包括系統內存進行修改,所以哪個程序有bug就會造成系統崩潰,就經常藍屏。
