操作系统页面置换课程设计报告剖析.docx
- 文档编号:30393232
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:19
- 大小:58.35KB
操作系统页面置换课程设计报告剖析.docx
《操作系统页面置换课程设计报告剖析.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换课程设计报告剖析.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统页面置换课程设计报告剖析
成绩
南京工程学院
课程设计说明书(论文)
题目页面置换算法的模拟
课程名称操作系统课程设计
院(系、部、中心)计算机工程学院
班级
学生姓名
学号
设计地点
指导教师
设计起止时间:
2016年12月19日至2016年12月25日
一、课题简介
1.课题内容
作业要访问的页面不在主存时,由缺页中断处理程序将所需的页面调入主存,若此时主存中没有空闲物理块,则系统将按照一定的页面置换算法选择一些页面移出,以便装入所缺的页面。
页面置换算法也称为页面淘汰算法或页面调度算法,其性能将直接影响系统的执行效率。
FIFO是最早出现的置换算法,该算法总是淘汰最先进入主存的页面。
特点是实现简单,但因为与进程实际的运行规律不适应,所以算法效率不高。
LRU算法每次都选择最近最久未使用的页面淘汰,即总是淘汰最后一次访问时间距当前时间间隔最长的页面。
该算法的思想依据是根据程序执行时所具有的局部性来考虑的,也就是说,刚被访问过的页面再次被访问的机率较大,而那些较长时间未被使用的页面被访问的机率要小。
LRU置换算法是一种通用的有效算法,因而被广泛采用。
掌握虚拟存储管理中页面置换算法的原理,设计恰当的数据结构和算法,模拟实现上述页面置换算法
2.课题目的
通过设计实现仿真程序,进一步理解请求分页虚拟存储管理技术。
同时,提高同学的编程能力、综合应用知识的能力和分析解决问题的能力。
二、系统设计方案
1.功能设计
实现了图形用户界面设计和调用了三种不同的置换算法FIFO、OPT、LRU,通过选择随机页面序列或者输入页面序列按钮来产生页面,以及手动输入物理块数,将用以上三种算法进行分析和把页面置换过程输出到图形界面来显示。
功能模块图如下图所示
2.数据结构
在本次课程设计中,总体使用了一个类Keshe,Keshe类中包含了三个主要的函数FIFO、LRU、OPT,其中LRU中使用了链表结构。
Keshe类中定义了如下变量:
privateintblockCount=20;//物理块最大个数
privatestaticintpageCount=12;//页面个数
privatestaticintpage[]=newint[pageCount];//页面序列
3.系统流程
3、程序主要代码分析
publicclasskesheextendsJFrameimplementsActionListener
{
privateintblockCount=20;//物理块最大个数
privatestaticintpageCount=12;//页面个数
privatestaticintpage[]=newint[pageCount];//页面序列
staticStringmemString="";
//图形用户界面设计,设置按钮,文本组件等
privateJButtondemoFIFO;//按钮
privateJButtondemoLRU;
privateJButtondemoOPT;
privateJButtonsuiji,shuru;
privateJTextAreaoptArea;//显示置换过程的文本
privateJTextAreafifoArea;
privateJTextArealruArea;
privateJButtonqueding;
privateJLabelprocessLabel;
privateJLabelmakeMLabel;
privateJTextFieldmemeryField;
privateJTextFieldt1;
privateJPanelproducePanel;
privateJPanelinputmemery;
privateJPanellruPanel;
privateJPanelfifoPanel;
privateJPaneloptPanel;
privateJPaneloutPanel;
privateJScrollPanelruScrollPane;
privateJScrollPanefifoScrollPane;
privateJScrollPaneoptScrollPane;
publickeshe()
{
super("页面置换算法");
demoFIFO=newJButton("FIFO");
demoLRU=newJButton("LRU");
demoOPT=newJButton("OPT");
suiji=newJButton("随机页面序列");
shuru=newJButton("输入页面序列");
processLabel=newJLabel("页面序列");
queding=newJButton("确定");
makeMLabel=newJLabel("输入物理块数:
");
producePanel=newJPanel(newGridLayout(1,2));
outPanel=newJPanel();
outPanel.setLayout(null);
inputmemery=newJPanel();
inputmemery.setLayout(null);
lruPanel=newJPanel();
lruPanel.setLayout(null);
fifoPanel=newJPanel();
fifoPanel.setLayout(null);
optPanel=newJPanel();
optPanel.setLayout(null);
memeryField=newJTextField();
t1=newJTextField();
optArea=newJTextArea();
fifoArea=newJTextArea();
lruArea=newJTextArea();
optScrollPane=newJScrollPane(optArea);
fifoScrollPane=newJScrollPane(fifoArea);
lruScrollPane=newJScrollPane(lruArea);
this.setLayout(null);
//文本组件,面板等布局
producePanel.setBounds(5,5,706,45);
outPanel.setBounds(5,50,706,45);
inputmemery.setBounds(5,95,706,50);
optPanel.setBounds(5,145,210,450);
fifoPanel.setBounds(215,145,210,450);
lruPanel.setBounds(500,145,210,450);
this.add(producePanel);
this.add(inputmemery);
this.add(outPanel);
this.add(fifoPanel);
this.add(lruPanel);
this.add(optPanel);
makeMLabel.setBounds(5,15,170,45);
memeryField.setBounds(150,15,150,40);
queding.setBounds(360,15,100,45);
inputmemery.add(queding);
inputmemery.add(memeryField);
inputmemery.add(makeMLabel);
demoFIFO.setBounds(60,385,90,45);
demoLRU.setBounds(60,385,90,45);
demoOPT.setBounds(60,385,90,45);
processLabel.setBounds(5,5,100,60);
t1.setBounds(150,10,600,30);
t1.setEditable(true);
optScrollPane.setBounds(15,30,180,320);
optPanel.add(optScrollPane);
optPanel.add(demoOPT);
fifoScrollPane.setBounds(15,30,180,320);
fifoPanel.add(fifoScrollPane);
fifoPanel.add(demoFIFO);
lruScrollPane.setBounds(15,30,180,320);
lruPanel.add(lruScrollPane);
lruPanel.add(demoLRU);
producePanel.add(suiji);
producePanel.add(shuru);
outPanel.add(processLabel);
outPanel.add(t1);
//添加按钮动作事件监听器
suiji.addActionListener(this);
shuru.addActionListener(this);
demoOPT.addActionListener(this);
demoFIFO.addActionListener(this);
demoLRU.addActionListener(this);
queding.addActionListener(this);
this.setBounds(0,0,750,700);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//按钮动作事件处理方法
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==suiji)//点击随机产生数列
{
suijishu();
fifoArea.setText("");
lruArea.setText("");
optArea.setText("");
}
if(e.getSource()==shuru)//点击输入页面序列
{
Stringstr=t1.getText();//获得输入的页面序列字符串
Strings[]=str.split("");
ArrayList
for(inti=0;i list.add(Integer.parseInt(s[i]));//添加至链表list page=newint[list.size()]; Stringstring=""; for(inti=0;i { string=string+list.get(i)+""; page[i]=list.get(i);//获得页面序列数组 } for(inti=0;i pageCount=page.length;//页面大小 t1.setText(string); } if(e.getSource()==demoOPT)OPT(); if(e.getSource()==demoFIFO)FIFO(); if(e.getSource()==demoLRU)LRU(); if(e.getSource()==queding) { Strings1=memeryField.getText();//读取内存大小 if(s1.trim().equals("")) { JOptionPane.showMessageDialog(this,"物理块数不能为空"); return; } blockCount=Integer.parseInt(memeryField.getText()); memeryField.setText(s1); } } //产生随机页面序列 publicvoidsuijishu() { inti=0; Stringstring=""; for(i=0;i { page[i]=(int)(Math.random()*10+1);//产生随机数并赋给页面数组 string=(newStringBuilder(String.valueOf(string))).append(page[i]).append("").toString(); } t1.setText(string);//随机数序列输出到文本行 } //先进先出FIFO函数 publicvoidFIFO() { intnopage=0;//缺页次数 intj=0; intblock[]=newint[blockCount]; for(inti=0;i block[i]=0; for(inti=0;i { booleanexsist=false; for(j=0;j { if(block[j]==page[i])//判断内存是否存在该页面 { exsist=true; break; } } if(! exsist)//不存在 { if(block.length block[block.length]=page[i];//将新页面填入内存中 else { for(j=0;j { block[j]=block[j+1]; } block[blockCount-1]=page[i]; } nopage++;//缺页次数增1 } Strings1=""; for(j=0;j { Strings2=String.valueOf(block[j]); s1=s1+""+s2; } fifoArea.append("["+(newStringBuilder(String.valueOf(s1))+"]").toString()); fifoArea.append("\n"); } doublepercent=(double)nopage/(double)pageCount; fifoArea.append((newStringBuilder("缺页中断次数为: ")).append(nopage).append("\n").toString()); fifoArea.append((newStringBuilder("缺页中断率为: ")).append(percent).append("\n").toString());//输出页面置换过程,缺页次数,缺页中断率 memString=""; } //最近最久未使用LRU函数 publicvoidLRU() { intnopage=0; LinkedList for(intj=0;j b.add(0); for(inti=0;i { if(! b.contains(page[i]))//页面不存在 { b.add(page[i]);//添加该页面到链表中 b.poll();//获取并移除此链表的头 nopage++;//缺页次数增1 } else { b.remove((Object)page[i]);//移除最近访问次数最少的页面 b.add(page[i]);//添加新的页面 } //输出到文本行 lruArea.append((newStringBuilder(String.valueOf(b))).append("\n").toString()); } doublepercent=(double)nopage/(double)pageCount; lruArea.append((newStringBuilder("中断次数为: ")).append(nopage).append("\n").toString()); lruArea.append((newStringBuilder("缺页中断率为: ")).append(percent).append("\n").toString());//输出页面置换过程,缺页次数,缺页中断率 memString=""; } //最佳置换OPT函数 publicvoidOPT() { intcount=0; Strings=""; intnopage=0;// int[]block=newint[blockCount]; for(inti=0;i block[i]=0; for(inti=0;i { booleanexists=false; for(intj=0;j if(block[j]==page[i]) { exists=true; break; } if(! exists) nopage++;//不存在缺页次数增1 if(count { if(! exists) { block[count]=page[i];//直接装入 count++; } } else//内存已满 {if(! exists) { intindex=search(i+1,block);//淘汰的页面在内存中的块号 block[index]=page[i]; } } //输出到文本行 optArea.append("["); for(intm=0;m { s=block[m]+""; optArea.append((newStringBuilder(String.valueOf(s))).toString()); } optArea.append("]"); optArea.append("\n"); } doublepercent=(double)nopage/(double)pageCount; optArea.append((newStringBuilder("中断次数为: ")).append(nopage).append("\n").toString()); optArea.append((newStringBuilder("缺页中断率为: ")).append(percent).append("\n").toString());//输出页面置换过程,缺页次数,缺页中断率 } //查询以后不再访问或距现在最长时间后再访问的页面号 publicintsearch(intstart,int[]block) { intmax=-1; intindex=-1;//初始化需要淘汰的块号 for(inti=0;i { intj=start; for(;j if(block[i]==page[j]) break; if(max { max=j; index=i; } } returnindex;//返回要淘汰的内存中的块号 } } 4、程序运行结果及分析 输入页面序列6,7,6,5,9,6,8,9,7,6,9,6以及输入物理块数3 使用OPT、FIFO、LRU置换算法,输出页面置换过程,中断次数以及缺页中断率显示结果如下 点击按钮随机页面序列,输入物理块数3 使用OPT、FIFO、LRU置换算法,输出页面置换过程,中断次数以及缺页中断率显示结果如下 五、改进意见与收获体会 通过这次课程设计,我对操作系统有了更深的认识,更好地掌握了操作系统的原理和重要算法的理解,深入了解到请求分页虚拟存储管理中的页面置换算法: 最佳置换算法OPT、先进先出置换算法FIFO、最近最久未用置换算法LRU。 不仅如此,这次课程设计也提高了我程序语言设计的能力,更让我认识到了理论和实践相结合的重要性。 通过这次的模拟实现与比较,我了解到这三种算法都有各自的优缺点,OPT算法是实际中不能实现的,但是我们可以把它作为衡量其
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 页面 置换 课程设计 报告 剖析