经过数小时的思考,我终于崩溃了,结果是我不知道如何在java中实现循环。我尝试了不同的方法,而且是我最接近的方法。。好吧,我用一个例子来解释。。
AT = Arrival Time
BT = Burst Time (Execution Time)
首先,我有这一行数字(0,5;6,9;6,5;15,10)
,其中位置0-2-4
中的元素位置CCD_ 3中的元素表示突发时间。到目前为止,我的代码已经将此输入转换为一个名为Process的类,该类附带构造函数:Process(String name, int AT, int BT)
。我已经在ArrayList
中用分离了进程。现在我有一个ArrayList alst = [P0,P1,P2,P3]
,其中P0
有AT 0
和BT 5
,依此类推。。
我创建了一个方法,它会返回一个经过一定时间切割的进程列表-例如,在(0,5;6,9;6,5;15,10)
的情况下,我将得到一个结果:[P0,P0,P1,P1,P1,P2,P2,P3,P3,P3,P3]
所以循环法是一种每个进程都有量子执行时间的方法,我选择了3。
- P0与AT 0&BT 3加入-添加到最终列表中(时间已过=3)
- P0与AT 0&BT 2加入-添加到最终列表中(时间已过=5)
- P0已完成
- P1与AT 6&BT 3加入-添加到最终列表中(时间已过=9)
- 下一个P1被添加到队列
- P2与AT 6&BT 3加入-添加到最终列表中(时间已过=12)
- 下一个P2被添加到队列中
- P1与AT 6&BT 3从队列中加入-添加到最终列表(经过的时间=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;
}
您可以维护等待进程的队列,并使用以下算法:
-
选择队列中的第一个进程(如果它不是空的)。将其添加到输出列表中。
-
在给定的时间段内执行它(如果剩余时间小于一个量子,则执行时间更短),并从该过程的剩余时间中减去该量子。
-
如果新进程已经到达,请将它们添加到队列的末尾。
-
如果最后一个执行的进程未完成(即其剩余时间不为0),请将其添加到等待队列的末尾。
-
如果还有任何进程,请转至步骤1。
package cpuSch;
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 processn______________________________");
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("Average WT="+AWT+"n___________________________________________");
}
}
示例代码
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 processn******************************");
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***********************************************");
}
}