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

📄 pagechange.java

📁 用JAVA写的页面置换演示程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                            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_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);

         }

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

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

         }

         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];

                   }

         }

}

⌨️ 快捷键说明

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