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

Multithreading 线程上下文切换和进程上下文切换的区别,multithreading,operating-system,computer-science,context-switch,Multithreading,Operating System,Computer Science,Context Switch,我知道,这个问题有一个解释。但我对一些观点有点困惑-: 假设线程T(1-a)和T(1-b)属于进程P1,线程T(2-a)和T(2-b)属于进程P2 现在我的问题是-: 线程T(1-a)想要将上下文切换到线程T(1-b)。根据答案, 这两种类型(进程上下文切换和线程上下文切换)都涉及将控制权移交给操作系统内核以执行上下文切换(我主要讨论的是线程上下文切换) 怀疑 如果T(1-a)和T(1-b)是用户级线程,内核将无法 区分 T(1-a)和T(1-b),那么上下文切换将如何进行 让所有线程T(1-

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

假设线程T(1-a)和T(1-b)属于进程P1,线程T(2-a)和T(2-b)属于进程P2

现在我的问题是-:

  • 线程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)都是内核级线程,如果线程T(1-a)希望上下文切换到T(2-b)
  • 怀疑 由于不仅虚拟内存空间发生了变化,而且TLB也被刷新,所以成本/费用是否与进程上下文切换的成本/费用相同


    考虑这一点的方式是,用户线程和内核线程是两种完全不同的动物

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

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

    我明白你的困惑。首先,这里描述的内容只适用于内核线程。其次,(这个问题显然是措辞的结果,而不是整个消息的结果),在内核线程中,没有“进程上下文开关”,只有“线程上下文开关”

    在过去没有线程的日子里,调度的改变意味着进程上下文的改变。执行此操作的硬件指令的名称类似于加载进程上下文和保存进程上下文。但在调度线程(内核线程)的操作系统中,我们只剩下这个不再十分精确的旧术语。(在解释操作系统时,这是一个在许多地方都会出现的问题)

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

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

    由于不仅虚拟内存空间发生了变化,而且TLB也被刷新,所以成本/费用是否与进程上下文切换的成本/费用相同

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

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


    “真实线程”和“模拟线程”。

    线程的切换意味着重新加载指向堆栈的寄存器,进程的切换也意味着重新加载所有虚拟内存机制。“成本/费用不与进程上下文切换相同,因为不仅虚拟内存空间变了,TLB也被刷新了吗?”我是在“线程T(1-a)是否希望上下文切换到T(2-b)”的上下文中问这个问题的???会是一样的吗?我很困惑。TLB是一种特定于系统的结构。希望操作系统在同一进程的线程之间切换时不会进行刷新。