logo资料库

页面置换算法模拟 实验报告.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
中北大学软件学院 实 验 报 告 专 业 软件工程 课程名称 计算机操作系统 学 姓 号 名
辅导教师 张 静 成绩 实验日期 2015.11.20 实验时间 1 实验名称 :实验四 页面置换算法模拟 2、实验目的 (1)了解内存分页管理策略 (2)掌握调页策略 (3)掌握一般常用的调度算法 (4)学会各种存储分配算法的实现方法。 (5)了解页面大小和内存实际容量对命中率的影响。 3、实验要求 编程实现页面置换算法,最少实现两种算法,比较算法的优劣,并将调试 结果显示在计算机屏幕上,并检测机算和笔算的一致性。 (1)采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的 优劣,同时也考虑页面大小及内存实际容量对命中率的影响; (2)实现 OPT 算法 (最优置换算法) 、LRU 算法 (Least Recently) 、 FIFO 算 法 (First IN First Out)的模拟; (3)使用某种编程语言模拟页面置换算法。
4、实验算法描述 (1)FIFO(先进先出) 开始 页 面 走 向 存 入 数 组 p[] 中,内存块用 page[]表示 初始化为 0 Y i++ 当前 p[]中第 i 个元 素 是 否 已 在 内 存 N Page[]是否有空 Y 把 page[]中最先装入的页 面置换出去.i++ N 把 p[i]的内容直接 装 入 最 上 面 一 个 空内存块,i++ 输出 当前 内存 块状 结束 图 4-1FIFO 算法流程图
(2) LRU(最近最久未使用) 开始 页面走向存入数组 p[]中,内 存块用 page[]表示初始化为 0 Y i++ 当前 p[]中第 i 个元 素是否已在内存 N Page[]是否有空 Y N 把 page[]中最近最久未使 用的页面置换出去.i++ 把 p[i]的内容直接 装 入 最 上 面 一 个 空内存块,i++ 输出 当前 内存 块状 结束 图 4-2 LRU 算法流程图
(3)OPT(最佳置换算法) 开始 页面走向存入数组 p[]中,内 存块用 page[]表示初始化为 0 i++ Y 当前 p[]中第 i 个元 素是否已在内存 N Page[]是否有空 Y N 把 page[]中以后一段时间都不使用 或 是 使 用 时 间 离 现 在 最 远 的 换 出.i++ 把 p[i]的内容直接 装 入 最 上 面 一 个 空内存块,i++ 输出 当前 内存 块状 结束 图 4-3 OPT 流程图
6、实验代码 #include using namespace std; #define Bsize 3 #define Psize 20 struct pageInfor { int content; int timer; }; class PRA{ public: //页面号 //被访问标记 //查找是否有空闲内存 //查找内存中是否有该页面 //查找应予置换的页面 //显示 PRA(void); int findSpace(void); int findExist(int curpage); int findReplace(void); void display(void); void FIFO(void);//FIFO 算法 void LRU(void);//LRU 算法 void Optimal(void);//OPTIMAL 算法 void BlockClear(void);//BLOCK 恢复 pageInfor * block;//物理块 pageInfor * page;//页面号串 private: }; PRA::PRA(void){ int QString[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1}; block = new pageInfor[Bsize]; for(int i=0; i
if(block[i].content == -1) return i;//找到空闲内存,返回 BLOCK 中位置 if(block[i].content == page[curpage].content) return i;//找到内存中有该页面,返回 BLOCK 中位置 if(block[i].timer >= block[pos].timer) pos = i;//找到应予置换页面,返回 BLOCK 中位置 return -1; } int PRA::findExist(int curpage) { for(int i=0; i
display(); for(int k=0; k
分享到:
收藏