#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;
}
FIFO, LRU, OPT 页面置换算法
最新推荐文章于 2024-01-31 11:54:31 发布