课程设计--磁盘调度算法及代码的实现讲解
- 格式:doc
- 大小:359.72 KB
- 文档页数:26
课程设计报告《计算机操作系统》
课程设计题目:磁盘调度算法
学生姓名:
专业:
班级:
学号:
指导教师:
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