您的位置:首页 > 编程语言 > Java开发

OPT算法,FIFO算法,LRU算法,LFU算法的java程序

2016-12-20 20:13 756 查看
import java.util.Scanner;

public class systemLab3 {
final static int NUM=20;
final static int FRAME = 3;
public static int []pages = new int[NUM];
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.print("依次输入数组:");
for(int i=0;i<NUM;i++)
{
pages[i] = s.nextInt();
}
System.out.println("opt:");
opt(pages);
System.out.println("fifo:");
fifo(pages);
System.out.println("lru:");
lru(pages);
System.out.println("lfu:");
lfu(pages);
}
public static void opt(int []pages)
{
int []frames = new int[FRAME];
for(int i=0;i<FRAME;i++)   //0-frame装入并输出
{
frames[i] = pages[i];
System.out.print("当前页面:");
for(int j=0;j<=i;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}

for(int i=FRAME;i<pages.length;i++)  //后续数组内容opt置换
{
boolean isIncluded = false;   //判断页匡内是否含有下一个内容
int posToSwitch;  //置换位置的下标
for(int j=0;j<FRAME;j++)
{
if(frames[j] == pages[i])
isIncluded = true;
}
if(!isIncluded)
{
int []nextIndexOfFrames = new int[FRAME];
for(int j=0;j<FRAME;j++)

4000
nextIndexOfFrames[j] = getIndexOfNum(i,frames[j]);
posToSwitch = getMaxOfArray(nextIndexOfFrames);
frames[posToSwitch] = pages[i];
}

System.out.print("当前页面:");
for(int j=0;j<FRAME;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}
}
private static int getMaxOfArray(int[] frames) {
int i,index=0,max;
for(i=0,max = frames[0];i<FRAME;i++)
if(frames[i]>max)
{
index = i;
max = frames[i];
}
return index;
}
private static int getMinOfArray(int[] frames) {
int i,index=0,min;
for(i=0,min = frames[0];i<FRAME;i++)
if(frames[i]<min)
{
index = i;
min = frames[i];
}
return index;
}
private static int getIndexOfNum(int i,int toFind) {
int num=100;
for(;i<pages.length;i++)
if(pages[i] == toFind)
return i;    //找到
return num;  //未找到
}
public static void fifo(int []pages)
{
int []frames = new int[FRAME];
int []timeOfInsert = new int[FRAME];
for(int i=0;i<FRAME;i++)   //0-frame装入并输出
{
frames[i] = pages[i];
timeOfInsert[i] = i;   //记录插入时间
System.out.print("当前页面:");
for(int j=0;j<=i;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}

for(int i=FRAME;i<pages.length;i++)  //后续数组内容FIFO置换
{
boolean isIncluded = false;   //判断页匡内是否含有下一个内容
int posToSwitch;  //置换位置的下标
for(int j=0;j<FRAME;j++)
{
if(frames[j] == pages[i])
isIncluded = true;
}
if(!isIncluded)   //当前页面不包含所需内容
{
posToSwitch = getMinOfArray(timeOfInsert);
frames[posToSwitch] = pages[i];
timeOfInsert[posToSwitch] = i;  //记录修改时间
}

System.out.print("当前页面:");
for(int j=0;j<FRAME;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}
}
public static void lru(int []pages)
{
int []frames = new int[FRAME];
int []timeOfUse = new int[FRAME];
for(int i=0;i<FRAME;i++)   //0-frame装入并输出
{
frames[i] = pages[i];
timeOfUse[i] = i;   //记录最近一次使用的时间
System.out.print("当前页面:");
for(int j=0;j<=i;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}

for(int i=FRAME;i<pages.length;i++)  //后续数组内容LRU置换
{
boolean isIncluded = false;   //判断页匡内是否含有下一个内容
int posToSwitch;  //置换位置的下标
for(int j=0;j<FRAME;j++)
{
if(frames[j] == pages[i])
{
isIncluded = true;
timeOfUse[j] = i;
}
}
if(!isIncluded)   //当前页面不包含所需内容
{
posToSwitch = getMinOfArray(timeOfUse);
frames[posToSwitch] = pages[i];
timeOfUse[posToSwitch] = i;  //记录修改时间
}

System.out.print("当前页面:");
for(int j=0;j<FRAME;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}
}
public static void lfu(int []pages)
{
int numberOfNumbers=0;  //不同数字的个数
int []num = new int[10];
int k=0;
boolean included = false;
for(int i=0;i<pages.length;i++)
for(int j=0;j<i;j++)
{
if(pages[j]==pages[i])
included = true;
else if(pages[j]!=pages[i]&&!included)
{
numberOfNumbers++;
num[k++]=pages[j];
}
}
NumAndTimes[] numAndTimes = new NumAndTimes[numberOfNumbers];

int []frames = new int[FRAME];
for(int i=0;i<FRAME;i++)   //0-frame装入并输出
{
frames[i] = pages[i];
System.out.print("当前页面:");
for(int j=0;j<=i;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}

for(int i=FRAME;i<pages.length;i++)  //后续数组内容LFU置换
{
boolean isIncluded = false;   //判断页匡内是否含有下一个内容
int posToSwitch;  //置换位置的下标
for(int j=0;j<FRAME;j++)
{
if(frames[j] == pages[i])
{
isIncluded = true;
timesOfUse[j] = i;
}
}
if(!isIncluded)   //当前页面不包含所需内容
{

}

System.out.print("当前页面:");
for(int j=0;j<FRAME;j++)
{
System.out.print(frames[j]+" ");
}
System.out.print("\n");
}
}
public class NumAndTimes
{
public int num;
public int times=0;
}
}


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