(1)、当前线程主动调用API:
API函数->KiSwapThread->KiSwapContext->SwapContexti
(2)、当前线程时间片到期:
KiDispatchInterrupt->KiQuantumEnd->SwapContext
(3)、有备用线程(KPCR.PrcbData.NextThread)
KiDispatchInterrupt->SwapContext
在KiSwapThread与KiQuantumEnd函数中都是通过KiFindReadyThread来找下一个要切换的线程, KiFindReadyThread是根据什么条件来选择下一个要执行的线程呢?
调度链表(32个)
kd> dd KiDispatcherReadyListHead
80554820 80554820 80554820 80554828 80554828
80554830 80554830 80554830 80554838 80554838