页面错误是否导致错误进程重新安排?

div*_*ero 9 swap operating-system memory-management segmentation-fault linux-kernel

在Linux中,当进程尝试访问没有当前物理映射(缺少页表条目)的页面时,会生成页面错误(由CPU).这会导致调用Linux的页面错误处理程序.如果此故障是"主要",意味着Linux必须从交换设备读取页面,则处理程序必须在这种情况下从实际磁盘读取.由于从磁盘读取是异步的(submit_bio),这是否会导致进程重新计划?(当I/O完成时唤醒?)

如果确实发生了重新安排,那么对"schedule()"的调用在哪里?读取mm/swap_state.c中的代码并不能告诉我何时(或如果)发生这种情况.

iab*_*der 7

如果页面不在物理内存中,则进程会阻塞,直到页面被读取为止,我认为您正在查找错误的位置,应该在页面错误处理程序或它调用的任何函数中.第9.4节有更多信息.我引用了"理解Linux内核"一书的"页面错误异常处理程序"一书:

handle_mm_fault()函数返回VM_FAULT_MINOR或VM_FAULT_MAJOR如果它成功地用于分配的过程中一个新的页面帧.值VM_FAULT_MINOR表示已处理页面错误而不阻塞当前进程; 这种页面错误称为次要错误.值VM_FAULT_MAJOR表示页面错误强制当前进程进入休眠状态