1、为满足上述条件,可采取下列方法:设d0=10000,第n个指令地址为dn,第n+1 个指令地址为dn+1,n的取值范围为0 到255。每次生成一个1 到1024 范围内的随机数a,如果a落在1 到512 范围内,则dn+1=dn+1。如果a落在513 到768范围内,则设置dn+1为1 到dn范围内一个随机数。如果a落在769 到1024范围内,则设置dn+1为dn到32767 范围内一个随机数。例如:srand();初始化一个随机函数。a010*rand()/32767*255+1;a1=10*rand()/32767*a0语句可用来产生a0与a1中的随机数。或采用以下方式:(1)通过随机数
2、产生一个指令序列,共320 条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分具体的实施方法是:在0,319的指令地址之间随机选取一起点m顺序执行一条指令,即执行地址为m+1 的指令在前地址0,m+1中随机选取一条指令并执行,该指令的地址为mD:顺序执行一条指令,其地址为m+1E:在后地址m+2,319中随机选取一条指令并执行F:重复步骤A-E,直到320 次指令(2)将指令序列变换为页地址流设:页面大小为1K;用户内存容量4 页到32 页;用户虚存容量为32K。在用户虚存中,按每K 存放10 条指令排列虚
3、存地址,即320 条指令在虚存中的存放方式为:第 0 条-第 9 条指令为第0 页(对应虚存地址为0,9)第10 条-第19 条指令为第1 页(对应虚存地址为10,19)第310 条-第319 条指令为第31 页(对应虚存地址为310,319)按以上方式,用户指令可组成32 页。4、 页面大小的取值范围为1K,2K,4K,8K,16K。按照页面大小将指令地址转化为页号。对于相邻相同的页号,合并为一个。四、实验设计1. 产生访问页面的序列,保存在数组queue中2. FIFO(先进先出)算法数组queue_f表示物理内存中的内容As为页面置换计数器 图 1 3LRU(最近最久未使用)算法 数组q
4、ueue_f表示物理内存中的内容 数组queue_t与queue_f对应为其进入内存未使用的时间标志 As为页面置换计数器 图 2 4Opt算法 数组queue_t与queue_f对应为其后续页面访问序列出现的第一位置五、实验实现void CMyDlg:OnFIFO() CString str1=; CString str2= int b; int m=0; int as=0;/置换页面计数 bool x; /页面是否需要置换 if(m_capmcount)/分配的页面数少于所需要访问的页面数 m_list.ResetContent(); UpdateData(0); for(int i=0;
5、icount;i+) str1= str2= x=true; for(int k=0;km_capm;k+) if(queuei=queue_fk) x=false;/判断物理块中是不是有跟当前须替换的页面 break; /如果没有且无空闲的页面,则需要置换 if(x) int a; a=(i-m)%m_capm; queue_fa=queuei; as+; else m+; int mm; if(mm_capm)mm=m; else mm=m_capm; for(int j=0;jmm;j+) b=queue_fj; str2.Format(%d,b); str1=str1+ +str2;
6、m_list.InsertString(-1,str1); m_zhihuanshu=as; m_zhihuanlv=(double)as/count; if(as-m_capm)=0) m_queyeshu=0; m_queyelv=0; else m_queyeshu=as-m_capm; m_queyelv=(double)(as-m_capm)/count; else MessageBox(页面总数小于物理块,不需要进行交换操作!);OnLRU() int a,b; int m=0; queue_tk=0; for(int j=0;j+) if(j!=k) queue_tj+;/使物理
7、块中的每个未使用页面的时间增一 m+; if(x) int c=0,d; if(i-m)m_capm) a=i-m; /当前物理页面未填满时直接装入 else d=queue_t0; for(int h=0;hh+) if(dqueue_th) d=queue_th; c=h; a=c; /找出物理块中最久未使用的页面号/将其替换 queue_ta=0; for(k=0; if(k!=a) queue_tk+;/使物理块中的每个未改变页面的时间增一 m_list.InsertString(-1,str1);Onopt() int opu;/当前占有的页面数 opu=0;/判断物理块中是不是有跟当前须替换的页面 if(x)&(opum_capm)/还有空位 queue_fopu=queuei;opu+;(opu=m_capm) /找最晚出现的页面号 for(int number=0;numbernumber+) for(int num=i;numnum+) if(queue_fnumber=queuei) queue_tnumber=i; if(num=count) queue_tnu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1