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