系统中有线程A,B在运行:

(1) 假设A运行在内核
(2) 时钟中断发生,在中断例程中保存所有的通用寄存器以及EFLAG,CS和EIP到A的内核的堆栈中。发现A的时间片用完了,进行调度。更新TSS以及ESP(假设这里是线程B的)
(3) B的时间片用完后,类似(2)保存B的现场。切换到A的系统堆栈中,执行一系列的push,恢复A以前的各个通用寄存器,以及eip等。

Logo

更多推荐