操作系统页面置换-最近最少使用(LRU)算法模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统页面置换-最近最少使用(LRU)算法模拟
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class Window extends Frame implements Runnable, ActionListener{
TextField Text[][]=new TextField[4][9];
int record[][]=new int[4][9]; //定义与Text[][]一一映射的数组
int a=-8,b=-8,c=-8,//Age
A=-1,B=-1,C=-1;//内存
Boolean boolea=true;
TextField inPutText=new TextField(8);
Label label=new Label("请输入八个数字,谢谢合作。。。。。。"),
label2=new Label("页面失效率:"),
label3=new Label("I'm waiting…………");
Button button=new Button("Refresh");
Window(){ //构造函数窗口初始化
setTitle("操作系统页面置换-最近最少使用(LRU)算法模拟");
setLayout(new FlowLayout());
add(label);
label.setBackground(Color.cyan);
add(inPutText);
inPutText.addActionListener(this); //对输入信息设置监听
for(int i=0;i<4;i++){
for(int j=0;j<9;j++){
Text[i][j]=new TextField(1);
Text[i][j].setEditable(false);
add(Text[i][j]);
record[i][j]=-1;
}
}
add(label2);
add(label3);
add(button);
button.setBackground(Color.orange);
button.addActionListener(this);
setBackground(Color.gray);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(400,180,350,200);
this.setResizable(false);
setVisible(true);
validate();
}
/**
* @param args
*/
@Override
public void run() { //运算线程
// TODO Auto-generated method stub
int m=0;
for(int i=1;i<9;i++){
try {
Thread.sleep(1500); //时钟滴答设为1.5秒
label3.setText("I'm running…………");
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int need=record[0][i];
if(isNotHave(need,i)&&a<0){
A=need;a=0;Text[1][i].setBackground(Color.red);m++;}
else if(isNotHave(need,i)&&b<0){
B=need;b=0;Text[2][i].setBackground(Color.red);m++;}
else if(isNotHave(need,i)&&c<0){
C=need;c=0;Text[3][i].setBackground(Color.red);m++;}
else if(isNotHave(need,i)&&a>b){
if(isNotHave(need,i)&&a>c){
A=need;a=0;Text[1][i].setBackground(Color.red);m++;
}
else{
if(isNotHave(need,i))
C=need;c=0;Text[3][i].setBackground(Color.red);m++;
}
}
else{
if(isNotHave(need,i)&&b>c){
B=need;b=0;Text[2][i].setBackground(Color.red);m++;
}
else{
if(isNotHave(need,i)){
C=need;c=0;Text[3][i].setBackground(Color.red);m++;
}
}
}
a++;b++;c++;
record[1][i]=A;
record[2][i]=B;
record[3][i]=C;
for(int k=1;k<4;k++){
for(int f=1;f<9;f++){
if(record[k][f]>=0)
Text[k][f].setText(""+record[k][f]);
}
}
Text[0][0].setText("Age");
Text[1][0].setText(""+a);
Text[2][0].setText(""+b);
Text[3][0].setText(""+c);
}
label3.setText(""+(double)m/8*100+"%");
label3.setBackground(Color.red);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==inPutText&&boolea){
//对用户输入信息的提取
String number=e.getActionCommand();
int q=Integer.parseInt(number);
System.out.println(q);
int s=1;
for(int i=1;i<9;i++){
record[0][9-i]=(q/s)%10;
System.out.println(record[0][9-i]);
s=s*10;
}
//将提取信息显示在窗口
for(int f=1;f<9;f++){