CPU在訪問的頁面不在物理內存時,便會產生缺頁中斷,請求操作系統將所缺頁調入到物理內存。
缺頁中斷與其他中斷的區別?
- 缺頁中斷在指令執行期間產生和處理中斷信號,一般中斷在一條指令執行完成后檢查和處理中斷信號
- 缺頁中斷返回到該指令的開始重新執行該指令,一般中斷返回到該指令的下一個指令執行
缺頁中斷的處理流程
- 假設CPU收到了一條指令LOAD M,此時CPU會去找M對應的頁表項
- 如果該頁表項的狀態位是有效,CPU可以直接去訪問物理內存,如果狀態位是無效,CPU則會發送缺頁中斷請求
- 操作系統收到缺頁中斷,則會執行缺頁中斷處理函數,中斷處理函數會先查找頁面在磁盤中的位置
- 找到磁盤中對應的頁面后,需要把該頁面換入到物理內存中,但是在換入前,需要在物理內存中找到空閑頁,如果找到空閑頁就換入到物理內存中
- 頁面從磁盤換入到物理內存完成后,把頁表項中的狀態位修改為有效
- 最后,CPU重新執行導致缺頁異常的指令
頁面置換算法用來做什么?
頁面置換算法就是在物理內存無法找到空閑頁的時候,將現有物理內存中合適的頁換出到磁盤,然后把需要訪問的頁面裝入到物理內中。頁面算法的目標是盡可能的減少頁面的換入和換出次數。
頁面置換算法有哪幾種?
- 最佳頁面置換算法(OPT)
- 先進先出置換算法(FIFO)
- 最近最久未使用的置換算法(LRU)
- 時鐘頁面置換算法(LOCK)
- 最不常用置換算法(LFU)
頁面置換算法
頁面置換算法核心是置換在未來最長時間不訪問的頁面。
這種算法是最理想的算法,但是無法實現,因為程序在訪問頁面是動態,我們無法預知每個頁面下一次的訪問時間。因此該算法只是為了衡量其他的頁面置換算法的效率,如果算法效率越接近該算法的效率,說明算法越高效。
先進先出置換算法
先進先出置換算法是選擇在內存駐留時間很長的頁面進行置換。
最近最久未使用置換算法
該算法的核心是選擇最長時間沒有被訪問的頁面進行置換。
為了實現這種LRU,需要在內存中維護一個所有頁面的鏈表,最近最多使用的頁面在表頭,最近最少的在表尾,每次訪問內存時都需要更新該鏈表,需要在鏈表中找到一個頁面,刪除它,然后把它移動到表頭是一個比較耗時的操作。
時鐘頁面置換算法
時鐘頁面置換算法結合了LRU和FIFO,該算法把所有的頁面保存在一個環形列表中,一個表指針指向最老的頁面。
當發生缺頁中斷時,算法會先檢查表指針指向的頁面:
- 如果它的訪問位為0就淘汰該頁面,并把新的頁面插入這個位置,然后表指針前移一個位置
- 如果訪問位是1就清除訪問位,表指針前移一個位置,重復這個過程直到找到了一個訪問位為0的頁面為止
最不常用算法
該算法就是選擇訪問次數最少的那個頁面將其淘汰。
實現方式就是對每個頁面增設一個訪問計數器,每當一個頁面被訪問時,該頁面的訪問計數器就加1。