作業系統實驗7 記憶體置換頁演算法

2021-10-23 07:31:05 字數 4247 閱讀 8349

實現時鐘演算法:增加引用位,如果訪問過則置為 1,每次置換時,尋找引用位為 0 的頁幀進 行置換。再把該位置為 1。

增強時鐘演算法:增加修改位,先尋找引用位和修改位都為 0 的頁幀,如果沒有就找引用位為 0,修改位為 1 的頁幀,如果還不存在就返回指標開始的地方,將引用位和修改位都置為 1。

lfu 最少使用演算法:增加 count陣列,訪問頁幀時對應 count 陣列的位置+1,置換頁幀時尋 找 count陣列最小的地方進行置換。

mfu 最多使用演算法:與 lfu 相反。

/*

* filename

: vmrp.h

: (c) 2006 by zhonghonglie

* function

: 宣告虛擬記憶體頁置換類

*/#include

#include

#include

using

namespace std;

class

replace

;

/*

* filename

: vmrp.cc

: (c) 2006 by zhonghonglie

* function

: 模擬虛擬記憶體頁置換演算法的程式

*/#include

"vmrp.h"

replace::

replace()

replace::

~replace()

void replace::

initspace

(char

* methodname)

}//分析統計選擇的演算法對於當前輸入的頁面走向的效能

void replace::

report

(void

)//最近最舊未用置換演算法

void replace::

lru(

void)}

if(pageframes[0]

== next)

else

// 如果引用頁還未放棧頂,則為缺頁,缺頁數加 1

faultnumber++

;//棧底頁號記入淘汰頁陣列中

eliminatepage[l]

= pageframes[framenumber-1]

;//向下壓棧

for(j=framenumber-

1;j>

0;j--

) pageframes[j]

= pageframes[j-1]

; pageframes[0]

=next;

//引用頁放棧頂

//報告當前實存中頁號

for(j=

0; j(pageframes[j]

>=

0) cout << pageframes[j]

<<

" ";

//報告當前淘汰的頁號

if(eliminatepage[l]

>=0)

cout <<

"->"

<< eliminatepage[l++

]<< endl;

else

cout << endl;

}//分析統計選擇的演算法對於當前引用的頁面走向的效能

report()

;}//先進先出置換演算法

void replace::

fifo

(void

)//引用頁不在實存中,缺頁數加 1

faultnumber++

; eliminatepage[l]

= pageframes[j]

;//最先入頁號記入淘汰頁陣列

pageframes[j]

=next;

//引用頁號放最先入頁號處

j =(j+1

)%framenumber;

//最先入頁號迴圈下移

//報告當前實存頁號和淘汰頁號

for(i=

0; i(pageframes[i]

>=

0) cout << pageframes[i]

<<

" ";

if(eliminatepage[l]

>=0)

cout <<

"->"

<< eliminatepage[l++

]<< endl;

else

cout << endl;

}//分析統計選擇的演算法對於當前引用的頁面走向的效能

report()

;}//未實現的其他頁置換演算法入口

void replace::

clock

(void)}

if(iwhile

(referencebit[j]==1

) eliminatepage[l]

=pageframes[j]

;//最先入頁號記入淘汰頁陣列

pageframes[j]

=next;

referencebit[j]=1

; faultnumber++

; j=

(j+1

)%framenumber;

for(i=

0;i(eliminatepage[l]

>=0)

cout<<

"->"

<]

cout<}report()

;}void replace::eclock (

void)}

if(iint tmp=0;

while

(referencebit[j]!=0

||modifybit[j]!=0

)if(tmpif(eliminatepage[l]

>=0)

cout<<

"->"

<]

cout<}else

} eliminatepage[l]

=pageframes[j]

;//最先入頁號記入淘汰頁陣列

pageframes[j]

=next;

referencebit[j]=1

; modifybit[j]=1

; faultnumber++

; j=

(j+1

)%framenumber;

for(i=

0;i(eliminatepage[l]

>=0)

cout<<

"->"

<]

cout

;}void replace::

lfu(

void)}

if(ifaultnumber++

;int min=count[0]

;int ind=0;

for(i=

0;ieliminatepage[l]

=pageframes[ind]

; pageframes[ind]

=next;

count[ind]=1

;for

(i=0

;i(eliminatepage[l]

>=0)

cout<<

"->"

<]

}report()

;}void replace::

mfu(

void

)for

(k=0

,j=l=

0;kif(ifaultnumber++

;int max=

1e7;

int ind=0;

for(i=

0;ieliminatepage[l]

=pageframes[ind]

; pageframes[ind]

=next;

count[ind]=1

;for

(i=0

;i(eliminatepage[l]

>=0)

cout<<

"->"

<]

}report()

;}intmain

(int argc,

char

*ar**)

作業系統 記憶體頁面置換演算法

用頁面置換演算法決定應該換出哪個頁面 五種頁面置換演算法 1 最佳置換演算法 opt 2 先進先出演算法 fifo 3 最近最少使用演算法 lru 4 時鐘置換演算法 clock 5 改進型的時鐘置換演算法 最佳置換演算法 opt 每次選擇淘汰的頁面將是以後永不使用,最長時間內不再被訪問的頁面,無法...

作業系統實驗之虛擬記憶體頁面置換演算法

設計程式模擬先進先出fifo 最佳置換opi和最近最久未使用lru頁面置換演算法的工作過程。假設記憶體中分配給每個程序的最小物理塊數為m,在程序執行過程中要訪問的頁面個數為n,頁面訪問序列為p1,pn,分別利用不同的頁面置換演算法排程程序的頁面訪問序列,給出頁面訪問序列的置換過程,計算每種演算法缺頁...

記憶體瘋狂換頁!CPU怒批作業系統

我是cpu一號車間的阿q,前一陣子我們廠裡發生了一件大喜事,老闆拉到了一筆投資,準備擴大生產規模。不過老闆挺摳門的,拉到了投資也不給我們漲點工資,就知道讓我們拼命幹活,壓榨我們的勞動力。老闆說了,投資的錢要用來添置裝置,招聘新員工,咱們原來就有八個車間了,這一下直接double,變成了十六個!我們的...