我已经阅读了几本流行操作系统教材中有关上下文切换的描述。尽管下面引用的一篇文章(Tanenbaum)最为接近,但都没有完全满足我的需求。其中有几个问题用粗体标出并在下面进行了详细说明。
假设当磁盘中断发生时用户进程3正在运行。硬件通过中断将用户进程3的程序计数器、程序状态字和通常还有一个或多个寄存器推送到当前堆栈。然后,计算机跳转到中断向量中指定的地址。这就是硬件所做的全部工作。从这里开始,由软件(特别是中断服务过程)控制。
为什么硬件必须保存PC和PSW,而软件可以保存其他所有内容(请参见下面的下一段引用)?
我猜测这是因为一旦执行跳转到中断服务过程,PC和PSW就会丢失(因为它们已被服务过程的PC和PSW替换)。因此,硬件必须这样做。这正确吗?
所有中断开始时都会保存寄存器,有时是在当前进程的进程表条目中。然后,通过中断推送到堆栈的信息将被移除,并将堆栈指针设置为指向进程处理程序使用的临时堆栈。根据这样的措辞(特别是“移除”一词),它看起来像旧进程的寄存器(由内核软件)保存到了进程表中,然后硬件推送到旧进程堆栈的PC和PSW就被丢弃了(再次,“移除”一词)。显然,它们不能被丢弃,因为我们将来还需要它们,而且如果我们特意将它们放在那个堆栈上,那么这样做是愚蠢的!我猜当他们说“移除”时,他们的意思是“移除...然后与内核已经放置在那里的所有寄存器和其他信息一起放在进程表中。”因此,现在非活动进程已准备好重新启动,因为(a)它的进程表是完整的,(b)位于其堆栈顶部的临时内容(PC / PSW)已被清除。这正确吗?
假设当磁盘中断发生时用户进程3正在运行。硬件通过中断将用户进程3的程序计数器、程序状态字和通常还有一个或多个寄存器推送到当前堆栈。然后,计算机跳转到中断向量中指定的地址。这就是硬件所做的全部工作。从这里开始,由软件(特别是中断服务过程)控制。
为什么硬件必须保存PC和PSW,而软件可以保存其他所有内容(请参见下面的下一段引用)?
我猜测这是因为一旦执行跳转到中断服务过程,PC和PSW就会丢失(因为它们已被服务过程的PC和PSW替换)。因此,硬件必须这样做。这正确吗?
所有中断开始时都会保存寄存器,有时是在当前进程的进程表条目中。然后,通过中断推送到堆栈的信息将被移除,并将堆栈指针设置为指向进程处理程序使用的临时堆栈。根据这样的措辞(特别是“移除”一词),它看起来像旧进程的寄存器(由内核软件)保存到了进程表中,然后硬件推送到旧进程堆栈的PC和PSW就被丢弃了(再次,“移除”一词)。显然,它们不能被丢弃,因为我们将来还需要它们,而且如果我们特意将它们放在那个堆栈上,那么这样做是愚蠢的!我猜当他们说“移除”时,他们的意思是“移除...然后与内核已经放置在那里的所有寄存器和其他信息一起放在进程表中。”因此,现在非活动进程已准备好重新启动,因为(a)它的进程表是完整的,(b)位于其堆栈顶部的临时内容(PC / PSW)已被清除。这正确吗?