1. 程式人生 > 其它 >有關虛擬記憶體的一點思考

有關虛擬記憶體的一點思考

虛擬記憶體使用已經很久了,對於其中的關鍵技術,例如換頁一直沒有搞清楚,之前的題目做的也是一知半解。找到一篇文章,全篇看下來,總算明白了些,連結如下:https://www.cnblogs.com/qionglouyuyu/p/4175484.html

讀完小結如下:

1.當前linux作業系統中,交換的技術已經不再使用,這會引起嚴重的效能損耗。在linux裡,術語swapping用於指代paging。

2.交換技術中,會產生記憶體碎片。

3.作業系統管理記憶體,鏈式管理法更加有效。因為在記憶體中連續搜尋大量的記憶體空間,是非常消耗資源的

4.虛擬記憶體,可以解決大程序的記憶體要求。每個程序有用獨立的邏輯地址空間,記憶體被分為大小相等的多個塊,稱為頁(Page).每個頁都是一段連續的地址。對於程序來看,邏輯上貌似有很多記憶體空間,其中一部分對應實體記憶體上的一塊(稱為頁框,通常頁和頁框大小相等),還有一些沒載入在記憶體中的對應在硬碟上。

5.虛擬記憶體可以比實體記憶體要大很多,當記憶體管理單元去匹配對應的實體地址,如果虛擬記憶體的頁不存在實體記憶體中,會產生缺頁中斷。這個頻繁或者激增的缺頁中斷也會指示效能問題,在效能測試過程中需要注意,可能導致大的延時。

6.當虛擬記憶體所求的頁不在實體記憶體中,此時實體記憶體的容量已滿,需要把實體記憶體中的頁替換出去,選擇替換的演算法,也是調優的方向。當前使用較多的是最近最少使用,和最近未使用。這兩種記憶體會被移動到二級儲存,僅在需要時再次搬回主存。

7.一個虛擬地址,大小4個位元組,分為3個部分:第22位到第31位這10位(最高10位)是頁目錄中的索引,第12位到第21位這10位是頁表中的索引,第0位到第11位這12位(低12位)是頁內偏移。一個一級頁表有1024項,虛擬地址最高的10bit剛好可以索引1024項(2的10次方等於1024)。一個二級頁表也有1024項,虛擬地址中間部分的10bit,剛好索引1024項。虛擬地址最低的12bit(2的12次方等於4096),作為頁內偏移,剛好可以索引4KB,也就是一個物理頁中的每個位元組。

8.高樓老師提到過,swap被用,效能肯定會下降,效能測試過程中,建議把swap直接關掉測試效能,讓問題早點暴露。

9.windows下的虛擬記憶體設定,只是為了在實體記憶體不夠時,作為對實體記憶體的一個補充,使用的是二級儲存。和linux下的交換空間(swap)是一個概念。但上述提到的虛擬記憶體的頁表,其實是1個表單,會佔用一定的實體記憶體空間,但不會很大,尤其是使用了二級頁表的技術後。回想我們當前專案,windows上執行,實體記憶體32G,已經夠大了,卻還要補充虛擬記憶體102G,因為做效能壓測發現虛擬記憶體過小,會導致系統執行崩潰,開發甩鍋說是虛擬記憶體配置不夠導致(難道不是記憶體清理有問題?容量控制不當?)。但網上查,微軟給出的建議是虛擬記憶體配置為實體記憶體的1.5倍到3倍之間。虛擬記憶體設定過小會不夠用,設定的過大,會產生過多的碎片,影響電腦執行速度。我們的伺服器,過一段時間就卡的要死,而且某些服務會響應特別慢,有理由懷疑和虛擬記憶體的設定有關!!

=========================

寫完感覺思路理清了不少,讀書是必要的,讀完梳理思路,及時記錄看來也非常必要。部落格要堅持寫才行了。