虛擬內存是什么?有什么用?
大家好,我是良許。
熟悉計算機的小伙伴都知道,我們常說的主機三大件分別是主板,CPU,內存,可見內存在計算機主機中的角色也非同一般,喜歡 DIY 主機的小伙伴對這三大件的了解更是精益求精。
編寫過程序的小伙伴對于程序的執行過程,也是耳熟能詳了,先從硬盤加載到內存,然后 CPU 與內存進行數據交換與處理,完成相應的操作(真實執行細節相當復雜),從而實現相應的功能。
但是內存的容量非常有限,由于內存的造價較高(目前常用的內存為雙倍速 SDRAM ),計算機用戶升級內存容量也是一筆不小的開支。
那么良許就和大家來討論下計算機的內存如果不夠用了, 虛擬內存技術的應用,虛擬內存的出現,讓機器內存不夠的情況得到部分解決,大家需要注意的是有些資料也將虛擬內存稱之為交換內存。
1. 討論虛擬內存前的熱身
我們需要知道的是計算機對內存分為物理內存與虛擬內存(注意虛擬內存和虛擬地址空間的區別)。物理內存就是計算機的實際內存大小,由 RAM 芯片組成的。虛擬內存則是虛擬出來的、使用磁盤代替內存。
2. 虛擬內存的工作原理
正如前面所描述的,當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。
那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到交換空間中,等到那些程序要運行時,再從交換空間中恢復保存的數據到內存中。
3. Linux 虛擬內存的實現方式
Linux 系統實現虛擬內存有兩種方法,分別是交換分區( swap 分區)和交換文件。
- 交換分區:交換分區其實就是新建一個分區,然后將該分區掛載作為交換空間,方法步驟與傳統的新建分區一樣。只不過格式化分區和掛載分區分別采用 mkswap 和 swapon 命令。
- 交換文件:硬盤驅動器中沒有足夠的空間來創建交換分區,我們就會手動創建一個交換文件以將 RAM 的非活動內容交換到其中。
4. 理想的交換權重
Linux 允許我們自行設置交換的權重,也就是說我們可以設置交換過程發生的頻率。小伙伴們可以根據需要在0到100之間設置交換的權重。值越小則代表會讓內核盡量少用交換,值越大會使內核更多的去使用交換空間。
交換權重的默認值和建議值為60,有興趣的小伙伴可以具體去學習 swappiness ,這個 Linux 內核參數,這里不做過多的描述了。
5. 使用虛擬內存的好處
- 它可以輕松地保存那些幾乎不使用而又被占用的 RAM 塊。然后可以將釋放的 RAM 用于容納更多具有更高優先級的程序。
- 防止 RAM 空間用完,無法執行其他程序的局面。
- 虛擬內存充當了 RAM 的備份,從而增大了 RAM 的實際空間。
- 在休眠過程中,RAM 的所有內容均寫入交換空間。因此,成功進行休眠,虛擬內存是必需的。
- 它提高了系統的整體性能。(在內核參數 swappiness 設置合理的情況下)
6. 結論
在本文中,我們學習了交換內存以及它的許多好處,RAM 空間不足時,它將作為 RAM 的擴充進行使用,避免我們的應用程序因內存不足而崩潰。
其實,Swap的調整對 Linux 服務器,特別是 Web 服務器的性能至關重要。通過調整 Swap,有時可以越過系統性能瓶頸,節省系統升級費用。
本文授權轉載自公眾號「良許Linux」。良許,世界500強外企Linux開發工程師,公眾號里分享大量Linux干貨,歡迎關注!