【问题标题】:What is the difference in scheduling threads?调度线程有什么区别?
【发布时间】:2021-07-16 08:43:34
【问题描述】:

我目前正在学习线程的同时多线程、多核和多处理器调度。我查了一些资料,我的理解是:

如果有一个处理器支持同时多线程,它会将一个物理核心变成两个逻辑核心。有两个进程,P1 和 P2。

  1. 我的理解:在Linux中,每个进程至少由一个线程组成?那么调度是基于线程调度的吗?

P1 和 P2 分别调度到两个逻辑核。他们独立运作。这是第一种情况。如果有一个进程 P3,它由两个线程 t1 和 t2 组成。将 t1 和 t2 分别调度到不同的逻辑核心。那么将两个不同的进程调度到不同的逻辑核和将同一个进程中的不同线程调度到逻辑核有什么区别呢?

  1. 我的理解:进程是系统的最小单位 分配资源,线程共享进程的资源。 进程中的线程共享虚拟内存、PCB,并且可以访问 相同的数据。因此,当在一个进程中调度不同的线程时 和在不同进程中调度线程,没有区别 为处理器。区别在于地址转换 页表和缓存是否可以共享。对于多核 处理器,处理器不关心线程是否属于 相同的过程。数据的一致性由 MESI 保证。 数据的物理位置由页表保证。

我的理解正确吗?

【问题讨论】:

  • 值得注意的是,线程在 Linux 中可能是一个有点误导的术语,因为它暗示它与进程本质上不同。事实上,在 linux 上,线程是由 clone 系统调用创建的独立进程。线程通常定义为共享除堆栈之外的所有内容的另一个进程。

标签: linux multithreading operating-system cpu-architecture scheduling


【解决方案1】:

没错,没有区别。内核只是调度任务;每个用户任务都引用一个页表(无论它是否与任何其他任务共享)。

每个逻辑 CPU 内核都有自己的页表指针(例如 x86 CR3)。

是的,缓存一致性是由硬件维护的。 Linux 内核的手动原子(使用 volatile,以及用于 RMW 和屏障的内联 asm)depend on that

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2021-05-23
    • 2021-11-07
    相关资源
    最近更新 更多