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