虚拟内存页面置换算法实验三.docx
文本预览下载声明
软 件 学 院实 验 报 告课程名称: 操作系统实验项目: 虚拟内存页面置换算法实 验 室: 姓 名: 学 号:专业班级: 实验时间:实验成绩评阅教师实验目的及要求通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。结合Linux的内层的分析方法查看内存的分配过程及linux kernel的内存管理机制。实验性质实验性质: 设计性实验学时实验学时: 2学时四、实验环境1.实验环境: C与C++程序设计学习与实验系统2.知识准备:(1)使用Linux的基本命令;(2)了解Linux vmstat、free、top等命令查看linux系统的内存分配情况;(3) 掌握虚拟内存页面置换算法FIFO等基本算法理论。五、实验内容及步骤假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储。1.输入的形式 int PageOrder[MaxNumber];//页面序列int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数2. 输出的形式double LackPageRate//缺页率缺页个数每次缺页时物理块中存储 程序所能达到的功能模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。int PageOrder[MaxNumber];//页面序列int PageCount[MaxNumber]={0};//计算内存内数据离下一次出现的距离int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数double LackPageRate=0;bool found=false; 图 1-1 流程图六、实验数据及结果分析1.详细记录在调试过程中出现的问题及解决方法; 在FIFO和LRU中计算每个页面在物理块中所存在的“时间”时总是出错,后来多次调试语句所处位置和计数方法,终于得出正确结果,并且所有算法都没有输出物理块中发生置换后的物理块中的内容,在老师的提醒下更改程序输出其内容。算法的性能分析(包括基本操作和其它算法的时间复杂度和空间复杂度的分析)及其改进设想; OPI:时间复杂度为O(n^2) 空间复杂度为:O(1) FIFO:时间复杂度为O(n^2) 空间复杂度为:O(1) LRU:时间复杂度为O(n^2) 空间复杂度为:O(1)2.记录实验执行的结果(运行结果截图)。图 1-2 程序运行结果七、实验总结通过这次实验我对先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。有了更多的了解。在编程过程中我也通过查阅书籍和复习以前的课本,对C++编程语言进行了复习。通过这个实验我也体会到思路的重要性,一个程序如果一开始计划的好,结构设计完善,才可能顺利进行。这次实验模拟出了优先权调度算法,使我更加了解这一算法的调度过程。以前仅限于知道这一知识点,现在居然能用程序来实现这个过程。我相信这将是一个很好的学习方法。我希望以后能够有更多的机会来锻炼自己,通过具体实践来提高自己编程的能力,来进一步掌握和理解在课堂上学到的东西,做到学以致用!总之,这次综合实验是我收益匪浅,是我明白了实际编程和理论知识间的差异,明白了在学习课本的基础上我们还需要很大的实践扩充才能真正的理解并学好这门课程。附录 源程序清单#include iostream.hconst int DataMax=100;const int BlockNum = 10;int DataShow[BlockNum][DataMax]; // 用于存储要显示的数组bool DataShowEnable[BlockNum][DataMax]; // 用于存储数组中的数据是否需要显示//int Data[
显示全部