【发布时间】:2015-11-06 18:45:45
【问题描述】:
我无法实现 SJF(最短作业优先)算法。
SJF 是这样工作的
如果进程到达时间为 0,它将一直工作到下一个进程到达,算法必须检查到达时间为 1 的到达(进程/进程)是否短于当前剩余时间
示例:P0 执行了 1 并且仍然 2 完成,现在我们在 1 中有 P0,P1,P2,P3,P4
算法将执行最短的一个 P3,然后是 P0,然后是 P4,然后是 P1,依此类推。问题是我必须将它们的开始和结束时间执行以及等待时间保存到所有进程。
这是我最新的算法。 (会出现一些错误的情况)
输入数据:
Process Arrival Burest
P0 0 3
P1 0 4
P2 0 5
P3 1 1
p4 1 3
for (i = 0; i < proc.Count; i++)
{
minProcIndex = i;
for (x = i; x < proc.Count; x++)
{
for (int y = 0 ; y < proc.Count; y++)
{
if (y == minProcIndex)
continue;
if (tempBrust[minProcIndex] - tempArrival[y] > tempBrust[y]
&& tempBrust[y] != 0)
{
tempBrust[minProcIndex] -= tempArrival[y];
// tempArrival[minProcIndex] += tempArrival[y];
clock += tempArrival[y];
//proc[y].start = clock;
minProcIndex = y;
}
else if (y != proc.Count -1)
continue;
else
{
if (y == 0)
{
proc[minProcIndex].start = 0;
}
else if (proc[y].start > 0)
{
proc[y].start = clock;
}
else
proc[minProcIndex].start = clock;
proc[minProcIndex].end = proc[minProcIndex].brust + clock;
tempBrust[minProcIndex] = 0;
clock += proc[minProcIndex].brust;
if (minProcIndex == proc.Count - 1)
minProcIndex = 0;
else
minProcIndex++;
for (int c = 0; c < proc.Count; c++)
{
if (tempArrival[c] < clock)
tempArrival[c] = clock - 1;
}
}
}
}
}
【问题讨论】:
-
看起来像家庭作业。如果您需要帮助,请更具体。您究竟做了什么来尝试调试问题并修复它?除了无法完成作业之外,您遇到了什么具体问题?请准确解释您发布的代码的作用,以及它与您希望它做什么的不同之处。请提供说明所有这些的a good, minimal, complete code example。
-
啊,这让我回到了我的操作系统课。
-
我的代码遗漏了很多东西,我无法完成它,所以它无助于解释代码因为你可能有一个更好的(更好的想法)
-
但是如果你真的想知道没关系,我已经尝试在每个循环中制作循环我会完成一些检查,比如最短的工作,在当前时间,下一个循环来检查是否有在不久的将来更短的,如果不是它会在所有工作中完成它
-
首先,我相信您正在尝试实现最短剩余时间,而不是最短作业优先。你的代码太复杂了,正确的解决方案可能很简单,所以我怀疑你是在想问题。我建议你制作纸条,每个流程一张。然后假装你是计算机,并确定你将如何完成订购它们的任务。提示:您需要一个橡皮擦,以便在工作时更改“burst”值。
标签: c# algorithm loops for-loop operating-system