虚拟内存页面之最佳页面置换算法C语言实现
最佳页面置换算法,这是一项理想化的算法,效率最高,实际使用中实现比较困难。他的主要思想是将将来最不常用的页面替换出主存。由于很难估计下一个页面将不被访问,所以本算法一般是用来评价基它算法。
下面这段代码是小弟,用C语言胡乱实现,代码写的比较垃圾,只实现了功能。主要想通过这个算法实现,加深对最佳页面置换算法的了解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | //虚拟内存页面置换之最佳置换算法实现。 //code by lonkil //2008-10-19 //site:www.vcfans.com #include <stdio.h> //系统只分配的内存块数量 #define PAGENUM 3 int arr[]={0,7,6,5,7,4,7,3,5,4,7,4,5,6,5,7,6,0,7,6};//假设系统要调度的页面ID int Page[PAGENUM][2]={{-1,-1},{-1,-1},{-1,-1}}; int Clac(int pageIndex) { int isHit = 1; int nMaxIndex=0; for (int i=0; i < PAGENUM; i++) { if( Page[i][0] == arr[pageIndex] ) { return (isHit = 1); } if( Page[i][0] == -1 ) { Page[i][0] = arr[pageIndex]; isHit = 0; break; } } if( isHit == 1 ) { for ( i=0; i < PAGENUM; i++ ) {//统计下一次出现的编号 Page[i][1] = -1; if( Page[i][0] == arr[pageIndex] ) {//已存在 return 1; } for( int j= pageIndex ; j < sizeof(arr)/sizeof(arr[0]); j++) { if ( Page[i][0] == arr[j] ) { Page[i][1] = j; break; } } } for ( i=0; i < PAGENUM; i++ ) { if( Page[i][1] == -1 ) { Page[i][0] = arr[pageIndex]; isHit = 0; return isHit; } } for ( i = 1 ; i < PAGENUM; i++ ) { if( Page[nMaxIndex][1] < Page[i][1] ) { nMaxIndex = i; } } Page[nMaxIndex][0] = arr[pageIndex]; isHit = 0; } return isHit; } void Display(int pageIndex) { int nRet; printf("%dt",arr[pageIndex]); nRet = Clac(pageIndex); for ( int i = 0 ; i < PAGENUM ; i++) { if( Page[i][0] == -1 ) { printf(" t"); } else { printf("t%d", Page[i][0]); } } if( nRet == 0 ) { printf("tNn"); } else { printf("tYn"); } } void Optimal() { printf("Page, First Page, Second Page, Third Page, Is Hit\n\n"); for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++ ) { Display(i); } } int main(int argc, char* argv[]) { Optimal(); return 0; } |
4 条评论
To dfd:
请先搞明白什么叫“最佳页面置换算法”,再来评论,OK?
别动不动就用"最佳"这个词,误导初学者
不懂的麻烦别评论,谢谢!