1. 程式人生 > >LRU(最近最少使用淘汰算法)基本實現

LRU(最近最少使用淘汰算法)基本實現

置換 lin ron sta recent 頁式 inf ext block

LRU(Least Recently Used)

  • 出發點:在頁式存儲管理中,如果一頁很長時間未被訪問,則它在最近一段時間內也不會被訪問,即時間局部性,那我們就把它調出(置換出)內存。
  • 為了實現LRU淘汰算法,需要一些特殊的硬件支持。
  • 三種可行方法
  1. 計數器法
  2. 特殊棧法
  3. 寄存器法

下面給出,棧法的實現代碼:

原理:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void conduct(int Size, int Num, int A[100]);//處理函數
 5 void print(int a[], int num);//輸出函數
6 7 int main() 8 { 9 int stack_size, num, i, acess[100]; 10 cout << "輸入棧空間:" ; 11 cin >> stack_size; 12 cout << "輸入進程數(Max=100):" ; 13 cin >> num; 14 15 cout << "輸入進程訪頁順序:" ; 16 for(i=0; i<num; i++) 17 { 18 cin >> acess[i];
19 } 20 21 conduct(stack_size, num, acess); 22 23 return 0; 24 } 25 26 void conduct(int Size, int Num, int A[100]) 27 { 28 int j, k, Stack[Size]; 29 for(j=0; j<Size; j++) 30 { 31 cout << "進入:" << A[j] <<endl; 32 Stack[j]=A[j];//先處理前幾個元素 33 }
34 int locate;bool flag; 35 for(j=Size; j<Num; j++) 36 { 37 flag=false; 38 for(k=0; k<Size; k++) 39 { 40 if(Stack[k]==A[j]) 41 { 42 flag=true; 43 locate=k; 44 } 45 } 46 if(flag==true)//有重復 47 { 48 cout << "重復進程:" << A[j] <<endl; 49 cout << "取出再壓棧" <<endl; 50 int tempp; 51 for(k=locate; k<Size; k++) 52 { 53 Stack[k]=Stack[k+1]; 54 } 55 Stack[Size-1]=A[j]; 56 cout << "壓棧完成" <<endl; 57 cout << "當前順序:"; 58 59 print(Stack, Size); 60 } 61 else 62 { 63 cout << "非重復,壓棧:" << A[j] <<endl; 64 for(k=0; k<Size-1; k++) 65 { 66 Stack[k]=Stack[k+1]; 67 } 68 Stack[Size-1]=A[j]; 69 cout << "置換完成。" <<endl; 70 cout << "當前順序:"; 71 print(Stack, Size); 72 } 73 } 74 } 75 76 void print(int a[], int num) 77 { 78 int k; 79 for(k=0; k<num; k++) 80 { 81 cout << a[k] << " "; 82 } 83 cout << endl; 84 }
  Code::Blocks 17.12 運行通過!

運行截圖:

技術分享圖片

(似乎有一點小問題,難以敘述,不說了!

LRU(最近最少使用淘汰算法)基本實現