【问题标题】:Context switch on time interrupt上下文切换时间中断
【发布时间】:2017-06-01 13:06:22
【问题描述】:
引用操作系统的以下段落:三个简单的部分,
请注意,有两种类型的寄存器保存/恢复发生
在此协议期间。第一个是定时器中断发生的时候;在
在这种情况下,正在运行的进程的用户注册是隐式的
由硬件保存,使用该进程的内核堆栈。这
第二个是当操作系统决定从 A 切换到 B 时;在这种情况下,
内核寄存器由软件(即操作系统)明确保存,
但这次是在进程的进程结构中写入内存。
阅读有关上下文切换的其他文献,我了解到定时器中断会将 cpu 投入内核模式,然后将进程上下文保存到内核堆栈中。
为什么作者要强调硬件/软件的多重上下文保存?
【问题讨论】:
标签:
operating-system
context-switch
【解决方案1】:
作者强调其中的硬件/软件部分,因为基本上它的上下文保存正在完成,有时由硬件完成,有时由软件。
当定时器interrupt发生时,user registers被hardware(意思是由CPU自己保存)保存在该进程的kernel stack上。当interrupt handler代码完成后,将使用该进程的kernel stack恢复user registers,从而恢复user stack,进程成功从kernel mode返回到user mode。
如果context switch从进程A到进程B,则A和B这两个进程中的kernel stacks被切换,在kernel内部,这间接意味着节省并恢复kernel registers。使用术语软件是因为scheduler 进程在选择下一个要运行的进程后调用function(thats why software),它执行kernel stacks 的切换。 context switch 代码不必担心 user register 值 - 到那时,这些值已经安全地保存在 kernel stack 中。
【解决方案2】:
第一个是定时器中断发生的时候;在这种情况下,正在运行的进程的用户寄存器由硬件隐式保存,使用该进程的内核堆栈。
通常,只有一些寄存器被保存,这通常是一个中断堆栈。
第二个是操作系统决定从A切换到B的时候;在这种情况下,内核寄存器由软件(即操作系统)显式保存,但这次是在进程的进程结构中保存到内存中。
通常这种切换通过特殊指令在硬件中发生。也许他们指的是开关是通过软件触发的,而不是由硬件触发的中断。
也感谢您的参考。我刚刚开始经历它。它比大多数只会混淆的操作系统书籍要好得多。