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

在线预览结束,喜欢就下载吧,查找使用更方便

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

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

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

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

实验报告 题目 名称页面置换算法(LRU算法) 院系 信息学院 班级 1106402 完成时间 2013-05—17 指导老师 肖赛男本次实验成绩组长 联系电话李国红 18273716615 邮件地址394600097@qq.com组员(姓名, 学号)吕赟 1106402—38 主要任务算法的组织,综合调度,程序运行界面的 实现 组员(姓名, 学号)蔡祥 1106402—09 主要任务 算法的实现,测试,实验报告的完成主 要 原 理 及 所 参 考 的 资 料 ( 包 括 实 验 内 容 及 条 件 )实验原理: 页面置换算法(LRU算法) 假定一个能够存放M个页面的内存,当发生缺页时,调入一个页面,通过LRU算法求出应该置换出的页面号。输入一连串的页面号,程序自动选择调出的页面并计算缺页率。 设计页面置换算法,这里采用最近最久未使用置换算法LRU.LRU算法的实现要归功于一个8位的寄存器的实现。 主要参考书 计算机操作系统原理西安大学出版社汤子瀛主编 操作系统电子工业出版社WilliamStallings著 主 要 算 法 流 程 图 ( 包 括 实 验 步 骤 )算法流程图: 输入页面访问序号 取访问页的页号 查夜表 是否缺页 否 置换出寄存器数组页 面标号最小的页面 是 按算法不同淘汰一页面 调入所访问的页面 实验说明: 执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。淘汰哪个页面的首要问题是选择何种置换算法。该程序采用LRU方法选择,依置换策略选择一个可置换的页面并计算它们的缺页率以便比较。 本 实 验 涉 及 的 主 要 算 法 细 节 说 明 ( 包 括 数 据 结 构 )#include<math.h〉 #include〈conio。h〉 #defineM3 #include〈stdio。h〉 intreg[2][M]; intcount; intnum; intN; /********初始化函数,数组reg[0][i]存放页面号,初始化为-1,reg[1][i]当作寄存器,初始化为0*********/ voidinit(){ inti; count=0;num=0; N=pow(2,7);/********二进制数10000000**********/ ﻩfor(i=0;i<M;i++){ ﻩreg[0][i]=-1; ﻩreg[1][i]=0; ﻩ } ﻩ} /*********寻找数组a中的最小值,返回最小值对应的下标***********/ intmin(inta[]){ inti,index=0; intmin=a[0]; for(i=1;i<M;i++){ ﻩ if(min〉a[i]){ ﻩ min=a[i]; index=i; ﻩ ﻩ} ﻩﻩ} ﻩreturnindex; ﻩ} /***判断页面号x是否在数组中,如果在,返回对应的下标;否则返回-1***/ intisIn(intx,inta[]){ inti; intindex=—1; for(i=0;i〈M;i++){ ﻩﻩif(a[i]==x){ ﻩ ﻩindex=i; ﻩﻩﻩbreak; ﻩﻩ} ﻩ} ﻩreturnindex; } /**********判断虚拟的内存中是否已经存满了页面,如果满了,则返回-1,没有满则返回找到空的对应的第一个下标**************/ intisFull(inta[]){ inti,index=—1; ﻩfor(i=0;i〈M;i++){ ﻩif(a[i]==-1){ ﻩ ﻩindex=i; ﻩ break; } } returnindex; ﻩ} /*************页面置换方法*****************/ voidswap(intx){ inti,k,temp,temp0; ﻩintindex=isIn(x,reg[0]);/****判断x是否在reg[0]数组中*******/ ﻩif(index!=—1){ ﻩ reg[1][index]=reg[1][index]^N;/**reg[1][index]异或二进制数10000000**/ ﻩ} else{ ﻩﻩtemp=isFull(reg[0]); ﻩﻩif(temp!=-1){/*******内存没有满,直接调入页面************/ ﻩﻩreg[0][temp]=x; ﻩ reg[1][temp]=reg[1][temp]^N; ﻩ } elseif(temp==—1){ k=min(reg[1]);/**置换出寄存器中