📄 pagechange.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
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;
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();
pan2.setLayout(new GridLayout(1, 3));
pan2.add(FIFOTA);
pan2.add(LRUTA);
button1 = new JButton("FIFO");
button2 = new JButton("LRU");
randomButton = new JButton("Random");
clearButton = new JButton("Clear");
button1.addActionListener(this);
button2.addActionListener(this);
clearButton.addActionListener(this);
randomButton.addActionListener(this);
pan3.add(randomButton);
pan3.add(button1);
pan3.add(button2);
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);
}
}
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++) {
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 actionPerformed(ActionEvent e) {
if (e.getSource() == randomButton) {
misInPut();
}
if (e.getSource() == button1) {
FIFO();
}
if (e.getSource() == button2) {
LRU();
}
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);
myt=new int[0];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -