操作系统实验4_第1页
操作系统实验4_第2页
操作系统实验4_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、实用文档实验四请求分页存储管理模拟实验一:实验目的通过对页面、 页表、地址转换和页面置换过程的模拟, 加深对请求分页存储管理系统的原理和实现技术的理解。二:实验内容假设每个页面可以存放10 条指令,分配给进程的存储块数为4。用 C 语言或 Pascal 语言模拟一进程的执行过程。设该进程共有320 条指令,地址空间为 32 个页面,运行前所有页面均没有调入内存。模拟运行时,如果所访问的指令已经在内存, 则显示其物理地址, 并转下一条指令; 如果所访问的指令还未装入内存, 则发生缺页, 此时需要记录缺页产生次数,并将相应页面调入内存,如果 4 个内存块已满,则需要进行页面置换。最后显示其物理地址

2、,并转下一条指令。在所有指令执行完毕后,显示进程运行过程中的缺页次数和缺页率。页面置换算法:分别采用OPT、FIFO、LRU三种算法。进程中的指令访问次序按如下原则生成:50%的指令是顺序执行的。25%的指令是均匀分布在低地址部分。25%的指令是均匀分布在高地址部分。三:实验类别分页存储管理四:实验类型模拟实验五:主要仪器计算机六:结果实用文档OPT:实用文档实用文档LRU:FIFO:实用文档七:程序# include# include# include# define blocknum 4/页面尺寸大小int m; /程序计数器,用来记录按次序执行的指令对应的页号static int num

3、320; /用来存储320 条指令typedef struct BLOCK /声明一种新类型- 物理块类型int pagenum; /int accessed; /BLOCK;页号访问量,其值表示多久未被访问实用文档BLOCK blockblocknum; /定义一大小为8 的物理块数组void init() /程序初始化函数, 对block初始化for(int i=0;iblocknum;i+)blocki.pagenum=-1;blocki.accessed=0;m=0;int pageExist(int curpage)/查找物理块中页面是否存在, 寻找该页面curpage 是否在内存块

4、 block 中,若在,返回块号for(int i=0; iblocknum; i+)if(blocki.pagenum = curpage )return i; /在内存块block 中,返回块号return -1;int findSpace()/查找是否有空闲物理块, 寻找空闲块block,返回其块号for(int i=0;iblocknum;i+)if(blocki.pagenum=-1)return i; /找到了空闲的block,返回块号return -1;int findReplace()/ 查找应予置换的页面int pos = 0;for(int i=0;i blockpos.a

5、ccessed)pos = i; /找到应该置换页面,返回BLOCK中位置return pos;实用文档void display()/显示物理块中的页面号for(int i=0; iblocknum; i+)if(blocki.pagenum != -1)printf( %02d,blocki.pagenum);printf(%p|,&blocki.pagenum);printf(n);void randam()/产生320 条随机数, 显示并存储到num320int flag=0;printf(请为一进程输入起始执行指令的序号(0320):n);scanf(%d,&m);/用户决定的起始执行

6、指令printf(*进程中指令访问次序如下:( 由随机数产生)*n);for(int i=0;i320;i+)/进程中的320 条指令访问次序的生成numi=m;/当前执行的指令数,if(flag%2=0)m=+m%320;/顺序执行下一条指令if(flag=1)m=rand()%(m-1);/通过随机数,跳转到低地址部分0 , m-1 的一条指令处,设其序号为m1if(flag=3)m=m+1+(rand()%(320-(m+1);/通过随机数, 跳转到高地址部分m1+2,319的一条指令处,设其序号为m2flag=+flag%4;printf( %03d,numi);/输出格式: 3 位数

7、if(i+1)%10=0) /控制换行 , 每个页面可以存放10 条指令,共32 个页面printf(n);void pagestring() /显示调用的页面序列, 求出此进程按次序执行的各指令所在的页面号并显示输出for(int i=0;i320;i+)实用文档printf( %02d,numi/10);/if(i+1)%10=0)/控制换行输出格式: 2 位数, 每个页面可以存放10 条指令,共32 个页面printf(n);void OPT() /最佳替换算法int n=0;/记录缺页次数int exist,space,position;int curpage;/当前指令的页面号for

8、(int i=0;i320;i+)m=numi;curpage=m/10;exist=pageExist(curpage);if(exist=-1) / 当前指令的页面号不在物理块中 space=findSpace();if(space != -1) / 当前存在空闲的物理块blockspace.pagenum = curpage; /将此页面调入内存display();/显示物理块中的页面号n+;/缺页次数 +1else / 当前不存在空闲的物理块,需要进行页面置换 for(int k=0;kblocknum;k+)for(int j=i;j320;j+)/ 找到在最长(未来)时间内不再被访

9、问的页面 if(blockk.pagenum!= numj/10)blockk.accessed = 1000; / 将来不会被访问,设置为一个很大数else / 将来会被访问,访问量设为j blockk.accessed = j;break;position = findReplace();/找到被置换的页面, 淘汰blockposition.pagenum = curpage;/将新页面调入实用文档display();n+; /缺页次数 +1printf(缺页次数 :%dn,n);printf(缺页率 :%f%n,(n/320.0)*100);void LRU() /最近最久未使用算法in

10、t n=0;/记录缺页次数int exist,space,position ;int curpage;/当前指令的页面号for(int i=0;i320;i+)m=numi;curpage=m/10;exist = pageExist(curpage);if(exist=-1) / 当前指令的页面号不在物理块中 space = findSpace();if(space != -1) / 当前存在空闲的物理块blockspace.pagenum = curpage; /将此页面调入内存display();/显示物理块中的页面号n+;/缺页次数 +1else / 当前不存在空闲的物理块,需要进行页

11、面置换 position = findReplace(); blockposition.pagenum = curpage; display();n+; /缺页次数+1elseaccessedblockexist.accessed = -1;/为 -1for(int j=0; jblocknum; j+)/其余的 accessed+恢复存在的并刚访问过的BLOCK 中页面blockj.accessed+;实用文档printf(缺页次数 :%dn,n);printf(缺页率 :%f%n,(n/320.0)*100);void FIFO()int n=0;/记录缺页次数int exist,spac

12、e,position ;int curpage;/当前指令的页面号int blockpointer=-1;for(int i=0;i320;i+)m=numi;curpage=m/10;exist = pageExist(curpage);if(exist=-1) /当前指令的页面号不在物理块中space = findSpace();if(space != -1) / 当前存在空闲的物理块 blockpointer+;blockspace.pagenum=curpage; /将此页面调入内存n+;/缺页次数 +1display();/显示物理块中的页面号else /没有空闲物理块,进行置换po

13、sition = (+blockpointer)%4;blockposition.pagenum = curpage; /将此页面调入内存n+;display();printf(printf(缺页次数 :%dn,n);缺页率 :%f%n,(n/320.0)*100);void main()int choice;printf(*请求分页存储管理模拟系统*n);实用文档randam();printf(*此进程的页面调用序列如下*n);pagestring();while(choice != 4)printf(*1:OPT 2:LRU 3:FIFO 4:退出 *n);printf(请选择一种页面置换算法:);scanf(%d,&choice);init();switch(choice)case 1:printf(printf(最佳置换算法OPT:n)

温馨提示

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

评论

0/150

提交评论