课程设计--磁盘调度算法及代码的实现讲解

  • 格式:doc
  • 大小:359.72 KB
  • 文档页数:26

下载文档原格式

  / 26
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告《计算机操作系统》

课程设计题目:磁盘调度算法

学生姓名:

专业:

班级:

学号:

指导教师:

2014年01月10日

目录

1.需求分析 (01)

2. 总体设计及分类简介 (01)

1)先来先服务(FCFS)算法 (01)

2)最短寻道时间优先(SSTF)算法 (01)

3)扫描调度(SCAN)算法 (01)

4)循环扫描(C-SCAN)算法 (01)

3.课程设计目的 (01)

4.课程设计要求 (02)

5.详细设计及算法流程图 (02)

1)总流程图 (02)

2)先来先服务(FCFS)算法流程图 (03)

3)最短寻道时间优先(SSTF)算法流程图 (04)

4)扫描调度(SCAN)算法流程图 (05)

5)循环扫描(C-SCAN)算法流程图 (06)

6.课程设计具体步骤 (07)

1)定义函数部分主要代码 (07)

2)先来先服务(FCFS)算法部分主要代码 (07)

3)最短寻道时间优先(SSTF)算法部分主要代码 (07)

4)扫描调度(SCAN)算法部分主要代码 (09)

5)循环扫描(C-SCAN)算法部分主要代码 (09)

7.课程设计结果显示 (10)

1)先来先服务(FCFS)算法测试结果 (10)

2)最短寻道时间优先(SSTF)算法测试结果 (11)

3)扫描调度(SCAN)算法测试结果 (12)

4)循环扫描(C-SCAN)算法测试结果 (13)

8.课程设计总结 (14)

9.心得体会 (15)

10.参考资料 (15)

磁盘调度算法

一.需求分析

编译程序运用磁盘的四种调度算法实现对磁盘的调度,四种算法分别为先来先服务(FCFS)算法,最短寻道时间优先(SSTF)算法,扫描调度(SCAN)算法,循环扫描(C-SCAN)算法。

二.总体设计及分类简介

磁盘调度中常用的有四种算法,功能分别如下:

1.先来先服务(FCFS)算法。即先来的请求先被响应。FCFS策略看起来似乎是相当"公平"的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。这个过程就叫做磁盘调度管理。有时候FCFS也被看作是最简单的磁盘调度算法。

2. 最短寻道时间优先(SSTF)算法。要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。

3.扫描调度(SCAN)算法。该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。

4.循环扫描(C-SCAN)算法。当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,CSCAN算法规定磁头单向移动,而本实验过程中我们所设计的是磁头从里向外移动,而从外向里移动时只须改方向而已,本实验未实现。但本实验已完全能演示循环扫描的全过程。

三.课程设计目的

1.熟悉并掌握磁盘管理系统的设计方法,加深对所学各种磁盘调度算法及其算

法的特点的了解。

2.掌握磁盘调度的基本概念,比较各种磁盘调度算法的优劣

四.课程设计要求

从课程设计的目的出发,通过设计工作的各个环节,达到以下设计要求:

1.对系统进行功能模块分析、控制模块分析正确;

2.系统设计要实用;

3.编程简练,可用,功能全面,具有较好的健壮性;

4.说明书、流程图要清楚。

五. 详细设计及算法流程图

1. 总流程图

2. 先来先服务(FCFS)算法流程图

3. 最短寻道时间优先(SSTF)算法流程图

六.课程设计具体步骤

1.定义函数部分主要代码

#include

#include

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);

2. 先来先服务(FCFS)算法部分主要代码

void FCFS(int a[],int n)

{

int sum=0,j,i,first=0,now;

cout<<"请输入当前磁道号:";

cin>>now;//确定当前磁头所在位置

cout<<"磁盘调度顺序为:"<

for( i=0;i

cout<

}

for(i=0,j=1;j

{

first+=abs(a[j]-a[i]);

}

sum+=first+abs(now-a[0]);

cout<

cout<<"移动的总磁道数为: "<

}

3. 最短寻道时间优先(SSTF)算法部分主要代码

for(i=0;i