【问题标题】:Does a page fault causes the faulting process to reschedule?页面错误是否会导致错误进程重新调度?
【发布时间】:2012-11-06 15:54:01
【问题描述】:

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

如果确实发生了重新安排,“schedule()”的调用在哪里?阅读 mm/swap_state.c 中的代码并不能让我知道何时(或是否)会发生这种情况。

【问题讨论】:

    标签: memory-management linux-kernel operating-system segmentation-fault swap


    【解决方案1】:

    如果页面不在物理内存中,进程会阻塞直到页面被读取,我认为你在错误的地方寻找调度应该在页面错误处理程序或它调用的任何函数中。 section 9.4. "Page Fault Exception Handler" of "Understanding the Linux Kernel" book有更多信息,我引用:

    handle_mm_fault( ) 函数返回 VM_FAULT_MINOR 或 VM_FAULT_MAJOR 如果它成功地为 过程。值 VM_FAULT_MINOR 表示页面错误有 在不阻塞当前进程的情况下进行处理;这种页面 故障称为小故障。 值 VM_FAULT_MAJOR 表示 Page Fault 强制当前进程休眠

    【讨论】:

    • @dividebyzero no might_sleep() 标记可能休眠的函数,我想你正在寻找cond_resched()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2018-11-27
    • 1970-01-01
    • 2018-07-17
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多