




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华南农业大学信息(软件)学院操作系统分析与设计实习成绩单开设时间:2014学年第一学期小组成员、组内分工及各成员成绩学号姓名分工成绩实验题目题目二 磁盘调度算法的模拟实现及对比自我评价通过这次的操作系统课程设计,我懂得了许多,首先是让我对操作系统磁盘调度策略有了更加深刻的认识,自己动手操作比光看书能更加了解磁盘调度的策略和原理,同时对磁盘调度的四种算法先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到算法的逻辑性对程序的重要影响,算
2、法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。也增强了我写代码的能力,尤其是设计算法有了进步,知道了时间复杂度的重要性。由于这次的课程设计是单人做的,所以也增强了独立做程序的能力。不过,通过这次课程设计,我也了解到自己有很多不足,比如在设计界面方面明显经验不足,许多地方都需要上网查询,以至于界面的简陋,代码也不够工整明了。总的来说,这次课程设计不仅提升了自己的知识和能力,还让自己知道了自己的许多不足之处。教师评语评价指标:l 题目内容和要求完成情况优 良 中 差l 对算法原理的理解程度 优 良 中 差l 程序设计水平优 良 中 差l 程序运行效果及正确性 优 良
3、中 差l 课程设计报告结构清晰优 良 中 差l 报告中总结和分析详尽优 良 中 差教师签名1、 需求分析:(1) 输入的形式和输入值的范围: 在文本框输入序列长度,输入值为int类型(2) 输出的形式: 输出每种磁盘调度算法的服务序列(3) 程序所能达到的功能: 模拟实现FCFS、SSTF、电梯LOOK、C-SCAN 算法,并计算及比较磁头移动道数。测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。输入磁道范围01000输入所选磁道个数01000选择算法142、 概要设计:主程序流程图:3、 详细设计:先来先服务算法(FCFS):按先来后到次序服务,未作优化。 最简单
4、的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。 采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。最短寻道时间优先算法(SSTF) :最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。 但最短查找时间优先(SSTF)调度,FCFS
5、会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。扫描算法(SCAN):SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。但是,“电梯调度
6、”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。循环扫描(C-SCAN):循环扫描 CSCAN是为了减少 SCAN 算法造成的某些进程的请求被严重推迟,CSCAN 算法规定磁头单向移动。函数调用关系图:4、 调试分析:(1) 调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析; 通过对每一行的输出判断问题出现在哪里,然后把出问题的地方缩小到一定范围,然后解决问题,如若解决不出则上网查询,再不行就咨询同学。设计主要分为界面设计和算法设计,界面设计部分并没有进行过多的改进,算法部分SSTF算法实现的比较复杂,时间复杂度较高。(2) 算法的时间复杂性(包括基本
7、操作和其他算法的时间复杂性的分析)和改进设想;FIFO算法经历一重循环,时间复杂度为O(n),算法比较简单;SSTF算法经历二重循环,时间复杂度为O(n2),算法较为复杂SCAN和CSCAN算法含多个一重循环,时间复杂度为O(n),动态数组存储服务序列;(3) 设计过程的经验和体会; 设计过程必须要考虑时间复杂度,过高的时间复杂度会导致程序执行效率低下。必须要进行结构化设计,各个模块要很清晰的体现,能在代码中找到相关模块的代码,这样才便于程序的维护和调试。(4) 实现过程中出现的主要问题及解决方法。主要问题是SSTF算法的设计。解决方法是上网查询SSTF算法的代码,学习其中的算法思想,然后运用
8、到自己的代码中去。5、 运行结果:输入磁道范围、输入所选磁道个数、选择算法:测试与运行结果:输出请求序列、平均寻道时间:6、 总结:通过这次的操作系统课程设计,我懂得了许多,首先是让我对操作系统磁盘调度策略有了更加深刻的认识,自己动手操作比光看书能更加了解磁盘调度的策略和原理,同时对磁盘调度的四种算法先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作
9、系统的学习中有极大帮助。也增强了我写代码的能力,尤其是设计算法有了进步,知道了时间复杂度的重要性。由于这次的课程设计是单人做的,所以也增强了独立做程序的能力。不过,通过这次课程设计,我也了解到自己有很多不足,比如在设计界面方面明显经验不足,许多地方都需要上网查询,以至于界面的简陋,代码也不够工整明了。总的来说,这次课程设计不仅提升了自己的知识和能力,还让自己知道了自己的许多不足之处。七、源代码:#include<stdio.h>#include<iostream>#include<string.h>#include<math.h>using na
10、mespace std;#define maxsize 1000/判断输入的数据是否有效int decide(char str)int i = 0;while (stri != '0')if (stri < '0' | stri > '9')return 0;break;i+;return i;/将字符串转换为数字int trans(char str, int a)int i;int sum = 0;for (i = 0; i < a; i+)sum = sum + (int)(stri - '0')*pow(1
11、0, a - i - 1);return sum;/冒泡排序算法int *bubble(int cidao, int m)int i, j;int temp;for (i = 0; i < m; i+)for (j = i + 1; j < m; j+)if (cidaoi > cidaoj)temp = cidaoi;cidaoi = cidaoj;cidaoj = temp;cout << "排序后的磁盘序列为:"for (i = 0; i < m; i+)cout << cidaoi << " &q
12、uot;cout << endl;return cidao;/当前磁道输入int printnow()char str10;int a, now;cout << "请输入当前磁道号:"A:cin >> str;a = decide(str);if (a = 0)cout << "输入数据类型有误,请重新输入!" << endl;goto A;elsenow = trans(str, a);return now;int printoi(int cidao, int now, int m)int i
13、;int sum = 0;cout << "磁道扫描序列为:"for (i = m - 1; i >= 0; i-)cout << cidaoi << " "sum += abs(now - cidaoi);now = cidaoi;return sum;/直接由内向外依次给予各请求服务int printio(int cidao, int now, int m)int i;int sum = 0;cout << "磁道扫描序列为:"for (i = 0; i < m; i+)
14、cout << cidaoi << " "sum += abs(cidaoi - now);now = cidaoi;return sum;/直接从当前次磁道到最外,再由外向内依次给予各请求服务int printioi(int cidao, int now, int m)int i;int sum = 0;cout << "磁道扫描序列为:"for (i = m - 1; i >= 0; i-)cout << cidaoi << " "sum += abs(now -
15、cidaoi);now = cidaoi;return sum;/直接从当前次磁道到最内,再由内向外依次给予各请求服务int printoio(int cidao, int now, int m)int i;int sum = 0;cout << "磁道扫描序列为:"for (i = 0; i < m; i+)cout << cidaoi << " "sum += abs(cidaoi - now);now = cidaoi;return sum;/先向磁道减小的方向,再向磁道增加的方向int printsb(i
16、nt cidao, int now, int m)int k = 0;int l = 0;int r = 0;int j;int sum = 0;while (cidaok<now)k+;l = k + 1;r = k;for (j = l; j >= 0; j-)cout << cidaoj << " "sum += now - cidaoj;now = cidaoj;now = cidao0;while (r<m)cout << cidaor << " "sum += cidaor -
17、 now;now = cidaor;r+;return sum;/先向磁道增加的方向,再向磁道减小的方向int printbs(int cidao, int now, int m)int k = 0;int l = 0;int r = 0;int j;int sum = 0;while (cidaok<now)k+;l = k + 1 ;r = k;while (r<m)cout << cidaor << " "sum += cidaor - now;now = cidaor;r +;now = cidaom - 1;for (j = l
18、; j >= 0; j-)cout << cidaoj << " "sum += now - cidaoj;now = cidaoj;return sum;/先向磁道减小的方向,再从磁道最大的地方向减小的方向,int printsbs(int cidao, int now, int m)int k = 0;int l = 0;int r = 0;int j;int sum = 0;cout << "磁盘扫描序列为:"while (cidaok<now)k+;l = k - 1;r = k;for (j =
19、l; j >= 0; j-)cout << cidaoj << " "sum += now - cidaoj;now = cidaoj;now = cidao0;/sum += abs(cidao0 - cidaom - 1);for (j = m-1; j>=r; j-)cout << cidaoj << " "sum += abs(now - cidaoj);now = cidaoj;return sum;/先向磁道增大的方向,再从磁道最小的地方向向增大的方向int printbsb(int
20、 cidao, int now, int m)int k = 0;int l = 0;int r = 0;int j;int sum = 0;cout << "磁盘扫描序列为:"while (cidaok<now)k+;l = k - 1;r = k;while (r<m)cout << cidaor << " "sum += cidaor - now;now = cidaor;r +;now = cidaom-1;for (j = 0; j <= l; j+)cout << cidaoj
21、 << " "sum += abs(cidaoj - now);now = cidaoj;return sum;/就近选择磁道方法int nearbyselect(int cidao, int now, int m)int k = 0;int l = 0;int r = 0;int sum1 = 0;int sum2 = 0;int suml = 0;int sumr = 0;int sum = 0;cout << "磁盘扫描序列为:"while (cidaok <= now)k+;l = k - 1;r = k;while
22、 (l >0 | r < m-1)while (now - cidaol) <= (cidaor - now)now = cidaol-1;cout << cidaol << " "sum1 += abs(now - cidaol);now = cidaol;l-;suml = suml + sum1;/now = cidaor;while (now - cidaol) > (cidaor - now)now = cidaor;cout << cidaor << " "sum2 +=
23、 abs(now - cidaor);now = cidaor+1;r+;sumr = sumr + sum2;/now = cidaol + 1;while (l = 0 | r < m - 1)while (now - cidaol) <= (cidaor - now)cout << cidaol << " "sum1 += abs(now - cidaol);now = cidaol;l-;suml = suml + sum1;/now = cidaor;while (now - cidaol) > (cidaor - now
24、)now = cidaor;cout << cidaor << " "sum2 += abs(now - cidaor);now = cidaor + 1;r+;sumr = sumr + sum2;/now = cidaol + 1;sum = suml + sumr;return sum;/1.FCFS先来先服务调度算法void FCFS(int cidao, int m)int now;int sum = 0;int i, j;float ave;cout << "磁盘请求序列为:" << "
25、; "for (i = 0; i<m; i+)cout << cidaoi << " "cout << endl;now = printnow();cout << "磁盘扫描序列为:"for (i = 0; i<m; i+)cout << cidaoi << " "for (i = 0, j = 1; j<m; i+, j+)sum += abs(cidaoj - cidaoi);ave = (float)(sum) / (float)
26、(m);cout << endl;cout << "平均寻道长度为:" << ave << endl;/2.SSTF 最短寻道时间优先调度算法void SSTF(int cidao, int m)int now, sum;float ave;cidao = bubble(cidao, m);now = printnow();if (cidaom - 1 <= now)sum = printoi(cidao, now, m);if (cidao0 >= now)sum = printio(cidao, now, m)
27、;if (now>cidao0 && now<cidaom - 1)sum = nearbyselect(cidao, now, m);ave = (float)(sum) / (float)(m);cout << endl;cout << "平均寻道时间为:" << ave << endl;/3.SCAN扫描调度算法void SCAN(int cidao, int m)int k = 1;int now, d, sum;float ave;cidao = bubble(cidao, m);now
28、= printnow();cout << "请输入当前移动方向(1为外,0为内):"cin >> d;if (cidaom - 1 <= now)sum = printoi(cidao, now, m);if (cidao0 >= now)sum = printio(cidao, now, m);if (now>cidao0 && now<cidaom - 1)/*cout << "磁盘扫描序列为:"while (cidaok<now)k+;l = k - 1;r = k;
29、*/if (d = 0)sum = printsb(cidao, now, m);if (d = 1)sum = printbs(cidao, now, m);ave = (float)(sum) / (float)(m);cout << endl;cout << "平均寻道时间为:" << ave << endl;/4.C-SCAN扫描调度算法void CSCAN(int cidao, int m)int k = 1;int now, d, sum;float ave;cidao = bubble(cidao, m);now
30、 = printnow();cout << "请输入当前移动方向(1为向外,0为向内):"cin >> d;if (cidaom - 1 <= now)if (d = 0)sum = printoi(cidao, now, m);if (d = 1)sum = printoio(cidao, now, m);if (cidao0 >= now)if (d = 0)sum = printioi(cidao, now, m);if (d = 1)sum = printio(cidao, now, m);/sum = printioi(cida
31、o, now, m);if (now>cidao0 && now<cidaom - 1)/*cout << "磁盘扫描序列为:"while (cidaok<now)k+;l = k - 1;r = k;*/if (d = 0)sum = printsbs(cidao, now, m);if (d = 1)sum = printbsb(cidao, now, m);ave = (float)(sum) / (float)(m);cout << endl;cout << "平均寻道时间为:"
32、; << ave << endl;/主函数void main()int a, c, m, n;int cidaomaxsize;int i = 0;char str10;cout << "输入要寻找磁道的范围:" << endl;cin >> m;if (m>65536)cout << "超出范围,请重新输入:"cout << "输入磁盘调度序列个数:"cin >> n;cout << "随机产生的磁道序列为:" << endl;for (i = 0; i<n; i+)cidaoi = rand() %
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区水资源保护宣传考核试卷
- 印刷机技术创新展望考核试卷
- 辽宁省锦州市第七中学2024-2025学年初三下学期3月第二次诊断性检测试题语文试题含解析
- 南京科技职业学院《中药学》2023-2024学年第一学期期末试卷
- 山西财贸职业技术学院《医学生理学》2023-2024学年第二学期期末试卷
- 江西省庐山市2024-2025学年初三下学期精英联赛语文试题含解析
- 辽宁税务高等专科学校《运动处方与实践》2023-2024学年第二学期期末试卷
- 山西青年职业学院《大学生创新创业和就业指导》2023-2024学年第二学期期末试卷
- 江苏海洋大学《村镇规划与建设实践》2023-2024学年第二学期期末试卷
- 吉林省吉林地区普通高中友好学校联合体第三十一届2024-2025学年高三第二次适应性测试历史试题含解析
- 消费者心理与行为教学ppt课件(完整版)
- 八年级体育教案(全册)
- 颈椎功能障碍指数,Neck Disabilitv Index,NDI
- 天地万物一体 的整体观念
- 大班音乐游戏《邮递马车》课后反思
- 2022新高考卷小说《江上》 答案+评点
- 装配式挡墙专项施工方案
- 污水厂设备管理培训(共110页).ppt
- 20-5T双梁桥式起重机设计(全套图纸)
- 潜水式排污泵检验报告(共8页)
- 数控机床装调维修工考工练习试题题库
评论
0/150
提交评论