📄 pagechange.java
字号:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class PageChange extends JPanel implements ActionListener {
JPanel pan1, pan2, pan3, pan4;
JButton button1, button2, button3, clearButton, randomButton;
JTextField text1, text2, text3, text4;
String m_random = "";// 页面序列
int m, n, length;
int myt[];
RandomNumber RN;
DisplayView FIFOTA, LRUTA, OptTA;
public PageChange() {
pan1 = new JPanel();
pan2 = new JPanel();
pan3 = new JPanel();
text1 = new JTextField(4);
text2 = new JTextField(5);
text3 = new JTextField();
text4 = new JTextField();
text4.setEditable(false);
pan1.setLayout(new GridLayout(4, 2));
pan1.add(new JLabel(" 物理块数 "));
pan1.add(text1);
pan1.add(new JLabel(" 置换页面数 "));
pan1.add(text2);
pan1.add(new JLabel(" 页表长度 "));
pan1.add(text3);
pan1.add(new JLabel(" 页面号引用串 "));
pan1.add(text4);
FIFOTA = new DisplayView();
LRUTA = new DisplayView();
OptTA = new DisplayView();
pan2.setLayout(new GridLayout(1, 3));
pan2.add(FIFOTA);
pan2.add(LRUTA);
pan2.add(OptTA);
button1 = new JButton("FIFO");
button2 = new JButton("LRU");
button3 = new JButton("Optimal");
randomButton = new JButton("Random");
clearButton = new JButton("Clear");
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
clearButton.addActionListener(this);
randomButton.addActionListener(this);
pan3.add(randomButton);
pan3.add(button1);
pan3.add(button2);
pan3.add(button3);
pan3.add(clearButton);
setLayout(new BorderLayout());
add(BorderLayout.NORTH, pan1);
add(BorderLayout.CENTER, pan2);
add(BorderLayout.SOUTH, pan3);
}
public void misInPut() {
try {
String str1, str2;
str1 = "";
str2 = "";
m = Integer.parseInt(text1.getText());
n = Integer.parseInt(text2.getText());
length = Integer.parseInt(text3.getText());
if (m == 0 || n == 0 || length == 0) {
JOptionPane.showMessageDialog(this, "请输入数字字符", "提示!",
JOptionPane.ERROR_MESSAGE);
}
if (m > n && length != 0) {
JOptionPane.showMessageDialog(this, "输入的物理块数大于页面数或页表长度为0",
"警告!", JOptionPane.WARNING_MESSAGE);
text1.setText("0");
text2.setText("0");
text3.setText("0");
text4.setText("");
} else {
myt = new int[n];
RN = new RandomNumber();
myt = RN.rand(n, length);
for (int i = 0; i < n; i++) {
str2 = String.valueOf(myt[i]);
str1 = str1 + " " + str2;
}
m_random = str1;
// 产生随即页面序列
text4.setText("" + m_random);
}
} catch (NumberFormatException ee) {
JOptionPane.showMessageDialog(this, "输入数字字符!", "警告!",
JOptionPane.WARNING_MESSAGE);
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("");
LRUTA.textarea.setText(null);
OptTA.text1.setText("0");
OptTA.text2.setText("0");
OptTA.text3.setText("0");
OptTA.text4.setText("");
OptTA.textarea.setText(null);
}
}
public void FIFO() {
int m_absent;// 缺页数
double m_absentf;// 缺页率
int m_change; // 置换次数
double m_changef;// 页面置换率
int mym[];// 存放物理块中现有的页面号
int m1 = 0, r;
int as = 0;// 置换页面数
boolean x; // 页面是否需要置换
String str1, str2;
String m_list = "FIFO置换算法";
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]) {
for (r = k; r < m - 1; r++)
mym[r] = mym[r + 1];
mym[r] = myt[i];
x = false;// 判断物理块中是不是有跟当前须替换的页面
break;
}
}
if (x) {
mym[0] = myt[i];
for (r = 0; r < m - 1; r++)
mym[r] = mym[r + 1];
mym[r] = myt[i];
as++;
}
int b;
for (int j = 0; j < m; j++) {
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;
}
FIFOTA.text1.setText("" + m_absent);
FIFOTA.text2.setText("" + m_absentf);
FIFOTA.text3.setText("" + m_change);
FIFOTA.text4.setText("" + m_changef);
FIFOTA.textarea.setText("" + m_list);
}
public void LRU() {
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 = "LUR置换算法";
mym = new int[m];
for (int i = 0; i < n; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -