Linux操作系统课程设计Word文件下载.docx
《Linux操作系统课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《Linux操作系统课程设计Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
⑤mym[]:
物理块数组。
程序首选根据用户输入的物理块数m,初始化一个m大小的数组。
程序运行时,若物理块数还没用完就直接往数组存数,若物理块已用完就根据特定算法把特定页面置换出来,再把新进来的页面存进数组;
⑥myb[]:
计数器数组。
运用于LRU算法中,数组大小和mym[]相等,对应mym[]下标存放每个物理块最近未使用的次数。
当要置换一个新的页面进入mym[]中,根据myb[]的数值,将mym[]最近最久未使用的页面置换出来,再把新页面的位置存放到被置换页面的位置;
⑦myb[]:
记录器数组。
运用于OPT算法中,数组大小和mym[]相等,记录mym[]中数据在myt[]后续页面出现的下标值,若没有在后续页面出现,就把该下标值设为myt[]数组长度。
当要置换一个新的页面进入mym[]中,根据myb[]的数值,将mym[]中在最长(未来)时间内不再被访问的页面置换出来,再把新页面的位置存放到被置换页面的位置。
⑧m_absent:
缺页数(int)
⑨m_absentf:
缺页率(double)m_absent/n
⑩m_changef:
页面置换率(as-m)/n;
⑪m_change:
置换次数,页面从数组中置换出来的次数
(int)m_change=as-m
as置换页面数,as和m_absent数值相等,as-m等于m_change;
⑫x:
是否需要置换(boolean)true为需要置换false为不需要置换;
⑬m1:
计算物理块剩余的中间变量(int)
⑭m_list:
要显示到窗口上的内容。
迭代myt[]数组,将mym[]中排序信息保存到m_list,后面的显示。
七、程序清单
(1)界面类main.java
packagepage2;
importjava.awt.BorderLayout;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjavax.swing.*;
publicclassmain{
publicstaticvoidmain(String[]args){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//设置界面风格
}catch(Exceptione){
e.printStackTrace();
}
JFramemyframe=newJFrame();
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置关闭方式
pageChangepc=newpageChange();
//实例化算法对象pageChange
JTabbedPanetab=newJTabbedPane();
//存放pageChange对象的面板
JMenuBarmb=newJMenuBar();
//菜单条
JMenumi=newJMenu("
关于我们"
);
mi.addMouseListener(newMouseAdapter(){//当点击了菜单条中关于我们的按钮以后触发的事件
publicvoidmousePressed(MouseEvente){
JOptionPane.showMessageDialog(null,"
CopyRightBy"
"
information"
JOptionPane.DEFAULT_OPTION);
}
});
mb.add(mi);
//菜单条添加菜单
tab.add("
页面置换算法"
pc);
//存放pageChange对象的面板的名字
myframe.setLayout(newBorderLayout());
//采用边框布局
myframe.add(BorderLayout.NORTH,mb);
//窗体北部添加菜单条
myframe.add(BorderLayout.CENTER,tab);
//窗体中间添加存放pageChange对象的面板
myframe.setTitle("
页面置换算法的比较"
//窗体的标题
myframe.setSize(950,700);
//设定大小
myframe.setVisible(true);
//设置窗体可见
}
}
(2)显示算法结果的面板display.java
importjava.awt.*;
publicclassdisplayViewextendsJPanel{JTextFieldtext1,text2,text3,text4;
//放缺页数、缺页率、置换次数、置换率的文本域
JPanelpan;
//缺页数、缺页率、置换次数、置换率放在p1--p4四个小面板中,再放在pan大面板中
JTextAreatextarea;
//显示三个算法结果的文本域
publicdisplayView(){
text1=newJTextField(30);
//缺页数、缺页率、置换次数、置换率的文本域的长度都为30,且不可编辑
text2=newJTextField(30);
text3=newJTextField(30);
text4=newJTextField(30);
text1.setEditable(false);
text2.setEditable(false);
text3.setEditable(false);
text4.setEditable(false);
pan=newJPanel();
pan.setLayout(newGridLayout(4,1));
FlowLayoutf=newFlowLayout();
//流布局f的对齐方式为居中
f.setAlignment(FlowLayout.CENTER);
//放缺页数、缺页率、置换次数、置换率的面板p1--p4都采用了流布局f
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp3=newJPanel();
JPanelp4=newJPanel();
p1.setLayout(f);
p2.setLayout(f);
p3.setLayout(f);
p4.setLayout(f);
p1.add(newJLabel("
缺页数"
));
//各个小面板存放的组件都是label和text
p1.add(text1);
p2.add(newJLabel("
缺页率"
p2.add(text2);
p3.add(newJLabel("
置换次数"
p3.add(text3);
p4.add(newJLabel("
置换率"
p4.add(text4);
pan.add(p1);
pan.add(p2);
pan.add(p3);
pan.add(p4);
//将四个小面板添加到大面板中
textarea=newJTextArea();
textarea.setEditable(false);
JScrollPanejp=newJScrollPane(textarea);
//将显示三个算法结果的文本域放在滚动面板中
this.setLayout(newBorderLayout());
this.add(BorderLayout.CENTER,jp);
//滚动面板放在布局中间
this.add(BorderLayout.SOUTH,pan);
//显示缺页数、缺页率、置换次数、置换率的大面板放在底部
(3)执行算法的面板pageChange.java
(关于具体的算法代码在这里没有粘贴进来,主要是界面相关的代码而已)
/**
*p1--p4分别是物理块数、置换页面数、页表长度、页面号引用串小面板
*pan1是放p1--p4的大面板
*pan2是显示算法结果的面板
*pan4是功能按钮面板,比如清除、生成随机页面号引用串
*/
JPanelpan1,pan2,pan3,pan4,p1,p2,p3,p4;
JButtonbutton1,button2,button3,clearButton,randomButton;
//FIFO、LRU、Optimal算法按钮;
清除、生成随机页面号引用串按钮
JTextFieldtext1,text2,text3,text4;
//物理块数、置换页面数、页表长度、页面号引用串文本域
Stringm_random="
"
;
//页面序列
intm,n,length;
intmyt[];
randomNumberRN;
//随机数对象
displayViewFIFOTA,LRUTA,OptTA;
//算法对象
publicvoidmisInPut(){
try{
Stringstr1,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){
输入的物理块数大于页面数或页表长度为0"
"
警告!
JOptionPane.WARNING_MESSAGE);
text1.setText("
0"
text2.setText("
text3.setText("
text4.setText("
}else{
myt=newint[n];
RN=newrandomNumber();
myt=RN.rand(n,length);
//(置换页面数,页表长度)
for(inti=0;
i<
n;
i++){
str2=String.valueOf(myt[i]);
str1=str1+"
"
+str2;
}
m_random=str1;
//产生随即页面序列
+m_random);
}catch(NumberFormatExceptionee){
JOptionPane.showMessageDialog(this,"
输入数字字符!
JOptionPane.WARNING_MESSAGE);
text1.setText("
text2.setText("
text3.setText("
text4.setText("
FIFOTA.text1.setText("
FIFOTA.text2.setText("
FIFOTA.text3.setText("
FIFOTA.text4.setText("
FIFOTA.textarea.setText(null);
LRUTA.text1.setText("
LRUTA.text2.setText("
LRUTA.text3.setText("
LRUTA.text4.setText("
LRUTA.textarea.setText(null);
OptTA.text1.setText("
OptTA.text2.setText("
OptTA.text3.setText("
OptTA.text4.setText("
OptTA.textarea.setText(null);
八、使用说明书
(1)运行以后,在下面的三个可编辑文本框中填写数字,其中,物理块数要小于置换页面数。
(2)然后点击窗体下方的按钮列的第一个Random,产生随机的页面号引用数组。
(3)接着点击按钮列的第二个按钮FIFO,运行先进先出算法;
点击按钮列的第三个按钮LRU,运行最近最久未使用算法;
点击按钮列的第四个按钮Optimal,运行最佳置换算法;
点击按钮列的第五个按钮Clear,将算法的运行结果清空。
算法的运行结果会显示在中间的文本域中: