📄 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 + -