LRU快取記憶體演算法統計快取記憶體請求失敗的缺頁次數
阿新 • • 發佈:2018-11-05
1. page 表示頁面的編號
2. max_cache_size表示最大快取容量
3. len表示pages頁面陣列的大小
#include <iostream> using namespace std; int lruCountMiss(int max_cache_size, int *pages, int len) { int count = 0; int i,j,k,n; bool flag = false; int *a = new int[max_cache_size]; //初始化快取記憶體陣列 for(i = 0; i < max_cache_size; i++) { a[i] = -1; } for(j= 0; j < len; j++) { //判斷請求的頁面是否在快取記憶體陣列中 for(i = 0; i < max_cache_size; i++) { if(pages[j] != a[i]) { continue; } else { break; } } if(i != max_cache_size) //若在,表示請求成功 { for(k = i; k < max_cache_size; k++) //判斷快取記憶體陣列是不是已經完全由頁面填充 { if(a[k] == -1) { flag = true; break; } } if(!flag) //快取記憶體全部由頁面填充 { for(n = i; n < max_cache_size - 1; n++) { a[n] = a[n+1]; } a[max_cache_size - 1] = pages[j]; } else { flag = false; for(n = i; n < k - 1; n++) { a[n] = a[n+1]; } a[k - 1] = pages[j]; } } else //若不在,表示請求失敗 { count ++; for(i = 0; i < max_cache_size; i++) //判斷快取記憶體陣列是不是已經完全由頁面填充 { if(a[i] == -1) { a[i] = pages[j]; flag = true; break; } } if(!flag) //快取記憶體全部由頁面填充 { for(i = 0; i < max_cache_size-1; i++) { a[i] = a[i+ 1]; } a[max_cache_size - 1] = pages[j]; } else flag = false; } } return count; } int main() { int arr[] = {7, 0, 1, 2, 0, 3, 0, 4}; cout << lruCountMiss(3, arr, 8) << endl; return 0; }