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;
}
#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;
}
相关文章推荐
- JAVA实现页面置换算法(OPT,FIFO,LRU)
- C#实现页面置换算法FIFO,LRU,LFU,OPT
- 页面置换算法总结-FIFO-LRU-OPT
- 页面置换算法 FIFO,OPT,LRU
- 页面置换算法(FIFO,LRU,OPT)c模拟
- 页面置换算法-FIFO、LRU、OPT
- 转载:操作系统页面置换算法(opt,lru,fifo,clock)实现
- 页面置换算法(FIFO,LRU,OPT)
- 页面调度算法 FIFO,LRU,OPT,及C++代码
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 页面置换算法 FIFO NUR LRU LFU
- LRU 和 FIFO 页面置换算法
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 页面置换算法 - FIFO、LFU、LRU
- 缺页中断——FIFO、LRU、OPT这三种置换算法
- Cache与页面置换算法FIFO、LRU等
- 模拟实现FIFO,LRU,OPT内存淘汰策略
- 页面置换算法(FIFO,LRU,最佳,Clock)
- FIFO、LRU、OPT这三种置换算法的缺页次数
- 操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)