调度程序如何保存以前运行的进程的寄存器

时间:2014-04-09 18:30:26

标签: linux-kernel

当代码的调度程序部分在linux内核中运行时,它如何保存以前运行的进程的所有寄存器。调度程序如何知道?虽然调度程序正在运行,但是它不会覆盖前一个进程的那些寄存器值吗?

1 个答案:

答案 0 :(得分:2)

调度程序实现为计时器中断。你应该选择一个架构并阅读中断。您会发现,当发生中断时,CPU会自动保存一些关键寄存器。其余部分由ISR在其前几条指令中保存。

这是一篇详细介绍interrupt process on the x86 architecture

的帖子

请注意,调度程序的流程为Process A -> ISR -> switch_to。此时,调度程序在switch_to的中间被中断。下次运行调度程序时,它将在该点恢复:switch_to -> return to usermode -> Process A。从本质上讲,这意味着每个未运行的进程都会在switch_to的调用过程中停止。