实验五磁盘调度算法c语言代码,实验五磁盘调度管理实验.doc-资源下载在线文库www.lddoc.cn...

实验五 磁盘调度管理实验.doc

实验五 磁盘调度管理实验一、实验目的用不同算法实现对磁盘调度的模拟实现,并比较各算法性能。二、设备与环境1. 硬件设备PC 机一台2. 软件环境安装 Windows 操作系统或者 Linux 操作系统,并安装相关的程序开发环境,如 C CJava 等编程语言环境。三、实验要求设计并实现一个分别利用下列磁盘调度算法进行磁盘调度的模拟程序。 (1)扫描算法 (2)循环扫描算法设计要求1. 磁头初始磁道号,磁头初始运动方向,序列长度,磁道号序列等数据可键盘输入。 2. 最好能实现磁道号序列中磁道号的动态增加。 3. 磁道访问序列以链表的形式存储。 4. 给出各磁盘调度算法的调度顺序和平均寻道长度。四、实验设计参考1.算法说明(1)扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。2、循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。2.主要功能模块流程图程序参考代码如下include include include include includeinclude using namespace std;class LinList;struct LinNodeint no;LinNode *next开始手动输入磁道选择调度算法SCAN 算法 CSCAN 算法显示运行结果结束向内寻道 向外寻道class LinListprivate LinNode *head;public int size;LinList 构造函数,用于构造头结点和声明长度headnew LinNode;head-nextNULL;size0;void Insertint no插入函数LinNode *newnodenew LinNode;newnode-nono;newnode-nextNULL;Indexsize-1-nextnewnode;size;LinNode *Indexint i定位函数ifisize-1coutnext;LinNode *phead-next;int k0;whilepNULLk;return p;void SCAN1int start_place电梯调度算法(向外寻道)coutSCAN 调度算法向外寻道 如下 “; float sum0;float ave;int *asort;forint i0;i“;ifmisumabsstart_place-ai;elsesumabsam-am-1;forint ni-1;n0;nifni-1sumabsan-asize-1;ifni-1sumabsan-an1;ifn0cout“;avesum/size;cout平均寻道长度为“SCAN 调度算法向内寻道 如下 “; float sum0;float ave;int *asort;forint i0;i0;nifni-1sumabsan-ai;ifni-1sumabsan-an1;ifn0cout“;elsecout“;forint mi;m“;ifmisumabsstart_place-a0;elsesumabsam-am-1;cout平均寻道长度为“CSCAN 调度算法如下 “;float sum0;float ave;int *asort;forint i0;i“;ifmisumabsstart_place-ai;elsesumabsam-am-1;forint n0;n“;avesum/size;cout平均寻道长度为“nono“;int *sort排序int count0;int *anew int size;a0Index0-no;count;forint i1;inoj;kakak-1;ajIndexi-no;count;break;ifIndexi-noajifjcount-1acountIndexi-no;count;break;elsecontinue;return avoid maincout请输入需要调度的序列以 0 结束 “;whilecinicout请输入开始的磁道号“;cinstart_place;cout链表的长度为“单链表显示“;linlist.show;int flag1;whileflagcout请输入数字“;int k;cink;switchkcase 1main;break;case 2linlist.CSCANstart_place;break;case 3cout“;int j;cinj;switchjcase 5linlist.SCAN1start_place;break;case 6linlist.SCAN2start_place;break;break;case 4flag0;break;cout输入任意字符结束“endl;getche;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值