先进先出(FIFO)页面置换算法
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://qq164587043.blog.51cto.com/261469/54124 |
#include <stdio.h>
#include <stdlib.h> #define mSIZE 3
#define pSIZE 8 static int memery[mSIZE] = {0};
static int process[pSIZE] = {0}; //static int process[pSIZE] = {2,3,2,1,5,2,4,5,3,2,5,2}; //static int process[pSIZE] = {7,10,1,2,10,3,10,4,2,3,10,3,2,1,2,10,1,7,10,1}; void build(); //生成一个随机数序列 void FIFO(); //最近最久未使用(LRU)置换算法 int main(int argc, char *argv[])
{ printf("产生随机序列如下:\n"); build(); printf("先进先出(FIFO)页面置换算法 \n"); FIFO(); system("PAUSE"); return 0; } void build() { int i = 0; for(i=0; i<pSIZE; i++) { process[i] = (int)(10.0*rand()/(RAND_MAX+1.0) + 1); printf("%d ",process[i]); } printf("\n"); } void FIFO() { int time[mSIZE] = {0}; int i = 0, j = 0; int m = -1, n = -1; int max = -1,maxtime = 0; int count = 0; for(i = 0; i<pSIZE; i++) { //找第一个空闲的物理块 for(j=0; j<mSIZE; j++) { if(memery[j] == 0) { m = j; break; } } //找与进程相同的标号 for(j = 0; j < mSIZE; j++) { if(memery[j] == process[i]) { n = j; } } //找time值最大的 for(j = 0; j < mSIZE;j++) { if(time[j]>maxtime) { maxtime = time[j]; max = j; } } if(n == -1) //不存在相同进程 { if(m != -1) //存在空闲物理块 { memery[m] = process[i]; time[m] = 0; for(j = 0;j <= m; j++) { time[j]++; } m = -1; } else //不存在空闲物理块 { memery[max] = process[i]; time[max] = 0; for(j = 0;j < mSIZE; j++) { time[j]++; } max = -1; maxtime = 0; count++; } } else //存在相同的进程 { memery[n] = process[i]; for(j = 0;j < mSIZE; j++) { time[j]++; } n = -1; } for(j = 0 ;j < mSIZE; j++) { printf("%d ",memery[j]); } printf("\n"); } printf("页面换算次数为:%d\n",count); } 本文出自 “国产0与1” 博客,请务必保留此出处http://qq164587043.blog.51cto.com/261469/54124 本文出自 51CTO.COM技术博客 |


hello_world
博客统计信息
热门文章
最新评论
友情链接
