对于某些给定任务,什么是最好的任务调度算法?

时间:2012-12-22 16:58:11

标签: algorithm scheduling

我们列出了不同长度的任务多个cpu核心<​​/ em>和一个上下文切换时间。 我们希望在核心中找到最佳的任务调度,以最大化处理器利用率。 我们怎么能找到这个? 如果我们从列表中选择最大的可用任务并将它们一个接一个地分配给当前的准备好的核心,它是不是很好,它会是最好的,或者你认为我们必须尝试所有的命令来找出哪个是最好的?

我必须补充说,所有核心都在时间单元0准备就绪,并且任务应该同时工作。

1 个答案:

答案 0 :(得分:1)

这里的想法是,没有灵丹妙药,因为你必须考虑什么是正在执行的任务类型,并尝试尽可能好地安排它们。

  • CPU绑定任务不会使用太多通信(I / O),因此需要连续执行,并且只在必要时才会中断 - 根据所使用的策略;

    < / LI>
  • I / O绑定任务可以在执行过程中不断放在一边,允许其他进程工作,因为它会在sleeping很多时间内等待数据被检索到主存储器;

  • 必须连续执行交互式任务,但不需要在没有中断的情况下执行,因为它会产生中断,等待用户输入,但它需要具有高优先级,以免让用户注意到延迟执行。

考虑到这一点以及上下文切换成本,您必须评估您拥有的任务类型,从而为您的调度程序选择一个或多个策略。

修改

我认为这是一个简单的概念性问题。考虑到您必须实施解决方案,您必须分析要求。

由于您具有任务的长度和上下文切换时间,并且您必须维持核心繁忙,这将成为一个优化问题,您必须在到达结束时保持最小数量的核心空闲。进程,但您需要保持最小数量的上下文切换,以便您的总体执行时间不会增长太多。

正如svick所指出的,这听起来像是一个分区问题,它是NP完全的,你需要将一系列数字分成给定数量的列表,这样每个列表的总和等于每个其他

在您的问题中,您可以放松目标,这样您就不再需要所有核心执行相同的时间,但您希望任何两个核心执行时间之间的差异尽可能小

在svick给出的参考文献中,您可以看到一种动态编程方法,您可以将其映射到您的问题上。