如果在进程运行过程中出现页面不足,则需要更换页面。 步骤如下。

1首先硬件陷入内核,在堆栈中保存程序计数器。 许多机器将当前指令的各种状态信息保存在CPU内的特殊寄存器中。

2启动汇编代码例程以保存通用寄存器和其他易失性信息,以免被操作系统破坏。 这个例程将操作系统作为函数调用。

(页面切换过程中可能会发生上下文换行,破坏当前程序计数器及通用寄存器内本进程的信息。)

3如果操作系统发现页面中断,它将找到发生页面中断的虚拟页面(进程地址空间中的页面)。 此虚拟页面的信息通常存储在硬件寄存器中。 否则,操作系统必须搜索程序计数器,取出该指令,用软件分析该指令,通过分析找到发生页面中断的虚拟页面。

4检查虚拟地址的有效性和安全位。 如果发生保护错误,则杀死进程。

5操作系统需要找到可用的页面框(物理内存中的页面),如果没有可用的页面框,则需要通过页面替换算法找到要更换的页面框。

6如果搜索到的页面框内容发生更改,则需要将更改保存到磁盘。 在这种情况下,将发生写入磁盘调用,并发生上下文切换。 等待磁盘写入时,将执行其他进程。

(注意:在这种情况下,必须使页面边框处于忙碌状态,以避免页面边框被其他进程抢占。)

7页框干净后,操作系统根据与虚拟地址对应的盘上的位置,将保持在盘上的页的内容复制到”干净”的页框中,此时发生读盘调用,进行上下文切换

8磁盘中的所有页面内容都加载到页面框中后,向操作系统发送中断。 操作系统更新内存中的页表条目,将虚拟页面图中的页框号更新为写入页框,并将页框标记为正常状态。

9恢复缺页发生前的状态,将程序指令器重新指向导致缺页的指令。

调度引起10页中断的进程,操作系统返回汇编代码例程。

11汇编代码例程恢复现场,恢复以前保存在通用寄存器中的信息。

关于这一段,本人对汇编代码例程与操作系统之间的关系尚未理清楚,如有高人知悉,讨教了~

快三精准计划老师下文切换。 等待磁盘写入时,将执行其他进程。

(注意:在这种情况下,必须使页面边框处于忙碌状态,以避免页面边框被其他进程抢占。)

7页框干净后,操作系统根据与虚拟地址对应的盘上的位置,将保持在盘上的页的内容复制到”干净”的页框中,此时发生读盘调用,进行上下文切换

8磁盘中的所有页面内容都加载到页面框中后,向操作系统发送中断。 操作系统更新内存中的页表条目,将虚拟页面图中的页框号更新为写入页框,并将页框标记为正常状态。

9恢复缺页发生前的状态,将程序指令器重新指向导致缺页的指令。

调度引起10页中断的进程,操作系统返回汇编代码例程。

11汇编代码例程恢复现场,恢复以前保存在通用寄存器中的信息。

关于这一段,本人对汇编代码例程与操作系统之间的关系尚未理清楚,如有高人知悉,讨教了~