上下文开关打开时间中断



引用操作系统中的以下段落:三个简单的部分

请注意,会发生两种类型的寄存器保存/恢复在此协议期间。第一种是当定时器中断发生时;在里面在这种情况下,运行进程的用户寄存器是隐式的由硬件保存,使用该进程的内核堆栈。这个第二个是当操作系统决定从A切换到B时;在这种情况下内核寄存器软件(即操作系统)显式保存,但这一次进入了内存中进程结构的进程。

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

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

作者强调了硬件/软件的部分内容,因为基本上它正在执行上下文保存,有时是由硬件执行,有时是软件

当定时器interrupt出现时,user registers由该进程的kernel stack上的hardware保存(意味着由CPU自身保存)。当interrupt handler代码完成时,将使用该进程的kernel stack恢复user registers,从而恢复user stack,进程成功地从kernel mode返回到user mode

在从进程A到进程Bcontext switch的情况下,在kernel内部切换两个进程AB中的kernel stacks,这间接地意味着保存和恢复kernel registers。之所以使用术语软件,是因为scheduler进程在选择下一个运行哪个进程后会调用function(thats why software),从而切换kernel stackscontext switch代码不必担心user register值——到那时,这些值已经安全地保存在kernel stack中。

第一个是计时器中断发生时;在这种情况下,运行进程的用户寄存器由硬件使用该进程的内核堆栈隐式保存。

通常,只有一些寄存器被保存,这通常是到中断堆栈。

第二个是操作系统决定从A切换到B;在这种情况下,内核寄存器由软件(即OS)显式保存,但这一次保存到进程结构中的内存中。

通常,此切换通过特殊指令在硬件中发生。也许他们指的是开关是通过软件触发的,而不是由硬件触发的中断。

也感谢您的推荐。我刚刚开始浏览它。它比大多数只会让人困惑的操作系统书籍要好得多。

最新更新