当代码的调度程序部分在linux内核中运行时,它如何保存以前运行的进程的所有寄存器。调度程序如何知道?虽然调度程序正在运行,但是它不会覆盖前一个进程的那些寄存器值吗?
答案 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
的调用过程中停止。