页面置换模拟程序源代码Read.docx
《页面置换模拟程序源代码Read.docx》由会员分享,可在线阅读,更多相关《页面置换模拟程序源代码Read.docx(18页珍藏版)》请在冰豆网上搜索。
![页面置换模拟程序源代码Read.docx](https://file1.bdocx.com/fileroot1/2023-7/10/82b368de-a5aa-4364-91ba-8e1773af4e2c/82b368de-a5aa-4364-91ba-8e1773af4e2c1.gif)
页面置换模拟程序源代码Read
页面置换模拟程序源代码
//mian.java
importjava.awt.BorderLayout;
importjava.awt.event.*;
importjavax.swing.*;
publicclassmian{
publicstaticvoidmain(String[]args){
JFramemyframe=newJFrame();
pageChangepc=newpageChange();
JTabbedPanetab=newJTabbedPane();
JMenuBarmb=newJMenuBar();
JMenumi=newJMenu("Help");
mi.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
JOptionPane.showMessageDialog(newJOptionPane(),"版权:
\n兰州交大数理学院,连乾云","提示!
",JOptionPane.OK_OPTION);
}
});
mb.add(mi);
tab.add("页面置换算法",pc);
myframe.setLayout(newBorderLayout());
myframe.add(BorderLayout.NORTH,mb);
myframe.add(BorderLayout.CENTER,tab);
myframe.setTitle("ComputerOperatingSystemsPage-ReplacementAlgorthms");
myframe.setSize(950,650);
myframe.show(true);
}
}
//pageChange.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclasspageChangeextendsJPanelimplementsActionListener{
JPanelpan1,pan2,pan3,pan4;
JButtonbutton1,button2,button3,clearButton,randomButton;
JTextFieldtext1,text2,text3,text4;
Stringm_random="";//页面序列
intm,n,length;
intmyt[];
randomNumberRN;
displayViewFIFOTA,LRUTA,OptTA;
publicpageChange(){
pan1=newJPanel();
pan2=newJPanel();
pan3=newJPanel();
text1=newJTextField(4);
text2=newJTextField(5);
text3=newJTextField();
text4=newJTextField();
text4.setEditable(false);
pan1.setLayout(newGridLayout(4,2));
pan1.add(newJLabel("物理块数"));
pan1.add(text1);
pan1.add(newJLabel("置换页面数"));
pan1.add(text2);
pan1.add(newJLabel("页表长度"));
pan1.add(text3);
pan1.add(newJLabel("页面号引用串"));
pan1.add(text4);
FIFOTA=newdisplayView();
LRUTA=newdisplayView();
OptTA=newdisplayView();
pan2.setLayout(newGridLayout(1,3));
pan2.add(FIFOTA);
pan2.add(LRUTA);
pan2.add(OptTA);
button1=newJButton("FIFO");
button2=newJButton("LRU");
button3=newJButton("Optimal");
randomButton=newJButton("Random");
clearButton=newJButton("Clear");
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
clearButton.addActionListener(this);
randomButton.addActionListener(this);
pan3.add(randomButton);
pan3.add(button1);
pan3.add(button2);
pan3.add(button3);
pan3.add(clearButton);
setLayout(newBorderLayout());
add(BorderLayout.NORTH,pan1);
add(BorderLayout.CENTER,pan2);
add(BorderLayout.SOUTH,pan3);
}
publicvoidmisInPut(){
try{
Stringstr1,str2;
str1="";
str2="";
m=nteger.parseInt(text1.getText());
n=Integer.parseInt(text2.getText());
length=Integer.parseInt(text3.getText());
if(m==0||n==0||length==0){
JOptionPane.showMessageDialog(this,"请输入数字字符","提示!
",
JOptionPane.ERROR_MESSAGE);
}
if(m>n&&length!
=0){
JOptionPane.showMessageDialog(this,"输入的物理块数大于页面数或页表长度为0",
"警告!
",JOptionPane.WARNING_MESSAGE);
text1.setText("0");
text2.setText("0");
text3.setText("0");
text4.setText("");
}else{
myt=newint[n];
RN=newrandomNumber();
myt=RN.rand(n,length);
for(inti=0;istr2=String.valueOf(myt[i]);
str1=str1+""+str2;
}
m_random=str1;
//产生随即页面序列
text4.setText(""+m_random);
}
}catch(NumberFormatExceptionee){
JOptionPane.showMessageDialog(this,"输入数字字符!
","警告!
",
JOptionPane.WARNING_MESSAGE);
text1.setText("0");
text2.setText("0");
text3.setText("0");
text4.setText("");
FIFOTA.text1.setText("0");
FIFOTA.text2.setText("0");
FIFOTA.text3.setText("0");
FIFOTA.text4.setText("0");
FIFOTA.textarea.setText(null);
LRUTA.text1.setText("0");
LRUTA.text2.setText("0");
LRUTA.text3.setText("0");
LRUTA.text4.setText("");
LRUTA.textarea.setText(null);
OptTA.text1.setText("0");
OptTA.text2.setText("0");
OptTA.text3.setText("0");
OptTA.text4.setText("");
OptTA.textarea.setText(null);
}
}
publicvoidFIFO(){
intm_absent;//缺页数
doublem_absentf;//缺页率
intm_change;//置换次数
doublem_changef;//页面置换率
intmym[];//存放物理块中现有的页面号
intm1=0,r;
intas=0;//置换页面数
booleanx;//页面是否需要置换
Stringstr1,str2;
Stringm_list="FIFO置换算法";
mym=newint[m];
for(inti=0;istr1="";
str2="";
x=true;
for(intk=0;kif(myt[i]==mym[k]){
for(r=k;rmym[r]=mym[r+1];
mym[r]=myt[i];
x=false;//判断物理块中是不是有跟当前须替换的页面
break;
}
}
if(x){
mym[0]=myt[i];
for(r=0;rmym[r]=mym[r+1];
mym[r]=myt[i];
as++;
}
intb;
for(intj=0;jb=mym[j];
str2=String.valueOf(b);
str1=str1+""+str2;
}
m_list=m_list+'\n'+str1;
}
m_absent=as;
m_absentf=(double)as/n;
if((as-m)<=0){
m_change=0;
m_changef=0;
}else{
m_change=as-m;
m_changef=(double)(as-m)/n;
}
FIFOTA.text1.setText(""+m_absent);
FIFOTA.text2.setText(""+m_absentf);
FIFOTA.text3.setText(""+m_change);
FIFOTA.text4.setText(""+m_changef);
FIFOTA.textarea.setText(""+m_list);
}
publicvoidLRU(){
intm_absent;//缺页数
doublem_absentf;//缺页率
intm_change;//置换次数
doublem_changef;//页面置换率
intmym[];//存放物理块中现有的页面号
intmyb[];
intas=0;//置换页面数
myb=newint[n];
intm1=0,a;
booleanx;//页面是否需要置换
Stringstr2,str1;
Stringm_list="LUR置换算法";
mym=newint[m];
for(inti=0;istr1="";
str2="";
x=true;
for(intk=0;kif(myt[i]==mym[k])//判断物理块中的页面是否与当前页面相等
{
myb[k]=myb[0];
for(intj=0;jif(j!
=k)
myb[j]=myb[j]+1;//使物理块中的每个未使用页面的时间增一
}
x=false;//判断物理块中是不是有跟当前须替换的页面
m1++;
break;
}
}
if(x){
intc=0,d;
if((i-m1)a=i-m1;
}//当前物理页面未填满时直接装入
else{
d=myb[0];
for(inth=0;hif(dd=myb[h];
c=h;
}
}
a=c;//找出物理块中最久未使用的页面号
}
mym[a]=myt[i];//将其替换
myb[a]=0;
for(intk=0;kif(k!
=a)
myb[k]=myb[k]+1;//使物理块中的每个未改变页面的时间增一
}
myb[a]=0;
as++;
}
for(intj=0;jintb;
b=mym[j];
str2=String.valueOf(b);
str1=str1+""+str2;
}
m_list=m_list+"\n"+str1;
}
m_absent=as;
m_absentf=(double)as/n;
if((as-m)<=0){
m_change=0;
m_changef=0;
}else{
m_change=as-m;
m_changef=(double)(as-m)/n;
}
LRUTA.text1.setText(""+m_absent);
LRUTA.text2.setText(""+m_absentf);
LRUTA.text3.setText(""+m_change);
LRUTA.text4.setText(""+m_changef);
LRUTA.textarea.setText(""+m_list);
}
publicvoidOpt(){
intm_absent;//缺页数
doublem_absentf;//缺页率
intm_change;//置换次数
doublem_changef;//页面置换率
intmym[];//存放物理块中现有的页面号
intmyb[];
intas=0;//置换页面数
myb=newint[n];
intm1=0,a;
booleanx;//页面是否需要置换
Stringstr2,str1;
Stringm_list="Optimal置换算法";
mym=newint[m];
for(inti=0;istr1="";
str2="";
x=true;
for(intk=0;kif(myt[i]==mym[k])//判断物理块中的页面是否与当前页面相等
{
x=false;//判断物理块中是不是有跟当前须替换的页面
m1++;
break;
}
}
if(x){
intc=0,d;
if((i-m1)a=i-m1;
}//当前物理页面未填满时直接装入
else{
for(intk=0;kfor(inth=i;hif(mym[k]==myt[h])//判断物理块中的页面是否与未来页面相等
{
myb[k]=h;
break;
}
if(h==length-1)
myb[k]=length;
}
}
d=myb[0];
for(inth=0;hif(dd=myb[h];
c=h;
}
}
a=c;//找出物理块中最久未使用的页面号
}
mym[a]=myt[i];//将其替换
myb[a]=0;
for(intk=0;kif(k!
=a)
myb[k]=myb[k]+1;//使物理块中的每个未改变页面的时间增一
}
myb[a]=0;
as++;
}
for(intj=0;jintb;
b=mym[j];
str2=String.valueOf(b);
str1=str1+""+str2;
}
m_list=m_list+"\n"+str1;
}
m_absent=as;
m_absentf=(double)as/n;
if((as-m)<=0){
m_change=0;
m_changef=0;
}else{
m_change=as-m;
m_changef=(double)(as-m)/n;
}
OptTA.text1.setText(""+m_absent);
OptTA.text2.setText(""+m_absentf);
OptTA.text3.setText(""+m_change);
OptTA.text4.setText(""+m_changef);
OptTA.textarea.setText(""+m_list);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==randomButton){
misInPut();
}
if(e.getSource()==button1){
FIFO();
}
if(e.getSource()==button2){
LRU();
}
if(e.getSource()==button3){
Opt();
}
if(e.getSource()==clearButton){
text1.setText("0");
text2.setText("0");
text3.setText("0");
text4.setText("");
FIFOTA.text1.setText("0");
FIFOTA.text2.setText("0");
FIFOTA.text3.setText("0");
FIFOTA.text4.setText("0");
FIFOTA.textarea.setText(null);
LRUTA.text1.setText("0");
LRUTA.text2.setText("0");
LRUTA.text3.setText("0");
LRUTA.text4.setText("0");
LRUTA.textarea.setText(null);
OptTA.text1.setText("0");
OptTA.text2.setText("0");
OptTA.text3.setText("0");
OptTA.text4.setText("0");
OptTA.textarea.setText(null);
myt=newint[0]