關(guān)于基礎(chǔ)的Swap分區(qū)知識(shí)講解
Swap分區(qū),即交換區(qū),除了安裝Linux的時(shí)候,有多少人關(guān)心過它呢?其實(shí),Swap分區(qū)的調(diào)整對Linux服務(wù)器,特別是Web服務(wù)器的性能至關(guān)重要。通過調(diào)整Swap分區(qū),有時(shí)可以越過系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級(jí)費(fèi)用。
Swap分區(qū)的原理是一個(gè)較復(fù)雜的問題,需要大量的篇幅來說明。在這里只作簡單的介紹,在以后的文章中將和大家詳細(xì)討論Swap實(shí)現(xiàn)的細(xì)節(jié)。
眾所周知,現(xiàn)代操作系統(tǒng)都實(shí)現(xiàn)了“虛擬內(nèi)存”這一技術(shù),不但在功能上突破了物理內(nèi)存的限制,使程序可以操縱大于實(shí)際物理內(nèi)存的空間,更重要的是,“虛擬內(nèi)存”是隔離每個(gè)進(jìn)程的安全保護(hù)網(wǎng),使每個(gè)進(jìn)程都不受其它程序的干擾。
Swap空間的作用可簡單描述為:當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當(dāng)前運(yùn)行的程序使用。那些被釋放的空間可能來自一些很長時(shí)間沒有什么操作的程序,這些被釋放的空間被臨時(shí)保存到Swap空間中,等到那些程序要運(yùn)行時(shí),再從Swap分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時(shí),才進(jìn)行Swap交換。
計(jì)算機(jī)用戶會(huì)經(jīng)常遇這種現(xiàn)象。例如,在使用Windows系統(tǒng)時(shí),可以同時(shí)運(yùn)行多個(gè)程序,當(dāng)你切換到一個(gè)很長時(shí)間沒有理會(huì)的程序時(shí),會(huì)聽到硬盤“嘩嘩”直響。
這是因?yàn)檫@個(gè)程序的內(nèi)存被那些頻繁運(yùn)行的程序給“偷走”了,放到了Swap分區(qū)中。因此,一旦此程序被放置到前端,它就會(huì)從Swap區(qū)取回自己的數(shù)據(jù),將其放進(jìn)內(nèi)存,然后接著運(yùn)行。
需要說明一點(diǎn),并不是所有從物理內(nèi)存中交換出來的數(shù)據(jù)都會(huì)被放到Swap分區(qū)中(如果這樣的話,Swap就會(huì)不堪重負(fù)),有相當(dāng)一部分?jǐn)?shù)據(jù)被直接交換到文件系統(tǒng)。
例如,有的程序會(huì)打開一些文件,對文件進(jìn)行讀寫(其實(shí)每個(gè)程序都至少要打開一個(gè)文件,那就是運(yùn)行程序本身),當(dāng)需要將這些程序的內(nèi)存空間交換出去時(shí),就沒有必要將文件部分的數(shù)據(jù)放到Swap分區(qū)空間中了,而可以直接將其放到文件里去。
如果是讀文件操作,那么內(nèi)存數(shù)據(jù)被直接釋放,不需要交換出來,因?yàn)橄麓涡枰獣r(shí),可直接從文件系統(tǒng)恢復(fù);如果是寫文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復(fù)。
但是那些用malloc和new函數(shù)生成的對象的數(shù)據(jù)則不同,它們需要Swap分區(qū)空間,因?yàn)樗鼈冊谖募到y(tǒng)中沒有相應(yīng)的“儲(chǔ)備”文件,因此被稱作“匿名”(Anonymous)內(nèi)存數(shù)據(jù)。這類數(shù)據(jù)還包括堆棧中的一些狀態(tài)和變量數(shù)據(jù)等。所以說,Swap空間是“匿名”數(shù)據(jù)的交換空間。
【編輯推薦】