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