操做系統原理(二)——內存管理之頁面置換算法

https://www.cnblogs.com/yongheng20/p/4967213.html

頁面置換算法html

1. 總述算法

  爲提升內存利用率,解決內存供不該求的問題,更加合理的使用內存,人們創造了分頁式內存抽象。同時有一個虛擬內存的概念,是指將內存中暫時不須要的部分寫入硬盤,看上去硬盤擴展了內存的容量,因此叫作「虛擬」內存。使用虛擬內存,應用程序可使用比實際物理內存更大的內存空間。能夠認爲這個更大的內存空間就在硬盤上,只有將某一部分須要被用到時,才被寫入真實內存;當它暫時再也不被用到時,又被寫回硬盤。分頁式內存管理將物理內存分爲等大的小塊,每塊大小一般爲1K、2K、4K等,稱爲頁幀;邏輯內存(使用虛擬內存技術擴大的內存,可認爲其位於硬盤上)也被分爲等大的小塊,稱爲;且頁和頁幀的大小必定是同樣的,它是寫入真實內存和寫回硬盤最小單位。性能

  介紹另外幾個概念:spa

  使用位:每一個頁幀都有一個使用位,記錄此頁幀是否被使用。3d

  修改位(髒位):每一個頁幀都有一個髒位,記錄此頁幀是否被更改。調出真實內存時,被更改過的頁幀要寫回硬盤,未被更改過的頁幀直接扔掉便可,由於硬盤上此頁幀的副本仍然有效。指針

  邏輯地址:使用虛擬內存技術擴大後的內存的地址。htm

  物理地址:真實內存的地址。blog

  固然,進程載入到真實內存才能夠運行,而進程代碼使用的是邏輯地址,因此牽扯到一個地址轉換的問題,將邏輯地址轉換爲物理地址。邏輯地址可分爲兩段,前半段表明頁號,後半段表明頁內偏移,物理地址也可分爲兩段,前半段表明頁幀號,後半段表明頁內偏移。地址轉換的方法即,將邏輯地址的頁號對應爲物理地址的頁幀號(對應關係記錄在一張表中,好比頁號爲5,對應到真實內存中頁幀號爲3),頁內偏移不一樣變化(頁和頁幀的大小是同樣的)。進程

 

2. 介紹頁面置換算法內存

  假設某一時刻內存頁幀已經被寫滿了,但這時又須要將一個頁寫到物理內存中,就須要將本來在物理內存中的某一頁換出來。若是置換不當,就會致使剛剛被換出到硬盤的頁又要被寫回內存,減慢系統運行的速度。頁面置換算法就是考慮將哪一頁換出來以得到優良性能的方法。

 

2.1 Optimal算法(最優算法)

  首先介紹最優算法,它須要知道之後要被用到的頁,而後將不會被用到的頁換出內存;若是全部頁都會被用到,就把須要使用時間離如今最長的頁換出,以儘可能使很差的狀況晚發生。這種方法能使系統得到最佳性能,可是,它是不可能實現的......由於當前沒法獲知之後哪些頁要被用到。不過最優算法仍是可以做爲其餘算法優秀程度的衡量。

 

2.2 FIFO(First-In First-Out,先進先出)算法

  FIFO算法的思想很簡單,就是置換出當前已經待在內存裏時間最長的那個頁。FIFO算法的運行速度很快,不須要考慮其餘的因素,須要的開銷不多。可是正是因爲沒有考慮頁面的重要性的問題,FIFO算法很容易將重要的頁換出內存。

 

2.3 Second Chance(第二次機會)算法

  爲了不FIFO算法將重要的頁換出內存,Second Chance算法提供了一些改進。Second Chance算法在將頁面換出內存前檢查其使用位(使用位前文有介紹),若是其使用位爲1,證實此頁最近有被使用,猜想它還可能被使用,因而不把它置換出內存,可是把其使用位置爲0,隨後檢查下一個頁面,直到發現某頁的使用位爲0,將此頁置換出內存。

 

2.4 Clock算法(時鐘輪轉法)

  爲了節約Second Chance算法一個接着一個檢查使用位的開銷,時鐘輪轉法又提出了改進。時鐘輪轉法將全部的頁組成一個圓,圓心的指針指向下一個要被置換的頁面,置換前一樣檢查使用位,若是使用位爲1,一樣將其使用位置爲0,隨後將順指針旋轉,檢查下一個頁面,直到發現某頁的使用位爲0,將此頁置換出內存。很容易理解此算法爲何叫「時鐘」輪轉法。

圖示:

  此時2號頁是下一個要被置換出內存的頁,置換時若是發現其使用位爲1,則將使用位置0後順時針旋轉指針檢查1號頁。

 

2.5 LRU(Least Recent Used, 最近最少使用)算法

  爲得到對最優算法的模擬,提出了LRU算法。因爲當前時間以後須要用到哪些頁沒法提早獲知,因而記錄當前時間以前頁面的使用狀況,認爲以前使用過的頁面之後還會被用到。在置換時,將最近使用最少的頁面換出內存。此種方法的開銷比較大。

 

2.6 NRU(Not Recent Used, 最近未使用)算法

  前面提到修改位和使用位,NRU算法利用這兩個標誌位將全部頁幀分爲4組:

  第0組:修改位和使用位都爲0;

  第1組:修改位爲0,使用位爲1;

  第2組:修改位爲1,使用位爲0;

  第3組:修改位和使用位都爲1。

  NRU算法從組數最小的一組中隨機選擇一個頁面將其移出內存。可能有人會發現第2組這種狀況根本不會出現,若是一個頁幀被修改,其修改位會被置1,同時它也被使用了,其使用位也會被置1;即不會出現被修改可是沒有被使用的狀況。真實狀況是,頁幀的使用位會被定時清零,這樣第3組通過一次清零就會變成第2組。這也符合「最近」未使用,即好久之前被使用的頁幀被清零了,不在統計範圍內,只要「最近」沒有被使用,就頗有可能被移出。

  NRU算法不是最好的,可是它使用起來開銷很小,用較小的代價就獲得了不錯的效果,不失爲一種不錯的算法。

相關文章
相關標籤/搜索