磁盘调度算法的仿真
磁盘调度算法模拟
实验目的
磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘是,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。目前最成用的磁盘调度算法有先来先服务(FCFS),最短寻道时间优先(SSTF),以及扫描算法(SCAN)。通过本实验可以加深理解有关磁盘调度的目标,并体会和了解最短寻道时间优先算法和扫描算法的具体实施办法。
实验内容
1 从100#磁道开始,被访问的磁道号分别为:55,58,39,18,90,160,150,38,184。
2 要求用最短寻道时间优先算法的和扫描算法实现磁盘调度。
3 记录下每访问一个磁道磁头移动的磁道数,并计算平均寻道长度(平均移动磁道数)。
实验要求
分别用两种算法实现磁盘调度。在实验结果分析中,将比较结果以列表的形式表现出来。用数组(或链表)TR[ ]存储待访问磁道号,将每次磁头移动磁道数用数组AR[ ]存储。输出结果应如下例:(注意空格)
150
50
160
10
184
24
18
166
38
20
39
1
55
16
58
3
90
32
平均寻道长度:35.8
编程工具:
C、Java、VC或其它可视化语言
平台任选
实现代码:
#include
#include
void main()
{
int mark;
int num;
int number;
int numb;
int i,j,k,m;
int TR[9] = {55, 58, 39, 18, 90, 160, 150, 38, 184};
int a[10];
int b[10];
float sum1=0,sum2=0;
float avg1,avg2;
printf("最短寻道时间算法\n");
printf("(从100号磁道开始)\n");
num=100;
number=100;
for(i=0;i<9;i++)
{
numb=abs(num-TR[0]);
for(j=0;j<9;j++)
{
if(numb>=abs(num-TR[j]))
{
numb=abs(num-TR[j]);
number=TR[j];
mark=j;
}
}
TR[mark]=1000;
printf("%d %d\n",number,abs(num-number));
sum1=sum1+(abs(num-number));
num=number;
}
avg1=sum1/9;
printf("最短寻道时间算法平均长度为:%4.2f\n",avg1);
printf("扫描算法\n");
printf("(从100号磁道开始)\n");
num=100;
number=100;
TR[0]=55;
TR[1]=58;
TR[2]=39;
TR[3]=18;
TR[4]=90;
TR[5]=160;
TR[6]=150;
TR[7]=38;
TR[8]=184;
k=0;
m=0;
for( i=0;i<9;i++)
{
if(TR[i]>num)
{
a[k]=TR[i];
k++;
}
}
for( i=0;i<9;i++)
{
if(TR[i]
{
b[m]=TR[i];
m++;
}
}
for(i=0;i
{
numb=abs(num-a[0]);
for(j=0;j
{
if(numb>=abs(num-a[j]))
{
numb=abs(num-a[j]);
number=a[j];
mark=j;
}
}
a[mark]=1000;
printf("%d %d\n",number,abs(num-number));
sum2=sum2+(abs(num-number));
num=number;
}
for(i=0;i
{
numb=abs(num-b[0]);
for(j=0;j
{
if(numb>=abs(num-b[j]))
{
numb=abs(num-b[j]);
number=b[j];
mark=j;
}
}
b[mark]=1000;
printf("%d %d