頁面替換演算法
來源:http://hi.baidu.com/vgucparmhjbcjyr/item/b3f6137f11c4ff285d178965
RAND演算法,FIFO演算法,LFU演算法,LRU演算法,OPT演算法
在虛擬儲存器中,當發生頁面失效時,需要從磁碟儲存器中調入一頁(或一段)到主儲存器中。在段式和段頁式虛擬儲存器中,由於多使用者虛頁數比主儲存器的實頁 數要多得多。在段式虛擬儲存器中,虛存空間中能容納的程式段數要比主存空間中能存放的相同長度的程式段數多得多。因此,必然會出現當主存中所有頁面都已經 被佔用,或者所有主存空間都已經被佔用,而又要從磁碟儲存器中調入新頁的情況。這時,必須從主儲存器中淘汰掉一個不常用的頁面,以便騰出主存空間來存放新 調入的頁面。那麼,按照什麼樣的規則替換主儲存器中的頁面呢?這就是頁面替換演算法要解決的問題。
以下,為了敘述方便,主要介紹頁式和段頁式虛擬儲存器中的頁面替換演算法及其實現方法,在這兩種虛擬儲存器中都是以頁面為單位進行排程的。而段式虛擬儲存器是以程式段為單位進行排程的,但是它所採用的替換演算法及演算法的實現方法都是相同的。
評價一個頁面替換演算法好壞的標準主要有兩個,一是命中率要高,二是演算法要容易實現。要提高一個頁面替換演算法的命中率,首先要使這種演算法能正確反映程式的區域性性,其次是這種演算法要能夠充分利用主存中頁面排程情況的歷史資訊,或者能夠預測主存中將要發生的頁面排程情況。
頁面替換演算法主要用於如下幾個地方:
(1) 虛擬儲存器中,主存頁面(或程式段)的替換。
(2) Cache中的塊替換。
(3) 虛擬儲存器的快慢表中,快表的替換。
(4) 虛擬儲存器中,使用者基地址暫存器的替換。
(1) 隨機演算法,即RAND演算法(Random algorithm)。利用軟體或硬體的隨機數發生器來確定主儲存器中被替換的頁面。這種演算法最簡單,而且容易實現。但是,這種演算法完全沒有利用主儲存器中頁面排程情況的歷史資訊,也沒有反映程式的區域性性,所以命中率比較低。
(2) 先進先出演算法,即FIFO演算法(First-In First-Out algorithm)。這種演算法選擇最先調入主儲存器的頁面作為被替換的頁面。它的優點是比較容易實現,能夠利用主儲存器中頁面排程情況的歷史資訊,但是,沒有反映程式的區域性性。因為最先調入主存的頁面,很可能也是經常要使用的頁面。
(3) 近期最少使用演算法,即LFU演算法(Least Frequently Used algorithm)。這 種演算法選擇近期最少訪問的頁面作為被替換的頁面。顯然,這是一種非常合理的演算法,因為到目前為止最少使用的頁面,很可能也是將來最少訪問的頁面。該演算法既 充分利用了主存中頁面排程情況的歷史資訊,又正確反映了程式的區域性性。但是,這種演算法實現起來非常困難,它要為每個頁面設定一個很長的計數器,並且要選擇 一個固定的時鐘為每個計數器定時計數。在選擇被替換頁面時,要從所有計數器中找出一個計數值最大的計數器。因此,通常採用如下一種相對比較簡單的方法。
(4) 最久沒有使用演算法,即LRU演算法(Least Recently Used algorithm)。這種演算法把近期最久沒有被訪問過的頁面作為被替換的頁面。它把LFU演算法中要記錄數量上的"多"與"少"簡化成判斷"有"與"無",因此,實現起來比較容易。
(5) 最優替換演算法,即OPT演算法(OPTimal replacement algorithm)。上 面介紹的幾種頁面替換演算法主要是以主儲存器中頁面排程情況的歷史資訊為依據的,它假設將來主儲存器中的頁面排程情況與過去一段時間內主儲存器中的頁面排程 情況是相同的。顯然,這種假設不總是正確的。最好的演算法應該是選擇將來最久不被訪問的頁面作為被替換的頁面,這種替換演算法的命中率一定是最高的,它就是最 優替換演算法。
要實現OPT演算法,唯一的辦法是讓程式先執行一遍,記錄下實際的頁地址流情況。根據這個頁地址流才能找出當前要被替換的頁面。顯然,這樣做是不現實 的。因此,OPT演算法只是一種理想化的演算法,然而,它也是一種很有用的演算法。實際上,經常把這種演算法用來作為評價其它頁面替換演算法好壞的標準。在其它條件 相同的情況下,哪一種頁面替換演算法的命中率與OPT演算法最接近,那麼,它就是一種比較好的頁面替換演算法。
NRU為作業系統請求分頁儲存管理中的頁面淘汰演算法,又名近似的LRU置換演算法。
當一儲存塊中的頁面訪問時,其相應的“頁面訪問”位由硬體自動置“1”,而由頁面管理體制軟體週期性地(設週期為T,其值通常為幾百毫秒),把所有的頁面 訪問位重新置為“0”。這樣,在時間T內,某些被訪問的頁面,其對應的訪問位為“1”而未訪問的頁面,其對應的訪問位為“0”。查尋頁面訪問位為“0”的 頁面。在查詢過程中,那些被訪問的頁所對應的訪問位被重新置為“0”。由此可見,實際上這種近似LRU演算法,已經退化成一種“最近不用”的演算法 NRU(Not Recently Used)。
相關文章
- 幾種頁面置換演算法演算法
- 缺頁中斷與頁面置換演算法演算法
- 頁面置換演算法你學會了嗎?演算法
- 快取演算法(頁面置換演算法)-FIFO、LFU、LRU快取演算法
- mui 子頁面切換父頁面底部導航UI
- 【作業系統】頁面置換演算法(最佳置換演算法)(C語言實現)作業系統演算法C語言
- 替換字串中的空格《演算法很美》字串演算法
- HTML 替換元素與非替換元素HTML
- 網頁設計師的字型替換方法指南網頁
- javascript實現拖拽並替換網頁塊元素JavaScript網頁
- 初探富文字之搜尋替換演算法演算法
- 將經典頁面轉換成現代客戶端頁面客戶端
- 替換tabBartabBar
- 替換(substitution)
- 頁面資料賦值轉換賦值
- 最近最久未使用(LRU)頁面置換演算法 C語言實現演算法C語言
- 面向深度學習的快取替換演算法深度學習快取演算法
- js replace替換字串,同時替換多個方法JS字串
- 學習和配置頁面轉換模型模型
- WPF手動實現切換頁面
- 最近最久未使用(LRU)頁面置換演算法原理及模擬實現演算法
- Lumen 替換 world 裡面變數並匯出 PDF 圖片變數
- Lumen 替換 Word 裡面變數並匯出 PDF 圖片變數
- SQL Server 替換SQLServer
- 08:字元替換字元
- RACSubject替換代理
- sed 字串替換字串
- ACM 字串替換ACM字串
- asp字元替換字元
- vi替換命令
- 替換橫槓
- HTML頁面轉換為Sharepoint母版頁(實戰)HTML
- 替換空格 將一個字串中的空格替換成“ ”字串
- **PHP中替換換行符PHP
- 頁面無重新整理切換實現
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- 微信小程式頁面功能-----標籤切換微信小程式
- 演算法學習記錄二(C++)--->字串空格替換演算法C++字串