缺页故障
缺页故障(Page Fault)属于同步异常中的故障(Fault)类型,是虚拟内存系统实现按需分页的核心机制。
触发条件:当程序访问一个虚拟地址时,若该地址的页表条目显示页面不在物理内存中(有效位为0),MMU(内存管理单元)会触发电缺页故障。
处理流程:
- CPU暂停当前指令的执行,跳转到内核的缺页故障处理程序。
- 内核检查该虚拟地址是否合法(是否在进程的地址空间内)。
- 若合法且页面确实不在内存中,内核从磁盘读取该页面到物理内存。
- 更新页表,使页表条目指向新的物理页帧并设置有效位。
- 缺页处理程序返回,CPU重新执行导致缺页的那条指令。
- 此时页面已在内存中,指令正常执行。
关键特性:缺页故障是可修复的故障。修复后程序从故障点重新执行,而不是从下一条指令继续。这让程序完全感知不到缺页的发生(透明性)。
若访问的是非法地址(如空指针解引用),则缺页处理程序无法修复,转为终止(段错误)。
链接到
- 上一个知识点:8.4 系统调用(陷阱)
- 下一个知识点:8.6 非法内存引用(终止)