硬件与软件在上下文切换中的作用

时间:2013-08-02 03:54:31

标签: process operating-system hardware context-switch

我已经阅读了几个流行的OS教科书中关于上下文切换期间发生的事情的描述。他们都没有让我完全满意,尽管下面引用的那个(Tanenbaum)最接近。它留下了几个问题。每个都以粗体突出显示,并在下面详细说明。

  

假设发生磁盘中断时用户进程3正在运行。 用户进程3的程序计数器,程序状态字,通常一个或多个寄存器被中断硬件推送到(当前)堆栈。 然后计算机跳转到该地址在中断向量中指定。这就是硬件的全部功能。从这里开始,它取决于软件,特别是中断服务程序。

为什么硬件必须保存PC和PSW,但软件可以保存其他所有内容(参见下面的引用)?

我猜这是因为一旦执行跳转到中断服务程序,PC和PSW就会丢失(因为它们已被服务程序的那些替换)。所以硬件必须这样做。这是对的吗?

  

所有中断都是通过保存寄存器开始的,有时是在当前进程的进程表条目中。然后 删除由中断压入堆栈的信息 ,并将堆栈指针设置为指向进程处理程序使用的临时堆栈。

这是措辞的方式(特别是“删除”这个词)它使得它看起来像旧的进程'寄存器(通过内核软件)保存到进程表,然后被推送到旧进程的PC和PSW硬件堆栈(前一段)被丢弃(再次,“删除”一词)。显然它们不能被丢弃,因为我们将来需要它们,而且因为我们特意把它们放在那个堆栈上所以它也是愚蠢的!

我猜测当他们说“删除”时,他们的意思是“删除...然后将所有注册表和内核已经存放的其他信息放入进程表中。”因此,现在非活动进程已准备好再次运行,因为(a)其进程表已完成,并且(b)清除了堆栈顶部的临时填充(PC / PSW)。这是对的吗?

1 个答案:

答案 0 :(得分:2)

问题1-是,正确 - PC& PSW和任何其他寄存器 - 取决于架构 - 在跳转到中断处理程序例程时会被破坏。中断处理程序完成后,存储的信息用于恢复中断的进程状态,因为没有发生任何事情。

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