线程上下文切换Vs。过程上下文切换


Answers:


204

线程切换与进程切换之间的主要区别在于,在线程切换期间,虚拟内存空间保持不变,而在进程切换期间则不相同。两种类型都涉及将控制权移交给操作系统内核以执行上下文切换。切入和切出OS内核的过程以及切出寄存器的成本是执行上下文切换的最大固定成本。

更为模糊的代价是上下文切换使处理器缓存机制混乱。基本上,当您进行上下文切换时,处理器在其缓存中“记住”的所有内存地址实际上都变得无用。这里的一大区别是,当您更改虚拟内存空间时,会清空处理器的转换后备缓冲区(TLB)或等效的缓冲区,从而使内存访问花费更多时间。在线程切换期间不会发生这种情况。


8
所有这些都假定TLB和缓存不为每个条目存储pid。
dramzy

2
恕我直言@dramzy是正确的,操作系统可能支持此处快速提及的快速上下文切换:youtu.be/3akTtCu_F_k? t=46m8s (从头开始观看,以了解有关虚拟内存,页表和TLB的更多信息)。
piotrwest

@piotrwest任何主流操作系统都支持快速上下文切换吗?
最多

2
@dramzy您是说操作系统或硬件可以存储pid吗?是这个有关?
最多

在我看来,Linux上只有线程切换(不确定),因此Linux OS将检查下一个要运行的线程是否具有将要计划的正在运行的线程的save pid?
roachsinai

16

进程上下文切换涉及切换内存地址空间。这包括内存地址,映射,页表和内核资源,这是一个相对昂贵的操作。在某些体系结构上,这甚至意味着刷新无法跨地址空间共享的各种处理器缓存。例如,x86必须刷新TLB,而某些ARM处理器必须刷新整个L1缓存!

线程切换是在同一进程中从一个线程到另一个线程的上下文切换(跨进程的从一个线程到另一个线程的切换只是进程切换)。切换处理器状态(例如程序计数器和寄存器内容)通常非常有效。


13

首先,如果操作系统尚未将传出线程放入内核模式,则该操作系统会将其置于内核模式,因为线程切换只能在以内核模式运行的线程之间执行。然后,调用调度程序以决定要切换到的线程。做出决定后,内核将位于CPU(CPU寄存器)中的部分线程上下文保存到内存中的专用位置(通常位于传出线程的内核堆栈的顶部)。然后,内核执行从输出线程的内核堆栈到输入线程的内核堆栈的切换。之后,内核将先前存储的传入线程上下文从内存加载到CPU寄存器中。最后,将控制权返回到用户模式,但处于新线程的用户模式。如果OS确定传入线程在其中运行在另一个过程中,内核执行一个附加步骤:设置新的活动虚拟地址空间。

两种情况下的主要成本都与缓存污染有关。在大多数情况下,传出线程使用的工作集与传入线程使用的工作集会有很大不同。结果,传入线程将以大量的高速缓存未命中来开始其生命,从而从高速缓存中清除旧的和无用的数据,并从内存中加载新数据。对于TLB(转换后备缓冲区,它在CPU上)也是如此。在重置虚拟地址空间(线程在不同进程中运行)的情况下,代价甚至更糟,因为重置虚拟地址空间会导致整个TLB的刷新,甚至如果新线程实际上只需要加载几个新条目。结果,新线程将以很多TLB丢失和频繁的页面遍历开始其时间范围。线程切换的直接成本也是不可忽略的(从〜250个周期到大约1500-2000个周期),并且取决于CPU复杂性,线程的状态以及它们实际使用的寄存器集。

PS:关于上下文切换开销的好帖子:http : //blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html


3
  • 进程切换:这是在多编程环境中驻留在进程的两个内存之间的转换;
  • 上下文切换:上下文是从执行程序到中断服务程序(ISR)的不断变化的上下文。

2

在“线程上下文切换”中,虚拟内存空间保持不变,而在“进程上下文切换”中则不一样。同样,进程上下文切换比线程上下文切换更昂贵。


0

我认为主要区别在于调用时switch_mm()处理旧任务和新任务的内存描述符。对于线程,虚拟内存地址空间是不变的(线程共享虚拟内存),因此几乎不需要做,因此成本更低。


0

尽管线程上下文切换需要更改执行上下文(寄存器,堆栈指针,程序计数器),但它们不需要像进程上下文切换一样更改地址空间。切换地址空间,更多的内存访问(分页,分段等)时,您需要支付额外的费用,并且在进入或退出新进程时必须刷新TLB。


-1

简而言之,线程上下文开关不会分配全新的内存和pid集,它与父代使用相同的名称,因为它在同一进程中运行。一个进程会产生一个新进程,从而分配新的mem和pid。

还有很多。他们为此写了书。

至于成本,请使用进程上下文开关>>>>线程,因为您必须重置所有堆栈计数器等。


-1

假设操作系统运行的CPU已连接了一些高延迟设备,

在高延迟设备作出响应的同时,运行进程地址空间的另一个线程是有意义的。

但是,如果高延迟设备的响应速度快于为新流程设置表+虚拟到物理内存的转换所需的时间,那么是否有必要进行切换就值得怀疑。

另外,HOT缓存(运行进程/线程所需的数据可以在更短的时间内到达)是更好的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.