在上下文切换中,硬件和软件的作用是什么?

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

2

问题1- 是的,正确的 - PC和PSW以及任何其他寄存器 - 取决于体系结构 - 在跳转到中断处理程序例程时会被销毁。在中断处理程序完成后,存储的信息用于恢复中断进程状态,就好像什么都没有发生过。

问题2 - 从堆栈中删除意味着将相应的堆栈指针移动到添加删除数据之前的值。相应的堆栈指针根据堆栈增长方向进行递减或递增。


回复:#2...好的,现在我明白了... SP将会高(或低)到硬件放在堆栈上的所有“东西”的数量。因此,在将该“东西”放入进程表之前,内核会将SP修正为实际应该的值。 - Dave Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接