实验六
磁盘调度算法
【实验目的】
通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。
【实验内容】
问题描述:
设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。
程序要求:
1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。
2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。
3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。
4)输出:每种算法的平均寻道长度。
实现提示:
用C++语言实现提示:
1)程序中变量定义参考(根据需要可添加)如下:
const int MaxNumber=100; int TrackOrder[MaxNumber]; int MoveDistance[MaxNumber]; double AverageDistance; bool direction;
2)页面置换的实现过程如下: ? 变量初始化;
? 接收用户输入磁道个数n和磁盘访问序列,选择算法1-FCFS,2-SSTF,3-SCAN,4-循环SCAN,输入开始磁盘号m和磁头移动方向;
? 根据用户选择的算法进行磁道访问,输出磁盘调度算法的模拟过程;
? 计算选择每次移动的磁头移动距离和算法的平均寻道长度;
?
输出选择算法的平均寻道长度。
实验要求:
1)上机前认真复习磁盘调度算法,熟悉FCFS、SSTF、SCAN和循环SCAN算法的过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内
容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)。 【实验分析】
需求分析:
(1) 按提示输入磁道个数,不得大于MaxNum;依次输入磁盘访问序列;按提示输入开始磁道号,磁头移动方向(1为磁道号增加方向,0为磁道号减少方向);根据提示输入要进行的算法类型,1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。
(2) 输出的形式:先输出每次访问的磁道号和移动的磁头移动距离,最后输出平均寻道长度。
(3) 程序所能达到的功能:根据用户选择的算法进行磁道访问,输出磁盘调度算法的模拟过程,输出每次移动的磁头移动距离和算法的平均寻道长度。
(4) 测试数据: 输入数据分别为:9
55 58 39 18 90 160 150 38 184 100 1 输入:1
输出:被访问的下一个磁道号55 移动距离(磁道数)45
被访问的下一个磁道号58 移动距离(磁道数)3 被访问的下一个磁道号39 移动距离(磁道数)19 被访问的下一个磁道号18 移动距离(磁道数)21
被访问的下一个磁道号90 移动距离(磁道数)72 被访问的下一个磁道号160 移动距离(磁道数)70 被访问的下一个磁道号150 移动距离(磁道数)10 被访问的下一个磁道号38 移动距离(磁道数)112 被访问的下一个磁道号184 移动距离(磁道数)146 平均寻道长度:55.3333 输入:2
输出:被访问的下一个磁道号90 移动距离(磁道数)10
被访问的下一个磁道号58 移动距离(磁道数)32 被访问的下一个磁道号55 移动距离(磁道数)3 被访问的下一个磁道号39 移动距离(磁道数)16 被访问的下一个磁道号38 移动距离(磁道数)1 被访问的下一个磁道号18 移动距离(磁道数)20 被访问的下一个磁道号150 移动距离(磁道数)132 被访问的下一个磁道号160 移动距离(磁道数)10 被访问的下一个磁道号184 移动距离(磁道数)24 平均寻道长度:27.5556 输入:3
输出:被访问的下一个磁道号150 移动距离(磁道数)50
被访问的下一个磁道号160 移动距离(磁道数)10 被访问的下一个磁道号184 移动距离(磁道数)24 被访问的下一个磁道号90 移动距离(磁道数)94
被访问的下一个磁道号58 移动距离(磁道数)32 被访问的下一个磁道号55 移动距离(磁道数)3 被访问的下一个磁道号39 移动距离(磁道数)16 被访问的下一个磁道号38 移动距离(磁道数)1 被访问的下一个磁道号18 移动距离(磁道数)20 平均寻道长度:27.7778 输入:4
输出:被访问的下一个磁道号150 移动距离(磁道数)50
被访问的下一个磁道号160 移动距离(磁道数)10 被访问的下一个磁道号184 移动距离(磁道数)24 被访问的下一个磁道号18 移动距离(磁道数)166 被访问的下一个磁道号38 移动距离(磁道数)20 被访问的下一个磁道号39 移动距离(磁道数)1 被访问的下一个磁道号55 移动距离(磁道数)16 被访问的下一个磁道号58 移动距离(磁道数)3 被访问的下一个磁道号90 移动距离(磁道数)32 平均寻道长度:35.7778 概要设计:
(1)本程序中用到的数据的定义:
const int MaxNumber=100;