从操作系统:三个简单的部分,
中引用以下段落请注意,发生了两种类型的寄存器保存/恢复 在此协议期间。第一种是定时器中断发生时;在 在这种情况下,运行进程的 用户注册 是隐式的 由 硬件 保存,使用该进程的内核堆栈。该 第二种是OS决定从A切换到B;在这种情况下, 内核寄存器 由 软件 (即操作系统)明确保存, 但这次是在流程的过程结构中进入内存。
阅读关于上下文切换的其他文献我明白定时器中断会将cpu引入内核模式,然后将进程上下文保存到内核堆栈中。
为什么作者在谈论强调硬件/软件的多重上下文?
答案 0 :(得分:2)
作者强调硬件/软件部分,因为基本上上下文保存正在完成,有时是硬件,有时候是的软件强>
当计时器interrupt
发生时,user registers
由hardware
保存(意味着由CPU
本身保存)在该进程的kernel stack
上。完成interrupt handler
代码后,将使用该进程的user registers
恢复kernel stack
,从而恢复user stack
并成功处理从user mode
返回{ {1}}。
如果来自流程kernel mode
的{{1}}要处理context switch
,则两个流程A
和B
中的kernel stacks
个来自切换,在A
内,间接意味着保存和恢复B
。使用术语软件,因为在选择下一个要运行的流程后,kernel
流程会调用kernel registers
来切换scheduler
。 function(thats why software)
代码无需担心kernel stacks
值 - 这些值已经安全地保存在context switch
之后。
答案 1 :(得分:1)
第一个是定时器中断发生时;在这种情况下,运行进程的用户寄存器由硬件隐式保存,使用该进程的内核堆栈。
通常,只保存一些寄存器,这通常是中断堆栈。
第二种是当OS决定从A切换到B时;在这种情况下,内核寄存器由软件(即操作系统)显式保存,但这次是在进程的进程结构中的内存中。
通常,此开关通过特殊指令出现在硬件中。也许他们指的是交换机是通过软件触发的,而不是由硬件触发的中断。
也感谢您的参考。我刚刚开始经历它。它比大多数只会令人困惑的操作系统书籍更好。