首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统如何同时在多个CPU核上调度多线程?

操作系统如何同时在多个CPU核上调度多线程?
EN

Stack Overflow用户
提问于 2015-09-21 14:15:33
回答 1查看 1.5K关注 0票数 2

我目前正在阅读Tanenbaum的“现代操作系统”,并有一个关于“帮”或“协同调度”的问题:

据说,操作系统代码被Mutexes划分为逻辑部分,允许在不同的CPU核上同时执行操作系统的不同部分(例如,文件系统代码可以与处理中断的代码并行运行)。这意味着操作系统中负责线程或进程调度的部分必须由互斥保护。

此外,如果两个进程A和B通信频繁,操作系统应该使用Gang协同调度,让这两个进程同时在不同的内核上运行。这是一个性能改进,因为这两个进程可能会因为等待相应的其他进程的答案而被阻塞。

现在我的问题是:

  1. 操作系统如何在当前不运行的核心上调度进程或线程?例如,调度程序运行在核心X上,因此只能将上下文切换到核心X上的另一个线程,而不是CPU/core。
  2. 操作系统如何能够一次调度多个核心?如果调度程序只运行在一个核心上,并且受到互斥保护,那么一次不能在多个核上运行?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 11:54:15

在对称的多处理器体系结构上,所有CPU对所有内存都有相同的访问权限。线程的对象代码和数据对所有内核和处理器都是可访问的,因此很容易将线程/进程从核心“移动”到核心。内核只需实现一个调度方案,以确保所有需要运行的东西都尽可能地运行。一个在一个核心上被中断的线程/进程可以在另一个核上恢复,而不需要很小的惩罚。

确切地说,该调度方案是不同的。可以在单个核心上运行单个调度程序任务,该任务控制在所有其他内核上运行的内容。或者,每个核心都有一个迷你调度程序,负责该核心的调度,并与其同侪合作,以分散线程。我认为,这就是Linux所做的(更正欢迎)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32697505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档