操作系统优秀课程设计优质报告.doc
《操作系统优秀课程设计优质报告.doc》由会员分享,可在线阅读,更多相关《操作系统优秀课程设计优质报告.doc(49页珍藏版)》请在咨信网上搜索。
课程设计汇报 题 目: 模拟请求页式管理 课程名称: 计算机操作系统 学 院: 信息工程学院 专 业: 计算机科学和技术 班 级: 14计本(1) 学生姓名: * * * 学 号: 03031** 指导老师: * * 成 绩: 开课时间: - 年 一 学期 模拟请求页式管理 第1章 需求分析 1.1设计要求 请求页式管理是一个常见虚拟存放管理技术。本设计经过请求页式存放管理中页面置换算法模拟设计,了解虚拟存放技术特点,掌握请求页式管理页面置换算法。本试验要求用Vc++或其它高级语言编写和调试。 编写程序实现: (1)优异先出页面置换算法(FIFO) (2)最近最久未使用页面置换算法(LRU) 最好置换页面置换算法(OPT) 设计一个虚拟存放区和内存工作区,编程序演示以上三种算法具体实现过程,并计算访问命中率。 1.2处理方案 首先确定实现语言使用c#实现图形化界面,后确定要实现哪些功效,比如算法选择,页面添加,模拟控制。然后确定输出结构方便于程序测试和验证。将基础框架建立后再进行编程。编程前进行算法结构分析最终编程实现。 1.3算法实现原理 1、优异先出置换算法(FIFO): 发生缺页中止时根据页面进入内存次序总是淘汰最优异入内存页面。 2、最近最久未使用置换算法(LRU): 发生缺页中止时总是淘汰存在内存中最长时间未被使用页面。 3、最好置换算法(OPT): 发生缺页中止时若一个或多个页面未来将不会被调用则按优异先出标准淘汰页面,若未来全部有调用则比较调用时刻选择最远时刻页面淘汰。 4、缺页率:缺页次数占页面调用次数百分比。 第2章 概要设计 2.1数据设计 常变量:调用页面最大数量(MaxN),内存最大页面数(MaxM) 待调用页面数组:page_dd[MaxN]存放等候调用页面号 页面数组专用指针 page_p,用于指向page_dd数组中正需调入内存页号 内存块数组:Memery[MaxM],存放内存目前存放页号 缺页计数器:count,统计缺页次数 内存块状态数组:M1[MaxN],M2[MaxN],M3[MaxN],统计每次页面调用结束后内存各块状态 缺页统计数组s[MaxN],用于统计页面调用时是否产生缺页中止,初始化为是 2.2函数设计 1、页面添加函数:void btnAdd_Click(object sender, EventArgs e) 用于实现经过点击按钮实现数据输入。 2、内存初始化函数:init(int[] a, int[] b,int []m1,int[]m2,int[]m3) 参数有页面数组、内存数组、状态数组,采取优异先出算法对内存优异行装满 服务于优异先出页面置换函数和最好置换函数。 3、 输出函数:void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c)用于输出模拟结果,参数有页面数组,内存数组,状态数组,缺页统计数组。再模拟以后调用。 4、模拟控制函数:void btnmo_Click(object sender, EventArgs e)用于实现经过单击模拟按钮,依据用户所选算法进行模拟并显示结果。 5、优异先出算法模拟函数: void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s)用于实现优异先出算法模拟,参数有页面数组,内存数组、内存状态统计数组,缺页统计数组。在模拟函数中调用。 6、 最近最久未使用算法模拟函数: void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于实现最近最久未使用算法模拟,参数有页面数组,内存数组,内存状态统计数组,缺页统计数组。在模拟函数中被调用。 7、 最近最久未使用函数辅助函数:void LUR_I(int[] a,int e)用于对最近最久未使用算法中所用辅助数组(统计页面存在时长)进行调整,参数有辅助数组及需调整数据下标。在最近最久未使用函数中调用。 8、最好置换算法模拟函数: void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于模拟最好置换算法。参数有页面数组,内存数组,内存状态统计数组,缺页统计数组。在模拟函数中被调用。 9、 最好置换算法辅助函数:void OPT_F(int[] a, int e)用于对最好置换算法中辅助数组进行调整。参数有辅助数组,需调整数据下标。在最好置换算法中被调用。 10、 重置函数:void btncz_Click(object sender, EventArgs e)用于重新选择算法进行新模拟。 2.3关键算法设计 1、初始化函数算法: 第一步:将第一个页面调入内存,调整最好置换算法辅助数组,缺页计数器加一,保留内存数组状态。 第二步:调用下一个页面并判定内存中是否有本页面有转第三步,无转第四步。 第三步:更改缺页数组对应下标值,统计目前内存状态,调整最好置换算法辅助数组,页面指针指向下一页。 第四步:将页面调入内存,调整最好置换算法辅助函数,缺页计数器加一,保留内存数组状态。若内存尚不满转第一步。 具体见图1初始化算法步骤图。 图1 初始化算法步骤图 2、 优异先出页面置换算法: 第一步:检验内存中是否已经有需调用页面,有则转第二步,无则转第三步。 第二步:统计目前内存状态,修改缺页数组对应下标值。 第三步:内存中无需要调用页面,进行出队操作,然后进行入队操作,统计内存块状态,缺页计数器加一。 第四步:若页面数组未被调用结束转第一步。 具体见图2优异先出算法步骤图。 图2 优异先出算法步骤图 3、 最近最久未使用置换算法: 第一步:将页面调入内存,统计内存状态,缺页计数器加一,调整辅助数组,页面指针加一。 第二步:检验内存中是否已经有所需页面,有转第三步,无转第一步。 第三步:修改缺页数组对应下标统计,统计内存状态,调整辅助数组,页面指针加一。 第四步:内存是否已满,无则转第一步,是则转第五步。 第五步:检验内存中是否有所需页面,有则统计目前内存状态,修改缺页数组对应下标值。无则转第六步。 第六步:检验辅助数组找出最大值并统计其下标,置换内存中对应下标数据,调整辅助数组,缺页计数器加一。 第七步:页面是否调用结束未结束则转第五步。 具体见图3最近最久未使用算法步骤图。 图3 最近最久未使用算法 4、 最好置换算法: 第一步:检验内存中是否已经有所需页面,有则统计内存状态,修改缺页数组对应下标数值。无则转第二步。 第二步:判定内存中各页面未来调用情况,统计是否还有调用,若有则统计调用时刻。 第三步:分析调用情况,内存中页面全部在未来不会被调用转第四步,有一个被调用转第五步,有两个被调用转第六步,全被调用转第七步。 第四步:查找辅助数组找到内存中存在时间最长页面进行置换,修改内存状态,缺页计数器加一,修改辅助数组。 第五步:查找到不会被调用页面,并依据辅助数组选择最早进入内存页面将其置换。修改内存状态,缺页计数器加一,修改辅助数组。 第六步:查找辅助数组找到未来不需要在调用页面将其置换,修改辅助数组,统计内存状态,缺页计数器加一。 第七步:查找辅助数组,找寻最晚被调用页面,将其置换。统计内存状态,修改辅助数组,缺页计数器加一。 第八步:页面是否调用完成,不然转第一步。 具体见图4最好置换算法步骤图 图4 最好置换算法步骤图 2.4界面设计 采取c# 设计windows窗体应用程序,使用下拉列表框选择算法,经过按钮添加待调用页面。经过文本控件显示模拟结果。 显示样式:第一行:算法名称; 第二行:调用页面次序; 第三行至第五行显示内存在每调用一次页面后状态; 第六行:是否缺页; 最终一行显示缺页率; 第3章 具体设计和实现 3.1函数设计 1、添加按钮功效实现代码 关键功效:实现单击一次添加一个调用页面,并给出对应提醒,如正在输入是第几次调度页面,在输入为空时能够弹出对话框提醒用户,在输入完成时为避免数组越界应在输入完成时隐藏;输入过程中一直确保时输入焦点。 private void btnAdd_Click(object sender, EventArgs e) { if (txtAdd.Text != "")//输入不为空才能继续输入 { page_dd[i_add] = Convert.ToInt32(txtAdd.Text); /*将输入值赋值给页面数组*/ txtShow.Text += txtAdd.Text + " "; /*显示供用户查阅*/ i_add++; txtAdd.Clear(); /*清空*/ if (i_add == MaxN)//输入结束时 { txtAdd.ReadOnly = true;//不许可继续输入 btnAdd.Hide();//按钮隐藏 return; } txtAdd.Focus();//设置为输入焦点 label2.Text = "第" + (i_add + 1) + "次调度页面:"; /*提醒用户正在输入是第几次调度页面*/ } /*输入为空则弹出对话框提醒用户输入为空*/ else { MessageBox.Show("请输入调用页面!", "输入为空", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtAdd.Focus(); } } 2、 初始化函数 关键功效:将内存一优异先出方法填满,并统计每个页面进入时间,服务于优异先出页面置换算法和最好置换算法。 void init(int[] a, int[] b,int []m1,int[]m2,int[]m3) { /*内存未满时循环*/ for (int i = 0; i < MaxM&&page_p <MaxN ; i++) { b[i] = a[page_p];//调入内存 //调整辅助数组将刚进入内存页面对应时间 OPT_F (O_Q ,i); count++;//缺页计数器加一 m1[page_p] = b[0];//保留内存状态 m2[page_p] = b[1]; m3[page_p] = b[2]; page_p++;//调用下一页面 //检验内存中是否原先就有需要页面; for (int j = 0; j <= i&&page_p <MaxN ; j++) { if (b[j] == a[page_p]) {//找到这么页面 s[page_p] = 'F';//缺页数组对应数据更改 m1[page_p] = b[0];//统计内存状态 m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F(O_Q, -1);//调整最好置换算法辅助函数 page_p++;//调用下一页 j = -1;//重新开始寻求 } } } } 3、 优异先出页面置换函数 关键功效:依据优异先出算法要求在产生缺页中止时采取优异先出方法确定淘汰页面,并在每次页面调用时统计下内存状态,缺页次数;采取循环队列使得每次出队一定是最优异入内存。 private void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s) { int Fpage_p = page_p; int front, rear; //定义队列对手和对尾指针并初始化 front = 0; rear = MaxM - 1; int sa; //定义页面处理标志为1则表明此页面已处理 for (; Fpage_p < MaxN; Fpage_p++) { //从目前位置开始往后扫描 sa = 0; for (int i = 0; i < MaxM; i++) //检验内存中是否已经有要调用页面。 { //有需要页面则保留内存状态,修改缺页数组对应位值 if (b[i] == a[Fpage_p]) { m1[Fpage_p] = b[0]; m2[Fpage_p] = b[1]; m3[Fpage_p] = b[2]; s[Fpage_p] = 'F'; sa = 1; break; //找到就退出应为只可能有一个符合页面 } } if (sa == 0) { //未找到一致页面产生缺页中止进行出队操作淘汰最早进入内存页面 //并统计内存状态,计数器加一。 front = (front + 1) % MaxM; rear = (rear + 1) % MaxM; b[rear] = a[Fpage_p]; m1[Fpage_p] = b[0]; m2[Fpage_p] = b[1]; m3[Fpage_p] = b[2]; count++; } else continue; //内存原有一样页面则结束此次循环 } } 4、 最近最久未使用函数 关键功效:实现对最近最久页面置换算法模拟,统计缺页次数和每次页面对应内存状态。 private void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s) { int[] L_Q = new int[MaxM]{3,3,3}; //辅助数组统计页面存在时间,初始值全部是3,每次对应位置有新页面进入就刷//新为1,比原来值小加一大于原来值得不变 int sa; //页面已调用标志 for (int i = 0; i < MaxM && page_p < MaxN; i++) { //内存不满时实施将内存装满因其于优异先出不符合故不能调用初始化函数 b[i] = a[page_p];//调入内存 count++; m1[page_p] = b[0];//保留内存状态 m2[page_p] = b[1]; m3[page_p] = b[2]; LUR_I(L_Q, i); //调整辅助数组 page_p++; for (int j = 0; j <= i && page_p < MaxN ; j++) { //判定已在内存中页面中是否有和将要调用页面一致页面 if (b[j] == a[page_p]) { //有则修改缺页状态函数并统计目前内存状态 s[page_p] = 'F'; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; LUR_I(L_Q, j); page_p++; j = -1; } } } for (; page_p < MaxN; page_p++) { //内存装满后从目前位置向后调用页面 sa = 0; for (int i = 0; i < MaxM; i++) //检验内存中是否已经有要调用页面。 { if (b[i] == a[page_p]) { //有则统计内存状态修改缺页数组调整辅助函数 m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; s[page_p] = 'F'; LUR_I(L_Q, i); sa = 1; break; } } if (sa == 0) { for (int i = 0; i < MaxM; i++) { //产生缺页中止 if (L_Q[i] == 3) //查找辅助数组找到值为3位置对应下标并 { //替换此下标代表内存块页面并统计内存状态,调整辅助函数,计数器加一 b[i] = a[page_p]; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; LUR_I(L_Q, i); break; } } count++; } else continue; } } 5、 最好置换算法 关键功效:模拟实现最好页面置换算法,淘汰内存中永远不会调用页面,假如有多个则采取优异先出标准进行置换,若多个页面在以后全部有调用则淘汰最终被调用页面,统计每次页面调用后内存状态,统计缺页中止数 private void OPT(int[]a,int[]b,int[]m1,int[]m2,int[]m3,char[]s) { int sa;//页面调用处理标志 int O_p;//页面数组辅助指针 int Ocount;//辅助计数变量 int[] OPT_I=new int [MaxM ]{-1 ,-1 ,-1 }; //辅助数组统计页面未来调用是否 int[] OPT_J=new int [MaxM]{MaxN ,MaxN ,MaxN }; //辅助数组统计页面未来被调用时刻 for (; page_p < MaxN; page_p++) { for (int i = 0; i < MaxM; i++) { OPT_I[i] = -1;//刷新状态数组 OPT_J[i] = MaxN; } sa = 0; for (int i = 0; i < MaxM; i++)//检验内存中是否已经有要调用页面。 { //将要调用页面存在于内存中 if (b[i] == a[page_p]) { //统计内存状态修改缺页数组,调整辅助数组 m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F(O_Q,-1); s[page_p] = 'F'; sa = 1; break; } } if (sa == 0)//缺页 { Ocount = 0; for (int i = 0; i < MaxM; i++) { //向后查找页面调用情况用辅助数组统计 O_p = page_p + 1; for (; O_p < MaxN; O_p++) { if (b[i] == a[O_p]) { Ocount++; OPT_I[i] = 1; //表示下标代表页面未来会被调用 OPT_J[i] = O_p; //表示其调用时刻 break; } } } switch (Ocount) { case 0: //全部页面以后全部不会再度调用,查找辅助函数替换最优异入内存数组 int temp = 0; for (int i = 0; i < MaxM; i++) { if (O_Q[i] > O_Q[temp]) temp = i; } b[temp] = a[page_p]; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F (O_Q ,temp); count++; break; case 1: //有一个页面将在以后调用,比较两个不会被调用页面谁优异入内存并置换之 temp = 0; for (int i = 0; i < MaxM; i++) { if (OPT_I[i] != 1 && O_Q[i] > O_Q[temp]) temp = i; } b[temp] = a[page_p]; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F (O_Q ,temp); count++; break; case 2: //有两个页面将在以后被调用,直接淘汰未来不会调用那个 for (int i = 0; i < MaxM; i++) { if (OPT_I[i] == -1) { b[i] = a[page_p]; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F(O_Q, i); count++; } } break; case 3: //全部页面全部将被调用,查找辅助函数,得到最晚被调用页面并淘汰之 int p = 0; for (int i = 0; i < MaxM; i++) { if (OPT_J[i] >OPT_J[p]) p = i; } b[p] = a[page_p]; m1[page_p] = b[0]; m2[page_p] = b[1]; m3[page_p] = b[2]; OPT_F(O_Q, p); count++; break; } } } } 6、 输出函数 关键功效:按既定形式输出模拟结果,并计算缺页率并输出 private void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c) { lblshow.Text = ""; lblshow.Text =comboBox1.Text + ":\n"; //输出算法名称 for (int i = 0; i < MaxN; i++) { //输- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 优秀 课程设计 优质 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文