在页面 table 中找不到时,内核如何转换虚拟地址?

How does the kernel translate virtual addresses when it's not found in the page table?

当在页面 table 中找不到虚拟地址时,内核如何转换虚拟地址?该页面位于磁盘上,但内核究竟如何知道位置呢? (磁盘中的具体地址)

谢谢

每当程序遇到一个地址但它不在页面 table 中时,CPU 异常 14(页面错误)会中断内核。
控制权转移到调用页面错误处理程序的内核 IDT 处理程序。
Page Fault 检查CR2寄存器,判断是否需要

  1. 将 PF 发送到程序(段错误)
  2. 分配内存
  3. 将页面从磁盘交换到内存

将 PF 发送到程序(分段错误):仅当程序对内存地址进行非法访问时,处理程序才会选择此选项。

分配内存:这通常发生在程序访问已分配给它的内存区域(通过 sbrk)但 OS 没有分配任何页面时帧.

Swap page from disk to memory: 如果OS find, this page already allocated and It has been swapped to disk (this can be tracked by bit旗帜)。它迅速要求页面文件管理器(在磁盘上)检索内容。当检索到它时,OS 将其复制到新的页面框架并在页面 table 中进行适当的输入。

注意:答案专门针对 x86/x86_64 处理器。