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

下载本文档

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

文档简介

1、实验3请求调页存储管理方式的模拟1实验目的通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。2实验内容(1)假设每个页面中可存放10条指令,分配给一作业的内存块数为4。(2)模拟一作业的执行过程。该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已经在内存中,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业,则需进行页面置换。最后显示其物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并

2、显示作业运行过程中发生的缺页率。(3)置换算法:请分别考虑OPT、FIFO和LRU算法。(4)作业中指令的访问次序按下述原则生成:50%的指令是顺序执行的。25%的指令是均匀分布在前地址部分。25%的指令时均匀分布在后地址部分。代码:package mainDart;import java.util.ArrayList;import java.util.List;import java.util.Random;public class FIFO private static int times=0;/记录置换内存页面的次数/* * 随机产生0319之间的数 * 产生320条指令 * * ret

3、urn 包含320条指令的数组 */public static int productNumber()int order = new int320;/数组存储的数字表示指令Random rand = new Random();for(int i=0;i320;i+) if(i%4=0) orderi=rand.nextInt(319); /0=order319 else if(i%4=1) orderi=orderi-1+1;/1=order320 else if(i%4=2) orderi= rand.nextInt(orderi-1); else if(i%4=3) orderi=orde

4、ri-1+rand.nextInt(320-orderi-1); return order;/* * 打印链表 * param list */public static void printList(List list)for(int temt:list)System.out.print(temt+t);System.out.println();/* * 先进先出算法 * 总是淘汰最先进入内存的页面 * 在实现的时候,记录上一次所替换的页面在内存的下标,则本次要替换的位置就是上次下标+1的位置,并且下标是03循环的 * param memoryNum * param page */public

5、 static void FIFOChangePage(List memoryNum,int page)int index = FIFOChangePage(memoryNum,page,+times);memoryNum.remove(index);memoryNum.add(index, page);/* * 返回本次替换的页面在内存中的位置 * param memoryNum * param page * param times记录替换页面的次数,第一次替换的是内存第0个单元 * return */public static int FIFOChangePage(List memoryN

6、um,int page,int times)if(times=1)return 0;int index = (FIFOChangePage(memoryNum,page,times-1)+1)%4;return index;public static void main(String args) int order = productNumber();System.out.println(320条随机指令数:);for(int i =0;iorder.length;i+)System.out.print(orderi+t);if(i+1)%10=0)System.out.println();L

7、ist memoryNum= new ArrayList(4);/内存块存储的页面int count=0;/记录缺页次数for(int i=0;i320;i+)int page = orderi/10;if(memoryNum.contains(page) /若该指令所在页面已经在内存,输出该页面所在内存块的号else/没在内存,发生缺页,需要判断内存块是否存满,if(memoryNum.size()4) /内存没满,直接将所需页面调入内存memoryNum.add(page);else/内存存满,需要调用页面置换算法,进行页面置换FIFOChangePage(memoryNum,page);

8、/先进先出算法count+;/记录缺页次数printList(memoryNum);/打印内存所调入页面的情况System.out.println(缺页率:+(double)count/320);package mainDart;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;public class LRU /* * 随机产生0319之间的数 * 产生320条指令 * * return 包含320条指令的

9、数组 */public static int productNumber()int order = new int320;/数组存储的数字表示指令Random rand = new Random();for(int i=0;i320;i+) if(i%4=0) orderi=rand.nextInt(319); /0=order319 else if(i%4=1) orderi=orderi-1+1;/1=order320 else if(i%4=2) orderi= rand.nextInt(orderi-1); else if(i%4=3) orderi=orderi-1+rand.nex

10、tInt(320-orderi-1); return order;/* * 打印链表 * param list */public static void printList(List list)for(int temt:list)System.out.print(temt+t);System.out.println();/* * 最近最久未使用算法 * param order */public static void LRUChangePage(int order)List memoryNum = new ArrayList(4);/内存块int timeFlag =new int-1,-1,

11、-1,-1; /用来记录内存当中各单元未被访问的时间值int count=0;/记录缺页次数for(int i=0;i320;i+)int page = orderi/10;if(memoryNum.contains(page) /若该指令所在页面已经在内存int index = memoryNum.indexOf(page);timeFlagindex=0;/将时间变为0else/没在内存,发生缺页,需要判断内存块是否存满,if(memoryNum.size()4) /内存没满,直接将所需页面调入内存/将没有命中的所有页面的时间加一for(int in=0;in4;in+)if(timeFl

12、agin!=-1)timeFlagin+=1;/将page加入内存并将时间置为0memoryNum.add(page);timeFlagmemoryNum.indexOf(page)=0;else/内存存满,需要调用页面置换算法,进行页面置换int maxIn=-1;/记录拥有最大时间值的标记的下标int maxT=-1;/记录最大的时间值for(int in=0;inmaxT)maxT=timeFlagin;maxIn=in;memoryNum.remove(maxIn);memoryNum.add(maxIn,page);timeFlagmaxIn=0;/将没有命中的所有页面的时间加一fo

13、r(int in=0;in4;in+)if(in!=maxIn)timeFlagin+=1;count+;/记录缺页次数printList(memoryNum);/打印内存所调入页面的情况System.out.println(缺页率:+(double)count/320);public static void main(String args) int order = productNumber();System.out.println(320条随机指令数:);for(int i =0;iorder.length;i+)System.out.print(orderi+t);if(i+1)%10

14、=0)System.out.println();LRUChangePage(order);package mainDart;import java.util.ArrayList;import java.util.List;import java.util.Random;public class Optimal /* * 随机产生0319之间的数 * 产生320条指令 * * return 包含320条指令的数组 */public static int productNumber()int order = new int320;/数组存储的数字表示指令Random rand = new Rand

15、om();for(int i=0;i320;i+) if(i%4=0) orderi=rand.nextInt(319); /0=order319 else if(i%4=1) orderi=orderi-1+1;/1=order320 else if(i%4=2) orderi= rand.nextInt(orderi-1); else if(i%4=3) orderi=orderi-1+rand.nextInt(320-orderi-1); return order;/* * * param order320条指令数组 * return 返回一个链表,依次保存着320条指令每条指令所在的页

16、面 */public static List pageSeq(int order)List pageSeq = new ArrayList();for(int temp:order)pageSeq.add(temp/10);return pageSeq;/* * 打印链表 * param list */public static void printList(List list)for(int temt:list)System.out.print(temt+t);System.out.println();/* * 最佳置换算法 * 根据当前已经在内存中的页面在之后被需要的先后进行置换 * *

17、param pageSeq 整个320条指令,从头到尾所需要的页面 * param memoryNum 已满的内存空间 * param page等待被调入内存的页面 */public static void OptimalChangePage(List pageSeq,int start,List memoryNum,int page)int maxSeq=-1,index=0;for(int pageNum:memoryNum) /遍历内存for(int i=start;imaxSeq)maxSeq=i;break;if(maxSeq-1)/maxSeq=-1说明内存当中的四个页面在将来都不

18、会再被使用,这时默认将内存块中的第一个页面置换出index = memoryNum.indexOf(pageSeq.get(maxSeq);/记录将要被置换的那个页面所在内存位置 memoryNum.remove(index);/将内存中将来最久被使用的页面删除memoryNum.add(index, page);/将需要调入的页面加入内存public static void main(String args) int order = productNumber();System.out.println(320条随机指令数:);for(int i =0;iorder.length;i+)System.out.print(orderi+t);if(i+1)%10=0)System.out.println();List pageSeq = pageSeq(order); /依次存放着指令所在的页面号List memoryNum= new ArrayList(4);/内存块存储的页面int count=0;/记录缺页次数for(i

温馨提示

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

评论

0/150

提交评论