實驗原理:
其基本原理為:如果某一個頁面被訪問了,它很可能還要被訪問;相反,如果它長時間不被訪問,再最近未來是不大可能被訪問的。
程序源代碼:
#define MAXSIZE 20 #include <iostream.h> void main() { int input=0; //用於輸入作業號 int worknum=0; //輸入的作業個數 int storesize=0; //系統分配的存儲區塊數 int interrupt=0; //缺頁中斷次數 int stack[MAXSIZE]; //棧,LRU算法的主要數據結構 int workstep[MAXSIZE]; //記錄作業走向 /*初始化*/ for(int i=0;i<MAXSIZE;i++) { stack[i]=0; workstep[i]=0; } cout<<"請輸入存儲區塊數:"; cin>>storesize; cout<<"請輸入作業的頁面走向(輸入0結束):\n"; for(int j=0;j<MAXSIZE;j++) { cout<<"頁面號 "<<j+1; cin>>input; workstep[j]=input; if(input==0) { cout<<"輸入結束!\n"; break; } worknum++; } if(workstep[0]==0) { cout<<"未輸入任何作業,系統將退出!\n"; return; } cout<<"置換情況如下:\n"; for(int k=0;k<worknum;k++) { /*在棧中找相等的頁號或空位置*/ for(int l=0;l<storesize;l++) { /*是否有相等的頁號*/ if(stack[l]==workstep[k]) { cout<<"內存中有"<<workstep[k]<<"號頁面,無須中斷!\n"; goto step1; } /*找棧中是否有空位置*/ if(stack[l]==0) { stack[l]=workstep[k]; cout<<"發生中斷,但內存中有空閑區,"<<workstep[k]<<"號頁面直接調入!\n"; interrupt++; goto step1; } } /*上述情況都不成立則調出棧頂,將調入頁面插入棧頂*/ cout<<"發生中斷,將"<<stack[0]<<"號頁面調出,"<<workstep[k]<<"號裝入!\n"; interrupt++; /*新掉入的頁面放棧頂*/ step1: for(int m=0;m<storesize;m++) { stack[m]=stack[m+1]; } stack[storesize-1]=workstep[k]; } cout<<"作業"<<worknum<<"個,"<<"中斷"<<interrupt<<"次,"<<"缺頁率:"<<float(interrupt)/float(worknum)*100<<"%\n"; }
程序調試:
調試一:
請輸入存儲區塊數:3
請輸入作業走向(輸入0結束):
頁面號1:4
頁面號2:3
頁面號3:2
頁面號4:1
頁面號5:4
頁面號6:3
頁面號7:5
頁面號8:4
頁面號9:3
頁面號10:2
頁面號11:1
頁面號12:5
頁面號13:0
輸入結束!
置換情況如下:
發生中斷,但內存中有空閑區,4號頁面直接調入!
發生中斷,但內存中有空閑區,3號頁面直接調入!
發生中斷,但內存中有空閑區,2號頁面直接調入!
發生中斷,將4號頁面調出,1號裝入!
發生中斷,將3號頁面調出,4號裝入!
發生中斷,將2號頁面調出,3號裝入!
發生中斷,將1號頁面調出,5號裝入!
內存中有4號頁面,無須中斷!
內存中有3號頁面,無須中斷!
發生中斷,將5號頁面調出,2號裝入!
發生中斷,將4號頁面調出,1號裝入!
發生中斷,將3號頁面調出,5號裝入!
作業12個,中斷10次,缺頁率:83.3333%
Press any key to continue
調試二:
請輸入存儲區塊數:4
請輸入作業走向(輸入0結束):
頁面號1:4
頁面號2:3
頁面號3:2
頁面號4:1
頁面號5:4
頁面號6:3
頁面號7:5
頁面號8:4
頁面號9:3
頁面號10:2
頁面號11:1
頁面號12:5
頁面號13:0
輸入結束!
置換情況如下:
發生中斷,但內存中有空閑區,4號頁面直接調入!
發生中斷,但內存中有空閑區,3號頁面直接調入!
發生中斷,但內存中有空閑區,2號頁面直接調入!
發生中斷,但內存中有空閑區,1號頁面直接調入!
內存中有4號頁面,無須中斷!
內存中有3號頁面,無須中斷!
發生中斷,將2號頁面調出,5號裝入!
內存中有4號頁面,無須中斷!
內存中有3號頁面,無須中斷!
發生中斷,將3號頁面調出,2號裝入!
發生中斷,將5號頁面調出,1號裝入!
發生中斷,將4號頁面調出,5號裝入!
作業12個,中斷8次,缺頁率:66.6667%