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

📄 pagechange.java

📁 操作系统-页面置换算法(包括OPT、LRU、FIFO三种算法)
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class pageChange extends JPanel implements ActionListener
 {
 	JPanel pan1, pan2, pan3, pan4;
 	JButton button1, button2, button3, clearButton, randomButton;
 	JTextField text1, text2, text3, text4;
 	String m_random = "";// 页面序列
 	int m, n, length;
 	int myt[];
 	randomNumber RN;
 	displayView FIFOTA, LRUTA, OptTA;
 	public pageChange() 
 	{
 		pan1 = new JPanel();
 		pan2 = new JPanel();
 		pan3 = new JPanel();
 		text1 = new JTextField(4);
 		text2 = new JTextField(5);
 		text3 = new JTextField();
 		text4 = new JTextField();
 		text4.setEditable(false);
 		pan1.setLayout(new GridLayout(4, 2));
 		pan1.add(new JLabel("    wulikuaishu  "));
 		pan1.add(text1);
 		pan1.add(new JLabel("   zhihuanyemianshu  "));
 		pan1.add(text2);
 		pan1.add(new JLabel("    yebiaochangdu   "));
 		pan1.add(text3);
 		pan1.add(new JLabel("  yemianhaoyinyongchuan "));
 		pan1.add(text4);
 		FIFOTA = new displayView();
 		LRUTA = new displayView();
 		OptTA = new displayView();
 		pan2.setLayout(new GridLayout(1, 3));
 		pan2.add(FIFOTA);
 		pan2.add(LRUTA);
 		pan2.add(OptTA);
 		button1 = new JButton("FIFO");
 		button2 = new JButton("LRU");
 		button3 = new JButton("Optimal");
 		randomButton = new JButton("Random");
 		clearButton = new JButton("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(new BorderLayout());
 		add(BorderLayout.NORTH, pan1);
 		add(BorderLayout.CENTER, pan2);
 		add(BorderLayout.SOUTH, pan3);
 		}
 		public void misInPut() {
 			try 
 			{
 				String str1,str2;
 				str1 = "";
 				str2 = "";
 				m = Integer.parseInt(text1.getText());
 			    n = Integer.parseInt(text2.getText());
                length = Integer.parseInt(text3.getText());
                if (m == 0 || n == 0 || length == 0) 
                {
                	JOptionPane.showMessageDialog(this, "qingshuruzifu", "tishi!", JOptionPane.ERROR_MESSAGE);
                }
                if (m > n && length != 0)
                {
                	JOptionPane.showMessageDialog(this, "shurudewulikuaishudayuyemianshuhuoyemianchangduweio","jinggao!", JOptionPane.WARNING_MESSAGE);
                	 text1.setText("0");
                	 text2.setText("0");
                	 text3.setText("0");
                	 text4.setText("");
                } 
                else 
                {
                	myt = new int[n];
                	RN = new randomNumber();
                	myt = RN.rand(n, length);
                	for (int i = 0; i < n; i++) 
                	{
                		str2 = String.valueOf(myt[i]);
                		str1 = str1 + " " + str2;
                	}
                	m_random = str1;
 // 产生随即页面序列
                    text4.setText("" + m_random);
                }
             } 
             catch (NumberFormatException ee) 
             	{
             		JOptionPane.showMessageDialog(this, "shurushuzizifu!", "jinggao!",
             		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);
             	}

     }
     public void FIFO()
     	{
     		int m_absent;
     		double m_absentf;
     		int m_change; 
     		double m_changef;
     		int mym[];
     		int m1 = 0, r;
     		int as = 0;
     		boolean x; 
     		String str1, str2;
     		String m_list = "FIFOzhihuansuanfa";
     		mym = new int[m];
     		for (int i = 0; i < n; i++)
     			{
     				str1 = "";
     				str2 = "";
     				x = true;
     				for (int k = 0; k < m; k++)
     					{
     						if (myt[i] == mym[k])
     							{
     								for (r = k; r < m - 1; r++)
     									mym[r] = mym[r + 1];
     									mym[r] = myt[i];
     									x = false;
     									break;
                                }

                       }
                       if (x)
                       {
                       		mym[0] = myt[i];
                       		for (r = 0; r < m - 1; r++)
                       			mym[r] = mym[r + 1];
                       		mym[r] = myt[i];
                       		as++;
                       	}
                       	int b;
                       	for (int j = 0; j < m; j++)
                       		{
                       			b = mym[j];
                       			str2 = String.valueOf(b);
                       			str1 = str1 + " " + str2;
                       		}
                       			m_list = m_list + '\n' + str1;
                }
                m_absent = as-m;
                m_absentf = (double) (as-m) / n;
                if ((as - m) <= 0) 
                	{
                		m_change = 0;
                		m_changef = 0;
                	}
                else
                	{
                		m_change = n-(as - m);
                		m_changef = (double) (n-(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);
        }
        public void LRU()
        	{
        		int m_absent;
        		double m_absentf;
        		int m_change; 
        		double m_changef;
        		int mym[];
        		int myb[];
        		int as = 0;
        		myb = new int[n];
        		int m1 = 0, a;
        		boolean x; 
        		String str2, str1;
        		String m_list = "LRUzhihuansuanfa";
        	    mym = new int[m];
        	    for (int i = 0; i < n; i++)
        	    	{
        	    		str1 = "";
        	    		str2 = "";
        	    		x = true;
        	    		for (int k = 0; k < m; k++)
        	    			{
        	    				if (myt[i] == mym[k])
        	    				{
        	    					myb[k] = myb[0];
        	    					for (int j = 0; j < m; j++)
        	    						{
        	    							if (j != k)
        	    								myb[j] = myb[j] + 1;
        	    						}
        	    						x = false;
        	    						m1++;
        	    						break;
        	    				}
        	    			}
        	    			if (x)
        	    				{
        	    					int c = 0, d;
        	    					if ((i-m1) <m)
        	    						{
        	    							a = i-m1;
        	    						} 
        	    					else
        	    						{
        	    							d = myb[0];
        	    							for (int h = 0; h < m; h++)
        	    								{
        	    									if (d < myb[h])
        	    										{
        	    											d = myb[h];
        	    											c = h;
        	    										}
        	    								}
        	    								a = c; 
        	    						}
        	    						mym[a] = myt[i];
        	    						myb[a] = 0;
        	    						for (int k = 0; k < m; k++)
        	    							{
        	    								if (k != a)
        	    									 myb[k] = myb[k] + 1;
        	    							}
        	    							myb[a] = 0;
        	    							as++;
        	    				}
        	    				for (int j = 0; j < m; j++)
        	    					{
        	    						int b;
        	    						b = mym[j];
        	    						str2 = String.valueOf(b);
        	    						str1 = str1 + " " + str2;
        	    					}
        	    					m_list = m_list + "\n" + str1;
        	    	}
        	    	m_absent = as-m;
        	    	m_absentf = (double) (as-m) / n;
        	    	if ((as - m) <= 0)
        	    		{
        	    			m_change = 0;
        	    			m_changef = 0;
        	    		}
        	    	else
        	    		{
        	    			 m_change = n-(as-m) ;
        	    			 m_changef = (double) (n-(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);
        	}
        	public void Opt()
        		{
        			int m_absent;
        			double m_absentf;
        			int m_change; 
        			double m_changef;
        			int mym[];
        			int myb[];
        			int as = 0;
        			 myb = new int[n];
        			 int m1 = 0, a;
        			 boolean x; 
        			 String str2, str1;
        			 String m_list = "Optimalzhihuansuanfa";
        			  mym = new int[m];
        			  for (int i = 0; i < n; i++)
        			  	{
        			  		str1 = "";
        			  		str2 = "";
        			  		x = true;
        			  		for (int k = 0; k < m; k++)
        			  			{
        			  				if (myt[i] == mym[k])
        			  				{
        			  					x = false;
        			  					m1++;
        			  					break;
        			  				}
        			  			}
        			  			if (x)
        			  				{
        			  					int c = 0, d;
        			  					if ((i-m1) <m)
        			  					{
        			  						a = i-m1;
        			  					} 
        			  					else
        			  					{
        			  						for (int k = 0; k < m; k++)
        			  						{
        			  							for (int h = i; h < length; h++)
        			  							{
        			  								if (mym[k] == myt[h])
        			  								{
        			  									myb[k] = h;
        			  									break;
        			  								}
        			  								if (h == length - 1)
        			  									myb[k] = length;	
        			  							}
        			  						
        			  							
        			  						}
        			  						d = myb[0];
        			  						for (int h = 0; h < m; h++)
        			  						{
        			  							if (d < myb[h])
        			  							{
        			  								d = myb[h];
        			  								c = h;
        			  							}
        			  						}
        			  						a = c;
        			  					}
        			  					mym[a] = myt[i];
        			  					myb[a] = 0;
        			  					for (int k = 0; k < m; k++)
        			  						{
        			  							if (k != a)
        			  								myb[k] = myb[k] + 1;
        			  						}
        			  						myb[a] = 0;
        			  						as++;
        			  				}
        			  				for (int j = 0; j < m; j++)
        			  				{
        			  					int b;
        			  					b = mym[j];
        			  					str2 = String.valueOf(b);
        			  					str1 = str1 + " " + str2;
        			  				}
        			  				m_list = m_list + "\n" + str1;
        			  	}
        			  	m_absent = as-m;
        			  	m_absentf = (double) (as-m) / n;
        			  	if ((as - m) <= 0)
        			  	{
        			  		m_change = 0;
        			  		m_changef = 0;
        			  	}
        			  	else
        			  	{
        			  		m_change = n-(as - m);
        			  		m_changef = (double) (n-(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);
        		}
        		public void actionPerformed(ActionEvent e)
        		{
        			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=new int[0];
        				}
        	    }
        	    public static void main(String[] args)
        	    {
        	    	JFrame myframe = new JFrame();
        	    	pageChange pc = new pageChange();
        	    	JTabbedPane tab = new JTabbedPane();
        	    	tab.add("Page-Replacement Algorthms", pc);
        	    	myframe.setLayout(new BorderLayout());
        	    	myframe.add(BorderLayout.CENTER, tab);
        	    	myframe.setTitle("Computer Operating Systems Page-Replacement Algorthms");
        	    	myframe.setSize(950, 650);
        	    	myframe.show(true);
                }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -