📄 opt.java
字号:
package 操作系统.各个置换算法;
import javax.swing.JOptionPane;
public class Opt {
public static final int PROGRAMLEN = 12;
public static final int PROGRAMNUM = 5;
public static final int PAGELEN = 3;
public static void main(String[] args) {
int[] program = new int[PROGRAMLEN]; // program为要装入的程序
for (int i = 0; i < PROGRAMLEN; i++) {
program[i] = (int) (Math.random() * PROGRAMNUM + 1);
}
// int[] program = { 5, 5, 5, 5, 1, 5, 2, 3, 1, 3, 3, 4 };//------5
// int[] program = { 2, 3, 2, 1, 5, 2, 4, 5, 3, 2, 5, 2 };//------6 opt
// int[] program = { 4, 3, 5, 5, 1, 5, 3, 4, 1, 1, 4, 2 };//------6
// int[] program = { 3, 1, 3, 2, 5, 2, 3, 4, 1, 4, 3, 5 };// ------7
for (int pro : program)
System.out.print(" " + pro);
System.out.println("");
int[] page = new int[PAGELEN];
for (int i = 0; i < PAGELEN; i++)
page[i] = 0;
int[] index = new int[PAGELEN];
for (int i = 0; i < PAGELEN; i++)
index[i] = 0;
int lostPage = 0;
for (int i = 0; i < PROGRAMLEN; i++) {
int j = 0;
for (j = 0; j < PAGELEN; j++)
if (program[i] == page[j])
break;
if (j < PAGELEN)
continue;
lostPage++;
for (j = 0; j < PAGELEN; j++)
if (page[j] == 0) {
page[j] = program[i];
break;
}
if (j < PAGELEN)
continue;
for (j = 0; j < PAGELEN; j++) {
int k;
for (k = i + 1; k < PROGRAMLEN; k++)
if (page[j] == program[k]) {
index[j] = k;// index存的是page中各数第一次出现的下标
break;
}
if (k == PROGRAMLEN)
index[j] = PROGRAMLEN;
}
int suffixOfMax = 0;
for (j = 1; j < PAGELEN; j++) {
if (index[j] > index[suffixOfMax])
suffixOfMax = j;
}
page[suffixOfMax] = program[i];
}
JOptionPane.showMessageDialog(null, "最佳置换算法(OPT)缺页 " + lostPage + " 次");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -