您好,欢迎来到划驼旅游。
搜索
您的当前位置:首页模拟实现磁盘调度算法

模拟实现磁盘调度算法

来源:划驼旅游


《操作系统》课程实验

实验课题:模拟实现磁盘调度算法

姓 名:

学 号:

年级班级:

教学班级:操作系统

专业方向:

指导教师:

实验时间:**** ***** 08级信息与计算科学 08信本软件方向 2010-12-9

一、实验名称:模拟实现磁盘调度算法

1 实验目的:a、观察、体会操作系统的磁盘调度方法,并通过一个简单的磁

盘调度模拟程序的实现,加深对磁盘调度的理解。b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。

2 实验要求:a、使用模块化设计思想来设计。b、给出主函数和各个算法函

数的流程图。c、学生可按照自身条件,随意选择采用的算法。

二、 实验算法分析 总流程图

三、 实验内容及实验步骤

1 实验内容

a、模拟实现磁盘调度算法:FCFS,最短寻道优先,电梯算法(实现其中之一种以上)。

b、磁道请求服务顺序由用户输入(可通过从指定的文本文件(TXT文件)中取出)。

2 实验步骤

1) 打开microsoft vasual C++ 6.0

“开始”菜单— 所有程序—单击“microsoft vasual C++ 6.0”,进入创建页面。 2)单击标题栏“文件”选择“新建”进入界面如下:

选择‘工程,win32 console application’编辑工程名称‘zhuxuemin4’存储在d盘,创

建‘创建新工作区’确定。

3)创建文件:单击标题栏“文件”选择“新建”进入界面类似于上面的界面。

4)在建好的文件中加入附件中的源程序,并进行编译。

四、 实验原始记录及结果分析

1 先来先服务调度算法

2 最短寻道优先调度算法

3 电梯调度算法

五、 参考代码

#include #include #include #include

const int MAXQUEUE=200; //定义请求队列最大长度//磁道号请求结构体定义 typedef struct TRACK_Node { int iGo; //要访问的磁道号 int iVisited; //磁道是否已经访问标志(1:已访问;0:末访问)}TRACK;

TRACK queue[MAXQUEUE]; //磁道号请求队列数组 int iReqNum=0; //磁道访问请求数 int iStart=0; //磁头初始位置 int iNow=0; //磁头当前位置 int iSum=0; //总移动磁道数 int iInput; //用户当前输入的整数 char sFileName[20]; //文件名 void Init() //初始化函数 {int i; for(i=0;i>sFileName; //从标准输入获取用户当前输入的文件名 if((fp=fopen(sFileName,\"r\"))==NULL) { cout<iNow=queue[i].iGo; //设置磁头当前位置为当前访问磁道号} cout<printf(\"\\n 平均移动磁道数: %.2f\\n\\n\void SSTF() //最短寻道优先调度算法 { int i,j; int iNext; //下一磁道号

Reset(); //重置访问标志、磁头当前位置、总移动磁道数 cout<abs(iNow-queue[j].iGo))) { iNext=j; } } //for(j=iNext;jvoid SCAN() //电梯调度算法 { int i,j; int iNext; //下一磁道号 int iMinMove; //当前方向上最短寻道距离

cout<>iInput; //从标准输入获取用户当前输入的整数 switch(iInput) //用户当前输入的整数 {case 1: //磁头初始向内 Reset(); //重置访问标志、磁头当前位置、总移动磁道数 cout<cout<<\" 初始磁道号: \"<=iNow)) { if(abs(queue[j].iGo-iNow)=iNow)) } //for(j=0;j{ iMinMove=9999; iNext=-1; for(j=0;jiNow)) { if(abs(queue[j].iGo-iNow)iNow))} //for(j=0;jqueue[iNext].iVisited=1; //设置磁道是否已经访问标志为1:已访问 } //if(iNext!=-1)} //for(i=0;icout<<\" ┃ Version 2010 build 2.0 ┃\"<if(ReadTrackFile()==-1) //读入磁道号流文件 {printf(\" 读入磁道号流文件失败!!\\n\\n\"); } else {bGoOn= true; while (bGoOn) {cout<>iInput; //从标准输入获取用户当前输入的整数 switch(iInput) //用户输入的整数以选择算法 {case 1: FCFS(); //先来先服务调度算法 break;

case 2: SSTF(); //最短寻道优先调度算法

break; case 3:SCAN(); //电梯调度算法 break; default: printf(\"\\n 输入的算法编号错误!!\\n\\n\"); return; } //switch(iInput) bGoOn= false; strcpy(sGoOn,\" \"); cout<<\" 要继续进行磁盘调度算法模拟吗?(Y/N) \"<>sGoOn; bGoOn=(sGoOn[0]=='y'||sGoOn[0]=='Y'); } //while bGoOn } //if(ReadTrackFile()==-1) }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务