一、缺页中断简介
什么是缺页中断?
**缺页中断(Page Fault Interrupt)**是指当程序运行时,CPU试图访问的内存页面不在物理内存中,导致无法完成内存访问操作,从而触发的一种中断。
背景知识
-
分页存储管理:
- 现代操作系统将内存和程序的地址空间划分为固定大小的块,称为页面(Page)。
- 程序运行时,使用虚拟地址访问内存,操作系统通过**页表(Page Table)**将虚拟地址映射到物理内存地址。
-
虚拟内存技术:
- 当程序需要使用的内存空间大于实际物理内存容量时,操作系统会将不常用的页面暂时存放在磁盘的**交换空间(Swap Space)**中。
- 这样,程序可以拥有比物理内存更大的地址空间。
缺页中断的触发条件
-
访问未在物理内存中的页面:
- 当CPU执行指令,需要访问的页面未被加载到物理内存中,此时无法完成访问。
-
页表项无效:
- 页表中对应页面的**有效位(Valid Bit)**为0,表示页面不在物理内存中。
缺页中断了怎么办?
当发生缺页中断时,操作系统需要进行一系列处理,以确保程序能够继续正确运行。处理流程如下:
1. 中断当前进程
- 触发缺页中断:
- CPU检测到无法完成内存访问,触发缺页中断,将控制权交给操作系统内核的中断处理程序。
2. 检查访问是否合法
-
地址验证:
- 操作系统检查请求访问的虚拟地址是否在进程的地址空间范围内。
-
处理非法访问:
- 如果访问的是非法地址(如未分配的内存区域),操作系统会:
- 向进程发送异常信号(如
Segmentation Fault
)。 - 终止进程,防止其执行非法操作。
- 向进程发送异常信号(如
- 如果访问的是非法地址(如未分配的内存区域),操作系统会:
3. 调度页面调入
-
从外存加载页面:
- 如果访问合法,但页面不在物理内存中,操作系统需要:
- 在磁盘中找到所需页面,通常在交换空间或映像文件中。
- 选择物理内存中的可用页框(Frame):
- 如果内存不足,使用页面置换算法(如LRU、FIFO)选择页面换出到磁盘。
- 如果访问合法,但页面不在物理内存中,操作系统需要:
-
读取页面数据:
- 将所需页面从磁盘读取到选定的物理内存页框中。
4. 更新页表
- 修改页表项:
- 设置对应页表项的有效位为1,表示页面已在内存中。
- 更新物理地址信息,指向新的页框。
- 重置其他控制位(如修改位、访问位)。