你的阅读材料很好。所以那里没有问题。还可以看看斯坦福大学关于操作系统设计的 CS 可下载讲座。
- 调度算法可能需要更复杂。这取决于运行的应用程序的类型以及它们的贪婪程度。他们是屈服还是被迫屈服。那种事。这更多的是您的流程想要或期望什么的问题。RTOS 将具有比桌面更复杂的调度。
- 线程应该与一个核心具有亲和性,因为一个进程中的 2 个线程可以并行执行……但不能在同一个核心上同时实时执行。将它们放在不同的内核上可以让它们真正并行运行。缓存也可以针对核心亲和力进行优化。这实际上是您的线程实现和调度程序的混合。sched 可能希望确保线程在内核上同时启动,而不是临时启动以减少线程在彼此和事物上等待的时间量。如果你的线程库是用户空间的,它可能会分配核心,或者让调度程序根据容量或最近的死亡情况来决定。
- 可扩展性通常是内核限制(可以是任意的)。在 Linux 中,如果我记得,限制是由于在调度程序中保存 CPU 信息结构的数组的静态大小。因此它们是固定大小的。这可以通过重新编译内核来改变。大多数优秀的调度算法将支持非常大量的内核。随着您的核心或处理器数量越来越多,您需要注意不要过多地分割进程执行。如果一个程序有 2 个线程,请尝试将它们安排在接近时间的位置,因为它们之间可能存在因果关系(通过共享数据)。
您还需要决定如何实现线程,以及如何在内核中表示进程(无论是重的还是轻量的)。线程内核是否管理?用户空间管理?这些东西都会对调度器的设计产生影响。看看 POSIX 线程是如何在各种操作系统中实现的。你要考虑的东西太多了:)
简而言之,对于逻辑存在或应该存在的位置,并没有真正的直接答案。这完全取决于设计、应用程序期望、时间限制(在程序上)等等。
希望这会有所帮助,但是我不是这里的专家。