生活随笔
收集整理的這篇文章主要介紹了
2.LRU算法实现 [C++]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LRU算法實現原理:
最近最久未使用頁面置換算法(LRU)
當需要淘汰某一頁時,選擇在最近一段時間里最久沒有被使用過的頁淘汰。
其基本原理為:如果某一個頁面被訪問了,它很可能還要被訪問;相反,如果它長時間不被訪問,再最近未來是不大可能被訪問的。LRU采用頁號棧的實現方法。最近訪問的頁放在棧頂,較早訪問的頁往棧底移動。總是先淘汰處于棧底的頁。
#include <iostream>#define MAXSIZE 20
using namespace stdvoid 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";
}
?
總結
以上是生活随笔為你收集整理的2.LRU算法实现 [C++]的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。