Linux 操作系統原理 — 內存 — 基於局部性原理實現的內/外存交換技術

目錄

前文列表

Linux 操作系統原理 — 內存 — 物理存儲器與虛擬存儲器
Linux 操作系統原理 — 內存 — 基於 MMU 硬件單元的虛/實地址映射技術

基於局部性原理實現的內-外存交換技術

虛擬存儲器的實現思想就是將內存作爲輔存的緩存,使得計算機系統擁有了 主存+輔存(交換空間) 大小的存儲空間,同時也擁有了接近於主存的訪問速度。

局部性原理

虛擬存儲器的核心思路是根據程序運行時的局部性原理:一個程序運行時,在一小段時間內,只會用到程序和數據的很小一部分,僅把這部分程序和數據裝入主存即可,更多的部分可以在需要用到時隨時從輔存調入主存。在操作系統和相應硬件的支持下,數據在輔存和主存之間按程序運行的需要自動成批量地完成交換。

局部性原理是虛擬內存技術的基礎,正是因爲程序運行具有局部性原理,纔可以只裝入部分程序到內存就開始運行。早在 1968 年的時候,就有人指出我們的程序在執行的時候往往呈現局部性規律,也就是說在某個較短的時間段內,程序執行侷限於某一小部分,程序訪問的存儲空間也侷限於某個區域。

局部性原理表現在以下兩個方面:

  1. 時間局部性:如果程序中的某條指令一旦執行,不久以後該指令很可能再次執行;如果某數據被訪問過,不久以後該數據很可能再次被訪問。產生時間局部性的典型原因,是由於在程序中存在着大量的循環操作。時間局部性是通過將近來使用的指令和數據保存到高速緩存存儲器中,並使用高速緩存的層次結構實現。

  2. 空間局部性:一旦程序訪問了某個存儲單元,在不久之後,其附近的存儲單元也將被訪問,即程序在一段時間內所訪問的地址,可能集中在一定的範圍之內,這是因爲指令通常是順序存放、順序執行的,數據也一般是以向量、數組、表等形式簇聚存儲的。空間局部性通常是使用較大的高速緩存,並將預取機制集成到高速緩存控制邏輯中實現。虛擬內存技術實際上就是建立了 “內存-外存” 的兩級存儲器的結構,利用局部性原理實現髙速緩存。

基於局部性原理,在程序裝入時,可以將程序的一部分裝入內存,而將其他部分留在外存,就可以啓動程序執行。由於外存往往比內存大很多,所以我們運行的軟件的內存大小實際上是可以比計算機系統實際的內存大小大的。在程序執行過程中,當所訪問的信息不在內存時,由操作系統將所需要的部分調入內存,然後繼續執行程序。另一方面,操作系統將內存中暫時不使用的內容換到外存上,從而騰出空間存放將要調入內存的信息。

可見,內-外存交換技術本質是一種時間換空間的策略,你用 CPU 的計算時間,頁的調入調出花費的時間,換來了一個虛擬的更大的空間來支持程序的運行。

Swap 交換分區

通常,Linux 的內存已滿並且內核沒有可寫空間時,系統就會崩潰。但如果系統擁有 Swap(交換)分區,那麼 Linux 內核和程序就會使用它,但是速度會慢很多。因此,在內容容量緊張的場景中,擁有 Swap 交換空間會更安全。

爲了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由於這個原因,頁面可以移出內存並放入磁盤中。這個過程稱爲交換,因爲頁面會被從內存交換到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。

Swap 分區有一個缺點:它比 RAM 慢很多,因此,添加交換空間不會使你的計算機運行速度更快,它只會幫助克服一些內存不足帶來的限制。

在這裏插入圖片描述

虛擬存儲器的 Swap 特性並不總是有益,放任進程不停地將數據在內存與磁盤之間大量交換會極大地佔用 CPU,降低系統運行效率,所以有時候我們並不希望使用 Swap 分區。可以修改 vm.swappiness=0 來設置內存儘量少使用 Swap 分區,或者乾脆使用 swapoff 命令禁用掉 Swap 分區。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章