ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:497.73KB ,
资源ID:6767515      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6767515.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(磁盘调度算法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

磁盘调度算法.docx

1、磁盘调度算法实验六磁盘调度算法【实验目的】通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。【实验内容】问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。2)模拟四种

2、算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。实现提示:用C+语言实现提示:1)程序中变量定义参考(根据需要可添加)如下: const int MaxNumber=100; int TrackOrderMaxNumber; int MoveDistanceMaxNumber; double AverageDistance; bool direction;2)页面置换的实现过程如下: 变量初

3、始化; 接收用户输入磁道个数n和磁盘访问序列,选择算法1-FCFS,2-SSTF,3-SCAN,4-循环SCAN,输入开始磁盘号m和磁头移动方向; 根据用户选择的算法进行磁道访问,输出磁盘调度算法的模拟过程; 计算选择每次移动的磁头移动距离和算法的平均寻道长度; 输出选择算法的平均寻道长度。实验要求:1)上机前认真复习磁盘调度算法,熟悉FCFS、SSTF、SCAN和循环SCAN算法的过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)。【实验分析】需求分析:(1) 按提示输入磁道个数,不得大于M

4、axNum;依次输入磁盘访问序列;按提示输入开始磁道号,磁头移动方向(1为磁道号增加方向,0为磁道号减少方向);根据提示输入要进行的算法类型,1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。(2) 输出的形式:先输出每次访问的磁道号和移动的磁头移动距离,最后输出平均寻道长度。(3) 程序所能达到的功能:根据用户选择的算法进行磁道访问,输出磁盘调度算法的模拟过程,输出每次移动的磁头移动距离和算法的平均寻道长度。(4) 测试数据:输入数据分别为:9 55 58 39 18 90 160 150 38 1841001输入:1输出:被访问的下一个磁道号55 移动距离(磁道数)45 被访问的

5、下一个磁道号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 被访问的下

6、一个磁道号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 被访问

7、的下一个磁道号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 被访问的下一

8、个磁道号58 移动距离(磁道数)3 被访问的下一个磁道号90 移动距离(磁道数)32 平均寻道长度:35.7778 概要设计:(1)本程序中用到的数据的定义: const int MaxNumber=100;int TrackOrderMaxNumber;/存放磁盘访问序列int MoveDistanceMaxNumber;/存放每次的寻道长度int VisitOrderMaxNumber;/存放访问的顺序bool direction;/磁头移动方向int n;/磁道个数int m;/开始磁道号(2)主程序的流程: 变量初始化=用户选择执行的算法=若不符合条件,则退出=若符合,执行算法=输出结

9、果(3)各程序模块之间的层次(调用)关系。 主程序调用初始化模块以及算法模块、输出模块详细设计实现程序模块的具体算法。#include using namespace std;const int MaxNumber=100;int TrackOrderMaxNumber;/存放磁盘访问序列int MoveDistanceMaxNumber;/存放每次的寻道长度int VisitOrderMaxNumber;/存放访问的顺序bool direction;/磁头移动方向int n;/磁道个数int m;/开始磁道号void init()/变量初始化 cout输入磁道个数n; cout磁盘访问序列e

10、ndl; for(int i=0;iTrackOrderi; cout输入开始磁道号m; cout输入磁头移动方向,1为磁道号增加方向,0为磁道号减少方向direction;void fcfs() for(int i=0;in;+i) VisitOrderi=i; if(i=0) MoveDistancei=m-TrackOrderi; else MoveDistancei=TrackOrderVisitOrderi-1-TrackOrderi;/按输入的磁盘访问序列寻道,寻道长度为前一个访问的磁道号减当前访问的 void shunxu()/排序,从小到大排列磁盘访问序列 for(int i=

11、1;in;+i) for(int j=0;jTrackOrderj+1) int temp=TrackOrderj+1; TrackOrderj+1=TrackOrderj; TrackOrderj=temp;/冒泡排序 void sstf() shunxu(); int i; int temp; for(i=0;im) temp=i; break; /找到小于开始磁道号的最后一个元素 if(abs(TrackOrdertemp-m)abs(TrackOrdertemp+1-m)/比较小于开始磁道号的最后一个元素和下一个元素哪个离开始磁道号远 VisitOrder0=temp+1; MoveD

12、istance0=TrackOrdertemp+1-m; temp=temp+1; else VisitOrder0=temp; MoveDistance0=TrackOrdertemp-m; /取距离小的那个为第一个访问的元素 int h=temp-1; int k=temp+1; i=1; while(h-1&kabs(TrackOrderk-TrackOrderVisitOrderi-1) VisitOrderi=k; MoveDistancei=TrackOrderVisitOrderi-1-TrackOrderk; +i; k+; else VisitOrderi=h; MoveDi

13、stancei=TrackOrderVisitOrderi-1-TrackOrderh; +i; h-; if(h=-1) for(;k-1;-h) VisitOrderi=h; MoveDistancei=TrackOrderVisitOrderi-1-TrackOrderh; +i; void scan() shunxu(); int k,i; k=1; int temp; if(direction)/若向磁道号增加方向访问 for(i=0;i100)/找到第一个大于开始磁道号的元素 temp=i; VisitOrder0=i; MoveDistance0=TrackOrderi-100;

14、 break; +i; while(i-1) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; -i; +k; else/若向磁道号减小方向访问 for(i=0;i100)/找到最后一个小于磁道号的元素 temp=i; VisitOrder0=i; MoveDistance0=TrackOrderi-100; break; -i;/向前遍历 while(i-1) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; -i; +k; i=

15、temp+1;/遍历完后,回到刚刚最后一个小于开始磁道号的元素的后一个向后遍历 while(in) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; +i; +k; void cscan() shunxu(); int k,i; k=1; int temp; if(direction)/若向磁道号增加方向访问 for(i=0;i100)/找到第一个大于开始磁道号的元素 temp=i; VisitOrder0=i; MoveDistance0=TrackOrderi-100; break; +i; while(in

16、)/向后遍历 VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; +i; +k; i=0;/遍历完再从第一个元素开始遍历 while(itemp) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; +i; +k; else/若向磁道号减小方向访问 for(i=0;i100)/找到最后一个小于磁道号的元素 temp=i; VisitOrder0=i; MoveDistance0=TrackOrderi-100; break; -i;/向

17、前遍历 while(i-1) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; -i; +k; i=n-1;/遍历完后从最后一个元素向前遍历 while(itemp) VisitOrderk=i; MoveDistancek=TrackOrderVisitOrderk-1-TrackOrderi; -i; +k; void output() int sum=0;/求磁道数总和 for(int i=0;in;+i) cout被访问的下一个磁道号TrackOrderVisitOrderi 移动距离(磁道数)abs(M

18、oveDistancei)endl; sum=sum+abs(MoveDistancei); cout平均寻道长度:double(sum)/nendl;/输出平均寻道长度void main() init(); int a; cout选择算法,1-FCFS,2-SSTF,3-SCAN,4-循环SCANa; switch(a) case(1): fcfs();break; case(2): sstf();break; case(3): scan();break; case(4): cscan();break; /根据用户选择的算法进行磁盘调度算法 output();调试分析1、 执行算法前,要先申

19、请变量。2、 执行后面三种算法时,要注意先将磁道序列从小到大排序。3、 执行SSTF算法时,先找到小于开始磁道号的最后一个元素,以此元素为分割点,向前和向后遍历序列,每次移动一个,比较出离前一个访问的磁道号近的访问。4、 执行SCAN和CSCAN算法时,要先判断用户输入的是向磁道号增加的方向执行还是向磁道号减少的方向执行。5、 时间的复杂度是O(n).用户使用说明 按提示输入磁道个数,不得大于MaxNum;依次输入磁盘访问序列;按提示输入开始磁道号,磁头移动方向(1为磁道号增加方向,0为磁道号减少方向);根据提示输入要进行的算法类型,1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

20、测试结果输入数据分别为:9 55 58 39 18 90 160 150 38 1841001输入:1输出:被访问的下一个磁道号55 移动距离(磁道数)45 被访问的下一个磁道号58 移动距离(磁道数)3 被访问的下一个磁道号39 移动距离(磁道数)19 被访问的下一个磁道号18 移动距离(磁道数)21 被访问的下一个磁道号90 移动距离(磁道数)72 被访问的下一个磁道号160 移动距离(磁道数)70 被访问的下一个磁道号150 移动距离(磁道数)10 被访问的下一个磁道号38 移动距离(磁道数)112 被访问的下一个磁道号184 移动距离(磁道数)146 平均寻道长度:55.3333输入:

21、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 移动距离(磁道数

22、)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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1