线程的上下文切换和进程的上下文切换之间的区别



我知道这里,这个问题有一个解释。但我对一些观点有点困惑——:

让我有属于进程 P1 的线程 T(1-a) 和 T(1-b),以及属于进程 P2 的线程 T(2-a) 和 T(2-b)。

现在我的问题是-:

  1. 线程 T(1-a) 想要将上下文切换到线程 T(1-b)。根据这个答案,

    这两种类型(进程上下文切换和线程上下文切换)都涉及将控制权移交给操作系统内核以执行上下文切换(我主要谈论线程上下文切换)。

怀疑

如果 T(1-a) 和 T(1-b) 是用户级线程,内核将无法 区分 T(1-a) 和 T(1-b),那么上下文切换将如何完成?

    让所有线程 T(1-a)、T(1-b)、T(2-a) 和 T(2-b)
  1. 成为内核级线程,如果线程 T(1-a) 想要上下文切换到 T(2-b)。

怀疑

成本/交易不会与进程上下文切换的成本/交易相同,因为不仅虚拟内存空间被更改,而且 TLB 也会被刷新??

思考这个问题的方法是,用户线程和内核线程是两种完全不同的动物。

根据该术语的正常和习惯含义,用户线程中没有上下文切换。

这两种类型(进程上下文切换和线程上下文切换)都涉及将控制权移交给操作系统内核以执行上下文切换(我主要谈论线程上下文切换)。

我看到你的困惑。首先,这里描述的内容仅适用于内核线程。其次,(这个问题显然是措辞的结果,而不是整体信息),在内核线程中,没有"进程上下文切换",只有"线程上下文切换"。

在没有线程的旧时代,调度的变化意味着流程上下文的改变。执行此操作的硬件指令具有"加载进程上下文"和"保存进程上下文"等名称。但是在调度线程(内核线程)的操作系统中,我们留下了这个不再非常精确的旧术语。(这是解释操作系统时在许多地方出现的问题)。

如果 T(1-a) 和 T(1-b)

是用户级线程,内核将无法区分 T(1-a) 和 T(1-b),那么上下文切换将如何完成?

如果它们是用户级线程,内核就不知道或不关心它们。它们之间的切换由用户库处理。"线程"的切换不是上下文切换。

成本/交易不会与进程上下文切换的成本/交易相同,因为不仅虚拟内存空间被更改,而且 TLB 也会被刷新??

希望操作系统足够聪明,知道在同一进程中的线程之间切换时不要刷新内存缓存。

我相信学者们需要放弃内核/用户线程(更糟糕的是,1对1、多对一和多对多[yuk])结构。在他们的位置,我建议使用这些术语

">

真实线程"和"模拟线程"。

最新更新