Linuxでは、プロセスが現在の物理マッピング(ページテーブルエントリがない)にアクセスしないと、ページ違反がCPUによって生成されます。これにより、Linuxのページフォルトハンドラが呼び出されます。このフォールトが「メジャー」(Linuxがページをスワップデバイスから読み込まなければならないことを意味する)である場合、この場合、ハンドラは実際のディスクから読み込む必要があります。ディスクからの読み取りは非同期(submit_bio)なので、これによりプロセスのスケジュールが変更されますか? (I/Oが完了したら起床します)ページフォールトにより、フォールトプロセスのスケジュールが変更されますか?
予定が変更された場合、「schedule()」の呼び出しはどこにありますか? mm/swap_state.cのコードを読んでも、これがいつ起こるか(または起こったか)の手がかりが与えられません。
をスリープ状態に、現在のプロセスを強制do_page_faultでmight_sleep()の呼び出し()(ミリメートル/ fault.c)たぶん、プロセスが「横取りされることになりますがあることを示す値"後で - それはバイオを提出した後。 – dividebyzero
@dividebyzeroいいえ 'might_sleep()'はスリープする可能性のある関数をマークします。あなたは 'cond_resched()'を探していると思います – iabdalkader