logo资料库

操作系统实验报告 用C++实现页面置换算法,LRU与FCFS.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验报告 课程名称: 操作系统 实验名称: 页面置换算法 实验类型: 设计性 实验地点: 学院 307 实验日期: 2017.11.17 指导教师: 徐华 专业: 计算机科学与技术 班级: 算机 1504 学号: 1511010403 姓名: 刘元山 成绩: 辽宁石油化工大学计算机与通信工程学院
实验报告说明 (1) 实验目的 加深对请求分页存储管理实现原理的理解,掌握页面置换 算法。 (2) 实验内容与要求 用 C 或 C++语言实现下列要求,并写出实验报告,报告内容包括: 题目、目的、内容和要求、程序清单、运行情况(输入、输出)、 总结。 设进程大小 6 页,编号为 0~5;供进程使用的内存块数为 4,编号为 0~3 已知页面走向为:4 3 2 1 4 3 5 4 3 2 1 5 假 设进程页面开始时都不在内存,页表长度 6,表项内容可有:页号、 块号、是否在内存等信息。编写程序,输出采用 FIFO 和 LRU 页 面置换算法时,访问各页面时各物理块中的页号情况及缺页次数、 缺页率。(提示:访问一个页面时,查页表,看该页面是否在内存, 若不在,调入、修改页表。) (3) 实验原理 LRU 置换算法: #include #include #include using namespace std; struct opt { int value; //存储页面走向 int time; //存储页面访问时间
}; const int maxn=105; int a[maxn]; //存储页面走向顺序 int main() { deque dq; deque::iterator pos; //创建队列迭代器 int numcpulru,numlostlru=0; printf("请输入物理内存块数:"); scanf("%d",&numcpulru); int n; printf("请输入页面走向个数:"); scanf("%d",&n); for(int j=0; j
if((*pos).value==in) { flag=1; break; } if(!flag) //不存在此页面 { numlostlru++;//缺页数+1 int m=dq.front().time; deque::iterator mp=dq.begin(); for (pos = dq.begin(); pos != dq.end(); pos++) { printf("%d %d\n",(*pos).value,(*pos).time); if((*pos).time>m) { printf("迭代"); mp=pos;//时间最大的页面的位置 m=(*pos).time; //此时队列中剩余最长页面 } } opt temp; temp.value=in; int f=0; dq.erase(mp); temp.time=0; //加进来之后 dq.push_back(temp); } } //每次之后各对象的 time for (pos = dq.begin(); pos != dq.end(); pos++) { int f=0; for(int j=i; j>=0; j--) if(a[j]==(*pos).value) { (*pos).time=i-j; break; } } } printf("LRU 缺页次数为:%d\n",numlostlru); printf("LRU 中断率为:%lf\n",(double)numlostlru*1.0/n); }
FIFO 置换算法 #include #include #include using namespace std; int main() { deque dq; deque::iterator pos; int numcpufifo,numlostfifo=0; printf("请输入内存块数:"); scanf("%d",&numcpufifo); int n; printf("\n 请输入页面走向个数:"); scanf("%d",&n); for(int i=0; i
flag=1; break; } if(!flag) //不存在此元素 { numlostfifo++; dq.push_back(in);//放入队列 } } else //不存在多余页框 { int flag=0; for (pos = dq.begin(); pos != dq.end(); pos++) if((*pos)==in) { flag=1; break; } //存在该元素 if(!flag) //不存在此元素 则置换最先进入的项 { numcpufifo++;//缺页数+1 dq.pop_front();//最先进入的出队列 dq.push_back(in);//进队列 } } } printf("FIFO 缺页次数为:%d\n",numcpufifo); printf("FIFO 缺页中断率为:%lf\n",(double)numlostfifo*1.0/n); } (4)实验总结
【实验总结】 通过本次实验,我学会 LRU 页面置换算法和 FIFO 页面置 换算法,个人感觉编写 LRU 置换算法的难度较大,可以用堆 栈和队列来实现,我选择用队列来实现,发现对页面访问时 间顺序的记录较为困难,通过查阅资料进一步学习堆栈知识, 最终得以解决问题。 【指导教师评与成绩】 成绩: 指导教师(签字): 年 月 日
分享到:
收藏