操作系统课程设计实验报告.doc_第1页
操作系统课程设计实验报告.doc_第2页
操作系统课程设计实验报告.doc_第3页
操作系统课程设计实验报告.doc_第4页
操作系统课程设计实验报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西 安 工 业 大 学信息与计算科学10级操作系统实验课程设计报告题 目: 页面置换算法 班 级: 101001 学 号: 101001113 姓 名: 龙 云 祥 时 间: 2013-01-10 一题目:页面置换算法二主要任务:设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。主界面以灵活选择某算法,且以下算法都要实现:1、先进先出算法(FIFO)2、最近最久未使用算法(LRU)3、最佳置换算法(OPT)三主要思想: (1)先进先出算法(FIFO):最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换予以淘汰,即只需把一个进程已调入内存的页面,按先后顺序连接成一个队列,并设置指针,使它总是指向最老的页面。这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。当然,导致这种异常现象的页面走向实际上是很少见的。(2) 最近最久未使用算法(LRU):FIFO算法和OPT算法之间的主要差别是,FIFO算法利用页面进入内存后的时间长短作为置换依据,而OPT算法的依据是将来使用页面的时间。如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。LRU算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU算法选择过去一段时间里最久未被使用的页面。LRU算法是经常采用的页面置换算法,并被认为是相当好的,但是存在如何实现它的问题。LRU算法需要实际硬件的支持。其问题是怎么确定最后使用时间的顺序,对此有两种可行的办法: (1)寄存器。为了记录进程在内存中各项使用情况,在每个内存中的页面配置一个移位寄存器。当进程访问物理块,要将相应的寄存器的位置改成1,此时信号每隔一段时间将寄存器右移一位,那么具有最小数值的寄存器所对应页面,就是最近最久未使用的页面。(2)栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在栈顶上。这样一来,栈顶总是放有目前使用最多的页,而栈底放着目前最少使用的页。每次修改都要有开销,但需要置换哪个页面却可直接得到,用不着查找,因为尾指针指向栈底,其中有被置换页。 因实现LRU算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现的都是一种简单有效的LRU近似算法。(3) 最优置换算法(OPT):最优置换是在理论上提出的一种算法。其实质是:当调入新的一页而必须预先置换某个老页时,所选择的老页应是将来不再被使用,或者是在最远的将来才被访问。采用这种页面置换算法,保证有最少的缺页率。但是最优页面置换算法的实现是困难的,因为它需要人们预先就知道一个进程整个运行过程中页面走向的全部情况。不过,这个算法可用来衡量其他算法的优劣。四. 目的: 通过模拟实现请求页式存储管理的几种基本页面置换法,了解虚拟存储技术。并掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。五方案: 按FIFO、LRU、OPT的策略进行页面置换,输出页面置换情况和缺页次数以及缺页率。先进先出算法,每次换出的页面时在页框中停留时间最长的,故缺页次数对页框长度取余的余数便可体现置换页面的页号。最近最久未使用算法,每次置换的都是最近最久没有使用的,故将每次使用的页号的下表记录在数组中,置换数组中最大的页号。最佳置换算法,每次置换的都是即将不会被用到的,如果页框中有多个页号将不会被用到,则根据先进先出置换算法进行换页。六框图:(1)主界面流程图:开始输入数字:Switch:2:LRU1:FIFO3:OPT退出(2) FIFO流程图:开始For循环Y页号是否在页框NCount%3Switch:1:s02:s10:s2退出(3) LRU流程图:开始For循环Y页号是否在页框N退出置换页面寻找最近最久未使用的页号(4) OPT流程图:开始For循环Y页号是否在页框N退出置换页面寻找即将不使用的页号数组找那个最大的页号七详细程序:package com.lyx;import java.util.Scanner;public class Test void FIFO(int p,int s,int n)/*先进先出算法*/int a;int count=1;s0=p0;System.out.println(p0);for(int i=1;in;i+)for(;)if(s0!=pi&s1!=pi&s2!=pi)a=+count%3;switch(a)case 0: s2=pi; continue;case 1: s0=pi; continue;case 2: s1=pi; continue; else break;for(int j=0;j3;j+)if(sj=-1)System.out.print( );elseSystem.out.print(sj+ );System.out.println();System.out.println(缺页次数:+count);System.out.println(缺页率:+count+/+n);void LRU(int p,int s,int n)/*最近最久未使用算法(LRU)*/int count=1;s0=p0;System.out.println(p0);for(int i=1;in;i+)for(int j=0;j3;j+)if(s0=pi)if(s1=pi)s1=s0;s0=pi;if(s2=pi)s2=s1;s1=s0;s0=pi;if(s0!=pi&s1!=pi&s2!=pi)count+;s2=s1;s1=s0;s0=pi;for(int j=0;j3;j+)if(sj=-1)System.out.print( );elseSystem.out.print(sj+ );System.out.println();System.out.println(缺页次数:+count);System.out.println(缺页率:+count+/+n);void OPT(int p,int s,int n)/*OPT算法*/int opt=new int3; int count= 0; int k=0; int i=0; int j=0; for (j = 0; j =3) break; boolean flag = false;for (i = 0; i 3 ;i+)if (pj=si)flag = true;break;if (flag=false)sk = pj;k+;count+;for(int r=0;r3;r+)if(sr=-1)System.out.print( );elseSystem.out.print(sr+ );System.out.println(); /*前3个数放入*/ for (i=j;in;i+) k=0; for (j = 0; j 3 ;j+) optj = 100; for(j=0;j3;j+) if(sj!=pi) k+; /*判断新页面号是否在物理块中*/ if(k=3) /如果都不在物理块中 boolean flag = false; for (int t = 0; t 3; t+) for (j = i+1; j n; j+) if (st = pj) optt = j; flag=false; break; else flag = true; if(flag=true) st=pi; count+; break; if(flag=false) int leap = 0; for (int t = 0; t optleap) leap = t; sleap = pi; count+; for(j=0;j3;j+) System.out.print(sj+ ); System.out.println(); System.out.println(缺页次数:+count); System.out.println(缺页率:+count+/+n); public static void main(String args) Test t=new Test();int n=0;Scanner input=new Scanner(System.in);int M;System.out.println(输入页面总数:);int m=input.nextInt();M=m;int p=new intM;System.out.println(输入页面号(非负整数):);for(int i=0;ip.length;i+)pi=input.nextInt();doint s=-1,-1,-1;System.out.println(-页面置换算法-);System.out.println(1.先进先出算法(FIFO);System.out.println(2.最近最久未使用算法(LRU));System.out.println(3.最佳置换算法(OPT));System.out.println(4.退出);System.out.println(请选择:);int a=input.nextInt();switch(a)case 1: t.FIFO(p,s,m); break;case 2: t.LRU(p,s,m); break;case 3: t.OPT(p,s,m);break;case 4: break;if(a=4)break;while(n!=4);八. 程序测试:测试数据:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1FIFO算法:777222444000777000333222111001110003332221测试结果:LRU算法:777224440111000000333001133222227测试结果:OPT算法:777222227000040001133311测试结果:九实验总结: 通过本次实验,增强了自己的动手能力和思

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论