http://www.mobile01.com/topicdetail.php ... 60024&p=10
因為圖多,正當我在等照片完全載入的時候,恰好瞄到這一段話:
我瞪著這段文字半天,覺得滿肚子狐疑,因為在印象中 Mac OS X 的 dynamic pager 應該不會因為機器 Physical RAM 的大小而有行為上的差異。跑到 OpenDarwin 的 Web CVS 去調出 dynamic pager 的原始碼瞧瞧,果然證實了我的疑問:「吉米吉米,你的小白RAM有加超過1G的門檻嗎?
因為OS X的設計關係,若你的記憶體超過1G,他的SWAP FILE就只會開六個,若低於這個記憶體數字,那他就拼命的開,死命的開,讓你的效能都被硬碟拖垮~」
http://cvs.opendarwin.org/cgi-bin/cvswe ... ev=1.1.1.2
研讀過上面的這份原始碼後可知,Darwin 的 dynamic pager 會根據系統需要,自動產生 swap file。這些檔案的大小除了頭先的兩個檔案是一樣大的(64MB)之外,之後的每個 swap file 都是前面的兩倍大,其上限為 1GB。
按照這個邏輯,Mac OS X 系統上 swap file 大小的產生序列將會是:
64MB, 64MB, 128MB, 256MB, 512MB, 1GB, 1GB, 1GB, 1GB...
由於 Mac OS X 是 32-bit 的作業系統,每個 process 可定址記憶體的最大範圍是 4GB,不過由於每個 process 的 memory space 是各自獨立,因此 swap file 的總數絕對有可能超過 8 個(即 4GB 總和)。也是因為這緣故,除了每個 swap file 最大 1GB 的上限以外,dynamic pager 在開啟新的 swap file 時也會注意到硬碟的剩餘空間,保持 swap file 不要超過硬碟剩餘容量的 1/4,以免影響一般檔案的存取。
最後 dynamic pager 也會監控系統虛擬記憶體的使用狀況,若是一個 swap file 中絕大部份的內容都已經不再需要,dynamic pager 也會視情況把剩餘的虛擬記憶體區塊合併,寫回另一個 swap file 後,把不需要的 swap file 刪除。
