【发布时间】:2016-10-21 05:30:18
【问题描述】:
我正在尝试实现循环调度算法。但是到目前为止我所做的代码只考虑了突发时间。我还需要考虑流程的到达时间。我有一个 time_chart 数组,我用它来存储当前正在执行的进程的编号。但是如果当前没有进程正在执行(即如果选定的进程已完成执行并且下一个进程尚未到达。),则应将值 0 插入到 time_chart 数组中。
我已将突发时间和到达时间存储在二维数组中:
//proc[][0] is the AT array
//proc[][1] is the BT array
和变量q中的时间量子。以下是我的代码:
int time_chart[] = new int[total_time];
int sel_proc = 1;
int current_q = 0;
for (int k = 0; k < total_time; k++) {
//Assign selected process to current time in the Chart
time_chart[k] = sel_proc;
//Decrement Remaining Time of selected process by 1 since it has been assigned the CPU for 1 unit of time
proc[sel_proc - 1][1]--;
//Updating value of sel_proc for next iteration
current_q++;
if (current_q == q || proc[sel_proc - 1][1] == 0)//If Time slice has expired or the current process has completed execution
{
current_q = 0;
//This will select the next valid value for sel_proc
for (int j = 1; j <= n; j++) {
sel_proc++;
if (sel_proc == (n + 1)) {
sel_proc = 1;
}
if (proc[sel_proc - 1][1] != 0) {
break;
}
}
}
}
// print timeline for testing
for (i = 0; i < total_time; i++) {
System.out.println("Time " + i + ": " + time_chart[i]);
}
当前它会选择下一个进程,即使它还没有到达。因此,我需要检查下一个过程是否已经到达。我尝试使用proc[sel_proc][0] <= k 进行检查,但似乎没有用。我的意思是我没有得到任何输出。我想不出另一种方法来检查下一个过程是否已经到达。如果下一个进程尚未到达,我如何检查这一点并将值 0 放入数组中?
【问题讨论】:
-
建议:使用
List或class Proc { int arrival; int remainingTime}作为您的时间表。处理新条目的添加和已完成条目的删除变得更加容易。 -
@AdrianColomitchi。我不需要删除这些进程,因为这些详细信息用于稍后计算
waiting time和turnaround time。我已经完成了那部分。 -
您能否提供您要解决的问题的文字描述。 Round Robin 用于在多个资源之间分配负载。你的资源是什么?是否还有其他仅按资源请求的调度问题?也许某些请求比其他请求使用了更多的资源。
-
@PathagamaKuruppugeTharindu 我回答你的问题了吗?如果是,请接受,如果不是,请发表评论。