1. 程式人生 > >磁碟排程-最短尋道時間優先(SSTF)

磁碟排程-最短尋道時間優先(SSTF)

最短尋道時間優先:其要求訪問的磁軌與當前磁頭所在的距離最近。

演算法思想:首先排序,找出當前第一個大於等於當前磁頭所在位置,設定兩個指標,分別代表左右兩個磁軌號,比較兩個磁軌號大小即可得到離起始磁軌最近的磁軌,然後更新即可。

輸入:起始磁軌以及要訪問的磁軌數目,要訪問的磁軌號。

輸出:被訪問的下一個磁軌號和移動距離, 最後是平均尋道長度。

執行結果:

資料結構:

//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++;
    }
}