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於2023年發現,故稱為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。
缺頁中斷與頁面置換演算法
1 缺頁中斷 程序線性位址空間裡的頁面不必常駐記憶體,在執行一條指令時,如果發現他要訪問的頁沒有在記憶體中 存在位為0 那麼停止該指令的執行,並產生乙個頁不存在異常,對應的故障處理程式可通過從外存載入該頁到記憶體的方法來排除故障,之後,原先引起的異常的指令就可以繼續執行,而不再產生異常。頁面置換演算...
處理缺頁中斷(FIFO LRU OPT置換演算法)
缺頁中斷就是要訪問的頁不在主存,需要作業系統將其調入主存後再進行訪問。在這個時候,被記憶體對映的檔案實際上成了乙個分頁交換檔案。置換最先調入記憶體的頁面,即置換在記憶體中駐留時間最久的頁面。按照進入記憶體的先後次序排列成佇列,從隊尾進入,從隊首刪除。但是該演算法會淘汰經常訪問的頁面,不適應程序實際執...
頁面置換演算法(計算缺頁次數)
選擇最近最久未使用的頁面予以淘汰 頁面訪問序列70 1203 0423 032頁框177 7頁框200 頁框31 是否缺頁 當訪問頁面號為2的頁面時,應該置換哪個頁面?我們可以通過判斷從當前訪問頁面向左哪個頁面 頁框中的頁面 距離當前訪問頁面最遠來進行置換,如圖 1距離當前頁面0個間隔,0距離當前頁...