• 大小: 48.96 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-09-24
  • 语言: 其他
  • 标签: C++  

资源简介

通过磁盘调度算法的模拟设计,了解磁盘调度的特点。
模拟实现FCFS、SSTF、SCAN、C-SCAN和LOOK算法,并计算及比较磁头移动道数。
磁盘调度算法是根据访问都指定的磁道(柱面)位置来决定执行次序的调度。其目的是尽可能地减少操作中的寻道时间。在磁盘盘面上,0磁道在盘面的外圈;号数越大,磁道戛靠近盘片的中心。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include

int start=0;

long FCFS(int array[100])      //先来先服务调度算法 
{
int ij;
long sum=0;
for(i=0j=1;i<99j<100;i++j++)
{
sum+=abs(array[j]-array[i]);
}
return sum;
}

long SSTF(int array[100])   //最短寻道时间优先调度算法
{
int temp;
int k=1;
int now leftright;
int ijsum=0;

for (i=0;i<100;i++)
for (j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}                                  //排序
now=start;

if(array[99]<=now)
{
sum=now-array[0];
}

else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;//定位

while ((left>=0)&&(right<100))
{
if ((now-array[left])<=(array[right]-now))
{
sum+=now-array[left];
now=array[left];
left--;
}
else
{
sum+=array[right]-now;
now=array[right];
right++;
}
}
if(left==-1)
{
sum+=array[99]-array[0];
}
else sum+=array[99]-array[0];
}
}
return sum;
}


long SCAN(int array[100])                  //扫描调度算法(电梯算法)
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;

for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}                                 //排序

now=start;


if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;                 //定位

if((now-array[left])<=(array[right]-now))     //当前移动臂的移动的方向,表示向外
{
sum=now+array[99];
}
else  //表示向内            
{
sum=2*1499-now-array[0]+array[left];
}
}
}
return sum;
}

long CSCAN(int array[100])           //单向扫描调度算法
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;

for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}                                 //排序

now=start;

if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;                 //定位

sum=2*1499-now+array[left];
}
}
return sum;
}

long LOOK(int array[100])                       //
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;
for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4336  2007-12-26 13:38  磁盘调度\cpdu.cpp

     文件     188472  2007-12-26 13:38  磁盘调度\cpdu.exe

     文件      43520  2009-04-02 22:25  磁盘调度\sybg.doc

     目录          0  2009-04-02 22:30  磁盘调度

----------- ---------  ---------- -----  ----

               236328                    4


评论

共有 条评论