欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统实验三-磁盘调度算法的实现.doc

    • 资源ID:35239240       资源大小:139KB        全文页数:10页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统实验三-磁盘调度算法的实现.doc

    天津理工大学计算机与通信工程学院实验报告2013 至 2014 学年 第 一 学期课程名称操作系统学号 学生姓名 年级 专业 教学班号 实验地点 实验时间 2013年 月 日 第 节 至 月 日 第 节主讲教师 辅导教师 实验( 三 )实验名称磁盘调度算法的实现软件环境VC+6.0硬件环境PC机实验目的操作系统是计算机科学与技术专业和信息与计算科学专业本科教学计划中的一门重要的专业基础课程,是对计算机系统硬软件资源进行管理的系统软件,是计算机系统的管理和指挥中心。通过本课程实验,使学生综合运用程序设计基础与语言、数据结构、计算机原理与接口等先行课程的知识以及操作系统课程的知识在各种资源管理调度策略下,设计操作系统资源管理的模拟程序,使学生加深了解操作系统的工作机理,对操作系统的功能及结构设计有更加深入的实践,为开发系统软件和应用软件打下基础。实验内容(应包括实验题目、实验要求、实验任务等)实验内容:1、本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。2、实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。3、设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。4、选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。5、按算法的寻道效率进行排序,并对各算法的性能进行分析比较。实验要求:学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)在VC+6.0编写如下代码#include<iostream>#include<ctime>using namespace std;void FCFS(int a,int n);void SSTF(int a,int n);void SCAN(int a,int n);void CSCAN(int a,int n);int main() int n;/磁道的个数 int s;/功能号 cout<<"请输入磁道的个数:"<<endl; cin>>n; int *a=new intn; cout<<"生成随机磁道号."<<endl; srand(unsigned)time(NULL); for(int i=0;i<n;i+) ai=(rand()%100)+1; cout<<ai<<" " cout<<endl; while(1) cout<<endl; cout<<"1、先来先服务算法(FCFS)"<<endl; cout<<"2、最短寻道时间算法(SSTF)"<<endl; cout<<"3、扫描算法(SCAN)"<<endl; cout<<"4、循环扫描算法(CSCAN)"<<endl; cout<<"0、退出"<<endl; cout<<endl; cout<<"请选择功能号:" cin>>s; if(s>4)cout<<"输入有误!"<<endl; else switch(s) case 0: exit(0);break ; case 1:FCFS(a,n); break; case 2:SSTF(a, n);break; case 3:SCAN(a, n);break; case 4:CSCAN(a,n);break; return 0; /先来先服务调度算法(FCFS)void FCFS(int a,int n)int sum=0,j,i,first=0,now;cout<<"请输入当前磁道号:"cin>>now;/确定当前磁头所在位置cout<<"磁盘调度顺序为:"<<endl;for( i=0;i<n;i+)/按访问顺序输出磁道号cout<<ai<<" "/计算sumfor(i=0,j=1;j<n;i+,j+) first+=abs(aj-ai);/外围磁道与最里面磁道的距离 sum+=first+abs(now-a0);cout<<endl;cout<<"移动的总磁道数: "<<sum<<endl;/最短寻道时间算法(SSTF)void SSTF(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;/将磁道号按递增排序for(i=0;i<n;i+)for(j=i+1;j<n;j+) if(ai>aj) temp=ai; ai=aj; aj=temp; cout<<"按递增顺序排好的磁道:"<<endl;for( i=0;i<n;i+)cout<<ai<<" "/输出排好的磁道顺序cout<<endl;cout<<"请输入当前的磁道号:"cin>>now;/确定当前磁头所在位置cout<<"磁盘调度顺序为:"<<endl;if(an-1<=now)/当前磁头位置大于最外围欲访问磁道 for(i=n-1;i>=0;i-) cout<<ai<<" " sum=now-a0;else if(a0>=now)/当前磁头位置小于最里欲访问磁道 for(i=0;i<n;i+) cout<<ai<<" " sum=an-1-now; else while(ak<now)/确定当前磁道在已排的序列中的位置 k+; l=k-1;/在磁头位置的前一个欲访问磁道 r=k;/磁头欲访问磁道 while(l>=0)&&(r<n) if(now-al)<=(ar-now)/选择离磁头近的磁道 cout<<al<<" " sum+=now-al; now=al; l=l-1; else cout<<ar<<" " sum+=ar-now; now=ar; r=r+1; if(l=-1)/磁头位置里侧的磁道已访问完 for(j=r;j<n;j+)/访问磁头位置外侧的磁道 cout<<aj<<" " sum+=an-1-a0;if(r=n)/磁头位置外侧的磁道已访问完for(j=k-1;j>-1;j-) /访问磁头位置里侧的磁道 cout<<aj<<" " sum+=an-1-a0; cout<<endl; cout<<"移动的总道数:"<<sum<<endl;/扫描算法(SCAN)void SCAN(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;for(i=0;i<n;i+)/对访问磁道按由小到大顺序排列输出 for(j=i+1;j<n;j+) if(ai>aj) temp=ai; ai=aj; aj=temp; cout<<"按递增顺序排好的磁道:"<<endl;for( i=0;i<n;i+)cout<<ai<<" "cout<<endl;cout<<"请输入当前的磁道号:"cin>>now;/以下算法确定磁道访问顺序 if(an-1<=now) /磁头位置大于最外围欲访问磁道 for(i=n-1;i>=0;i-) cout<<ai<<" " sum=now-a0; else if(a0>=now) /磁头位置小于最里欲访问磁道 for(i=0;i<n;i+) cout<<ai<<" " sum=an-1-now; else /磁头位置在最里侧磁道与最外侧磁道之间 int d; while(ak<now) /确定当前磁道在已排的序列中的位置 k+; l=k-1;/在磁头位置的前一个欲访问磁道 r=k; /磁头欲访问磁道 cout<<"请输入当前磁头移动的方向 (0 表示向内 ,1表示向外) : " cin>>d; /确定磁头访问的方向 cout<<"磁盘调度顺序为:" if(d=0|d=1) if(d=0) /磁头向内 for(j=l;j>=0;j-) cout<<aj<<" " for(j=r;j<n;j+) cout<<aj<<" " sum=now-2*a0+an-1; if(d=1) /磁头向外 for(j=r;j<n;j+) cout<<aj<<" " for(j=l;j>=0;j-) cout<<aj<<" " sum=2*an-1-now-a0; elsecout<<"请输入0或1!"<<endl; cout<<endl; cout<<"移动的总道数: "<<sum<<endl;/循环扫描算法(CSCAN)void CSCAN(int a,int n)int temp;int now,l,r;int i,j,sum=0;int k=1;for(i=0;i<n;i+)/对访问磁道按由小到大顺序排列输出 for(j=i+1;j<n;j+) if(ai>aj) temp=ai; ai=aj; aj=temp; cout<<"按递增顺序排好的磁道:"<<endl; for( i=0;i<n;i+) cout<<ai<<" " cout<<endl;cout<<"请输入当前的磁道号:"cin>>now;/确定当前磁道号if(an-1<=now)/磁头位置大于最外围欲访问磁道 for(i=0;i<n;i+) cout<<ai<<" " sum=now-2*a0+an-1; else if(a0>=now)/磁头位置小于最里欲访问磁道 for(i=0;i<n;i+) cout<<ai<<" " sum=an-1-now; else /磁头位置在最里侧磁道与最外侧磁道之间 int d; while(ak<now) k+; l=k-1;/在磁头位置的前一个欲访问磁道 r=k; /磁头欲访问磁道 cout<<"请输入当前磁头移动的方向 (0 表示向内 ,1表示向外) : " cin>>d; /确定磁头访问的方向 cout<<"磁盘调度顺序为:" if(d=0|d=1) if(d=1) /磁头向外侧访问 for(j=r;j<n;j+)/先访问外侧磁道再转向最里欲访问磁道 cout<<aj<<" " for(j=0;j<r;j+) cout<<aj<<" " sum=2*an-1-now-2*a0+al; if(d=0) /磁头向内侧访问 for(j=r-1;j>=0;j-) cout<<aj<<" " for(j=n-1;j>=r;j-)/ cout<<aj<<" " sum=2*an-1-2*a0+now-ar; else cout<<"请输入0或1!" cout<<endl; cout<<"移动的总道数: "<<sum<<endl;实验结果:1.先来先服务算法(FCFS)测试结果2.最短寻道时间算法(SSTF)测试结果3.循环扫描算法(SCAN)测试结果4.循环扫描算法(CSCAN)测试结果由以上测试结果可知,在相同的实验前提下,SSTF移动的总道数最少,性能最优附录(可包括源程序清单或其它说明)

    注意事项

    本文(操作系统实验三-磁盘调度算法的实现.doc)为本站会员(叶***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开