缺頁中斷與頁面置換演算法
1 缺頁中斷:
程式線性地址空間裡的頁面不必常駐記憶體,在執行一條指令時,如果發現他要訪問的頁沒有在記憶體中(存在位為0),那麼停止該指令的執行,併產生一個頁不存在異常,對應的故障處理程式可通過從外存載入該頁到記憶體的方法來排除故障,之後,原先引起的異常的指令就可以繼續執行,而不再產生異常。
2 頁面置換演算法:
頁式虛擬儲存器實現的一個難點是設計頁面排程(置換)演算法,即將新頁面調入記憶體時,如果記憶體中所有的物理頁都已經分配出去,就要按某種策略來廢棄某個頁面,將其所佔據的物理頁釋放出來,好的演算法,讓缺頁率降低。常見的有先進先出排程演算法(FIFO),最近最少排程演算法(LFU,根據時間判斷),最近最不常用排程演算法(LRU,根據使用頻率判斷),最佳置換演算法(OPT)。
3 頁面置換與缺頁中斷次數的計算:
3.1 先進先出置換演算法(FIFO):
FIFO是最簡單的頁面置換演算法。這種演算法的基本思想是:當需要淘汰一個頁面時,總是選擇駐留主存時間最長的頁面進行淘汰,即先進入主存的頁面先淘汰。其理由是:最早調入主存的頁面不再被使用的可能性最大。 假定系統為某程式分配了三個物理塊,並考慮有以下頁面號引用串:7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1。
三個物理塊先後載入的資料如下圖所示:
程式執行時,先將7, 0, 1三個頁面依次裝入記憶體(初次載入也會激發缺頁中斷)。程式訪問頁面2時,把最早進入記憶體的頁面7換出。然後訪問頁面3時,再把2, 0, 1中最先進入記憶體的頁換出。由上圖可以看出,利用FIFO演算法時進行了 12次頁面置換,效果不是特別好。
FIFO演算法還會產生當所分配的物理塊數增大而頁故障數不減反增的異常現象,這是由 Belady於1969年發現,故稱為Belady異常,如下圖所示。只有FIFO演算法可能出現Belady 異常,而LRU和OPT演算法永遠不會出現Belady異常。
注意:記憶體的頁面中“最老“的頁面,會被新的網頁直接覆蓋,而不是“最老“的頁面先出隊,然後新的網頁從隊尾入隊。
3.2 最近最久未使用(LRU)演算法:
這種演算法的基本思想是:利用區域性性原理,根據一個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是:當需要淘汰一個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。
再對上面的例項釆用LRU演算法進行頁面置換,如下圖所示。程式第一次對頁面2訪問時,將最近最久未被訪問的頁面7置換出去。然後訪問頁面3時,將最近最久未使用的頁面1換出。
LRU效能較好,但需要暫存器和棧的硬體支援。LRU是堆疊類的演算法。理論上可以證明,堆疊類演算法不可能出現Belady異常。FIFO演算法基於佇列實現,不是堆疊類演算法。
3.3 最佳置換演算法(OPT):
從主存中移出永遠不再需要的頁面;如無這樣的頁面存在,則選擇最長時間不需要訪問的頁面。於所選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。
程式要訪問頁面2時,產生缺頁中斷,根據最佳置換演算法,選擇第18次訪問才需調入的頁面7予以淘汰。然後,訪問頁面0時,因為已在記憶體中所以不必產生缺頁中斷。訪問頁面3時又會根據最佳置換演算法將頁面1淘汰……依此類推,如下圖所示,從圖中可以看出釆用最佳置換演算法時的情況。
可以看到,發生缺頁中斷的次數為9,頁面置換的次數為6。
實際上,LRU演算法根據各頁以前的情況,是“向前看”的,而最佳置換演算法則根據各頁以後的使用情況,是“向後看”的。
參考文獻:
http://www.cnblogs.com/zhangbaochong/p/5827167.html
http://blog.csdn.net/cjl5678/article/details/9010353
相關文章
- 零頁面機制在缺頁中斷中的作用
- 缺頁中斷
- 幾種頁面置換演算法演算法
- 頁面置換演算法你學會了嗎?演算法
- 快取演算法(頁面置換演算法)-FIFO、LFU、LRU快取演算法
- 頁面替換演算法演算法
- 【作業系統】頁面置換演算法(最佳置換演算法)(C語言實現)作業系統演算法C語言
- 最近最久未使用(LRU)頁面置換演算法 C語言實現演算法C語言
- 最近最久未使用(LRU)頁面置換演算法原理及模擬實現演算法
- mui 子頁面切換父頁面底部導航UI
- 如何解決setInterval 與頁面切換問題
- js如何判斷頁面中是否存在某個元素JS
- 在 Web 中判斷頁面是不是重新整理Web
- 將經典頁面轉換成現代客戶端頁面客戶端
- jQuery 判斷頁面元素是否存在jQuery
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- Asp.Net中動態頁面轉靜態頁面ASP.NET
- 計算機作業系統(虛擬儲存器篇含分頁儲存管理方式與頁面置換演算法等)OperatingSystem-VirtualMemory計算機作業系統演算法
- 直播系統中網頁類似app頁面切換動畫的實現方式網頁APP動畫
- 頁面資料賦值轉換賦值
- HTML頁面轉換為Sharepoint母版頁(實戰)HTML
- 帝國CMS利用PHP判斷當前頁面是否為首頁PHP
- 在web工程中設定首頁的頁面Web
- iOS 封裝頁數控制,點選NavigationTabBar切換頁面iOS封裝NavigationtabBar
- 學習和配置頁面轉換模型模型
- WPF手動實現切換頁面
- 如何判斷頁面是否存在某個元素
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- history API 和錨點連結在單頁應用頁面切換中的應用API
- a連結重新整理頁面與js重新整理頁面總結JS
- 在html頁面中判斷本地app是否安裝並開啟HTMLAPP
- HTML5中History.back()頁面後退重新整理頁面HTML
- 如何將一個HTML頁面巢狀在另一個頁面中HTML巢狀
- router-view子頁面呼叫父頁面方法更新父頁面引數View
- VUE 單頁面應用 修改頁面titleVue
- 頁面無重新整理切換實現
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- 微信小程式頁面功能-----標籤切換微信小程式