gpt4 book ai didi

java - java中的循环调度

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:18 25 4
gpt4 key购买 nike

我正在尝试实现循环调度算法。但是我到目前为止所做的代码只考虑了突发时间。我还需要考虑进程的到达时间。我有一个 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 放入数组中?

最佳答案

虽然您可以仅使用数组来完成此操作,但如果您创建一个类结构来存储流程信息并使用两个 Queues,您可能会发现逻辑更简单。 .第一个Queue是按到达时间排序的进程列表,第二个 Queue当前正在执行的进程。

您可以按照这些方式对您的处理过程进行建模

private static class Process {
public final int id;
public final int burstTime;
public final int arrivalTime;
public int executionTime;

public Process(int id, int burstTime, int arrivalTime) {
super();
this.id = id;
this.burstTime = burstTime;
this.arrivalTime = arrivalTime;
}
}

然后创建一个队列调用计划外进程(或任何看起来合适的进程)并将进程添加到按到达时间排序的队列中。 Queue<Process> = new LinkedList<>()

现在在你的循环中,每次你只检查队列的头部,看看进程的到达时间是否等于或大于当前时间。如果是,则将其从队列中移除并将其添加到调度程序队列的头部。 LinkedList<Process> = new LinkedList<>()

您始终从调度程序队列中删除头进程并更新进程的执行时间。确保不要超过突发时间,即执行时间总是增加量程或 burstTime - executionTime,具体取决于哪个更小。更新后,如果执行时间小于 burstTime,则将进程添加回调度程序队列。

请记住,如果进程的剩余时间小于量程,则当前时间不会增加量程。

关于java - java中的循环调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com