void SSTF() { printf("最短寻道 SSTF(从%d号磁道开始)\n",kai); printf("----------------------------------------------------\n"); printf("被访问的下一个磁道\t\t\t磁道号移动距离\n"); int k;//记录最近的磁道号 int su;//记录当前磁头所在位置 int shortest; //记录最短的距离 int s2[100]; ///用来记录路径的数组 memset(visit,1,sizeof(visit));//数组初始化为1 ,表示所有磁道都未被访问 su=kai; sum=0; for(int i=0;i<num;i++){ shortest=MAX; for(int j=0;j<num;j++){ //比较得出最近的磁道 if(visit[j]){ if(fabs(su-s[j])<shortest){ shortest=fabs(su-s[j]); k=j; } } } s1[i]=shortest;//记录移动的距离 su=s[k]; //跟踪当前磁头所在位置 visit[k]=0; //标记已访问 s2[i]=s[k]; //记录路径 } for(int i=0;i<num;i++){ sum=s1[i]+sum; }
时间: 2023-12-09 15:06:14 浏览: 105
找寻最短路径
这段代码实现的是最短寻道时间优先算法(SSTF),该算法是一种磁盘调度算法,其主要思想是优先访问距离当前磁头最近的磁道,以达到最小化寻道时间的目的。
具体实现过程如下:
1. 初始化visit数组为1,表示所有的磁道都未被访问过。
2. 初始化su为起始磁道号kai,sum为0。
3. 循环遍历所有的磁道,每次找到距离当前磁头最近的未被访问的磁道,并记录下该磁道的下标k、磁头移动的距离shortest、当前磁头位置su、已经访问过的磁道标记visit以及路径记录数组s2。
4. 计算磁头移动的距离shortest,并将其保存到s1数组中。
5. 更新当前磁头位置su为s[k],将visit[k]标记为0,表示该磁道已经被访问过,将s[k]记录到路径记录数组s2中。
6. 循环结束后,s1数组中保存了磁头移动的距离,s2数组中保存了访问的路径,sum为磁头移动的总距离。
需要注意的是,在SSTF算法中,磁头的移动方向是根据当前磁头位置和未访问的磁道位置来动态确定的,因此,在实际的算法实现中,需要根据当前磁头位置和未访问的磁道位置来计算磁头移动的距离,并选择距离最近的磁道进行访问。
阅读全文