-2

所以我想知道的是,当线程调度程序执行上下文切换时,CPU 是如何中断的,以便完成切换到不同进程的任务?当新的上下文加载到 CPU 上时,CPU 是否会暂停或进入睡眠模式?

4

1 回答 1

3

它实际上是真正意义上的“中断”。

CPU 在上下文切换期间从不“暂停”。它实际上很忙于进行切换。当触发定时器中断时,上下文切换开始。实际上,现有的每个 CPU 都有一个可配置的计时器,当它关闭时会触发中断。

当 CPU 因任何原因触发中断时,结果是 CPU 查找特定的内存地址,即该中断的“中断向量”。这是一个地址表,每个可能发生的中断都有一个地址(它们的数量很少,所以这个表并不大)。它只是说当中断发生时,下一条指令就是那个地址。它停止运行

该地址是中断处理程序或中断服务例程 (ISR) 的地址,具体取决于您与谁交谈。这是一个非常专业的函数,它遵守一些非常严格的规则,以便能够在任意堆栈之上运行。在这个处理程序的情况下,它调用调度程序,要求它进行上下文切换。

调度程序的设计也非常仔细,允许人们保存“上下文”,其中包括 IP 地址、堆栈配置、寄存器和虚拟内存布局等内容。然后它选择下一个线程运行,加载其信息,最后将 IP 地址设置为上次该线程暂停时停止的位置。

这个过程对 CPU 来说非常繁忙。它绝不是闲置的。特别是,它必须刷新许多特定于体系结构的缓存,这些缓存占了人们看到哪些切换上下文的大部分延迟。

于 2020-10-30T03:31:36.887 回答