切换到用户态时内核进程是否需要保存一些东西?

Vis*_*vek 6 process kernel

据我的教授说,

“从用户模式切换到内核模式时,用户进程的状态必须完全保存。但是当从内核模式切换到用户模式时,什么都不必保存,因为内核进程没有什么可以保存的。”

他说得对吗?内核进程没有什么可以保存的吗?

Tam*_*man 5

如果我们剖析您的故事并尝试使用更好的术语,则可以更好地理解这一点:

  • 从用户模式切换到内核模式时

    这也称为模式切换。

    这什么时候发生?这发生在调用内核例程时;例如,当从用户模式通过提升或通过硬件中断调用它时,就会发生这种情况。

    这是什么套路?这是一段处理调用/中断的代码。

  • 用户进程的状态必须完全保存。

    确切地说,由于内核将运行一个内核例程,我们需要暂时保存正在运行的用户进程的状态。

  • 但是当从内核模式切换到用户模式时,什么都不必保存

    因为我们调用了一个已经完成执行的例程,所以没有什么可以保存的,内核进程中不再有状态,因为例程不再运行。

    相反,发生的情况是需要再次加载用户进程的状态以继续执行用户进程。

所以,我们在这里有两件不同的事情:

  • 一个用户进程,需要在模式切换时继续执行,所以它的状态被存储。

  • 一个内核例程,在模式切换时完成,因此它的状态被处理。

至于回答你的问题“内核进程没有什么可以保存的吗? ”;并没有真正运行的内核进程,它只是一个存放内核内存、例程和其他一些魔法的垫片。