请求调页存储管理方式的模拟实验报告_第1页
请求调页存储管理方式的模拟实验报告_第2页
请求调页存储管理方式的模拟实验报告_第3页
请求调页存储管理方式的模拟实验报告_第4页
请求调页存储管理方式的模拟实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、 网络操作系统课 程 设 计 报 告 书题 目: 请求调页存储管理方式的模拟 学 号: 学生姓名: 指导教师: 2010 年 12 月 9 日目录一. 实验内容1二. 实验目的1三. 设计思想2四. 程序流程图3五. 程序清单4六. 运行结果及分析10七. 总结14一、 实验内容1假设每个页面中可存放10条指令,分配给作业的内存块数为4。2用c语言或c+语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,

2、并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。3置换算法:请分别考虑最佳置换算法(opt)、先进先出(fifo)算法和最近最久未使用(lru)算法。4作业中指令的访问次序按下述原则生成;50%的指令是顺序执行的;25%的指令是均匀分布在前地址部分;25%的指令均匀分布在后地址部分。具体的实现办法是:(1)在0,319之间随机选取一条起始执行指令,其序号为m;(2)顺序执行下一条指令,其序号为m+1条指令;(3)通过随机数,跳转到前地址部分0,m-1中的某条指令处,其序号

3、为m1;(4)顺序执行下一条指令,即序号为m1+1的指令;(5)通过随机数,跳转到后地址部分m1+2,319中的某条指令处,其序号为m2;(6)顺序执行下一条指令,则序号为m2+1的指令;(7)重复跳转到前地址部分,顺序执行,跳转到后地址部分;顺序执行的过程,直至执行320条指令。二、 实验目的1通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。2通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。3掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。三、 设计思想在进程运行过程中,若其所要访问

4、的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。在这一过程中,选择换出页面的算法称为页面置换算法。一个好的页面置换算法,应具有较低的页面更换频率。页面置换算法的好坏,将直接影响到系统的性能。以下分别是实验要求的两个页面置换算法的介绍及设计思想。(1)先进先出法(first in first out):该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。在该算法的模拟过程中,每当页面被置换进入内存时,将置换页面所在的物理块中访问标记设为-

5、1;并且每执行一次指令,便将物理块的访问标记自动加1,需要置换时将访问标记最大的物理块中的页面置换出去,这样能防止当物理块访问标记出现两个以上相同的值的错误执行,更好地模拟了先进先出法;(2)最近最久未使用(least recently used): 该算法以最近的过去作为不久将来的近似, 将过去最长一段时间里不曾被使用的页面置换掉。在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的页面),便将其物理块访问标记置为1。以后每执行一条指令,便将物理块中各页面的访问标记加1,需置换时访问标记最大的便是将要被置换的。(3)最佳置换算法(opt):发生缺页时,有些页面在内

6、存中,其中有一页见很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。如果某页在八百万条指令内不会被使用,另一页在600万条指令内不会被使用,则置换前一个页面,从而把因需要调回这一页发生的缺页推到将来,越远越好。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。四、 程序流程图及数据结构

7、320条待执行指令显示随机产生的指令执行顺序和页面的调用顺序内存物理块选择调页存储算法lru 算法1-319输入一个随机数optfifo算法程序结束数据结构:typedef struct block/声明一种新类型物理块类型 int pagenum;/页号 int accessed;/访问字段,其值表示多久未被访问 block; int count;/程序计数器,用来记录指令的序号int n;/缺页计数器,用来记录缺页的次数static int temp320;/用来存储320条随机数block blocksize; /定义一大小为4的物理块数组void init( ); /程序初始化函数in

8、t findexist(int curpage);/查找物理块中是否有该页面int findspace( );/查找是否有空闲物理块int findreplace( );/查找应予置换的页面void display ( );/显示void random( );/产生320条随机数,显示并存储到temp320void pagestring( );/显示调用的页面队列void opt( );/opt算法void lru( );/ lru算法void fifo( );/fifo算法五、 程序清单#include #include#include#include#define size 4 typed

9、ef struct block/声明一种新类型物理块类型 int pagenum;/页号 int accessed;/访问字段,其值表示多久未被访问 block; int count;/程序计数器,用来记录指令的序号int n;/缺页计数器,用来记录缺页的次数static int temp320;/用来存储320条随机数block blocksize; /定义一大小为4的物理块数组void init( ); /程序初始化函数int findexist(int curpage);/查找物理块中是否有该页面int findspace( );/查找是否有空闲物理块int findreplace( )

10、;/查找应予置换的页面void display ( );/显示void random( );/产生320条随机数,显示并存储到temp320void pagestring( );/显示调用的页面队列void opt( );/opt算法void lru( );/ lru算法void fifo( );/fifo算法void init( ) for(int i=0;isize;i+) blocki.pagenum=-1; blocki.accessed=0; count=n=0; int findexist(int curpage) /查找物理块中是否有该页面for(int i=0; isize;

11、i+) if(blocki.pagenum = curpage ) return i; /检测到内存中有该页面,返回block中的位置 return -1;int findspace( ) /查找是否有空闲物理块 for(int i=0; isize; i+) if(blocki.pagenum = -1) return i; /找到空闲的block,返回block中的位置return -1;int findreplace( ) /查找应予置换的页面int pos = 0; for(int i=0; iblockpos.accessed) pos = i;/找到应予置换页面,返回block中位

12、置 return pos;void display( ) for(int i=0; isize; i+) if(blocki.pagenum != -1) /物理块不空 printf( %02d,blocki.pagenum); coutcount; cout*按照要求产生的320个随机数:*endl; for(int i=0;i320;i+) tempi=count;if(flag%2=0)count=+count%320;/产生50%的顺序执行指令(flag=0或2时顺序执行) if(flag=1) count=rand( )% (count-1); /产生25%的均匀分布在前地址部分指令

13、 if(flag=3) count=count+1+(rand( )%(320-(count+1); /产生25%的均匀分布在后地址部分指令 flag=+flag%4;printf( %03d,tempi); if(i+1)%10=0) coutendl;void pagestring( ) /显示调用的页面队列 for(int i=0;i320;i+) printf( %02d,tempi/10); if(i+1)%10=0) coutendl;/-最佳置换算法void opt( )int exist,space,position ; int curpage; for(int i=0;i32

14、0;i+) if(i%100=0) getch( ); count=tempi; curpage=count/10; exist = findexist(curpage); if(exist=-1) space = findspace ( ); if(space != -1)blockspace.pagenum = curpage; display( ); n=n+1; elsefor(int k=0;ksize;k+)for(int j=i;j320;j+)if(blockk.pagenum!= tempj/10)blockk.accessed = 1000;/将来不会用,设置为一个很大数

15、elseblockk.accessed = j;break; position = findreplace( ); blockposition.pagenum = curpage; display( ); n+; cout缺页次数:nendl; cout缺页率:(n/320.0)*100%endl;/- 最近最少使用算法 void lru( ) int exist,space,position ; int curpage; for(int i=0;i320;i+) if(i%100=0) getch( ); /getch直接从键盘获取键值 count=tempi; /指令在数组中的位置 cur

16、page=count/10; /指令所在页面 exist = findexist(curpage); /查找物理块中是否有该页面,若有返回物理块号 if(exist=-1) /物理块中不存在该页space = findspace( ); /查找是否有空闲物理块 if(space != -1) /有空闲物理块blockspace.pagenum = curpage; display( ); n=n+1; else /无空闲物理块,则寻找置换页面 position = findreplace( ); /查找应予置换的页面 blockposition.pagenum = curpage; block

17、position.accessed = -1; /恢复刚调入的block中页面accessed为-1 display( ); n+; else blockexist.accessed = -1;/恢复存在的并刚访问过的block中页面accessed为-1 for(int j=0; j4; j+) blockj.accessed+; cout缺页次数:nendl; cout缺页率:(n/320.0)*100%endl;/- 先进先出算法void fifo( ) int exist,space,position ; int curpage; for(int i=0;i320;i+) if(i%1

18、00=0) getch( ); /getch直接从键盘获取键值 count=tempi; curpage=count/10; exist = findexist(curpage); /查找物理块中是否有该页面 if(exist=-1)space = findspace( ); /查找是否有空闲物理块 if(space != -1) /有空闲物理块 blockspace.pagenum = curpage; display( ); n=n+1; else /无空闲物理块,则寻找置换页面 position = findreplace( ); /查找应予置换的页面 blockposition.pag

19、enum = curpage; display( ); n+; blockposition.accessed-; /置换页面所在的物理块中访问标记设为-1 else/若存在该页for(int i=0; isize; i+) if(blocki.pagenum != -1) /物理块不空printf( %02d ,blocki.pagenum);cout指令已经存在! 其物理块地址为:&blockexistendl;for(int j=0; jsize; j+)blockj.accessed+; cout缺页次数:nendl; cout缺页率:(n/320.0)*100%endl;void ma

20、in( )int select; cout请输入第一条指令号(1320): ; random( ); cout*对应的调用页面队列*endl; pagestring( ); docout*endl; cout* 1:opt 2:lru 3:fifo 4:退出 *endl; cout*endl; coutselect; cout*endl; init( ); switch(select) case 1:cout最佳置换算法opt:endl; cout*endl; opt( ); break; case 2:cout最近最久未使用置换算法lru:endl; cout*endl; lru( ); b

21、reak; case 3:cout先进先出置换算法fifo:endl;cout*endl;fifo( ); break; default: ; while(select!=4); 六、 使用说明及运行结果分析运行程序依次测试相应的算法:1、 先输入一个指令号(1-319)随意输入;2、 然后选择测试算法;本程序能通过输入第一条指令号(用3位整数代表指令号),产生320个随机数,并以每行10个显示出来。再把这320个随机数转换成对应的页面号,并以每行10个显示出来。然后,通过输入选择键,分别执行两个置换算法。各个置换算法能显示页面置换的情况,如果所访问的指令已在内存,则显示“该指令已经存在”并显示其物理地址;如果所访问的指令还未装入内存,则显示“调入的页面是。”,并显示其

温馨提示

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

评论

0/150

提交评论