磁碟排程-最短尋道時間優先(SSTF)
阿新 • • 發佈:2018-12-12
最短尋道時間優先:其要求訪問的磁軌與當前磁頭所在的距離最近。
演算法思想:首先排序,找出當前第一個大於等於當前磁頭所在位置,設定兩個指標,分別代表左右兩個磁軌號,比較兩個磁軌號大小即可得到離起始磁軌最近的磁軌,然後更新即可。
輸入:起始磁軌以及要訪問的磁軌數目,要訪問的磁軌號。
輸出:被訪問的下一個磁軌號和移動距離, 最後是平均尋道長度。
執行結果:
資料結構:
//num為程序請求訪問的磁軌號
int num[maxn];
輔助函式:
//將當前磁頭所在的位置s移動到磁軌num[i]上 //更新sum,s的值。 void Move(int *num, int i, int &s, double &sum) { printf("%d %d\n", num[i], abs(s-num[i])); sum += abs(s-num[i]); s = num[i]; }
實現過程:
void SSTF(int *num, int n, int s, double &sum) { int i, j, k; //i左磁號,j右磁號 sort(num, num+n); j = lower_bound(num, num+n, s) - num; i = j-1; while(i >= 0 && j < n) { if(abs(s-num[i]) < abs(s-num[j])) //左磁號近 { k = i; i--; } else //右磁號近 { k = j; j++; } Move(num, k, s, sum); } while(i >= 0) //剩餘都是左磁號,直接從右到左訪問 { Move(num, i, s, sum); i--; } while(j < n) //剩餘都是右磁號,直接從左到右訪問 { Move(num, j, s, sum); j++; } }