本章說明Linux的內存管理特征,即虛擬內存和磁盤緩存。描述系統管理員應該考慮的東西 工作和目的。
什麼是虛擬內存?
Linux支持虛擬內存, 就是使用磁盤作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬盤,騰出內存給其他目的。當原來的內容又要使用時,再讀回內存。這對用戶全透明:運行於Linux的程序只看到大量的可用內存而不甘心哪部分在磁盤上。當然,讀寫硬盤比真的內存慢(慢千倍),所以程序運行較慢。用做虛擬內存的這部分硬盤叫 對換空間。
Linux可以使用文件系統中的普通文件或單獨的分區作為對換空間。對換分區更快,但對換文件更易於改變大小(無須對硬盤重分區)。如果知道要多少對換空間,應該用對換分區;如果不能確認,可以先用對換文件,用一段時間後再根據所需空間建立對換分區。
Linux允許同時使用多個對換分區和/或對換文件。即如果偶爾需要更多的對換空間,可以隨時建立一個額外的對換文件。
產生對換空間
對換文件是普通文件,對核心沒有什麼特別的。唯一不同是它沒有孔,用 mkswap 准備。必須在本地盤上,不能在通過NFS mount的文件系統中。
關於孔,是重要的。對換文件保留了磁盤空間,使核心能快速對換出一頁,而不必經過如文件的定位磁盤扇區的全部事情。核心只用分配給這個文件的所有扇區。由於文件中的孔意味著沒有為文件中這個位置分配磁盤扇區,這對核心使用不利。
產生沒有孔的對換文件的一個好辦法是通過如下命令:
$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024
1024+0 records in
1024+0 records out
$
/extra-swap 是對換文件名,大小由count=給出. 大小最好是4的倍數,因為核心寫出的內存頁是4KB。如果不是4的倍數,最後那幾KB將不可用。
對換分區也沒什麼特別。就象產生其他分區一樣產生;唯一的不同是它作為原始分區使用,即沒有任何文件系統,最好將對換分區標記為類型82(Linux swap),雖然這對核心沒有影響,但這使分區列表更清晰。
產生對換文件或對換分區後,需要寫個標記起用它,這包括核心要用的一些管理信息。命令是 mkswap , 用法如下:
$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
$
注意對換空間現在還沒用,它存在,但核心還沒用它提供虛擬內存。
請一定小心使用mkswap , 因為它不檢查文件或分區是否被其他東西使用。 你可能用mkswap 很容易地覆蓋了重要文件和分區! 幸好,你只需在你安裝系統時使用mkswap 。
Linux內存管理限制了每個對換空間約為127MB(由於技術原因,實際限制是127.6875MB)。 可以同時使用最多16個對換空間,總計差不多2GB。