当程序尝试访问位于其地址空间中但当前不在系统 RAM 中的数据或代码时,会发生页面错误。因此,当发生页面错误时,会发生以下事件序列:
- 计算机硬件陷阱到内核和程序计数器 (PC) 保存在堆栈中。当前指令状态信息保存在 CPU 寄存器中。
- 启动汇编程序以保存通用寄存器和其他易失性信息,以防止操作系统对其进行破坏。
- 操作系统发现发生了页面错误并尝试找出需要哪个虚拟页面。有时硬件寄存器包含这些必需的信息。如果没有,操作系统必须检索PC,获取指令并找出故障发生时它在做什么。
- 一旦知道虚拟地址导致页面错误,系统会检查地址是否有效,并检查是否没有保护访问问题。
- 如果虚拟地址有效,系统会检查页面框架是否空闲。如果没有可用的帧,则运行页面替换算法以删除页面。
- 如果选定的帧是脏的,则安排页面传输到磁盘,发生上下文切换,挂起故障进程并运行另一个进程,直到磁盘传输完成。
- 一旦页框干净,操作系统就会在需要的页面所在的位置查找磁盘地址,并安排磁盘操作将其引入。
- 当磁盘中断指示页已到达时,更新页表以反映其位置,并将帧标记为处于正常状态。
- 故障指令被备份到它在它开始时的状态并且 PC 被重置。故障被调度,操作系统返回到调用它的例程。
- 汇编程序重新加载寄存器和其他状态信息,返回用户空间继续执行。
参考 –
cs.uttyler.edu
默温教授.wordpress.com