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