当在页表中找不到虚拟地址时,内核如何转换虚拟地址?该页面位于磁盘上,但内核究竟如何知道位置呢? (磁盘中的具体地址)
谢谢
最佳答案
每当程序遇到一个地址但它不在页表中时,CPU 异常 14(页面错误)就会中断内核。
控制权转移到调用页面错误处理程序的内核 IDT 处理程序。
Page Fault 检查CR2寄存器,判断是否需要
- 将 PF 发送到程序(段错误)
- 分配内存
- 将页从磁盘交换到内存
Send PF to Program (Segmentation Fault):处理程序仅在程序非法访问内存地址时选择此选项。
分配内存:这通常发生在程序访问已分配给它的内存区域(由 sbrk)但操作系统没有分配任何页面框架时。
Swap page from disk to memory:如果 OS 发现,这个页面已经被分配并且它已经被交换到磁盘(这可以通过一个位标志来跟踪)。它迅速要求页面文件管理器(在磁盘上)检索内容。当它被检索时,操作系统将其复制到新的页面框架并在页表中创建适当的条目。
注意:答案专门针对 x86/x86_64 处理器。
关于memory-management - 当在页表中找不到时,内核如何转换虚拟地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965451/