Linux内核的缺页异常的简介
在 Linux 内核中,缺页异常(Page Fault)是一种常见的异常情况,通常发生在程序试图访问其虚拟地址空间中不存在的页面时。它是虚拟内存管理的一部分,用来确保程序可以在其虚拟地址空间中访问数据,即使这些数据可能暂时不在物理内存中。缺页异常的处理过程可以简述如下:
缺页异常的原因
1、页面不存在:访问的虚拟页还没有被映射到物理内存中,可能是程序第一次访问该页,或者该页已被换出到磁盘(比如 swap 空间)。
2、访问权限错误:程序访问的页面没有适当的访问权限(例如写入一个只读页面,或者读取一个没有映射的页)。
3、页面错误:如程序试图访问一个已经被标记为“非法”的页。
缺页异常的处理流程
1、触发缺页异常:当 CPU 访问虚拟地址时,若该地址没有对应的物理页面(即页表中的页目录项或页表项未有效),会触发缺页异常。这个异常是由硬件(CPU)发出的,内核会接收到相应的中断或异常信号。
2、内核处理:处理缺页异常的代码通常位于内核的 do_page_fault
函数。内核会根据异常发生时的上下文信息(例如,访问的虚拟地址、进程的状态等)来判断如何处理该缺页。常见的处理方式有&