我被分配了一个任务。
编写了一个程序来模拟操作系统中的作业调度。工作是随机产生的。每个作业都被赋予一个从1到4的随机优先级,其中1是最高优先级的-and,这是完成其执行的随机时间。
作业不会开始执行并运行到完成,而是共享处理器。操作系统执行一个称为时间片的固定时间单位的作业。在时间片的末尾,当前作业的执行被暂停。然后将作业放在优先级队列中,等待下一个处理器时间的分配。然后,将具有最高优先级的作业从优先级队列中移除并执行一段时间。当第一次生成作业时,如果处理器空闲,它将立即开始执行。否则,它将被放在优先级队列中。
在此分配中,您将需要队列和优先级队列的实现。您可以在Java类库(java.util.PriorityQueue)中使用优先级队列。它实现了接口java.util.Queue。
我混淆了时间片和执行时间。正如我现在所理解的,假设为final timeslice=3,完成所有作业的时间是最终int clock=20分钟。当作业A从0分钟开始时,执行时间为5(在1-5之间随机生成)。在执行作业到第3分钟时,作业A被放入优先级队列,而执行时间为2分钟的作业B在第3分钟进入?完成执行作业B后,作业A进入完成执行还是作业C?
如果我错了,请解释一下。谢谢
发布于 2012-03-05 09:27:33
在您的问题中,Job还是Job是否被执行(一旦B完成),这应该取决于PriorityQueue返回了什么,这将是具有最高优先级的任务。
如果Job的优先级为1,而Job的优先级为2,PriorityQueue将返回Job,这将得到下一个时间切片。
如果Job的优先级为2,而Job的优先级为4,PriorityQueue将返回Job,这将得到下一个时间切片。
正如adn_295所说,这是一个很好的任务。
发布于 2012-03-05 09:13:10
PriorityQueue总是返回最高优先级的任务,因此每当添加回队列时,它将继续被返回。我建议您尝试实现该解决方案,看看它是如何工作的。(或者使用PriorityQueue编写一个简单的测试程序)
发布于 2012-03-05 09:15:40
首先,这是一个非常好的任务。您需要实现操作系统如何调度作业/任务的确切机制。请参阅这些参考资料,以便对其有清楚的了解。
1) http://oreilly.com/java/archive/quartz.html
https://stackoverflow.com/questions/9563811
复制相似问题