线程上下文切换与进程上下文切换的区别

时间:2017-04-13 18:13:05

标签: multithreading operating-system computer-science context-switch

我知道here,这个问题有一个解释。但我对某些问题感到困惑 - :

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

现在我的问题是 - :

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

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

  2.   

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

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

      不会将cost / dealy与进程上下文切换相同,因为不仅虚拟内存空间发生了变化,而且TLB也被刷新了?

1 个答案:

答案 0 :(得分:3)

考虑这一点的方法是用户线程和内核线程是两个完全不同的动物。

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

  

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

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

在没有线程的日子里,日程安排的变化意味着过程环境的变化。执行此操作的硬件指令具有Load Process Context和Save Process Context等名称。但是在调度线程(内核线程)的操作系统中,我们留下了这个不再非常精确的旧术语。 (这是解释操作系统时在许多地方出现的问题)。

  

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

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

  

赢得成本/ dealy将与进程上下文切换相同,因为不仅虚拟内存空间被更改,而且TLB也被刷新了?

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

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

"真正的线程"和#34;模拟线程"。