您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 操作系统页面置换课程设计报告
1南京工程学院课程设计说明书(论文)题目页面置换算法的模拟课程名称操作系统课程设计院(系、部、中心)计算机工程学院班级学生姓名学号设计地点指导教师设计起止时间:2016年12月19日至2016年12月25日成绩2一、课题简介1.课题内容作业要访问的页面不在主存时,由缺页中断处理程序将所需的页面调入主存,若此时主存中没有空闲物理块,则系统将按照一定的页面置换算法选择一些页面移出,以便装入所缺的页面。页面置换算法也称为页面淘汰算法或页面调度算法,其性能将直接影响系统的执行效率。FIFO是最早出现的置换算法,该算法总是淘汰最先进入主存的页面。特点是实现简单,但因为与进程实际的运行规律不适应,所以算法效率不高。LRU算法每次都选择最近最久未使用的页面淘汰,即总是淘汰最后一次访问时间距当前时间间隔最长的页面。该算法的思想依据是根据程序执行时所具有的局部性来考虑的,也就是说,刚被访问过的页面再次被访问的机率较大,而那些较长时间未被使用的页面被访问的机率要小。LRU置换算法是一种通用的有效算法,因而被广泛采用。掌握虚拟存储管理中页面置换算法的原理,设计恰当的数据结构和算法,模拟实现上述页面置换算法2.课题目的通过设计实现仿真程序,进一步理解请求分页虚拟存储管理技术。同时,提高同学的编程能力、综合应用知识的能力和分析解决问题的能力。二、系统设计方案1.功能设计实现了图形用户界面设计和调用了三种不同的置换算法FIFO、OPT、LRU,通过选择随机页面序列或者输入页面序列按钮来产生页面,以及手动输入物理块数,将用以上三种算法进行分析和把页面置换过程输出到图形界面来显示。功能模块图如下图所示2.数据结构在本次课程设计中,总体使用了一个类Keshe,Keshe类中包含了三个主要的函数FIFO、LRU、OPT,其中LRU中使用了链表结构。Keshe类中定义了如下变量:privateintblockCount=20;//物理块最大个数privatestaticintpageCount=12;//页面个数privatestaticintpage[]=newint[pageCount];//页面序列33.系统流程三、程序主要代码分析publicclasskesheextendsJFrameimplementsActionListener{privateintblockCount=20;//物理块最大个数privatestaticintpageCount=12;//页面个数privatestaticintpage[]=newint[pageCount];//页面序列staticStringmemString=;//图形用户界面设计,设置按钮,文本组件等privateJButtondemoFIFO;//按钮privateJButtondemoLRU;privateJButtondemoOPT;privateJButtonsuiji,shuru;privateJTextAreaoptArea;//显示置换过程的文本privateJTextAreafifoArea;privateJTextArealruArea;privateJButtonqueding;privateJLabelprocessLabel;privateJLabelmakeMLabel;4privateJTextFieldmemeryField;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);5this.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);6queding.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();ArrayListIntegerlist=newArrayListInteger();for(inti=0;is.length;i++)list.add(Integer.parseInt(s[i]));//添加至链表listpage=newint[list.size()];Stringstring=;for(inti=0;ipage.length;i++){string=string+list.get(i)+;page[i]=list.get(i);//获得页面序列数组}for(inti=0;ipage.length;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);}}7//产生随机页面序列publicvoidsuijishu(){inti=0;Stringstring=;for(i=0;ipageCount;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;//缺页次数in
本文标题:操作系统页面置换课程设计报告
链接地址:https://www.777doc.com/doc-2043827 .html