📄 pagechange.java
字号:
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 + -