调度程序如何中断CPU?

问题描述

所以我想知道的是,当线程调度程序执行上下文切换时,cpu如何被中断,从而完成切换到另一个进程的任务?新上下文加载到cpu时,cpu会暂停还是进入睡眠模式?

解决方法

从字面上看,它实际上是“中断的”。

在上下文切换期间,CPU从不“暂停”。实际上,这很忙。触发计时器interrupt时,上下文切换启动。几乎每个现有的CPU都有一个可配置的计时器,该计时器在关闭时会触发中断。

由于某种原因在CPU上触发中断时,结果是CPU查找特定的内存地址,该地址是该中断的“中断向量”。这是一个地址表,每个可能发生的中断都使用一个地址表(地址数量很少,因此该表并不庞大)。它只是说当中断发生时,下一条指令就是该地址。它停止运行

此地址是中断处理程序或中断服务程序(ISR)的地址,具体取决于您与谁交谈。这是一个非常专业的功能,它遵循一些非常严格的规则,以便能够在任意堆栈的顶部正常运行。对于此处理程序,它将调用调度程序,要求其进行上下文切换。

调度程序的设计也非常仔细,以允许其保存“上下文”,其中包括诸如IP地址,堆栈配置,寄存器和虚拟内存布局之类的内容。然后,它选择下一个要运行的线程,加载其信息,最后将IP地址设置为上次该线程被挂起的中断地址。

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