预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验四请求分页存储管理模拟实验一:实验目得通过对页面、页表、地址转换与页面置换过程得模拟,加深对请求分页存储管理系统得原理与实现技术得理解.二:实验内容假设每个页面可以存放10条指令,分配给进程得存储块数为4。用C语言或Pascal语言模拟一进程得执行过程。设该进程共有320条指令,地址空间为32个页面,运行前所有页面均没有调入内存。模拟运行时,如果所访问得指令已经在内存,则显示其物理地址,并转下一条指令;如果所访问得指令还未装入内存,则发生缺页,此时需要记录缺页产生次数,并将相应页面调入内存,如果4个内存块已满,则需要进行页面置换。最后显示其物理地址,并转下一条指令。在所有指令执行完毕后,显示进程运行过程中得缺页次数与缺页率.页面置换算法:分别采用OPT、FIFO、LRU三种算法。进程中得指令访问次序按如下原则生成:50%得指令就是顺序执行得。25%得指令就是均匀分布在低地址部分.25%得指令就是均匀分布在高地址部分.三:实验类别分页存储管理四:实验类型模拟实验五:主要仪器计算机六:结果OPT:LRU:FIFO:七:程序#include〈stdio、h〉#include〈stdlib、h〉#include〈conio、h>#defineblocknum4//页面尺寸大小intm;//程序计数器,用来记录按次序执行得指令对应得页号staticintnum[320];//用来存储320条指令typedefstructBLOCK//声明一种新类型—-物理块类型{ﻩintpagenum;//页号ﻩintaccessed;//访问量,其值表示多久未被访问}BLOCK;BLOCKblock[blocknum];//定义一大小为8得物理块数组voidinit()//程序初始化函数,对block初始化{for(inti=0;i<blocknum;i++)ﻩ{block[i]、pagenum=—1;block[i]、accessed=0;ﻩm=0;}}intpageExist(intcurpage)//查找物理块中页面就是否存在,寻找该页面curpage就是否在内存块block中,若在,返回块号{ﻩfor(inti=0;i<blocknum;i++)ﻩ{ﻩﻩif(block[i]、pagenum==curpage)ﻩﻩreturni;//在内存块block中,返回块号ﻩ}return-1;}intfindSpace()//查找就是否有空闲物理块,寻找空闲块block,返回其块号{for(inti=0;i<blocknum;i++)ﻩ{if(block[i]、pagenum==-1)ﻩreturni;//找到了空闲得block,返回块号}ﻩreturn-1;}intfindReplace()//查找应予置换得页面{ﻩintpos=0;ﻩfor(inti=0;i〈blocknum;i++){if(block[i]、accessed〉block[pos]、accessed)ﻩpos=i;//找到应该置换页面,返回BLOCK中位置ﻩ}returnpos;}voiddisplay()//显示物理块中得页面号{ﻩﻩfor(inti=0;i〈blocknum;i++)ﻩ{ﻩif(block[i]、pagenum!=-1)ﻩ{ﻩﻩprintf(”%02d",block[i]、pagenum);ﻩﻩﻩprintf("%p|”,&block[i]、pagenum);ﻩﻩ}}printf("\n");}voidrandam()//产生320条随机数,显示并存储到num[320]{intflag=0;printf(”请为一进程输入起始执行指令得序号(0~320):\n”);ﻩscanf("%d",&m);//用户决定得起始执行指令printf("******进程中指令访问次序如下:(由随机数产生)*******\n");for(inti=0;i〈320;i++){//进程中得320条指令访问次序得生成ﻩﻩnum[i]=m;//当前执行得指令数,ﻩﻩif(flag%2==0)ﻩm=++m%320;//顺序执行下一条指令ﻩﻩif(flag==1)ﻩﻩm=rand()%(m-1);//通过随机数,跳转到低地址部分[0,m—1]得一条指令处,