【问题标题】:Linux Kernel Scheduling ImplementationLinux内核调度实现
【发布时间】:2014-04-12 01:00:06
【问题描述】:

我和我的朋友们正在尝试找到一种方法来为 SCHED_NORMAL 和 SCHED_BATCH 类实现新的(实际上是旧的 :))内核调度算法。换句话说,我们正在尝试实现循环或 FIFO 行为,而不是公平调度算法。我们一直在阅读内核代码,我们取得了一些进展,但还不够。启动此过程的已知方法是什么?我们如何开始(开始实现这些算法)?

谢谢

【问题讨论】:

  • Linux内核已经支持实时调度;支持循环和先进先出策略。有关详细信息,请参阅sched_setscheduler() 手册页。
  • @esorton 您是否建议我们只需将策略设置为 SCHED_RR 就可以了?
  • 是的。您不需要实现新的调度算法,除非您想获得学习体验。如果您将进程的调度策略设置为 SCHED_RR,它将以实时优先级运行。具有 SCHED_RR 或 SCHED_FIFO 策略的进程将在具有 SCHED_NORMAL 策略的进程之前运行。
  • @esorton 听起来不错。但是,有没有其他方法可以用 SCHED_NORMAL CFS 替换该算法。我们需要替换 sched.c 中的所有结构吗?
  • 不幸的是,我不熟悉内核方面的事情,只熟悉用户级别。如果您确实想实现自己的调度程序,我注意到这个问题,stackoverflow.com/questions/3086864/…,有点老,但可能会有所帮助。

标签: linux linux-kernel kernel


【解决方案1】:

我们一直在阅读内核代码,我们取得了一些进展,但事实并非如此 足够。启动此过程的已知方法是什么?我们如何开始 (开始实现这些算法)?

嗯,这些概念有点复杂,而且进化很大,所以你应该从下面的参考资料中开始理解这些算法和概念。一旦你理解了,就应该开始阅读内核代码。这应该是方法。

您可能想参考详细描述这些概念和实现的经典书籍。

  1. "The Design Of UNIX Operating System"莫里斯·J·巴赫(第08章)

  2. Linux Kernel Development罗伯特·洛夫(Chapter04)

【讨论】:

  • 我们正在使用 Love 的书,我们已经阅读了第 4 章。此外,我们对调度算法有了一些了解。我们的问题是开始这个​​过程。我正在考虑获取 sched_fair.c 代码并对其进行修改,或者获取 sched_rt.c 并对其进行修改。但是,我不知道如何与 sched.c 通信。也就是说,sched.c.需要什么样的结构。
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 2011-09-11
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多