Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427948
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 594
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-17 16:24
个人简介

我是一只小小鸟

文章分类

全部博文(184)

文章存档

2016年(1)

2015年(55)

2014年(127)

2013年(1)

分类: C/C++

2014-06-06 20:11:20


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define mSIZE 3//分配三个内存页块
  4. #define pSIZE 12//总共12个进程
  5. struct mem
  6. {
  7.        int num;
  8.        int count;
  9. }memery[3]={0,-1,0,-1,0,-1};
  10. static int process[pSIZE] ={1,2,3,4,1,2,5,1,2,3,4,5};//页面访问序列
  11. void LRU();
  12. void get();
  13. int main()
  14. {
  15. get();
  16. printf("\n(LRU)\treplace\n");
  17. LRU();
  18. system("PAUSE");
  19. return 0;
  20. }

  21. void get()
  22. {
  23. int w[12]={1,2,3,4,1,2,5,1,2,3,4,5};
  24. int i,n;
  25. for(i=0;i<12;i++)
  26. {
  27. printf("%d ",w[i]);
  28. }
  29. }
  30. void LRU()
  31. {
  32. int i = 0, j = 0,k=0,x,y;
  33. int replace;

  34. for(i = 0; i<pSIZE; i++) //对输入序列进行循环
  35. {
  36.  x=0;y=0; //置x,y初值为0
  37. for(j = 0; j < mSIZE; j++) //对三个内存块进行循环,先查找有没有与即将访问页号相同的
  38. if(memery[j].num == process[i])
  39. { x=1;//有相同的则置x为1
  40. replace=process[i];
  41. memery[j].count=0;//置此块count为0
  42. for(k=0;k<3;k++)
  43. if(k!=j&&memery[k].num!=0)memery[k].count++;//其他不为0页count++
  44. break;//跳出此次内存块循环
  45. }

  46. if(x==0)//没有与即将访问页号相同的内存块
  47. {
  48. for(j = 0; j < mSIZE; j++)//对内存块循环,查找有没有空内存块
  49. if(memery[j].num== 0)
  50. {
  51. y=1;//有则置y为1
  52. replace=0;
  53. memery[j].num=process[i];// 置此内存块为访问页号
  54. memery[j].count=0;//置此块count为0
  55. for(k=0;k<3;k++)
  56. if(k!=j&&memery[k].num!=0)memery[k].count++;//其他不为0页count++
  57. break;//跳出此次内存块循环
  58. }
  59. }

  60. if(x==0&&y==0)//既没有与即将访问页号相同的内存块也没有空内存块
  61. {
  62. int m=memery[0].count;
  63. for(j = 0; j < mSIZE; j++)
  64. {
  65. if(memery[j].count>m)
  66. m=memery[j].count;
  67. }//查找出count最大的内存块m
  68. for(j=0;j<mSIZE;j++)//对内存块循环,count=m的内存块
  69. {
  70. if(memery[j].count==m)
  71.  {
  72.  replace=memery[j].num;
  73.  memery[j].num=process[i]; //置此内存块为访问页号块
  74.  memery[j].count=0;//置此块count为0
  75.  }
  76.  else memery[j].count++;//其他块count++
  77. }
  78. }

  79. for(j = 0 ;j < mSIZE; j++) //打印每次访问后的情况
  80. printf("%d ",memery[j].num);
  81. printf("\t%d\n",replace);
  82. }
  83. }

阅读(667) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~