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