我已经完成了编写第一个拟合算法的作业分配,它意味着根据first-Fit算法将一定数量的作业分配给一定数量的内存块。到目前为止,我已经算法正常工作并正确分配作业;但是,我的问题是当我的排队作业输出到控制台时,我的循环不会遍历发送到队列的所有作业,它只显示发送到队列的初始作业及其大小,直到所有要发送的作业为止已经迭代了队列。
这可能很简单,但我似乎无法弄明白......其他任何事情只需要问我可以提供。谢谢。
public void firstFit(int counter, int JobIndex)
{
Counter = counter;
jobIndex = JobIndex;
do {
if (jobSize[jobIndex] > memorySize[Counter-1])
{
Counter += 1;
}
else
{
Console.Text += Environment.NewLine + "Job " + (jobIndex+1) + " of size "
+ jobSize[jobIndex] +
" has been loaded into memory block:"
+ Counter;
memorySize[Counter-1] = memorySize[Counter-1]-jobSize[jobIndex];
Console.Text += Environment.NewLine + "The size of memory block " + Counter + " is now " + memorySize[Counter-1];
Counter = 1;
jobIndex += 1;
}
} while (Counter <= blocks && jobIndex < jobs);
for (int i = 0; i < jobs-jobIndex; i++ ){
jobQ = jobIndex;
if (jobQ < jobs)
{
Console.Text += Environment.NewLine + "Job " + (jobQ+1) + " of size " + jobSize[jobQ] + " is sent to waiting queue!";
}
}
大小为45的作业1已加载到内存块中:1大小为 内存块1现在是16
大小为1230的作业2已加载到内存块中:2大小为 内存块2现在是410
大小为325的作业3已加载到内存块中:2大小为 内存块2现在是85
大小为303的作业4已加载到内存块中:3大小为 内存块3现在是131
大小为1178的作业5已加载到内存块中:5大小为 存储块5现在是393
尺寸为1276的作业6已加载到内存块中:6大小为 存储块6现在是426
大小为965的作业7已加载到内存块中:7大小为 存储块7现在是322
大小为537的作业8被发送到等待队列!
大小为537的作业8被发送到等待队列!
大小为537的作业8被发送到等待队列!
答案 0 :(得分:1)
最后有这段代码:
for (int i = 0; i < jobs-jobIndex; i++ )
{
jobQ = jobIndex;
if (jobQ < jobs)
{
Console.Text += Environment.NewLine + "Job " + (jobQ+1) + " of size " +
jobSize[jobQ] + " is sent to waiting queue!";
}
}
每次循环时jobQ
的值都是相同的,所以当然每次都会打印相同的东西。您是否有可能将循环中的第一行读作:
jobQ = jobIndex + i;
...
答案 1 :(得分:0)
排序。谢谢Ryan指出我正确的方向。问题是我没有尝试获取进入队列所需的所有值的工作号,我只是得到jobQ + 1的工作号,这将永远是同一份工作,第一份工作是不合适。我的jobSize也一样。
这是我必须改变的代码:
for (int i = 0; i < jobs-jobIndex; i++ ){
jobQ = jobIndex;
if (jobQ < jobs)
{
Console.Text += Environment.NewLine + "Job " + (jobQ+(i+1)) + " of size " +
jobSize[jobQ+i]) + " is sent to waiting queue!";
}
}