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

📄 pagechange.java

📁 用JAVA写的页面置换演示程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

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("    物理块数  "));

                   pan1.add(text1);

                   pan1.add(new JLabel("   置换页面数  "));

                   pan1.add(text2);

                   pan1.add(new JLabel("    页表长度   "));

                   pan1.add(text3);

                   pan1.add(new JLabel("  页面号引用串 "));

                   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, "请输入数字字符", "提示!",

                                                        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 = 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, "输入数字字符!", "警告!",

                                               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 = "FIFO置换算法";

                   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_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);

         }

         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 = "LUR置换算法";

                   mym = new int[m];

                   for (int i = 0; i < n; i++) {

⌨️ 快捷键说明

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