9

Linuxでは、プロセスが現在の物理マッピング(ページテーブルエントリがない)にアクセスしないと、ページ違反がCPUによって生成されます。これにより、Linuxのページフォルトハンドラが呼び出されます。このフォールトが「メジャー」(Linuxがページをスワップデバイスから読み込まなければならないことを意味する)である場合、この場合、ハンドラは実際のディスクから読み込む必要があります。ディスクからの読み取りは非同期(submit_bio)なので、これによりプロセスのスケジュールが変更されますか? (I/Oが完了したら起床します)ページフォールトにより、フォールトプロセスのスケジュールが変更されますか?

予定が変更された場合、「schedule()」の呼び出しはどこにありますか? mm/swap_state.cのコードを読んでも、これがいつ起こるか(または起こったか)の手がかりが与えられません。

答えて

7

ページが物理メモリにない場合、プロセスはページが読み込まれるまでブロックされます。間違った場所を探していると思うのですが、ページフォルトハンドラやそれが呼び出す機能があります。 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が ページフォールトが

+0

をスリープ状態に、現在のプロセスを強制do_page_faultでmight_sleep()の呼び出し()(ミリメートル/ fault.c)たぶん、プロセスが「横取りされることになりますがあることを示す値"後で - それはバイオを提出した後。 – dividebyzero

+1

@dividebyzeroいいえ 'might_sleep()'はスリープする可能性のある関数をマークします。あなたは 'cond_resched()'を探していると思います – iabdalkader

関連する問題