聊聊虛擬記憶體

yifanwu發表於2021-09-09

大家好,我是良許。

熟悉計算機的小夥伴都知道,我們常說的主機三大件分別是主機板,CPU,記憶體,可見記憶體在計算機主機中的角色也非同一般,喜歡 DIY 主機的小夥伴對這三大件的瞭解更是精益求精。

編寫過程式的小夥伴對於程式的執行過程,也是耳熟能詳了,先從硬碟載入到記憶體,然後 CPU 與記憶體進行資料交換與處理,完成相應的操作(真實執行細節相當複雜),從而實現相應的功能。

但是記憶體的容量非常有限,由於記憶體的造價較高(目前常用的記憶體為雙倍速 SDRAM ),計算機使用者升級記憶體容量也是一筆不小的開支。

那麼良許就和大家來討論下計算機的記憶體如果不夠用了, 虛擬記憶體技術的應用,虛擬記憶體的出現,讓機器記憶體不夠的情況得到部分解決,大家需要注意的是有些資料也將虛擬記憶體稱之為交換記憶體。

1. 討論虛擬記憶體前的熱身

我們需要知道的是計算機對記憶體分為實體記憶體與虛擬記憶體(注意虛擬記憶體和虛擬地址空間的區別)。實體記憶體就是計算機的實際記憶體大小,由 RAM 晶片組成的。虛擬記憶體則是虛擬出來的、使用磁碟代替記憶體。

2. 虛擬記憶體的工作原理

正如前面所描述的,當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前執行的程式使用。

那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到交換空間中,等到那些程式要執行時,再從交換空間中恢復儲存的資料到記憶體中。

3. Linux 虛擬記憶體的實現方式

Linux 系統實現虛擬記憶體有兩種方法,分別是交換分割槽( swap 分割槽)和交換檔案。

##### 交換分割槽

交換分割槽其實就是新建一個分割槽,然後將該分割槽掛載作為交換空間,方法步驟與傳統的新建分割槽一樣。只不過格式化分割槽和掛載分割槽分別採用 mkswapswapon 命令。

交換檔案

硬碟驅動器中沒有足夠的空間來建立交換分割槽,我們就會手動建立一個交換檔案以將 RAM 的非活動內容交換到其中。

4. 理想的交換權重

Linux 允許我們自行設定交換的權重,也就是說我們可以設定交換過程發生的頻率。小夥伴們可以根據需要在0到100之間設定交換的權重。值越小則代表會讓核心儘量少用交換,值越大會使核心更多的去使用交換空間。

交換權重的預設值和建議值為60,有興趣的小夥伴可以具體去學習 swappiness ,這個 Linux 核心引數,這裡不做過多的描述了。

5.使用虛擬記憶體的好處

  • 它可以輕鬆地儲存那些幾乎不使用而又被佔用的 RAM 塊。然後可以將釋放的 RAM 用於容納更多具有更高優先順序的程式。
  • 防止 RAM 空間用完,無法執行其他程式的局面。
  • 虛擬記憶體充當了 RAM 的備份,從而增大了 RAM 的實際空間。
  • 在休眠過程中,RAM 的所有內容均寫入交換空間。因此,成功進行休眠,虛擬記憶體是必需的。
  • 它提高了系統的整體效能。(在核心引數 swappiness 設定合理的情況下)

6. 結論

在本文中,我們學習了交換記憶體以及它的許多好處,RAM 空間不足時,它將作為 RAM 的擴充進行使用,避免我們的應用程式因記憶體不足而崩潰。

其實,**Swap **的調整對 Linux 伺服器,特別是 Web 伺服器的效能至關重要。透過調整 Swap,有時可以越過系統效能瓶頸,節省系統升級費用。


最後,最近很多小夥伴找我要Linux學習路線圖,於是我根據自己的經驗,利用業餘時間熬夜肝了一個月,整理了一份電子書。無論你是面試還是自我提升,相信都會對你有幫助!目錄如下:

圖片描述

免費送給大家,只求大家金指給我點個贊!

也希望有小夥伴能加入我,把這份電子書做得更完美!

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2826049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章