当在页表中找不到虚拟地址时,内核如何转换它?该页面位于磁盘上,但内核如何知道具体在哪里?(磁盘中的具体地址)
谢谢
当在页表中找不到虚拟地址时,内核如何转换它?该页面位于磁盘上,但内核如何知道具体在哪里?(磁盘中的具体地址)
谢谢
每当程序命中一个地址并且它不在页表中时,CPU 异常 14 (Page Fault) 会中断内核。
控制权转移到内核 IDT 处理程序,该处理程序调用页面错误处理程序。
Page Fault 检查 CR2 寄存器并确定是否需要
Send PF to Program (Segmentation Fault) : 仅当程序对内存地址进行非法访问时,处理程序才选择此选项。
分配内存:这通常发生在程序访问已分配给它的内存区域(通过 sbrk)但操作系统没有分配任何页框时。
将页面从磁盘交换到内存:如果操作系统找到,则该页面已分配并且已交换到磁盘(可以通过位标志跟踪)。它快速要求页面文件管理器(在磁盘上)检索内容。当它被检索到时,操作系统将它复制到新的页框并在页表中进行适当的条目。
注意:答案专门针对 x86/x86_64 处理器。