开发内核以支持多个CPU

时间:2009-05-19 10:16:17

标签: linux multithreading operating-system kernel multicore

我希望进入操作系统内核开发,并认为我的贡献是扩展SANOS操作系统以支持多个核心机器。我一直在阅读有关操作系统(Tannenbaum)的书籍,以及研究BSD和Linux如何应对这一挑战,但仍然坚持几个概念。

  1. SANOS在多个CPU上运行时是否需要更复杂的调度算法?或者当前的工作正常?

  2. 我知道线程与启动它们的核心具有亲和性是一个好主意,但这是通过调度还是通过更改线程创建方式的实现来处理的?

    < / LI>
  3. 需要考虑哪些SANOS可以在拥有数百个内核的计算机上运行?据我所知,BSD和Linux最多只支持最多十几个内核。

1 个答案:

答案 0 :(得分:4)

你的阅读材料很好。所以没有问题。另请参阅斯坦福大学关于操作系统设计的CS下载讲座。

  1. 调度算法可能需要更复杂。这取决于运行的应用程序类型以及它们的贪婪程度。他们是自我屈服还是被迫。那种事。这更像是您的流程想要或期望的问题。 RTOS的调度比桌面更复杂。
  2. 线程应该与一个核心具有亲缘关系,因为一个进程中的2个线程可以并行执行...但不能在同一个核心上实时进行。将它们放在不同的核心上可以让它们真正并行运行。此外,还可以针对核心关联优化缓存。这实际上是您的线程实现和调度程序的混合。 sched可能希望确保线程在核心上同时启动,而不是ad-hoc以减少线程等待彼此和事情的时间。如果你的线程库是用户空间,也许它会分配核心,或者让调度程序根据容量或最近的死亡来决定。
  3. 可伸缩性通常是内核限制(可以是任意的)。在Linux中,如果我记得,限制是由于在调度程序中保存CPU信息结构的数组的静态大小调整。因此它们是固定的大小。这可以通过重新编译内核来改变。大多数好的调度算法都支持非常多的内核。随着核心或处理器数量的增加,您需要注意不要过多地分解流程执行。如果一个程序有2个线程,请尝试在近距离接近时安排它们,因为它们之间可能存在因果关系(通过共享数据)。
  4. 您还需要确定如何实现线程,以及如何在内核中表示进程(无论是重量级还是轻量级)。线程内核是否受管理?用户空间管理?这些都会对调度程序设计产生影响。看看POSIX线程如何在各种操作系统中实现。您可以考虑以下事项:)

    简而言之对于逻辑所处或应该驻留的位置,实际上没有任何直接的答案。这完全取决于设计,应用期望,时间限制(在程序上)等等。

    希望这有帮助,但我不是这里的专家。