linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
問(wèn):每個(gè)進(jìn)程所擁有的4G獨(dú)立的虛擬內(nèi)存空間是什么意思?linux系統(tǒng)的虛擬4G空間中,高位的1G是用于系統(tǒng)內(nèi)核運(yùn)行的,那么每個(gè)進(jìn)程都有4G的話(huà)豈不都要運(yùn)行內(nèi)核了,這樣是不是很浪費(fèi)很低效?
答:Linux不大清楚,不過(guò)看你描述和Windows類(lèi)似。32位的Windows,每個(gè)進(jìn)程也有4G地址空間的,僅僅是地址空間,不是實(shí)際的內(nèi)存,需要使用時(shí),向系統(tǒng)申請(qǐng),系統(tǒng)會(huì)分配實(shí)際的內(nèi)存給你,并將你進(jìn)程中的地址和實(shí)際地址進(jìn)行映射,當(dāng)然這個(gè)映射對(duì)你來(lái)說(shuō)是透明的,進(jìn)程A的地址0x00001000可能映射到實(shí)際地址0x10002000,進(jìn)程B的地址0x00001000可能映射到實(shí)際地址0x30003F00,各個(gè)進(jìn)程的地址空間是獨(dú)立的。
地址空間也有個(gè)例外,其中高位的1G,就是3G~4G這個(gè)地址段是系統(tǒng)內(nèi)核使用的,應(yīng)用程序不可直接訪問(wèn),這段內(nèi)存地址對(duì)于所有進(jìn)程是相同的,如果0xF0000000在進(jìn)程A中表示顯存開(kāi)始地址,那么0xF0000000在進(jìn)程B中也是表示顯存開(kāi)始地址。
虛擬內(nèi)存是很重要的機(jī)制,WindowsNT之前win98什么的就是所有進(jìn)程共用地址空間,雖然少了一道轉(zhuǎn)換,但一個(gè)進(jìn)程可以對(duì)所有進(jìn)程包括系統(tǒng)內(nèi)存進(jìn)行修改,所以哪個(gè)程序有bug就會(huì)造成系統(tǒng)崩潰,就經(jīng)常藍(lán)屏。
總結(jié)
以上是生活随笔為你收集整理的linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用AppServ快速建立php运行环境
- 下一篇: ubuntu16.04 禁用Guest用