时钟中断的上下文切换

4
操作系统:三个简单部分中引用以下段落,请注意在此协议期间发生的两种寄存器保存/恢复类型。第一种情况是当定时器中断发生时,在这种情况下,运行进程的用户寄存器由硬件使用该进程的内核堆栈隐式保存。第二种情况是当操作系统决定从A切换到B时,在这种情况下,内核寄存器由软件(即操作系统)显式保存,但这一次是将其保存到该进程的过程结构中的内存中。

阅读其他关于上下文切换的文献,我了解到计时器中断将CPU抛出内核模式,然后将进程上下文保存到内核堆栈中。

为什么作者要谈论多个上下文保存并强调硬件/软件?

2个回答

5
作者强调了 IT 技术中的硬件/软件部分,因为基本上是在进行上下文保存,有时是通过硬件,有时是通过软件实现。
当定时器中断发生时,由硬件(即 CPU 本身)在该进程的内核栈上保存用户寄存器。当中断处理程序代码完成后,将使用该进程的内核栈恢复用户寄存器,从而成功地将用户堆栈和进程恢复到用户模式,而不再是内核模式。
在从进程 A 切换到进程 B 的情况下,两个进程 A 和 B 的内核栈在内核内部被切换,这间接意味着保存和恢复内核寄存器。之所以使用“软件”一词,是因为选择要运行的进程后,调度程序进程会调用一个函数(这就是软件),用于切换内核栈。此时,上下文切换代码无需担心用户寄存器值——在这一点上,这些值已经安全地保存在内核栈中了。

1
第一种情况是定时器中断发生时,此时正在运行的进程的用户寄存器会被硬件隐式保存,使用该进程的内核栈。
通常,只有部分寄存器被保存,并且通常保存在中断栈中。
第二种情况是当操作系统决定从A切换到B时,此时内核寄存器由软件(即操作系统)显式保存在进程的进程结构中的内存中。
通常,这种切换是通过特殊指令在硬件上进行的。也许他们指的是通过软件触发的切换,而不是由硬件触发的中断。
同时感谢提供的参考资料。我刚开始阅读它。它比大多数只会混淆人的操作系统书籍好得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接