老实说,我真的对这个特定的虚拟内存相关概念感到困惑。
Q1) 发生缺页时,处理器是否先完成当前指令的执行,然后再将IP寄存器的内容(下一条指令的地址)移入堆栈?或者,它中止当前正在执行的指令并将指令指针寄存器的内容移动到堆栈?
Q2)如果第二种情况为真,那么它如何恢复被中止的指令,因为当它恢复时,堆栈包含的指令指针值只是下一条指令的地址。所以它永远不会恢复发生页面错误的指令。
我认为
我认为第二种情况听起来是错误的。我在阅读 Silbershatz 和 Galvin 的操作系统原理时发生了困惑。他们已经写了
当发生页面错误时,我们将不得不引入所需的页面,更正页表并重新启动指令。
但是指令指针总是指向下一条指令的地址,所以这意味着,根据这本书试图传达的内容,我们正在减少 IP 的值只是为了重新开始执行发生页面错误的指令?