1. 程式人生 > >【作業系統】頁面置換演算法

【作業系統】頁面置換演算法

1、頁面置換演算法是幹嘛的

虛擬頁式儲存管理的基本工作原理:在程序執行之前,不是裝入全部頁面,而是裝入全部頁面,而是裝入一個或零個頁面,之後根據程序執行的需要,動態裝入其他頁面;當記憶體空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面。

在使用虛擬頁式儲存管理時需要在頁表中增加一些內容,得到頁表的內容如下:
頁號、駐留位、記憶體塊號、外存地址、訪問位、修改位
其中駐留位,又稱中斷位,表示該頁實在記憶體中還是外存中;訪問位表示該頁在記憶體期間是否被訪問過,稱為R位;修改位表示改業在記憶體中是否被修改過,稱為M位。

訪問位和修改位可以用來決定置換哪個頁面,比如說第二次機會頁面置換演算法。

缺頁中斷:在地址對映過程中,若在頁表中發現所要訪問的頁面不在記憶體,則產生缺頁中斷。

當發生缺頁中斷時,作業系統必須在記憶體中選擇一個頁面將其移除頁面,以便即將調入的頁面讓出空間。

2、頁面置換演算法

(1)理想頁面(OPT:optimal)

這是一種理想情況下的頁面置換演算法,但實際上是不可能實現的。

該演算法的基本思想:發生缺頁時,有些頁面在記憶體中,其中有一頁將很快被訪問(包含緊接著 的下一條指令的那頁),而其他頁則可能到10、100或1000條指令後才會被訪問,每個頁都可以用在該頁面首次被訪問前所要執行的指令數進行標記。標記樹最大的頁應該被置換。

舉例:如果某頁在八百萬條指令內不會被使用,另外一頁在六百萬條指令不會被使用,則置換前一個頁面。

這個演算法無法實現,因當缺頁中斷時,系統無法知道各個頁面下一次在什麼時候被訪問。

(2)先進先出(FIFO:First-In First-Out)

先進先出頁面置換演算法總是選擇最先裝入記憶體的一頁調出,或者說是把駐留在記憶體中時間最長的一頁調出。

FIFO演算法簡單,容易實現。以把裝入記憶體的那些頁面的頁號按進入的先後次序排好佇列,每次總是調出隊首的頁。當系統維護一個所有當前在記憶體中的頁面的連結串列,最老的頁面在頭上,最新的頁面在表尾。當發生缺頁時,淘汰表頭的頁面並把新調入的頁面加到表尾。

(3)最近最少使用(LRU:Least Recently Used)

最近最少使用頁面置換演算法總是選擇距離現在最長時間內沒有被訪問過的頁面先調出。

(4)第二次機會頁面置換演算法

FIFO演算法可能會吧經常使用的頁面置換出去,為了避免這一問題,對該演算法進行簡單的修改:檢查最老頁面的R位,如果R位是0,那麼這個頁面又老有沒用,可以立即置換出去,如果是1,就清零R位,並將該頁放到連結串列的尾端,修改它的裝入時間使它就像裝入的一樣,然後繼續搜尋。如果所有的頁面都被訪問過,那麼該演算法就被降為純粹的FIFO演算法。

(5)時鐘頁面置換演算法

由於第二次機會頁面置換演算法要經常在連結串列中移動頁面,降低了效率。一個更好的辦法,將所有的頁面存在一個類似鐘錶面的環形連結串列中。

(6)最近未使用(NRU:Not Recently Used)

用R位和M位構造一個簡單的頁面置換演算法:當啟動一個程序時,它的所有頁的兩個位都由作業系統設定成0,R位被定期的清零,以區別最近沒有被訪問的頁和被訪問了的頁。
根據R位和M位,分為4類頁面
第0類:沒有被訪問,沒有被修改
第1類,沒有被訪問,被修改
第2類,被訪問,沒有被修改
第3類,被訪問,被修改。

NRU演算法隨機地從編號最小的非空類中挑選一個頁淘汰之。這個演算法隱含的意思是,淘汰一個在最近一個時鐘週期內沒有被訪問過的已修改頁要比淘汰一個被頻繁訪問的乾淨的頁好。

Belady異常現象

從直覺上看,在記憶體中的物理頁面數越多,程式的缺頁次數應該越少,但是實際情況並不是這樣。

Belady在1969年發現一個反例,使用FIFO演算法時,四個頁框時缺頁次數比三個頁框時多。這種奇怪的情況稱為Belady異常現象

計算缺頁次數

題目:某程式在記憶體中分配3頁,初始為空,頁面走向為4、3、2、1、4、3、5、4、3、2、1、5。計算缺頁次數。

理想置換演算法的缺頁次數
替換上一次出現的頁面,

這裡寫圖片描述

FIFO缺頁次數
先進來的頁,先出去。

這裡寫圖片描述

最近最少使用

看最上邊的頁面走向,相比當前頁數遠的置換出去。

這裡寫圖片描述

題目2
.在一個請求頁式儲存管理中,一個程式的頁面走向為3,4,2,1,4,5,4,3,5,1,2,並採用LRU演算法。社分配給該程式的儲存塊數 S 分別為 3 和 4,在該訪問中發生的缺頁次數 F ?

S = 3,F = 8;

這裡寫圖片描述

S = 4,F = 7。

這裡寫圖片描述

相關推薦

作業系統頁面置換演算法

1、頁面置換演算法是幹嘛的 虛擬頁式儲存管理的基本工作原理:在程序執行之前,不是裝入全部頁面,而是裝入全部頁面,而是裝入一個或零個頁面,之後根據程序執行的需要,動態裝入其他頁面;當記憶體空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新

作業系統頁面置換演算法(最佳置換演算法)(C語言實現)

# 【作業系統】頁面置換演算法(最佳置換演算法)(C語言實現) #####(編碼水平較菜,寫部落格也只是為了個人知識的總結和督促自己學習,如果有錯誤,希望可以指出) ## 1.頁面置換演算法: > 在地址對映過程中,若在頁面中發現所要訪問的頁面不在記憶體中,則產生缺頁中斷。當發生缺頁中斷時,如果作業系

作業系統頁面置換演算法(最佳置換OPT,先進先出FIFO,最近最久未使用LRU)

最近學習作業系統時,實驗要求實現常見的三種頁面置換演算法,博主按照書上要求試著編寫,實現了案例,並記錄在部落格隨記中,以便後續自己複習並也給需要的同學分享參考一下!水平有限,若有錯,請悄悄告訴博主!博主好立即改正。 最佳置換演算法(optimal replacement,OPT)是從記憶體中選擇今後不再訪問

作業系統磁碟排程演算法 C++具體實現 (FCFS&SSFT&SCAN&C-SCAN&LOOK&C-LOOK)

先宣告一下全域性變數int initPosition,maxSize,numTrack;//磁頭所在位置,磁碟所能盛放的最大磁軌數目,要訪問的磁軌數 int cost;//磁頭總移動距離 vector<int> Track;//要訪問的磁軌們 vector<

作業系統小型銀行家演算法實現

一.銀行家演算法簡介:      銀行家演算法是一種避免死鎖的演算法。在避免死鎖方法中允許程序動態地申請資源,但系統在進行資源分配之前,應先j檢查並計算此次分配資源的安全性,若分配不恰當會導致導致系統進入不安全狀態,則等待.如果處於安全狀態則分配。     輸入一些資源

作業系統頁面置換演算法

地址對映過程中,若在頁面中發現所要訪問的頁面不在記憶體中,則產生缺頁中斷。當發生缺頁中斷時,如果作業系統記憶體中沒有空閒頁面,則作業系統必須在記憶體選擇一個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。 1.最佳置換演算

作業系統虛擬儲存器--頁面置換演算法

頁面置換演算法是用來選擇換出頁面的演算法。 頁面置換演算法的優劣直接影響到系統的效率,若選擇不合適,可能會出現抖動(Thrashing)現象。 抖動:剛被淘汰出記憶體的頁面,過後不久又要訪問它,需要再次將其調入,而該頁調入記憶體後不久又再次被淘汰出記憶體,然

python學習筆記3:LRU(最近最少使用頁面置換)演算法

題目描述:一程序剛獲得3個主存塊的使用權,若該程序訪問頁面的次序是1,2,3,4,1,2,5,1,2,3,4,5。當採用LRU演算法時發生的缺頁次數是多少? LRU是最近最少使用頁面置換演算法,該演算法用一個開放的棧來儲存當前正在使用的各個頁面號。當有一個新的頁面要被訪

作業系統(5)虛擬儲存--頁面置換演算法:區域性置換演算法、全域性置換演算法

文章目錄 1:頁面置換演算法的相關概念 2:區域性置換演算法 1.最優、先進先出、最近最久未使用演算法 2.時鐘置換演算法和最不常用演算法 3.Belady現象和區域性置換演算法的比較 3:

作業系統頁面置換演算法 ---之---FIFO置換演算法、OPTIMAL置換算

                                 作業系統頁面置換演算法     &nbs

作業系統頁面置換演算法RR

data4.txt輸入檔案內容: 5 3 A B C D E 0 6 10 16 24 15 10 12 4 8 // #include <iostream> #include <queue> #include <iomanip&

作業系統- 實驗四 模擬FIFO頁面置換演算法(Java實現)

                                          &

作業系統 先來先服務FCFS和短作業優先SJF程序排程演算法

  1.先來先服務FCFS和短作業優先SJF程序排程演算法 2.時間片輪轉RR程序排程演算法 3.預防程序死鎖的銀行家演算法 4.動態分割槽分配演算法 5.虛擬記憶體頁面置換演算法 6.磁碟排程演算法 void FCFS() { /* 1. 找

C語言作業系統——頁面置換演算法(FIFO/LRU)

由於本學期學習作業系統所以需要用程式碼實現一些演算法,本人大二由於對C語言掌握的不太好,所以一直逼著自己用C語言寫程式碼,還好寫出來了,在這裡與大家分享。首先建立一個工程檔案,本人喜歡建立一個頭檔案,一個功能檔案和一個主函式檔案。標頭檔案,page_replace.h#inc

作業系統磁碟臂排程演算法

定位到所要的磁碟位置通常需要以下三個引數: 尋道時間:定位到柱面的時間 旋轉延遲:定位到扇區的時間 傳輸時間:讀寫資料的時間 其中尋道時間佔據了主要地位。因此也就有了磁碟臂排程演算法。磁碟IO任務是以柱面為佇列組織的。排程其實就是決定執行哪個柱面的任務。 1.先來先服務。按

作業系統中的頁面置換演算法和磁碟排程演算法

頁面置換演算法:http://blog.csdn.net/y920312/article/details/47780253 頁面置換演算法小總結: 1.Optimal(最佳置換演算法)    最長時間內不被訪問,也就是說找最後面的。 2.FIFO(先進先出演算法)    按

作業系統C語言模擬作業系統實現磁碟排程演算法——電梯排程演算法

#include<stdio.h> #include<stdlib.h> #include<time.h> int *Init(int arr[]) { int

5虛擬記憶體頁面置換演算法

// 作業系統_實驗五(虛擬記憶體頁面置換演算法).cpp : 定義控制檯應用程式的入口點。 // #include <iostream> #include <fstream> #include <iomanip> using namespace std; const

作業系統頁面置換演算法與redis的記憶體淘汰機制

寫在前面:最近碰到作業系統中關於頁面置換的一些問題,與此同時學習redis的過程中發現它的記憶體淘汰機制有些相似,在此一併記錄下來。 首先是作業系統中的頁面替換演算法 最佳置換演算法(OPT) 這是一種理想情況下的頁面置換演算法,但實際上是不可能實現的。該

作業系統:虛擬頁式儲存管理(缺頁中斷、頁面置換演算法

1、基本工作原理 1、基本工作原理 在程序開始執行之前,不是全部裝入頁面,而是裝入一個或者零個頁面,之後根據程序執行的需要,動態裝入其他頁面;當記憶體已滿,而又需要裝入 新的頁面時,則根據某種演算法淘