C 之OTP演算法實現頁面置換演算法

2021-09-29 02:14:44 字數 3450 閱讀 6127

本程式定義兩個陣列,其中乙個陣列長度為三,在程式中充當記憶體塊大小的作用;另外乙個陣列是已經賦值的,在程式中扮演記憶體外頁面序號的作用!初始**如下:

int

arr =

;int

arr1 =

newint[3

];

設定迴圈把arr陣列中前三個元素賦值給arr1,表示最先進入記憶體的三個序號。此時記憶體中已滿,如果記憶體外的序號需要訪問記憶體,且記憶體中不存在將要訪問的序號,那麼需要將記憶體中相應的序號置換出來!這裡用乙個迴圈實現該功能。

for

(int i =

0; i <

3; i++

) console.

writeline

(" 系統存在頁面的序號如下: ");

for(

int i =

0; i < arr.length; i++

) console.

writeline()

; console.

writeline

(" 首先進入記憶體的三個頁面序號是: ");

for(

int i =

0; i <

3; i++

)

接下來的程式**是本演算法也是本程式的最重要的部分,**實現的是如何根據otp這個演算法的定義來實現頁面置換演算法的!首先,我們需要用將要訪問記憶體的頁面序號來遍歷記憶體中的各個序號,這樣才能判斷將要訪問記憶體的序號到底存不存在記憶體中,如果存在,那麼不需要進行置換,直接對下乙個將要訪問記憶體的頁面序號進行同樣的操作!如果不存在的話,需要進行置換,那麼要置換記憶體中的那個序號呢,就要根據otp演算法的定義來實現選擇置換記憶體中的那個頁面序號。判斷記憶體中已經存在的序號**是這樣的:

for

(int d =

3; d < arr.length; d++

) y++;}

if(y <=2)

//y的值大於2說明經過了三輪比較且兩個序號不相等

上面這段**塊裡面的if判斷語句是實現判斷記憶體中已經存在將要訪問記憶體的頁面序號的,記憶體中一共有三個頁面,拿將要訪問的頁面序號不斷的跟記憶體中的頁面序號對比,利用變數y來記錄比較的次數,當迴圈結束時,變數y的值不超過2,那麼說明記憶體中不存在將要訪問的序號,那麼就要實行置換頁面這個步驟。實現頁面置換的步驟,先要判斷要置換出記憶體中那個頁面序號,實現的**:

else

if(j ==1)

if(j ==2)

}//跳出迴圈記錄變數的值

else}}

//通過變數記錄記憶體當中頁面序號最久未訪問的值來選擇置換那個歌序號出去

if(x > t)}if

(t > x)}if

(f > x)

}//根據三個變數值的大小來選擇置換記憶體當中的頁面序號

for(

int i =

3; i < arr.length; i++

) console.

writeline()

; console.

writeline

("記憶體中的頁面序列號為:");

console.

write

("[ ");

for(

int i =

0; i <

3; i++

) console.

write

(" ]");

}//重置各個變數的值,進入下一次迴圈

k =0;

x =0;

f =0;

t =0;

y =0;

}

這段**比較長,也是實現本程式的最關鍵的部分——「要置換記憶體中的那個頁面序號」。思路是這樣的,用已經存在記憶體中的三個序號和記憶體外將要訪問那個序號後面的一系列序號比較,通過三個變數疊加來記錄記憶體中存在三個頁面序號在記憶體外的位置,經過迴圈比較後,置換出變數最大的那個頁面序號,這裡的變數是記錄記憶體中相應位置頁面序號的——在用迴圈比較記憶體裡已經存在的序號和記憶體外的序號過程中,記錄頁面序號在記憶體外相應的位置,同時也判斷比較的序號是在記憶體中的那個位置。

一輪迴圈結束後,需要列印置換後記憶體中的頁面序號,還有記憶體外的頁面序號。**是這樣的:

for

(int i =

3; i < arr.length; i++

) console.

writeline()

; console.

writeline

("記憶體中的頁面序列號為:");

console.

write

("[ ");

for(

int i =

0; i <

3; i++

) console.

write

(" ]");

}

//重置各個變數的值,進入下一次迴圈

k =0;

x =0;

f =0;

t =0;

y =0;

當迴圈次數和記憶體外將要訪問的頁面序號個數相等的時候,可以列印頁面的訪問次數,頁面缺失次數,頁面缺失率。上面的程式**中,h;n,分別是記錄頁面訪問次數,頁面缺失次數,最後根據兩個變數值計算頁面缺失率。

//列印頁面訪問次數

console.

writeline

(".........頁面訪問次數是........"

+h+"次");

//列印頁面訪問缺失次數

console.

writeline

(".........頁面訪問缺失次數是........"

+ n+

"次")

;//列印頁面訪問缺失率

m =(h - n)

/h*100

; console.

writeline

(".........頁面訪問缺失率是........"

+ m+

"%")

; console.

readkey()

;

結語:

本程式利用迴圈巢狀if語句判斷還有陣列的定義等知識,順利實現了用程式模擬otp頁面置換演算法!但在表述過程中仍有表述語句仍有不足有很大的提公升空間。但是做到了字句皆出於自己之手,也算是達到了鍛鍊codeing能力的效果。如果能流利分享給別人那是最好的!

全部**在這裡:望對其有絲毫之作用。謝謝!

C 之FIFO演算法實現頁面置換演算法

本程式使用到了兩個陣列 乙個陣列用於初始化存放記憶體外頁面的序號,存放的頁面序號是和網上大多數例子序號是一樣的其實也可以隨機生成,不過不影響 如下 int arr 第二個陣列是模擬記憶體存放最先進入記憶體的三個序號的,如下 int arr1 new int 3 下面我獻上全部的 了,寫的 可能有點冗...

頁面置換演算法

常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...

頁面置換演算法

include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...