- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
磁盘调度62991
磁盘调度
1设计目的
(1)要求学生设计一个模拟磁盘调度的程序。
(2)理解磁盘调度过程中的三个时间段。
(3)理解磁盘调度的三种算法。
2实验原理
共享设备的典型代表磁盘,磁盘的物理块的地址由柱面号、磁头号、扇区号来指定,完成磁盘某一个物理块的访问要经过三个阶段:寻道时间Ts、旋转延迟Tw和读写时间Trw。
寻道时间Ts是磁头从当前磁道移动到目标磁道所需要的时间;旋转延迟Tw是当磁头停留在目标磁道后,目标物理块从当前位置旋转到磁头位置的时间;读写时间Trw是目标物理块内容与内存中对应交换的时间。磁盘调度的原则是公平和高吞量,衡量指标有访问时间T和平均访问时间Ta:
T=Ts+Tw+Trw
T=Tsa+Twa+Trwa
寻道时间和旋转延迟为调度算法的主要考虑因素。减少访问时间就是要减少寻道时间和旋转延迟。
3设计要求
(1)设计一个函数完成先来先服务的磁盘调度功能。
(2)设计一个函数完成最短寻道时间优先的磁盘调度功能。
(3)设计一个函数完成电梯算法的磁盘调度功能。
4环境
操作系统WindowsXP,开发工具VC++6.0或者BCB6.0。
5步骤
(1)打开VC,选择菜单项File(New,选择Project选项卡并建立一个名为cidao的win32 console application工程。
(2)在工程中创建原文件cidao.cpp:选择菜单项Project(Add to Project(File,此时将打开一个新窗口,在其中输入想要创建的文件名字,这里是cidao.cpp,其中编辑好原文件并保存。
(3)通过调用菜单项Build(Rebuild all进行编译连接,可以在指定的工程目录下得到debug(cidao.exe程序,可以在控制台进入该debug目录运行程序。
6运行结果分析
FCFS将申请磁盘服务的进程按先后顺序排队,每次调度选择位于队首的进程运行。请求的先后顺序是18,5,23,8,16。可以计算出所有进程运行后磁头一共移动的磁道数:13+18+15+8=54(见图12.12)。
SSTF算法选择离当前磁头位置最近的目标物理块优先访问,以保证最短的寻道时间。以上述进程为例,当选择磁道号后就会出现进行运行后磁头一共移动的磁道数:3+8+2+5=18(见图12.13)。
磁头向一个方向移动的过程中,选择最近的目标物理块访问,直到没有要访问的物理块,然后磁头变换移动方向以同样的方式选择访问磁盘的进程。可以计算进程运行后磁头一共移动的磁道数:2+5+15+3=25(见图12.14)。
7参考源代码
#include”stdio.h”
#include”stdlib.h”
#include”iostream.h”
#define maxsize 100
//先来先服务调度算法
Void FCFS(int array[],int m)
{
int sum=0,j,I;
for(i=0;im ;i++)
{
coutarray[i]” ”;
}
for(i=0,j=1;jm;i++,j++)
{
sum+=abs(array[j]-array[i]);
}
cout”移动的总道数:”sumendl;
}
//最短寻道时间优先调度算法
Void ShortPath(int array[],int m)
{
int temp;
int k=1;
int now , l ,r;
int I , j ,sum=0;
for(i=0 ;im; i++)
for(j=i+1;jm;j++)
{
if(array[i]array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
for(i=0;im;i++)
{
coutarray[i]””;
}
cout”请输入当前的磁道号:”;
cinnow;
if(array[m-1]=now)
{
for(i=m-1;i=0;i--)
coutarray[i]””;
sum=now-array[0];
}
else
if(array[0]=now)
{
for(i=0;im;i++)
coutarray[i]””;
sum=array[m-1]-now;
}
else
{
while(array[k]now)
{
k++;
}
l=k-1;
r=k;
/*确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后再进行少量修改,节省时间。*/
while((l=0)(rm))
{
if((now-array[l])=(array[r]-now))
{
coutarray[l]””;
s
文档评论(0)