欢迎来到天天文库
浏览记录
ID:30797406
大小:195.00 KB
页数:8页
时间:2019-01-03
《页面置换算法模拟的实验报告材料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案实验编号4名称 页面置换算法模拟实验目的通过请求页式存储管理中页面置换算法模拟设计,以便:1、了解虚拟存储技术的特点2、掌握请求页式存储管理中页面置换算法实验内容与步骤设计一个虚拟存储区和内存工作区,并使用FIFO和LRU算法计算访问命中率。<程序设计>先用srand()函数和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算相应的命中率。<程序1>#include//Windows版,随机函数需要,GetCurrentProcessId()需要//#include2、dlib.h>//Linux版,随机函数srand和rand需要#include//printf()需要#defineTRUE1#defineFALSE0#defineINVALID-1#defineNULL0#definetotal_instruction320//共320条指令#definetotal_vp32//虚存页共32页#defineclear_period50//访问次数清零周期typedefstruct{//定义页表结构类型(页面映射表PMT)intpn,pfn,counter,time;//页号、页框号(块号)3、、一个周期内访问该页面的次数、访问时间}PMT;PMTpmt[32];typedefstructpfc_struct{//页面控制结构精彩文档实用标准文案intpn,pfn;structpfc_struct*next;}pfc_type;pfc_typepfc[32];pfc_type*freepf_head,*busypf_head,*busypf_tail;//空闲页头指针,忙页头指针,忙页尾指针intNoPageCount;//缺页次数inta[total_instruction];//指令流数组intpage[total_instruct4、ion],offset[total_instruction];//每条指令的页和页内偏移voidinitialize(int);voidFIFO(int);//先进先出voidLRU(int);//最近最久未使用voidNRU(int);//最近最不经常使用/****************************************************************************main()****************************************************************5、*************/voidmain(){inti,s;//srand(10*getpid());//用进程号作为初始化随机数队列的种子//Linux版srand(10*GetCurrentProcessId());//用进程号作为初始化随机数的种子//Windows版s=rand()%320;//在[0,319]的指令地址之间随机选取一起点mfor(i=0;i6、7、s>319){printf("wheni==%d,error,s==%d",i,s);exit8、(0);}a[i]=s;//任意选一指令访问点m。(将随机数作为指令地址m)a[i+1]=a[i]+1;//顺序执行下一条指令a[i+2]=rand()%(s+2);//在[0,m+1]的前地址之间随机选取一地址,记为m'a[i+3]=a[i+2]+1;//顺序执行一条指令s=a[i+2]+(int)rand()%(320-a[i+2]);//在[m',319]的指令地址之间随机选取一起点mif((a[i+2]>318)9、10、(s>319))printf("a[%d+2,anumberwhichis:%dands=%d",i,a[i+2],s)11、;}精彩文档实用标准文案for(i=0;i12、*******************************************initialize()形参:内存块数功能:初始化
2、dlib.h>//Linux版,随机函数srand和rand需要#include//printf()需要#defineTRUE1#defineFALSE0#defineINVALID-1#defineNULL0#definetotal_instruction320//共320条指令#definetotal_vp32//虚存页共32页#defineclear_period50//访问次数清零周期typedefstruct{//定义页表结构类型(页面映射表PMT)intpn,pfn,counter,time;//页号、页框号(块号)
3、、一个周期内访问该页面的次数、访问时间}PMT;PMTpmt[32];typedefstructpfc_struct{//页面控制结构精彩文档实用标准文案intpn,pfn;structpfc_struct*next;}pfc_type;pfc_typepfc[32];pfc_type*freepf_head,*busypf_head,*busypf_tail;//空闲页头指针,忙页头指针,忙页尾指针intNoPageCount;//缺页次数inta[total_instruction];//指令流数组intpage[total_instruct
4、ion],offset[total_instruction];//每条指令的页和页内偏移voidinitialize(int);voidFIFO(int);//先进先出voidLRU(int);//最近最久未使用voidNRU(int);//最近最不经常使用/****************************************************************************main()****************************************************************
5、*************/voidmain(){inti,s;//srand(10*getpid());//用进程号作为初始化随机数队列的种子//Linux版srand(10*GetCurrentProcessId());//用进程号作为初始化随机数的种子//Windows版s=rand()%320;//在[0,319]的指令地址之间随机选取一起点mfor(i=0;i6、7、s>319){printf("wheni==%d,error,s==%d",i,s);exit8、(0);}a[i]=s;//任意选一指令访问点m。(将随机数作为指令地址m)a[i+1]=a[i]+1;//顺序执行下一条指令a[i+2]=rand()%(s+2);//在[0,m+1]的前地址之间随机选取一地址,记为m'a[i+3]=a[i+2]+1;//顺序执行一条指令s=a[i+2]+(int)rand()%(320-a[i+2]);//在[m',319]的指令地址之间随机选取一起点mif((a[i+2]>318)9、10、(s>319))printf("a[%d+2,anumberwhichis:%dands=%d",i,a[i+2],s)11、;}精彩文档实用标准文案for(i=0;i12、*******************************************initialize()形参:内存块数功能:初始化
6、
7、s>319){printf("wheni==%d,error,s==%d",i,s);exit
8、(0);}a[i]=s;//任意选一指令访问点m。(将随机数作为指令地址m)a[i+1]=a[i]+1;//顺序执行下一条指令a[i+2]=rand()%(s+2);//在[0,m+1]的前地址之间随机选取一地址,记为m'a[i+3]=a[i+2]+1;//顺序执行一条指令s=a[i+2]+(int)rand()%(320-a[i+2]);//在[m',319]的指令地址之间随机选取一起点mif((a[i+2]>318)
9、
10、(s>319))printf("a[%d+2,anumberwhichis:%dands=%d",i,a[i+2],s)
11、;}精彩文档实用标准文案for(i=0;i12、*******************************************initialize()形参:内存块数功能:初始化
12、*******************************************initialize()形参:内存块数功能:初始化
此文档下载收益归作者所有