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