📄 qingqiufenye.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
import java.math.*;
public class QingqiuFenye extends Applet implements ActionListener,ItemListener
{
Label ll1,ll2,ll3;
TextField t1,t2,t3,text;
Label l1,l2,l3,l4,l5,l6,l7; //右边
TextField tf1,tf2,tf3,tf4,tf5,tf6,tf7; //右边
Button queding,shuru,xianshi;
Label xuanxiang;
CheckboxGroup group=new CheckboxGroup();
Checkbox b1,b2;
Label jincheng[][];
Label neicun[][];
Panel centerPanel,northPanel,eastPanel,westPanel,southPanel,p1,p2;
int state[][];
int qq[];//标志进程出队顺序
public void init()
{
int q;
qq=new int[10];
for(q=0;q<10;q++)
{
qq[q]=0;
}
int x,y;
state=new int[8][8];
for(x=0;x<8;x++)
for(y=0;y<8;y++)
{
state[x][y]=ran();
}
int i;int j;int m;int k;
setLayout(new BorderLayout());
centerPanel=new Panel(new GridLayout(1,2));
northPanel=new Panel(new GridLayout(1,7));
eastPanel=new Panel(new GridLayout(14,1));
southPanel=new Panel();
westPanel=new Panel(new GridLayout(4,1));
p1=new Panel(new GridLayout(10,3));
p2=new Panel(new GridLayout(10,2));
//版面排部设计
ll1=new Label("进程长度");
ll1.setBackground(Color.red);
ll2=new Label("内存空间");
ll2.setBackground(Color.yellow);
ll3=new Label("块长(Kb)");
ll3.setBackground(Color.blue);
l1=new Label("逻辑地址");
l2=new Label("物理地址");
l3=new Label("页号");
l4=new Label("页内地址");
l5=new Label("访问次数");
l6=new Label("缺页次数");
l7=new Label("缺页率");
tf1=new TextField(5);
tf2=new TextField(5);
tf3=new TextField(5);
tf4=new TextField(5);
tf5=new TextField(5);
tf6=new TextField(5);
tf7=new TextField(5);
l1.setBackground(Color.red);
l2.setBackground(Color.orange);
l3.setBackground(Color.pink);
l4.setBackground(Color.blue);
l5.setBackground(Color.yellow);
l6.setBackground(Color.cyan);
l7.setBackground(Color.green);
//东侧组件
queding=new Button("确定");
shuru=new Button("输入");
xianshi=new Button("显示内存状态");
t1=new TextField(5);
t2=new TextField(5);
t3=new TextField(5);
//北侧组件
text=new TextField(17);
xuanxiang=new Label("处理方式选项");
xuanxiang.setBackground(Color.DARK_GRAY);
b1=new Checkbox("FIFO",group,false);
b2=new Checkbox("LRU",group,false);
//其他
jincheng=new Label[10][3];
for(i=0;i<10;i++)
for(j=0;j<3;j++)
{
jincheng[i][j]=new Label(" ");
add(jincheng[i][j]);
}
for(i=0;i<10;i++)
{
jincheng[i][0].setBackground(Color.cyan);
jincheng[i][0].setText(String.valueOf(i));
}
for(i=0;i<10;i++)
{
jincheng[i][1].setBackground(Color.red);
jincheng[i][1].setText("空");
}
for(i=0;i<10;i++)
{
jincheng[i][2].setBackground(Color.blue);
jincheng[i][2].setText("0");
}
neicun=new Label[10][2];
for(m=0;m<10;m++)
for(k=0;k<2;k++)
{
neicun[m][k]=new Label(" ");
add(neicun[m][k]);
}
for(m=0;m<10;m++)
{
neicun[m][0].setText(String.valueOf(m));
neicun[m][0].setBackground(Color.yellow);
}
for(m=0;m<10;m++)
{
neicun[m][1].setText("空");
neicun[m][1].setBackground(Color.magenta);
}
//中间组件
add(b1);
add(b2);
add(t1);
add(t2);
add(t3);
add(text);
add(l1);add(tf1);
add(l2);add(tf2);
add(l3);add(tf3);
add(l4);add(tf4);
add(l5);add(tf5);
add(l6);add(tf6);
add(l7);add(tf7);
add(queding);
add(shuru);
add(xuanxiang);
add(xianshi);
centerPanel.add(p1);
centerPanel.add(p2);
for(i=0;i<10;i++)
for(j=0;j<3;j++)
{
p1.add(jincheng[i][j]);
}
for(m=0;m<10;m++)
for(k=0;k<2;k++)
{
p2.add(neicun[m][k]);
}
northPanel.add(ll1);
northPanel.add(t1);
northPanel.add(ll2);
northPanel.add(t2);
northPanel.add(ll3);
northPanel.add(t3);
northPanel.add(queding);
eastPanel.add(l1);eastPanel.add(tf1);
eastPanel.add(l2);eastPanel.add(tf2);
eastPanel.add(l3);eastPanel.add(tf3);
eastPanel.add(l4);eastPanel.add(tf4);
eastPanel.add(l5);eastPanel.add(tf5);
eastPanel.add(l6);eastPanel.add(tf6);
eastPanel.add(l7);eastPanel.add(tf7);
southPanel.add(text);
southPanel.add(shuru);
westPanel.add(xuanxiang);
westPanel.add(b1);
westPanel.add(b2);
westPanel.add(xianshi);
add(northPanel,BorderLayout.NORTH);
add(centerPanel,BorderLayout.CENTER);
add(eastPanel,BorderLayout.EAST);
add(southPanel,BorderLayout.SOUTH);
add(westPanel,BorderLayout.WEST);
queding.addActionListener(this);
shuru.addActionListener(this);
xianshi.addActionListener(this);
b1.addItemListener(this);
b2.addItemListener(this);
}
int end=0;//标志是否找到一个个空闲空间
int nch;//内存中实际的块号
int bz;//判断是FIFO还是LRU
int s1=10,s2=10;
int kuai;//块大小
int ii,jj,kk,mm,xx,yy,tt;//ii,jj是进程标志 kk,mm是内存标志 xx,yy是状态标志,tt是进程状态标志
int count;//块实际大小
int yh;//页号
int wldz;//物理地址
int ljdz;//逻辑地址
double fwcs=0;//访问次数
double qycs=0;//缺页次数
double qyl;//缺页率
int yndz;//页内地址
int kj;//分配内存剩余的空间
int nckj;//指向内存标签
int zt;//指定是否命中
int v;
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==queding)
{
s1=Integer.parseInt(t1.getText());
s2=Integer.parseInt(t2.getText());
kuai=Integer.parseInt(t3.getText());
kj=s2;
nckj=kj-1;
for(ii=s1;ii<10;ii++)
for(jj=0;jj<3;jj++)
{
jincheng[ii][jj].setText(" ");
jincheng[ii][jj].setBackground(Color.white);
}
for(kk=s2;kk<10;kk++)
for(mm=0;mm<2;mm++)
{
neicun[kk][mm].setText(" ");
neicun[kk][mm].setBackground(Color.white);
}
System.out.println("块的大小是"+kuai+"kb");
System.out.println("虚拟存储开始");
}
else if(e.getSource()==shuru)
{
if(bz==0)
{
tf1.setText(text.getText());
ljdz=Integer.parseInt(text.getText());
count=kuai*1024;
yh=ljdz/count;
if(qq[yh]!=0)
{
zt=1;
}
else
{
zt=0;
tf3.setText(String.valueOf(yh));
qycs=qycs+1;
tf6.setText(String.valueOf(qycs));
}
fwcs=fwcs+1;
tf5.setText(String.valueOf(fwcs));
yndz=ljdz-yh*count;
tf4.setText(String.valueOf(yndz));
if(kj!=0)
{
if(zt==0)
{
System.out.println("内存区情况");
for(xx=0;xx<8;xx++)
{
for(yy=0;yy<8;yy++)
{
System.out.print(state[xx][yy]);
}
System.out.println(" ");
}
for(xx=0;xx<8&&end!=1;xx++)
for(yy=0;yy<8;yy++)
{
if(state[xx][yy]==1)
{
nch=0;
}
else if(state[xx][yy]==0)
{
nch=xx*8+yy+1;
state[xx][yy]=1;
System.out.println("内存区第"+nch+"个位置空闲");
end=1;
break;
}
}
System.out.println("进程运行状态:");
for(tt=0;tt<s1;tt++)
{
if(qq[tt]!=0)
{
qq[tt]=qq[tt]+1;
}
else if(qq[tt]==0)
{
}
}
qq[yh]=1;
for(tt=0;tt<s1;tt++)
{
System.out.print(qq[tt]);
}
end=0;
jincheng[yh][1].setText(String.valueOf(nch));
jincheng[yh][2].setText("1");
neicun[nckj][1].setText(String.valueOf(yh));
nckj=nckj-1;
}
else if(zt==1)
{
qycs=qycs;
tf6.setText(String.valueOf(qycs));
}
wldz=nch*count+yndz;
tf2.setText(String.valueOf(wldz));
qyl=100*(qycs/fwcs);
tf7.setText(String.valueOf(qyl)+"%");
kj=kj-1;
}
else if(kj==0)
{
if(zt==0)
{
for(tt=0;tt<s1;tt++)
{
if(qq[tt]==0)
{
}
else if(qq[tt]!=0)
{
qq[tt]=qq[tt]+1;
}
}
qq[tt]=0;
tt=0;
while(qq[tt]!=4)
{
tt=tt+1;
}
jincheng[yh][1].setText(jincheng[tt][1].getText());
jincheng[yh][2].setText("1");
jincheng[tt][1].setText("空");
jincheng[tt][2].setText("0");
qq[tt]=0;
for(kk=s2-1;kk!=0;kk--)
{
neicun[kk][1].setText(neicun[kk-1][1].getText());
}
neicun[0][1].setText(String.valueOf(yh));
}
else if(zt==1)
{
qycs=qycs;
tf6.setText(String.valueOf(qycs));
}
wldz=nch*count+yndz;
tf2.setText(String.valueOf(wldz));
qyl=100*(qycs/fwcs);
tf7.setText(String.valueOf(qyl)+"%");
}
}
else if(bz==1)
{
tf1.setText(text.getText());
ljdz=Integer.parseInt(text.getText());
count=kuai*1024;
yh=ljdz/count;
if(qq[yh]!=0)
{
zt=1;
}
else
{
zt=0;
tf3.setText(String.valueOf(yh));
qycs=qycs+1;
tf6.setText(String.valueOf(qycs));
}
fwcs=fwcs+1;
tf5.setText(String.valueOf(fwcs));
yndz=ljdz-yh*count;
tf4.setText(String.valueOf(yndz));
if(kj!=0)
{
if(zt==0)
{
System.out.println("内存区情况");
for(xx=0;xx<8;xx++)
{
for(yy=0;yy<8;yy++)
{
System.out.print(state[xx][yy]);
}
System.out.println(" ");
}
for(xx=0;xx<8&&end!=1;xx++)
for(yy=0;yy<8;yy++)
{
if(state[xx][yy]==1)
{
nch=0;
}
else if(state[xx][yy]==0)
{
nch=xx*8+yy+1;
state[xx][yy]=1;
System.out.println("内存区第"+nch+"个位置空闲");
end=1;
break;
}
}
System.out.println("进程运行状态:");
for(tt=0;tt<s1;tt++)
{
if(qq[tt]!=0)
{
qq[tt]=qq[tt]+1;
}
else if(qq[tt]==0)
{
}
}
qq[yh]=1;
for(tt=0;tt<s1;tt++)
{
System.out.print(qq[tt]);
}
end=0;
jincheng[yh][1].setText(String.valueOf(nch));
jincheng[yh][2].setText("1");
neicun[nckj][1].setText(String.valueOf(yh));
nckj=nckj-1;
}
else if(zt==1)
{
qycs=qycs;
tf6.setText(String.valueOf(qycs));
}
wldz=nch*count+yndz;
tf2.setText(String.valueOf(wldz));
qyl=100*(qycs/fwcs);
tf7.setText(String.valueOf(qyl)+"%");
kj=kj-1;
}
else if(kj==0)
{
if(zt==0)
{
for(tt=0;tt<s1;tt++)
{
if(qq[tt]==0)
{
}
else if(qq[tt]!=0)
{
qq[tt]=qq[tt]+1;
}
}
qq[tt]=0;
tt=0;
while(qq[tt]!=4)
{
tt=tt+1;
}
jincheng[yh][1].setText(jincheng[tt][1].getText());
jincheng[yh][2].setText("1");
jincheng[tt][1].setText("空");
jincheng[tt][2].setText("0");
qq[tt]=0;
for(kk=s2-1;kk!=0;kk--)
{
neicun[kk][1].setText(neicun[kk-1][1].getText());
}
neicun[0][1].setText(String.valueOf(yh));
}
else if(zt==1)
{
qycs=qycs;
tf6.setText(String.valueOf(qycs));
tt=0;
while(Integer.parseInt(neicun[tt][1].getText())!=yh)
{
tt++;
}
for(;tt!=0;tt--)
{
neicun[tt][1].setText(neicun[tt-1][1].getText());
}
neicun[0][1].setText(String.valueOf(yh));
}
wldz=nch*count+yndz;
tf2.setText(String.valueOf(wldz));
qyl=100*(qycs/fwcs);
tf7.setText(String.valueOf(qyl)+"%");
}
}
}
else if(e.getSource()==xianshi)
{
System.out.println(" ");
System.out.println("现在内存区占用情况以及最后出内存次序:");
for(v=0;v<s1;v++)
{
System.out.print(v);
}
System.out.println(" ");
for(v=0;v<s1;v++)
{
System.out.print(qq[v]);
}
}
}
public void itemStateChanged(ItemEvent ee)
{
if(ee.getItemSelectable()==b1)
{
bz=0;
}
else if(ee.getItemSelectable()==b2)
{
bz=1;
}
}
/**产生随机数的函数*/
public int ran()
{
int a;
double b;
b=Math.random();
a=(int)(b/0.5);
return a;
}
}
/**作者 辛华 20054451 */
/**操作系统 作业Ⅱ */
/**模拟 虚拟内存请求式分页 */
/**2007年 4月 16日 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -