您的位置:首页 > 运维架构

FIFO, LRU, OPT 页面置换算法

2011-05-27 14:27 513 查看
#include<stdio.h>

#define row 3

#define col 20

int Pagein[col]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

int Output[row][col];

struct Memory{

int num;

int time;

};

struct Memory memory[row];

void Init(){

int i;

for(i=0; i<row; i++){

memory[i].num = -1;

memory[i].time = -1;

}

}

void Print(){

int i, j;

for(i=0; i<col; i++)

printf(" %2d|",i);

printf("/n");

for(i=0; i<col; i++)

printf(" %2d ",Pagein[i]);

printf("/n/n");

for(i=0; i<row; i++){

for(j=0; j<col; j++){

if(Output[i][j] >= 0)

printf(" %2d ", Output[i][j]);

else

printf(" ");

}

printf("/n");

}

}

void FIFO(){

Init();

int flag=0, i, j;

for(i=0; i<col; i++){

int same = 0;

for(j=0; j<row; j++){

if(memory[j].num == Pagein[i]){

same = 1;

break;

}

}

if(!same){

memory[flag].num = Pagein[i];

flag++;

if(flag >= row) flag -= row;

}

for(j=0; j<row; j++)

Output[j][i] = memory[j].num;

}

Print();

}

void LRU(){

Init();

int flag=0, i, j;

for(i=0; i<col; i++){

int same = 0;

for(j=0; j<row; j++){

if(memory[j].num == Pagein[i]){

same = 1;

memory[j].time = i;

break;

}

}

if(!same){

memory[flag].num = Pagein[i];

memory[flag].time = i;

}

flag = 0;

for(j=1; j<row; j++)

if(memory[j].time < memory[flag].time)

flag = j;

for(j=0; j<row; j++)

Output[j][i] = memory[j].num;

}

Print();

}

void OPT(){

Init();

int flag=0, i, j, k;

for(i=0; i<col; i++){

int same = 0;

for(j=0; j<row; j++){

if(memory[j].num == Pagein[i]){

same = 1;

break;

}

}

if(!same){

memory[flag].num = Pagein[i];

}

for(j=0; j<row; j++){

int found = 0;

for(k=i+1; k<col; k++){

if(memory[j].num == Pagein[k]){

memory[j].time = k-i;

found = 1;

break;

}

}

if(!found) memory[j].time = col+1;

}

flag = 0;

for(j=1; j<row; j++){

if(memory[flag].time < memory[j].time){

flag = j;

}

}

for(j=0; j<row; j++)

Output[j][i] = memory[j].num;

}

Print();

}

int main(){

printf("FIFO:/n");

FIFO();

printf("/nLRU:/n");

LRU();

printf("/nOPT:/n");

OPT();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: