我知道here,这个问题有一个解释。但我对某些问题感到困惑 - :
让我有属于进程P1的线程T(1-a)和T(1-b)以及属于进程P2的线程T(2-a)和T(2-b)。
现在我的问题是 - :
两种类型(进程上下文切换和线程上下文切换)都涉及将控制权移交给操作系统内核以执行上下文切换(我主要讨论线程上下文切换)。
如果T(1-a)和T(1-b)是用户级线程,则内核将无法执行 区分 T(1-a)和T(1-b),那么上下文切换将如何完成?
不会将cost / dealy与进程上下文切换相同,因为不仅虚拟内存空间发生了变化,而且TLB也被刷新了?
答案 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;模拟线程"。