1、 操作系统课程设计操作系统课程设计 学 院: 信息科学与工程学院 专 业: 计算机科学与技术 班 级: 学 号: 学生姓名: 指导教师: 2014 年 3 月 10 日 一、实验内容一、实验内容 磁盘调度算法(磁盘调度算法(1 人)人) 问题描述问题描述 了解磁盘管理的原理,掌握磁盘调度种算法。 基本要求基本要求 编程序实现下述磁盘调度算法, 并求出每种算法的平均寻道长度: 要求设计主界面可以 灵活选择算法,且以下算法为基本要求。 先来先服务算法(FCFS) 最短寻道时间优先算法(SSTF) 扫描算法(SCAN) 循环扫描算法(CSCAN) 二、数据结构设计二、数据结构设计 struct no
2、de int data; struct node *next; ; struct node1 int data; struct node1 *next; struct node1 *pre; ; 三、算法设计三、算法设计(总体设计及模块设计)(总体设计及模块设计) 1.1.总体设计总体设计 2.2.模块设计模块设计 (1).先来先服务算法(FCFS) 建立链表后顺序访问并计算即可建立链表后顺序访问并计算即可 (2)最短寻道时间优先算法(SSTF) a. a. 首先建立链表首先建立链表 开始 SCAN 输入错误 CSCAN FCFS 退出 SSTF Data Next Null P q Head
3、 Data Next Null P q Head b.b.遍历链表并找到距离当前磁道最近的磁道遍历链表并找到距离当前磁道最近的磁道 C C. .访问该磁道,计算并删除访问该磁道,计算并删除 (3 3). . 扫描算法(SCAN) a. a. 首先建立链表首先建立链表 Data Next 101 Null P q Head Data Next 101 Null P q Head Data Next Null P q Head b.b.遍历链表并找到距离当前磁道最近的磁道遍历链表并找到距离当前磁道最近的磁道 C C. .将原链表分成两个短链表将原链表分成两个短链表 Data Next 99 101
4、 Null P q Head Data Next 99 Null P q Head 101 Next Null m n First 100 Next Null P q Head d.d.使用双向链表将前一链表逆序使用双向链表将前一链表逆序 e.e.分别顺序访问两个链表并计算即可分别顺序访问两个链表并计算即可 (4 4)循环扫描算法(CSCAN) a. a. 首先建立链表首先建立链表 Pre 99 Next Null d e de Null Data Next Null P q Head Pre 99 Next Null d e de Null Data Next Null P q Head b
5、.b.遍历链表并找到距离当前磁道最近的磁道遍历链表并找到距离当前磁道最近的磁道 C C. .将原链表分成两个短链表将原链表分成两个短链表 Data Next 99 101 Null P q Head Data Next 99 Null P q Head 101 Next Null m n First Data Next Null P q Head d.d. 分别顺序访问两个链表并计算即可分别顺序访问两个链表并计算即可 2.2.具体函数设计具体函数设计 (1).先来先服务算法 顺序访问磁道,记录访问时间,最终算出平均访问时间 void FCFS()/先来先服务 int m=100,n,i=0,s
6、=0;/m:当前道号 n:间距 i:计数 s:寻 道时间和 struct node *p; float x; p=creat(); printf(“被访问的下一个磁道t 移动距离n“); if (p=NULL) printf(“空链表!“); else while(p!=NULL printf (“t%dt%dn“,p-data,n); i+; s=s+n; Data Next Null N M First m=p-data; p=p-next; x=(float)(s*1.0)/i; printf(“平均寻道时间:%.2fn“,x); (2)最短寻道时间优先算法(SSTF) 依次访问距离当前磁道最近的磁道,记录访问时间,最终算出平