版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课程名称:操作系统实验题目:姓名类凯学院信息与电气工程学院专业计算机科学与技术年级1302学号201322139082015年7月1日课程设计选题编程序实现下述磁盘调度算法、编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度。设计要求:设计主界面以灵活选择某算法,且以下算法都要实现。
1)先来先服务算法(FCFS)
2)最短寻道时间优先算法(SSTF)
3)扫描算法(SCAN)
4)循环扫描算法(CSCAN)课程设计需求分析通过实验加深对操作系统基础理论和重要算法的理解,加强动手能力,加强实践动手能力和程序开发能力的培养,提高分析问题解决问题的能力,培养合作精神。通过模拟磁臂调度来加深对操作系统中磁臂调度概念的理解。熟悉磁盘管理系统的设计方法,加深对所学各种磁盘调度算法的了解。概要设计编程序实现下述磁盘调度算法、编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度。平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即:L=(M1+M2+……+Mi+……+MN)/N其中Mi为所需访问的磁道号所需移动的磁道数。各模块的基本算法1.先来先服务(FCFS)的设计思想即先来的请求先被响应。这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。FCFS策略看起来似乎是相当"公平"的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。
2.最短寻道时间优先调度(SSTF)的设计思想最短时间优先算法选择这样的进程。要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。
扫描算法(SCAN)的设计思想SCAN算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。4.循环扫描(CSACN)的设计思想循环扫描(CSCAN)算法:CSCAN算法单项扫描调度算法的基本思想是,不考虑访问者等待的先后次序,总是从0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问者等待服务。在返回到0号柱面后,再次进行扫描。系统实现:流程图、代码源程序#include<stdio.h>#include<stdlib.h>#definemaxsize1001.先来先服务算法(FCFS)源程序:intFCFS(intarray[],intn){intsum=0,j,i;intavervage;printf("\nFCFS调度结果:");for(i=0;i<n;i++){printf("%d",array[i]);}for(i=0,j=1;j<n;i++,j++){sum+=abs(array[j]-array[i])}avervasge=sum/(n-1);printf("\n移动的总道数:%d\n",sum);printf("平均寻道长度:%d\n",avervage);2.最短寻道时间优先调度算法intSSTF(intarray[],intm){inttemp;intk=1;intnow,l,r;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n请输入当前的磁道号:");scanf("%d",&now);printf("\nSSTF调度结果:");if(array[m-1]<=now){for(i=m-1;i>=0;i--)printf("%d",array[i]);sum=now-array[0];}elseif(array[0]>=now){for(i=0;i<m;i++)printf("%d",array[i]);sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;while((l>=0)&&(r<m)){if((now-array[l])<=(array[r]-now)){printf("%d",array[l]);sum+=now-array[l];now=array[l];l=l-1;}else{printf("%d",array[r]);sum+=array[r]-now;now=array[r];r=r+1;}}if(l=-1){for(j=r;j<m;j++){printf("%d",array[j]);}sum+=array[m-1]-array[0];}else{for(j=l;j>=0;j--){printf("%d",array[j]);}sum+=array[m-1]-array[0];}averageg=sum/m;printf("\n移动的总道数:%d\n",sum);printf("平均寻道长度:%d\n",avg);}电梯算法源程序:intSCAN(intarray[],intm){inttemp;intk=1;intnow,l,r,d;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n请输入当前的磁道号:");scanf("%d",&now);if(array[m-1]<=now){printf("\nSCAN调度结果:");for(i=m-1;i>=0;i--){printf("%d",array[i]);}sum=now-array[0];}elseif(array[0]>=now){printf("\nSCAN调度结果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;printf("\n请输入当前移动臂的移动的方向(1磁道号增加方向,0磁道号减小方向):");scanf("%d",&d);printf("\nSCAN调度结果:");if(d==0){for(j=l;j>=0;j--){printf("%d",array[j]);}for(j=r;j<m;j++){printf("%d",array[j]);}sum=now-2*array[0]+array[m-1];//计算移动距离}//磁道号减小方向else{for(j=r;j<m;j++){printf("%d",array[j]);}for(j=l;j>=0;j--){printf("%d",array[j]);}sum=-now-array[0]+2*array[m-1];//计算移动距离}//磁道号增加方向}average=sum/m;printf("\n移动的总道数:%d\n",sum);printf("平均寻道长度:%d\n",average);}循环扫描算法(CSCAN)IntCSCAN(intarray[],intm){inttemp;intk=1;intnow,l,r,d;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n请输入当前的磁道号:");scanf("%d",&now);if(array[m-1]<=now){printf("\nCSCAN调度结果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=now-array[0]+array[m-1];}elseif(array[0]>=now){printf("\nCSCAN调度结果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;printf("\n请输入当前移动臂的移动的方向(1磁道号增加方向,0磁道号减小方向):");scanf("%d",&d);printf("\nCSCAN调度结果:");if(d==0){for(j=l;j>=0;j--){printf("%d",array[j]);}for(j=m-1;j>=r;j--){printf("%d",array[j]);}sum=2*(array[m-1]-array[0])-array[r]+now;}else{for(j=r;j<m;j++){printf("%d",array[j]);}for(j=0;j<r;j++){printf("%d",array[j]);}sum=2*(array[m-1]-array[0])+array[r-1]-now;}}average=sum/m;printf("\n移动的总道数:%d\n",sum);printf("平均寻道长度:%d\n",average);}主界面intmain(){intc;FILE*fp;intcidao[maxsize];inti=0,count;fp=fopen("cidao.txt","r+");if(fp==NULL){printf("\n请先设置磁道!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%d",&cidao[i]);i++;}count=i-1;printf("\n磁道读取结果:\n");for(i=0;i<count;i++){printf("%5d",cidao[i]);}printf("\n");while(1){printf("\n算法选择:\n");printf("1.先来先服务算法(FCFS)\n");printf("2.最短寻道时间优先算法(SSTF)\n");printf("3.电梯算法(SCAN)\n");printf("4.循环扫描算法(CSCAN)\n");printf("5.退出\n");printf("\n");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026荔波县市场监督管理局公开招聘城镇公益性岗位人员2人考试参考题库及答案解析
- 2026福建三明市沙县区人民法院招聘驾驶员1人笔试模拟试题及答案解析
- 2026清远市清城区洲心经济发展总公司招聘公益性岗位人员1人考试备考试题及答案解析
- 2026吉林大学第一医院检验科医技招聘笔试备考试题及答案解析
- 2026年陕西煤业化工集团有限责任公司人员招聘考试模拟试题及答案
- 2026年度湖南衡阳县县直机关遴选公务员32人笔试备考试题及答案解析
- 2026年日照秦楼街道城镇公益性岗位招聘笔试备考题库及答案解析
- 2027年安徽省面向中国科学院大学定向招录选调生笔试备考题库及答案解析
- 2026重庆市铜梁区华兴镇基层公益性岗位招聘3人笔试备考题库及答案解析
- 2026温岭市新世纪人才开发有限公司受石桥头镇委托招聘公益性岗位工作人员1人考试备考题库及答案解析
- 2025年中国农业银行校园招聘考试笔试题试卷真题附答案
- 雨课堂学堂在线学堂云《急救与心理技能(中南大学)》单元测试考核答案
- 安徽省江南十校2027届高三9月综合素质检测语文试卷(含答案)
- 城市道路路面养护工程竣工验收报告
- 2026秋新教材人教版四年级上册数学全册教案(教学设计)
- 部编版七年级语文上册古诗文理解性默写
- 2026 国企项目现场管控岗招聘考试参考题库 含答案
- 2025年西藏自治区林芝市网格员招聘笔试试题及答案详解
- 2026中盐安徽红四方肥业股份有限公司招聘15人笔试备考试题及答案详解
- 统编版小学语文二年级下册第五单元测试卷(含答案)
- 2026年环保隐患排查表
评论
0/150
提交评论