對(duì)于一臺(tái)x86(32bit)的操作系統(tǒng)來說,假設(shè)它有2G的物理內(nèi)存,物理內(nèi)存分成以許多個(gè)4k為單位大小的頁框,這些頁框就是存儲(chǔ)進(jìn)程的最小單位:
為了解決系統(tǒng)運(yùn)行過程中不同進(jìn)程之間內(nèi)存的合理分配和利用,防止不同進(jìn)程同一時(shí)刻在物理內(nèi)存中運(yùn)行而對(duì)物理內(nèi)存的爭(zhēng)奪和踐踏(一旦某一進(jìn)程失去控制,占用的資源不停增大,就會(huì)將物理內(nèi)存占滿,并導(dǎo)致其他進(jìn)程中斷,甚至導(dǎo)致服務(wù)器崩潰,這是及其危險(xiǎn)的),我們采用了虛擬內(nèi)存。
我們都知道,進(jìn)程是用戶發(fā)起的運(yùn)行在內(nèi)核之上的用戶空間的程序,如下所示:
虛擬內(nèi)存存在的意義就在于使不同進(jìn)程在運(yùn)行過程中,它所看到的是自己獨(dú)自占有了當(dāng)前系統(tǒng)的4G內(nèi)存,當(dāng)然這是一個(gè)假象。在這種假象之下,內(nèi)核悄悄的將當(dāng)前進(jìn)程所占用的內(nèi)存轉(zhuǎn)化為了物理內(nèi)存。虛擬內(nèi)存的結(jié)構(gòu)如下:
虛擬內(nèi)存只是進(jìn)程所看到的一個(gè)假象,實(shí)際進(jìn)程運(yùn)行過程中,進(jìn)程還是通過物理內(nèi)存上被CPU調(diào)用和執(zhí)行的;線程是進(jìn)程運(yùn)行的最小單位,也是CPU運(yùn)行和調(diào)用的最小單位。每一個(gè)進(jìn)程可以包含多個(gè)線程,線程作為CPU調(diào)用的最小單位被映射到物理內(nèi)存中,如下所示:
線程映射到物理內(nèi)存后,物理內(nèi)存會(huì)分配指定的頁框給該線程,線程與頁框之間的映射是隨機(jī)的,非線性的。
隨著進(jìn)程的增加,線程的數(shù)量也會(huì)增加,物理內(nèi)存的空間有限,頁框?qū)⒁帽M,物理內(nèi)存空間幾乎會(huì)被占滿,接近與上限,這時(shí)如果繼續(xù)運(yùn)行下去,內(nèi)存崩潰,服務(wù)器死機(jī),將會(huì)產(chǎn)生不可預(yù)知的結(jié)果,那么該怎么解決這一問題呢?
于是,內(nèi)核決定在硬盤上找一段存取速率較高的存儲(chǔ)空間,模擬物理內(nèi)存,并將其內(nèi)部劃分為類似頁框的存儲(chǔ)小格子。當(dāng)物理內(nèi)存接近崩潰時(shí),將物理內(nèi)存中最近一段時(shí)間最少頻率使用到的頁框移出物理內(nèi)存,放進(jìn)該存儲(chǔ)空間,這段存儲(chǔ)空間我們稱之為交換空間(Swap)。當(dāng)新創(chuàng)建的進(jìn)程3進(jìn)入內(nèi)存時(shí),發(fā)現(xiàn)當(dāng)前物理內(nèi)存已經(jīng)被占滿,此時(shí)內(nèi)核便需要交換空間來協(xié)調(diào),如下:
圖中紅色方塊代表的線程為最近一段時(shí)間使用最不頻繁的線程,
藍(lán)色方塊代表新創(chuàng)建的進(jìn)程3包含的線程,黃色方塊代表磁盤上的swap分區(qū)
a) 內(nèi)核首先將紅色線程移到swap分區(qū),并取消進(jìn)程1中該線程與物理內(nèi)存的映射;
b) 隨即,將藍(lán)色線程移進(jìn)物理內(nèi)存中紅色進(jìn)程剛騰出的空間。此時(shí),進(jìn)程3就獲得了系統(tǒng)內(nèi)存資源,等待被CPU調(diào)用執(zhí)行;
灰色進(jìn)程代表當(dāng)前內(nèi)存中最近一段時(shí)間內(nèi)使用最不頻繁的線程
c) 當(dāng)紅色線程再次被喚醒時(shí),內(nèi)核會(huì)將灰色線程移到swap分區(qū),取消該線程的映射;
d) 隨即,內(nèi)核將紅色線程移進(jìn)內(nèi)存中灰色線程剛騰出的空間,并建立新的映射關(guān)系,獲取系統(tǒng)內(nèi)存資源。
swap分區(qū)存在的意義在于:允許內(nèi)存過載(overcommit)使用
盡管swap分區(qū)可以為進(jìn)程運(yùn)行提供額外的交換空間,解決物理內(nèi)存飽滿情況下協(xié)調(diào)系統(tǒng)進(jìn)程正常運(yùn)行的問題,但是使用交換空間所帶來的頁框進(jìn)出會(huì)大大降低系統(tǒng)的性能,所以應(yīng)謹(jǐn)慎使用交換空間。
交換空間和物理內(nèi)存之間頁框的移動(dòng)可以這樣描述:
聯(lián)系客服