2

何時間もの頭脳の後、私は最終的にクラッシュし、ラウンドロビンを 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 P0hasAT 0などBT 5を持っています`..

時間の経過とともにカットされたプロセスのリストを返すメソッドを作成しました-たとえば(0,5;6,9;6,5;15,10)、結果が得られる場合:[P0,P0,P1,P1,P1,P2,P2,P3,P3,P3,P3]

したがって、ラウンドロビン方式は、すべてのプロセスが実行のために量子時間を取得する方法であり、私が選択した 3.

  1. AT 0 & BT 3 の P0 が登場 - 最終リストに追加 (経過時間 = 3)
  2. AT 0 & BT 2 の P0 が登場 - 最終リストに追加 (経過時間 = 5)
  3. P0終了
  4. AT 6 & BT 3 の P1 が登場 - 最終リストに追加 (経過時間 = 9)
  5. 次の P1 がキューに追加されます
  6. AT 6 & BT 3 の P2 が登場 - 最終リストに追加 (経過時間 = 12)
  7. 次の P2 がキューに追加されます
  8. AT 6 & BT 3 の P1 がキューから入ってくる - 最終リストに追加 (経過時間 = 15)
  9. 次の P1 はキューに入る
  10. P3 が到着し、最終リストに追加されます (経過時間 = 18)
  11. 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;
}
4

3 に答える 3

-3

サンプルコード

import java.io.*;
class fcfs
{
public static void main(String args[]) throws Exception
{
int n,AT[],BT[],WT[],TAT[];
float AWT=0;
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
System.out.println("Enter no of process");
n=Integer.parseInt(br.readLine());
BT=new int[n];
WT=new int[n];
TAT=new int[n];
AT=new int[n];
System.out.println("Enter Burst time for each process\n******************************");
for(int i=0;i<n;i++)
{
System.out.println("Enter BT for process "+(i+1));
BT[i]=Integer.parseInt(br.readLine());
}
System.out.println("***********************************************");
for(int i=0;i<n;i++)
{
System.out.println("Enter AT for process"+i);
AT[i]=Integer.parseInt(br.readLine());
}
System.out.println("***********************************************");
WT[0]=0;
for(int i=1;i<n;i++)
{
WT[i]=WT[i-1]+BT[i-1];
WT[i]=WT[i]-AT[i];
}  
for(int i=0;i<n;i++)
{
TAT[i]=WT[i]+BT[i];
AWT=AWT+WT[i];
}
System.out.println("  PROCESS   BT      WT      TAT     ");
for(int i=0;i<n;i++)
{System.out.println("    "+ i + "       "+BT[i]+"       "+WT[i]+"       "+TAT[i]);}
AWT=AWT/n;
System.out.println("***********************************************");
System.out.println("Avg waiting time="+AWT+"\n***********************************************");

}
}
于 2014-12-19T22:21:29.967 に答える