1、 课课 程程 设设 计计 ( 操 作 系 统 )( 操 作 系 统 ) 题 目: N-Step-SCAN 磁盘调度 班 级: 计算机科学与技术学院 计算机系 10-8 班 姓 名: 指导教师: 系 主 任 : 2013 年 03 月 01 日 - II- 目目 录录 1N-Step-SCAN 磁盘调度课程设计 1.1 题目分析.1 1.2 数据结构.1 1.3 流程图 .1 1.4 实现技术.17 1.5 设计结论和心得 18 2 Linux 代码分析 20 2.1 功能说明.18 2.2 接口说明.18 2.3 局部数据结构. .20 2.4 流程图 .21 2.5 以实例说明运行过程22
2、- 1- 1N-Step-SCAN 磁盘调度磁盘调度课程设计 1.1 题目分析 当有一个或者几个进程对某一磁道有较高的访问频率,即这些进程反复请求对某一磁 道的 I/O 操作,从而垄断整个磁盘设备。在高密度的磁盘上容易出现此情况。N 步 SCAN 算法是将磁道请求队列若干个长度为 N 的子队列。而每处理一个队列时又是按 SCAN 算 法,对一个队列处理完后,再处理其他队列。 1.2 数据结构 N-Step-SCAN 磁盘调度中涉及的数据结构包括 N 个队列、队列缓冲区、表示空缓冲 区的信号量、表示满缓冲区的信号量等。 用伪代码表示如下: #include“stdio.h“ #include“s
3、tdlib.h“ /#include“iostream.h“ #define maxsize 100 /定义最大数组域 int now,s; void SSTF(int array,int m) int temp; int k=1; int now,l,r; /当前磁道号 now;找出的当前磁道左侧的磁道l,右侧的磁道r int i,j,sum=0; int avg; 哈尔滨理工大学课程设计报告 - 2- for(i=0;i=now)/判断整个数组里的数是否都大于当前磁道号 for(i=0;i=now)/判断整个数组里的数是否都大于当前磁道号 printf(“n SCAN 调度结果: “);
4、for(i=0;i =now 输出磁盘调度 序列 arrayj im 磁 头 移 动 总 距 离 sum=arrayi-now 确定当前磁道在已排 的序列中的位置 switch(d) case 0:移动臂 向磁道号减小 方向访问 case 1:移动臂 向磁道号增加 方向访问 输出磁盘调 度序列 输出磁盘调 度序列 输出子队列寻道总道数 sum 输出子队列平均寻道长度 avg=sum/(m) 流程图 哈尔滨理工大学课程设计报告 - 17- 1.4 实现技术 为实现上述设计,采用 C+语言,VS2008 开发环境。 运行结果如下: 哈尔滨理工大学课程设计报告 - 18- 1.5 设计结论和心得 通
5、过课程设计得到如下结论: 在在 N N 步扫描算法中,还出现了这样一个问题。就是,在对磁道号进行分组时,最后步扫描算法中,还出现了这样一个问题。就是,在对磁道号进行分组时,最后 一列的处理问题。在开始时由于笼统地进行了平均分组,而没有考虑无法完全分尽的情一列的处理问题。在开始时由于笼统地进行了平均分组,而没有考虑无法完全分尽的情 况,进而导致最后一个甚至一些磁道号丢失的问题。不过最后,在单列最后一组后(即况,进而导致最后一个甚至一些磁道号丢失的问题。不过最后,在单列最后一组后(即 将最后一组与前面各组分开后)问题得到了解决。将余下的一个或一些磁将最后一组与前面各组分开后)问题得到了解决。将余下
6、的一个或一些磁道号全部加至道号全部加至 最后一列末尾,很好地处理了数据丢失问题最后一列末尾,很好地处理了数据丢失问题 哈尔滨理工大学课程设计报告 - 19- 有如下几点心得体会: 通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要 把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好 地巩固所学,才能提高自己实践能力地巩固所学,才能提高自己实践能力. .通过这次的设计使我认识到只停留在表面理解问题通过这次的设计使我认识到只停留在表面理解问题 是很难使问题得到很好的解决的,实践能力与理论知识同样重要。可以说此课程设计的是很难使问题得到很好的解决的,实践能力与理论知识同样重要。可以说此课程设计的 理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当理论难度并不大,但是若要深入发掘其中的东西,并且