当前位置:   article > 正文

LRU页面置换算法C语言实现_用c语言实现lru算法

用c语言实现lru算法

LRU   最近最少使用页面置换算法

思路:

代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. void Change(int P[],int x,int y){//将p数组中x位置的元素挪到y位置
  4. //我们默认传参进来的 x大于 y 也就是默认往前挪 故不用判断x y大小关系了
  5. int temp= P[x];
  6. while(x!=y){ //依次后移
  7. P[x]=P[x-1];
  8. x--;
  9. }
  10. P[y]=temp;
  11. }
  12. int main(){
  13. int PageNum[100];
  14. int Count[100];
  15. int Sum,MaxNum;
  16. memset(Count,0,sizeof(Count));
  17. scanf("%d",&Sum);//总数
  18. scanf("%d",&MaxNum);//内存可存放页框数量
  19. for(int i=1;i<=17;i++) //初始化
  20. scanf("%d",&PageNum[i]);
  21. //页面调度
  22. int LackPage=0;
  23. int q=1,w=1;
  24. int flag=0;
  25. for(int i=1;i<=Sum;i++){
  26. if(i==1){ //第一个必然要直接加入
  27. Count[ PageNum[i] ]++;
  28. w++; //此时为第一个 无需考虑内存已满情况
  29. LackPage++;//缺页次数加1
  30. }
  31. else{
  32. flag=0;
  33. for(int j=q;j<w;j++){
  34. if(PageNum[j]==PageNum[i]){//如果内存中已存在该页面
  35. flag=j;//记录该页面位置
  36. }
  37. }
  38. if(flag!=0){ //内存中已存在该页面,需要把该页面挪到第一个位置
  39. //ps:
  40. //若flag-q=0 说明已经是第一个位置了 就不用挪
  41. //所以 小于0 需要挪
  42. if( (flag-q) > 0){
  43. Change(PageNum,flag,q);
  44. }
  45. q++;//挪完了,直接给他移出去
  46. w++;//把新的加进来 (注意:这里不用判断内存满不满,因为根本没增加数量
  47. Count[ PageNum[i] ]++; //该页面使用次数 +1
  48. }
  49. else{//否则就是内存中没有该页面
  50. LackPage++;//先把缺页次数+1
  51. //下面开始调页
  52. if(flag==0 && (w-q) < MaxNum){//内存中没有该页面且内存未满
  53. Count[ PageNum[w] ]++;//使用次数加1
  54. w++; //直接加入内存
  55. }
  56. else{//内存中没有该页面且内存已经满了
  57. //注意:这里才是这个算法的核心,我们要比较使用次数
  58. flag=q;//flga用于记录使用次数最少的页面位置
  59. //这里flag初试指向q是有意义的,不能乱改
  60. //如果大家使用次数都一样,那么q刚好是先进来的那个
  61. for(int j=q+1;j<w;j++){//比较次数
  62. if(Count[ PageNum[j] ] < Count[ PageNum[flag] ] )
  63. flag=j;//记录最小的
  64. }
  65. if(flag==q){//说明使用次数都一样,那就选最先进来的
  66. q++;
  67. w++;
  68. Count[ PageNum[i] ]++; //该页面使用次数 +1
  69. }
  70. else{
  71. Change(PageNum,flag,q);//将使用次数最少的挪到最前面
  72. q++;//淘汰使用次数最少的
  73. w++;//加入新的
  74. Count[ PageNum[i] ]++; //该页面使用次数 +1
  75. }
  76. }
  77. }
  78. }
  79. }
  80. printf("一共执行了 %d 个页面\n",Sum);
  81. printf("内存可以存放 %d 个页面\n",MaxNum);
  82. printf("一共缺页 %d 次\n",LackPage);
  83. printf("缺页率 %.3f \n",LackPage*1.0/Sum);
  84. return 0;
  85. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/163667
推荐阅读
相关标签
  

闽ICP备14008679号