2009-05-19 58 views
2

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

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

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

  3. 需要考虑哪些因素以使SANOS可以在具有数百个内核的机器上运行?据我所知,BSD和Linux最多只支持最多十几个内核。

+0

您能否合并您的SANOS问题? – 2009-05-19 11:21:08

回答

4

你的阅读材料不错。那里没有问题。也可以看看斯坦福大学的操作系统设计CS讲座。

  1. 调度算法可能需要更复杂。这取决于运行的应用程序的类型以及它们是多么贪婪。他们是屈服于自己还是被迫?那种事。这更多的是你的流程需要或预期的问题。实时操作系统的调度比桌面更复杂。
  2. 线程应该对一个内核具有亲和力,因为一个进程中的2个线程可以并行执行,但不能在同一个内核上同时执行。将它们放在不同的内核上可以让它们真正并行运行。也可以针对核心关联优化高速缓存。这实际上是您的线程实现和调度程序的混合。 sched可能希望确保线程同时在核心上启动,而不是临时性地减少线程在其他事物上等待的时间量。如果你的线程库是用户空间,也许它分配核心,或者让调度程序根据容量或最近的死亡来决定。
  3. 可伸缩性通常是一个内核限制(可以是任意的)。在Linux中,如果我记得,限制是由于调度程序中包含CPU信息结构的数组的静态大小。因此他们是一个固定的大小。这可以通过重新编译内核来改变。大多数好的调度算法将支持大量的内核。随着核心或处理器数量的增加,您需要小心不要过多地分割流程执行。如果一个程序有2个线程,请尝试在近距离接近时间安排它们,因为它们之间可能存在因果关系(通过共享数据)。

您还需要确定您的线程是如何实现的,以及在内核中如何表示一个进程(重或轻)。线程内核是否管理?用户空间管理?这些都对调度程序设计产生影响。看看POSIX线程是如何在各种操作系统中实现的。有这么多想你:)

总之有没有真正的任何直接的答案,逻辑或应该居住。这完全取决于设计,应用程序期望,时间限制(在程序上)等等。

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