我目前正在阅读Tanenbaum的现代操作系统,并且有关于帮派或联合调度的问题:
声明操作系统代码由互斥锁分为逻辑部分,以允许OS的不同部分在不同的CPU内核上同时执行(例如,文件系统代码可以与处理中断的代码并行运行)。这意味着负责线程或进程调度的操作系统部分必须受互斥锁保护。
另外,如果两个进程A和B进行大量通信,操作系统应该使用Gang或Co-Scheduling来让这两个进程同时在不同的核上运行。这是一种性能改进,因为否则可以通过等待相应其他进程的答案来阻止这两个进程。
现在我的问题:
操作系统如何在当前未运行的核心上安排进程或线程?例如。调度程序在核心X上运行,因此只能将上下文切换到核心X上的另一个线程而不是CPU /核心Y.
操作系统如何一次安排多个核心?如果调度程序仅在一个内核上运行并且受互斥锁保护而不能一次在多个内核上运行?
答案 0 :(得分:2)
在对称多处理器架构上,所有CPU都可以平等访问所有内存。所有核心和处理器都可以访问线程的目标代码和数据,因此很容易将线程/进程从核心“移动”到核心。内核只需要实现一个调度方案,以确保所有需要运行的东西尽可能地运行。在一个核心上中断的线程/进程可以在另一个核心上恢复,而且损失很小。
该调度方案究竟是什么变化。可以在单个核心上运行单个调度程序任务,以控制在所有其他核心上运行的内容。或者,每个核心可能有一个小型调度程序,它只关注该核心的调度,与其同行合作以分散线程。我认为(欢迎更正),Linux的功能。