天天看點

作業系統 記憶體管理機制

參考和查閱了一下他人的資料,整理下 虛拟記憶體、實體記憶體、Swap分區、頁面置換機制等基礎知識

  1. 虛拟位址空間 與 實體位址空間的關系

虛拟位址由作業系統維護,由MMU可以進行轉換,擴大了記憶體空間分頁管理。 大多數 使用虛拟存儲器的系統 都使用一種稱為 分頁(paging)機制 。 虛拟位址空間劃分成稱為頁(page)的機關,而相應的實體位址空間也被進行劃分,機關是頁幀(frame),一個在磁盤,一個在記憶體,頁和頁桢的大小必須相同。在32位位址的機器,它的虛拟位址範圍從0~0xFFFFFFFF(4G),而這台機器隻有256M的實體位址,是以他可以運作4G的程式,但該程式不能一次性調入記憶體運作。這台機器必須有一個達到可以存放4G程式的外部存儲器(例如磁盤或是FLASH),以保證程式片段在需要時可以被調用。 在這個例子中,頁的大小為4K (4096 B),頁桢大小與頁相同——這點是必須保證的,因為記憶體和外圍存儲器之間的傳輸總是以頁為機關的。對應4G的虛拟位址和256M的實體存儲器,他們分别包含了1M個頁 和64K個頁幀。 ( 1M個頁  :   1M* 4k = 2^20 * 2^2 *2 ^10 = 2^32 = 4G)   (64K個頁幀:64k = 2^8 * 2^10 = 2^18  = 256M)

頁表就像一個函數,輸入是頁号,輸出是頁桢,實作從頁号到實體位址的映射。

作業系統給每一個程序維護一個頁表。是以不同程序的虛拟位址可能一樣。頁表給出了程序中每一頁所對應的頁幀的位置。

PS:“虛拟記憶體”這一技術,不但在功能上突破了實體記憶體的限制,使程式可以操縱大于實際實體記憶體的空間,同時,隔離每個程序的安全保護網,使每個程序都不受其它程式的幹擾。

2. 頁面置換

區分概念:虛拟記憶體、實體記憶體、Swap分區(硬碟存儲區)

虛拟記憶體映射整個程式存儲空間,并将目前運作的資料 通過虛拟空間 映射到 對應的實體記憶體上運作,實體記憶體不足時,将其中一部分資料交換到 硬碟交換區--swap中,當需要時,在将swap分區的内容,置換到實體記憶體中。

頁面置換:把一個頁面從記憶體調換到磁盤的交換區中 (swap分區,即硬碟存儲區的一部分)

Swap分區在系統實體記憶體不夠用的時候,把實體記憶體中的一部分空間釋放出來,以供目前運作的程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到Swap分區中,等到那些程式要運作時,再從Swap分區中恢複儲存的資料到記憶體中。

 抖動:在具有虛存的計算機中,由于頻繁的調頁活動使通路磁盤的次數過多而引起的系統效率降低的一種現象。

例:作業系統同時運作多個程式,當切換到一個很長時間沒有理會的程式時,會聽到硬碟“嘩嘩”直響。這是因為這個程式的記憶體被那些頻繁運作的程式給“偷走”了,放到了Swap區中。是以,一旦此程式被放置到前端,它就會從Swap區取回自己的資料,将其放進記憶體,然後接着運作。

并不是所有從實體記憶體中交換出來的資料都會被放到Swap中。有相當一部分資料被直接交換到檔案系統。例如,對檔案進行讀寫,當需要将這些程式的記憶體空間交換出去時,可以直接将其放到檔案裡去。如果是讀檔案操作,那麼記憶體資料被直接釋放,不需要交換出來,因為下次需要時,可直接從檔案系統恢複;如果是寫檔案,隻需要将變化的資料儲存到檔案中,以便恢複。 但是那些用malloc和new函數生成的對象的資料則不同,它們需要Swap空間,因為它們在檔案系統中沒有相應的“儲備”檔案,是以被稱作“匿名”(Anonymous)記憶體資料。這類資料還包括堆棧中的一些狀态和變量資料等。是以說,Swap空間是“匿名”資料的交換空間。

3. Swap分區

Swap空間是分頁的(實體存儲器以頁幀為機關劃分),每一頁的大小和記憶體頁的大小一樣,友善Swap空間和記憶體之間的資料交換。

舊版本的Linux實作Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個“位映射”(Bit map)。這就是說第一頁的每一位,都對應着一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這麼說來,第一個Swap映射位應該是0,因為,第一頁Swap是映射頁。另外,最後10個(位元組)映射位也被占用,用來表示Swap的版本。那麼,如果說一頁的大小為s,這種Swap的實作方法共能管理“8 * ( s - 10 ) - 1”個Swap頁。對于i386系統來說s=4096,則空間大小共為133890048,如果認為1 MB=2^20 Byte的話,大小正好為128M。

Linux取消了位映射的方法,也就取消了128M的限制。直接用位址通路,限制為2G (不了解)

4. Swap大小的配置設定(對性能的影響)

如果系統的實體記憶體用光了,系統就會跑得很慢,但仍能運作;如果Swap空間用光了,那麼系統就會發生錯誤。

通常情況下,Swap空間應大于或等于實體記憶體的大小,最小不應小于64M,通常Swap空間的大小應是實體記憶體的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則隻需要較小的Swap空間,而大的伺服器系統則視情況不同需要不同大小的Swap空間。特别是資料庫伺服器和Web伺服器,随着通路量的增加,對Swap空間的要求也會增加,具體配置參見各伺服器産品的說明。

因為Swap交換的操作是磁盤IO的操作,如果有多個Swap交換區,Swap空間的配置設定會以輪流的方式操作于所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。

在位址映射過程中,若在頁面中發現所要通路的頁面不再記憶體中,則産生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇一個頁面将其移出記憶體,以便為即将調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換算法。

參考此處

繼續閱讀