在Linux中,當進程嘗試訪問沒有當前物理映射的頁面(缺少頁表條目)時,會生成頁面錯誤(由CPU)。這會導致Linux的頁面錯誤處理程序被調用。如果這個故障是「主要的」,這意味着Linux必須從交換設備讀取頁面,在這種情況下,處理程序必須從實際的磁盤讀取。由於從磁盤讀取是異步的(submit_bio),這是否會導致進程重新計劃? (並且在I/O完成時喚醒?)頁面錯誤是否導致錯誤進程重新計劃?
如果重新調度確實發生,調用「schedule()」的位置在哪裏?讀取mm/swap_state.c中的代碼並不能讓我知道何時(或如果)發生這種情況。
有一個在一個do_page_fault might_sleep()調用()(毫米/ fault.c)有可能將導致過程中被「搶佔「之後 - 它提交了生物。 – dividebyzero
@dividebyzero no'might_sleep()'標記可能睡眠的函數,我想你正在尋找'cond_resched()' – iabdalkader