2012-10-07 30 views
0

我有結構的載體,具有結構看起來像這樣:我將如何實現FCFS處理器調度模擬器?

struct myData{ 
    int ID; 
    int arrivalTime; 
    int burstTime; 
}; 

填充我的矢量與此數據後:

1 5 16 
4 7 12 
3 12 4 
2 7 8 

其中每行是一個單獨的結構的ID(任意的,沒有按't表示到達順序),arrivalTime和burstTime,我將如何使用「for」或「while」循環來遍歷矢量的索引並計算數據,以便我可以打印出類似的內容?

Time 0 Processor is Idle 
Time 5 Process 1 starts running 
Time 21 Process 2 is running 
Time 29 Process 4 is running 
Time 41 Process 3 is running 

我想我能做到這一點是有一個整數跟蹤當前的時間是什麼(當前暫時的那些已經運行過程突發時間的總和)的方式,但我不能似乎找出了一個算法來解釋閒置時間(當處理器沒有做任何事情,新任務尚未到達)以及跟蹤其他數字。爲了簡單起見,我只是決定,當兩個進程在同一時間到達時,我將處理具有較低ID號的進程。我知道我沒有在這裏展示很多代碼來展示我想要做什麼,但我希望我已經相當清楚地解釋了它。我正在尋找一個僞代碼算法解決這個問題,但我不會拒絕那些已被編碼的東西(在C++中?)。

作爲附加的註釋,萬一我無法表達我內心清楚地訪問我的數據,這樣的:

cout << structVector[0].ID << "\n"; 
cout << structVector[0].arrivalTime << "\n"; 
cout << structVector[0].burstTime << "\n"; 

會打印出

1 
5 
16 

在僞代碼任何幫助或實際的代碼將非常感謝!在閱讀了這篇文章幾次之後,我意識到我對這個問題已經很通用了,但是我只想知道如何計算這些數據。

回答

1

首先,根據到達時間對矢量進行排序。 然後下面的代碼將完成你正在尋找的東西。

int i = 0, time = 0; 

while (i < vec.size()) 
{ 
if (vec[i]. arrivalTime > time) 
cout << "Time " << time << "process is idle"; 

time += vec[i].arrivalTime; 
cout << "Time " << time << " Process " << vec[i].ID << " is running" << endl; 

time += vec[i].burstTime; 

i++; 
} 
+0

非常感謝!我看到我對這個過程有點過分的想法。我將「while」部分和「if」聲明放下,但我錯過的細節是稍後增加了爆發時間。看起來有足夠的睡眠不知道理解一個簡單的算法! – ahabos