《2022年常用页面置换算法模拟实验 .pdf》由会员分享,可在线阅读,更多相关《2022年常用页面置换算法模拟实验 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统 课程实验报告实验地点实验时间实验课表现出勤和个人表现 Q1(15+15(组长评分) =30 分) 得分:实验总分(Q1+Q2+Q3+Q4) 实验完成情况 Q2(45 分(组长与教师评分的加权平均) 得分:实验编号与实验名称:第 7 次实验 常用页面置换算法模拟实验实验目的:1实验目的通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。实验内容及要求(详见实验讲义与实验指导书):2. 实验要求 :1)要求用你熟悉的程序设计语言编写和调试一个页面置换模拟程序;要求在主函数中测
2、试。2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图) 、源代码、运行结果、体会等部分。3)必须 模拟 本实验内容中提到的算法中的至少 2 种页面置换算法。4) 比较不同页面置换算法的效率3实验内容编写一个程序,使用以下页面置换算法中的某2 种分别模拟一个分页系统,并统计同一个页面访问序列情况下不同页面置换算法引发的缺页中断次数。1、第二次机会算法(Second Chance)2、最近最少使用算法(Least Recently Used,LRU )3、最不常用算法(Not Frequently Used ,NFU)4、最近未使用算法(Not Rec
3、ently Used ,NRU)5、时钟页面置换算法6、老化算法( aging)页框的数量固定为4,虚拟页面数为8。实验输入为访问页面序列,比如0,1 ,3 ,2,7,1实验用到的软件(:)C-Free 5 实验内容及 关键步骤(代码) Q3(15 分)得分:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
4、名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 代码:#include #include #include #define page_frame_number 4 / 页框数#define virtual_page_number 8 / 虚拟页面数int page_id, counter = 0;/ 输入 id 和计数器char algorithm20;/算法选择int page_interrupt_number = 0; struct Page_table int page_id; /页号int load_time; /装入时间int
5、last_visit_time; /最后访问时间page_tablepage_frame_number; int cmp(const void *p,const void *q) int c = (*(struct Page_table*)p).load_time - (*(struct Page_table*)q).load_time; if(c 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - return 1; el
6、se return -1; int cmp1(const void *p,const void *q) int c = (*(struct Page_table*)p).last_visit_time - (*(struct Page_table*)q).last_visit_time; if(c 0) return 1; else return -1; void init()/ 初始化int i; for(i = 0; i page_frame_number; i+) page_tablei.page_id = -1; page_tablei.load_time = -1; page_tab
7、lei.last_visit_time = -1; void print(int x)/ 打印信息int i,j; switch(x) case 0: for(i = 0; i 80; i+) printf(-); printf(tt 试验七常用页面置换算法模拟实验n); for(i = 0; i 80; i+) printf(-); printf(n); printf( 选择算法: F/L(FIFO 算法/LRU 算法) n);break; case 1:printf(请输入访问页面的顺序 ,以“-1”结束: n);break; case 2: printf(页表信息: n 页号页框号装入时
8、间最近访问时间n); for(j = 0; j page_frame_number; j+) printf(%4d%8d%7d%7dn,page_tablej.page_id,j,page_tablej.load_time,page_tablej.last_visit_time); ;break; case 3:for(i = 0; i 80; i+) printf(-); printf(ttFIFO 算法模拟过程 n); for(i = 0; i 80; i+) printf(-); printf(n);break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
9、- - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - case 4:for(i = 0; i 80; i+) printf(-); printf(ttLRU 算法模拟过程 n); for(i = 0; i 80; i+) printf(-); printf(n); int judge() int i; for(i = 0; i page_frame_number; i+) if(page_tablei.page_id = -1|page_tablei.page_id = page_id) return i
10、; return -1; void fifo() int j; print(3); print(1); while(1) scanf(%d,&page_id); if(page_id = -1) break; j = judge(); if(j = -1) qsort(page_table, page_frame_number, sizeof(struct Page_table), cmp);/按照最后访问时间从小到大排序page_table0.page_id = page_id; page_table0.load_time = counter; page_table0.last_visit_
11、time = counter; page_interrupt_number+; else if(page_tablej.page_id = -1) page_tablej.page_id = page_id; page_tablej.load_time = counter; page_tablej.last_visit_time = counter; page_interrupt_number+; else page_tablej.last_visit_time = counter; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
12、- 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - counter+; print(2); printf( 缺页中断次数: %dn,page_interrupt_number); void lru() int j; print(4); print(1); while(1) scanf(%d,&page_id); if(page_id = -1) break; j = judge(); if(j = -1) qsort(page_table, page_frame_number, sizeof(struct Page_table), cmp
13、1);/按照装入时间从小到大排序page_table0.page_id = page_id; page_table0.load_time = counter; page_table0.last_visit_time = counter; page_interrupt_number+; else if(page_tablej.page_id = -1) page_tablej.page_id = page_id; page_tablej.load_time = counter; page_tablej.last_visit_time = counter; page_interrupt_numbe
14、r+; else page_tablej.last_visit_time = counter; counter+; print(2); printf( 缺页中断次数: %dn,page_interrupt_number); int main() print(0); init(); while(1) scanf(%s,algorithm); if(strcmp(algorithm,F) = 0|strcmp(algorithm,L) = 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
15、 第 6 页,共 10 页 - - - - - - - - - break; else printf( 输入出错,请重新输入 n); if(strcmp(algorithm,F) = 0) fifo(); else lru(); system(pause); return 0; FIFO 算法运行结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - LRU 算法运行结果名师资料总结 - - -精品资料欢迎下载 - - - - -
16、 - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 实验过程中遇到的问题解决办法与实验体会Q4(需手写 ,10分)得分:这次实验让我了解了内存页面置换的几种算法,通过代码,让我更加深刻了了解了 fifo,lru,算法的核心思想。对于其他页面替换算法,也有初步的学习理解。评阅教师特殊评语:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 评阅教师:日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -