頁缺失(英語:page fault,又名硬錯誤、硬中斷、分頁錯誤、尋頁缺失、缺頁中斷、頁故障等)指的是當軟體試圖訪問已對映在虛擬
位址空間中,但是目前並未被載入在物理記憶體中的乙個分頁時,由**處理器的記憶體管理單元所發出的中斷。
通常情況下,用於處理此中斷的程式是作業系統的一部分。如果作業系統判斷此次訪問是有效的,那麼作業系統會嘗試將相關的分頁從硬碟上的虛擬記憶體檔案中調入記憶體。而如果訪問是不被允許的,那麼作業系統通常會結束相關的程序。
比如現在要去執行程序1,但是因為當前分配的物理塊中還沒有裝入這塊程序,所以會產生乙個缺頁中斷,此時作業系統需要將當前物理塊中的乙個頁面置換出去,用於執行這個程序。
向後看,從長遠來看,哪個頁面用不到,就將哪個頁面置換出去
淘汰最久不被訪問的頁面
例題:系統為某程序分配3個物理塊,程序訪問頁面的順序是0,7,6,5,7,4,7,3,5,4,7,4,5,6,5,7,6,0,7,6
訪問頁面07
6物理塊00
0776
接下來,最佳置換演算法的語法就是淘汰最久不被訪問的,所以下乙個進入的數字是5
(為什麼是5,因為看到題目的程序訪問頁面順序了嗎,就是按著0,7,6,5,7....的順序來訪問的),
那麼物理塊就只有三個,分別放著0,7,6;那麼5要進來,就只能淘汰掉0,7,6中的其中乙個,
(為什麼?因為物理塊只有三個,只能放三個頁面啊!!!)
那麼問題來了?我5要進來,我是要淘汰誰啊?
我們用的是最佳頁面置換演算法,這個演算法的
語法就是,淘汰掉最久不被訪問的那個,
那麼我們來看一下
0,7,6我要淘汰最久沒被訪問的頁面,那麼我們看訪問頁面的順序,會發現
0在第18次再訪問,
7在第5 次再訪問,
6在第14次再訪問,
所以,我們要置換掉0,因為0 是最久未的訪問的
結果:訪問頁面07
65物理塊000
5777
66按照這樣的規律就可以最後得到以下的結果:
訪問頁面07
6574
7354
7456
5760
76物理塊000
5555
5555
5555
5500
0777
7773
3377
7777
7777
6664
4444
4446
6666
66缺頁中斷××
××××
×××接下來,我們需要了解乙個新的概念
缺頁中斷:在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。
舉個通俗的例子:上表有三個物理塊,每次往物理塊新增資料就會產生一次缺頁中斷,ok,上表也寫上了
所以上表一共發生9次缺頁中斷
頁面置換:就是有頁面被置換,所以上表中頁面置換是6次
(一開始三個物理塊都是空的,新增進076,發生三次缺頁中斷,0次頁面置換,後來的就會發生缺頁中斷的同時也會發生頁面置換,因為三個物理塊沾滿了嗎,所以每新增進新的頁面就只能是置換了)
聞其名知其意,這個演算法就是先進入的頁面先被淘汰
belady想象:一般來說分配的物理塊越多,發生的缺頁越少,但是fifo就是這麼奇葩,有時候分配的物理塊多了,但缺頁反而增多,這就是所謂的belady現象
向前看,之前哪個頁面最久沒有被用到,先將其置換出去
演算法:lru這個演算法的名字很多,也有一種叫法叫做最近最久未使用置換演算法,這個名字比較好,因為聞其名就知道這個演算法怎麼搞
這個演算法就是看在物理塊中的頁面,哪個是最久沒有被使用的,就把它over掉
接下來來看看例題
訪問頁面23
41物理塊234
232看上面的表,接下來這個1要新增到**呢?
432要淘汰那個呢?
看這個演算法怎麼說:淘汰最近最久未使用的,
首先我們先來看看我們最近使用的是432,那麼在這個432裡面最近最久沒使用的就是2,因為2第乙個新增進來,接下來34,都沒有使用到2,所以2就是最近最久未使用的,
所以就淘汰2
所以訪問頁面23
41物理塊234
1234
23
作業系統之頁面排程演算法
1 先進先出演算法,當然是最先進來的頁先出去了啊。簡稱fifo first in first out 該演算法是基於最早進入主存器的頁未被使用的可能性要大。但如果一頁要經常的被訪問,它在一定的時間內又會被重新的調入。這會增加磁碟啟動的次數。2 最近最久未使用演算法 lru 是基於程式使用的區域性性原...
作業系統排程演算法
include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...
作業系統排程演算法
在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...