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

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

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

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

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

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

淮海工学院计算机工程学院 实验报告书 课程名:《操作系统原理》 题目:虚拟存储器 班级: 学号: 姓名: 评语: 成绩:指导教师: 批阅时间:年月日 《操作系统原理》实验报告 -- 一、目的与要求 (一)目的 由于超大规模集成电器电路(VLSI)技术的发展,使存贮器的容量不断扩大,价格大幅度下降。但从应用角度看,存贮器的容量和成本总会受到一定的限制。所以,提高存贮器的使用效率始终是操作系统研究的重要课题之一,虚拟存贮器技术是用来扩大主存容量的一种重要的方法。 本实习要求学生独立地用高级语言编写几个常用的存贮器分配算法,并能设计一个存贮管理的模拟程序,能对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。 (二)要求 为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率。 二、示例 1.题目 本示例给出采用页式分配存贮器管理方案,并通过分析、计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣,另外也考虑改变页面尺寸大小和实际存贮器容量对计算结果的影响,从而可为选择好的算法、合适的页面尺寸和存贮器实际容量提供依据。 本程序是按下述原则生成指令序列的: (1)50%的指令是顺序执行的。 (2)25%的指令是均匀分布在前地址部分。 (3)25%的指令是均匀分布在后地址部分。 示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。公式为: 页面失败次数 命中率=1-─────── 页地址流长度 假定虚拟存贮容量为32K,页面尺寸从1K到8K,实存容量从4页到32页。 2.算法与框图 (1)最佳淘汰算法(OPT)。这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。由于本示例中已生成了全部地址流,故可计算最佳命中率。 该算法的准则是淘汰已满页表中以后不再访问或是最迟访问的页。这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不再访问此页,则把此页淘汰,不然得找出后继指令中最迟访问的页面予以淘汰。可见最佳淘汰算法要化费较长的运算时间。 (2)最近最少使用页面淘汰算法(LRU)。这是一种经常使用的方法,有各种不同的实施方案,这里是采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使 用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的。 三、实验步骤与源程序 #include"iostream" #include"stdio.h" #include"stdlib.h" usingnamespacestd; #defineMax30 //某进程调入内存中的最大页面数 #defineSize10 //系统为某进程分配的最大物理块数 voidInit(intBlock[],intm)//初始化物理块 { inti; for(i=0;i<m;i++) { Block[i]=-1; } } voidcreat(intPage[],intn)//输入页面串引用号 { inti; for(i=0;i<n;i++) { cin>>Page[i]; } } voidInit1(intBlock1[],intm1) { inti; for(i=0;i<m1;i++) { Block1[i]=-1; } } voidcreat1(intPage[],intn1) { inti; for(i=0;i<n1;i++) { Page[i]; } } voidLRU(intPage[],intBlock1[],intn1,intm1) { inti,j,max_stay=0,count=0; intget=-1,flag=-1,block_num=-1; inttime[Size]; for(i=0;i<m1;i++)//初始化time[] { time[i]=0; } for(i=0;i<n1;i++) { for(j=0;j<m1;j++)//有空闲物理块时,页面直接驻入内存空闲块 { if(Block1[j]==-1) { get=j; //物理块j即将(/等待)驻入新页面 break; } } for(j=0;j<m1;j++) //查找序号相同的页面 { if(Block1[j]==Page[i])//物理块j中页面与当前期望调入内存的页面相同