⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qingqiufenye.java

📁 请求分页用户界面,有计算缺页率,物理地址, 随机分配内存功能
💻 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 + -