Operating system 我们如何减少上下文切换时间

Operating system 我们如何减少上下文切换时间,operating-system,context-switch,Operating System,Context Switch,我们都知道,上下文切换时间是纯粹的开销,没有任何用处。但我想知道如何减少上下文切换时间。使用更多寄存器是否有助于我们这样做 您正在编写操作系统吗?上下文切换时间取决于您必须保存/还原的寄存器。一种可能节省时间的方法是通过新处理器上的AVX扩展,它允许您将所有寄存器保存/恢复到一块内存。最小化上下文大小和/或避免上下文切换。具体如何做取决于上下文(不是您切换的上下文,而是问题的上下文、CPU、操作系统等) 在x86CPU上,如果浮点单元的状态不变,可以避免不必要的保存和恢复。这是通过在上下文切换期

我们都知道,上下文切换时间是纯粹的开销,没有任何用处。但我想知道如何减少上下文切换时间。使用更多寄存器是否有助于我们这样做

您正在编写操作系统吗?上下文切换时间取决于您必须保存/还原的寄存器。一种可能节省时间的方法是通过新处理器上的AVX扩展,它允许您将所有寄存器保存/恢复到一块内存。

最小化上下文大小和/或避免上下文切换。具体如何做取决于上下文(不是您切换的上下文,而是问题的上下文、CPU、操作系统等)


在x86CPU上,如果浮点单元的状态不变,可以避免不必要的保存和恢复。这是通过在上下文切换期间将
CR0
中的
任务切换
位设置为1,然后等待来自新线程的第一条FPU指令的特殊CPU异常来完成的。当它发生时,您保存旧线程的FPU状态,加载当前线程的FPU状态,重置
CR0.TS
并在该FPU指令处继续执行。如果线程来来去去去,但异常没有发生,这意味着线程没有执行FPU工作,您也没有执行完整的上下文切换。

由程序员实施线程策略、同步机制和数据结构,以最大限度地减少锁争用。当一个线程试图获取另一个线程已经获取的锁时,它别无选择,只能轮询几次,希望他们能在很短的时间内释放它,然后放弃并进行上下文切换


如果这个问题是从linux管理员的角度来看的,那么您可以通过增加最小时间片(请参见sched_latency和sched_min_granularity)或确保处理器需求小于或等于可用处理器的数量来减少上下文切换所花费的时间。当您有备用处理器时,上下文切换率会显著降低-它不需要“切换”任何现有处理器,它可以使用空闲处理器。

我不会说上下文切换没有用。实施任何类型的“多任务”系统都是至关重要的。说上下文切换所花费的时间是纯粹的开销是过分的简化;这就像说做加法的时间是开销。物理机器内的任何处理都需要时间。。。。可用寄存器的数量是由指令集和ABI约定valid Point@basileStrynkevitch定义的,我应该更加小心地问这个问题。我投票结束,因为我不知道“使用更多寄存器帮助我们这么做吗?”是什么意思。很好。我在回答中回答了Y。不,我不是在写操作系统。有人在面试中问我,你不能直接更改上下文切换时间。唯一可以避免在上下文切换中花费时间的方法是避免分配比CPU更多的活动线程,并且不要阻塞线程(即通过睡眠或关键部分),而是在现代处理器上。我回答