可以在多核CPU上并行运行多个OS进程吗?

时间:2016-02-25 18:39:28

标签: multithreading operating-system multiprocessing

所以我开始讨论多核CPU是否允许并行执行单独的进程。

据我所知,每个核心允许执行不同的线程,但它们都必须属于一个进程。或者我错了吗?

我的理由是,虽然每个核心都有独立的寄存器和L1 / L2缓存(取决于硬件),但它们都必须共享其他东西,如L3缓存或TLB(我没有很多关于cpu架构的知识,请随时纠正我。)

我试着寻找答案,但无法找到任何结果(也许问题太愚蠢了)。

非常感谢你。

2 个答案:

答案 0 :(得分:0)

可以安排多个进程的多个线程在单个核心上运行。当然,在给定时间只有一个线程在核心上运行。在核心上运行的进程队列由调度程序管理。一个好的调度程序将为核心提供CPU绑定和I / O绑定进程的良好组合,以便机器中的所有组件都具有良好平衡的负载。

因此,多核CPU不仅允许并行执行,还允许并发执行进程。另一方面,单核CPU只允许并行执行。单核机器中没有并发性。

核心的所有资源都被赋予当前在其上运行的线程/进程(但不是在超线程中)。如果我没有错的话,第一个同时拥有多个进程的资源是主内存或RAM。所有进程都使用RAM的某些部分,即使它们没有在核心上运行。要将进程加载到内核,通过将寄存器,地址空间和堆栈设置为进程所处的相同状态,从核心卸载以便为其他进程提供时间,从RAM加载进程控制块(PCB)

每个流程的时间量从few ms to a few hundred ms开始变化。与之相比,L1 / L2高速缓存访​​问是几ns,主存储器访问是几百ns。下面的图片应该很有趣:

enter image description here

答案 1 :(得分:0)

两个进程或线程可以在不同的核上同时运行,前提是它们不在电子级别的共享资源上竞争。

在英特尔芯片中最明显的问题是L3缓存和RAM。如果您有两个或更多英特尔芯片,他们就QPI相互交谈。虽然这允许每个CPU集群都有自己的内存控制器在SMP配置中运行,但如果线程需要来自另一个芯片内存的数据,那么它就会成为另一回事。

在AMD芯片中,每个核心都有一个内存控制器,Hypertransport负责合成SMP配置。令人高兴的是,即使在多芯片系统中(所有芯片内部和外部也都是Hypertransport),所有内核在各处都非常相似。

英特尔和AMD都在创建架构方面做得非常出色,这些架构可以最大限度地减少多核,对称多处理系统中发生的内存争用,而不必过多考虑我们编写软件的方式。如果你想要绝对最硬的硬件,你可以编程考虑底层的NUMA硬件架构,你可能(这真的很难)减少一些正在发生的争论。

可能阻止真正并发执行的其他因素是,如果有专门的子系统为多个核心提供服务。例如,UltraSPARC T1在8个内核之间共享一个浮点单元。显然他们不能一次全部使用它!

FPGA通常被认为是可并行计算(如FFT)的绝佳选择。但是它们的内存有限,如果计算开始需要存储更多数据,则必须使用外部RAM。这会立即限制可以实现的并行度,因为FPGA的不同部分开始争夺对外部RAM的访问权。在这种情况下,FPGA是否是正确的方法是值得怀疑的;一个时钟频率为500MHz的FPGA访问RAM(速度也非常慢),没有先进的板载缓存,也不会像具有高级缓存和多存储控制器子系统的优秀设计CPU一样快。