?? nur.java
字號:
package 操作系統;
import javax.swing.JOptionPane;
public class Nur {
public static void main(String[] args) {
final int PROGRAM_LEN = 12;
final int PROGRAM_NUM = 8;
final int PAGE_LEN = 3;
// 最近未使用置換算法(NUR)
int[] program = new int[PROGRAM_LEN]; // program為要裝入的程序
for (int i = 0; i < PROGRAM_LEN; i++) {
program[i] = (int) (Math.random() * PROGRAM_NUM);
}
// int[] program = { 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 };//用做測試
int[] page = new int[PAGE_LEN]; // page為內存空間
for (int j = 0; j < PAGE_LEN; j++) {
page[j] = -1;
}
int[] index = new int[PAGE_LEN]; // index知道對應的內存page各個程序下次執行的先后
for (int i = 0; i < PAGE_LEN; i++) {
index[i] = -1;
}
int lostPage = 0; // 統計缺頁次數
for (int i = 0; i < PROGRAM_LEN; i++) {
int j;
for (j = 0; j < PAGE_LEN; j++) { // 內存page中已經存在,不缺頁,繼續
if (program[i] == page[j])
break;
}
if (j < PAGE_LEN)
continue;
lostPage++; // 不存在,則計數器加 1
for (j = 0; j < PAGE_LEN; j++)
// 有空閑空間的時候
if (page[j] == -1) {
page[j] = program[i];
break;
}
if (j < PAGE_LEN) {
continue;
}
int i_index = -1;// 僅用作index下標
for (j = 0; j < PAGE_LEN; j++)
// 需要置換出的頁
for (int k = i + 1; k < PROGRAM_LEN; k++) {
if (page[j] == program[k]) {
index[++i_index] = k;
break;
}
}
int suffixOfMax = 1;// 用于求最久未用的頁,存儲時間最長的數(index)的下標
for (int k = 1; k < PAGE_LEN; k++) {
if (index[k] > index[suffixOfMax])
suffixOfMax = k;
}
page[suffixOfMax] = program[i];
}
JOptionPane
.showMessageDialog(null, "最近未使用置換算法(NUR) " + lostPage + " 次");
}
}
/*
* class GetPageLongestNotUse { public GetPageLongestNotUse(int[] aProgram,int[]
* aPage) { Program=aProgram; Page=aPage; }
*
* for(int i=0;i<aProgram.length;i++){ if(Program[0]==Page[i]){
*
* } } private int[] Program; private int[] Page; }
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -