何時間もの頭脳の後、私は最終的にクラッシュし、ラウンドロビンを Java に実装する方法がわからないという結果になりました。私はさまざまなアプローチを試しましたが、私が持っている最も近いもの..よく例を挙げて説明します..
AT = Arrival Time
BT = Burst Time (Execution Time)
(0,5;6,9;6,5;15,10)
最初に、位置の0-2-4
要素が到着時間を表し、位置の要素が1-3-5
バースト時間を表すこの数字の行があります。私のコードはこれまでのところ、この入力がコンストラクターに付属する Process というクラスに変換されていますProcess(String name, int AT, int BT)
。でプロセスを分離しましたArrayList
。だから今、私はArrayList alst = [P0,P1,P2,P3]
where P0
hasAT 0
などBT 5
を持っています`..
時間の経過とともにカットされたプロセスのリストを返すメソッドを作成しました-たとえば(0,5;6,9;6,5;15,10)
、結果が得られる場合:[P0,P0,P1,P1,P1,P2,P2,P3,P3,P3,P3]
したがって、ラウンドロビン方式は、すべてのプロセスが実行のために量子時間を取得する方法であり、私が選択した 3.
- AT 0 & BT 3 の P0 が登場 - 最終リストに追加 (経過時間 = 3)
- AT 0 & BT 2 の P0 が登場 - 最終リストに追加 (経過時間 = 5)
- P0終了
- AT 6 & BT 3 の P1 が登場 - 最終リストに追加 (経過時間 = 9)
- 次の P1 がキューに追加されます
- AT 6 & BT 3 の P2 が登場 - 最終リストに追加 (経過時間 = 12)
- 次の P2 がキューに追加されます
- AT 6 & BT 3 の P1 がキューから入ってくる - 最終リストに追加 (経過時間 = 15)
- 次の P1 はキューに入る
- P3 が到着し、最終リストに追加されます (経過時間 = 18)
- P1 はキューから取得されます - 最終リストに追加されます
そして、それは私の心がクラッシュしたように感じるポイントであり、それらをキューに入れる方法がわかりません.
結果は次のようになります。[P0,P0,P1,P2,P1,P3,P2,P1,P3,P3,P3]
最初の回答に基づいてコーディングしたもの。まだうまくいきません..
public ArrayList roundRobinJarjestus(ArrayList pstlst) {
ArrayList queue = new ArrayList();// järjekord, alguses tühi
ArrayList uuspst = new ArrayList();
queue.add(pstlst.get(0));
int i = 0;
double time = 0;
double pworkTime = 0;
int kvant = 3;
while (i < pstlst.size()) {
Protsess p = (Protsess) queue.get(i); //first process is taken
pworkTime = p.getTooaeg(); //execute time
time = time + pworkTime;
// if next arrival time is lower than time passed
if (((Protsess) pstlst.get(i + 1)).getSaabumisaeg() < time) {
queue.add(pstlst.get(i + 1));
}
// if worktime - quantum is higher than zero
// and still left something to execute
if (pworkTime - kvant > 0) {
p.setTooaeg(pworkTime - kvant);
queue.add(p);
}
uuspst.add(queue.get(i));
i = i + 1;
}
return uuspst;
}