9

Linux では、プロセスが現在の物理マッピング (ページ テーブル エントリの欠落) を持たないページにアクセスしようとすると、(CPU によって) ページ フォールトが生成されます。これにより、Linux のページ フォールト ハンドラーが呼び出されます。この障害が「重大」である場合、つまり Linux がスワップ デバイスからページを読み取る必要がある場合、ハンドラーはこの場合、実際のディスクから読み取る必要があります。ディスクからの読み取りは非同期 (submit_bio) であるため、プロセスが再スケジュールされますか? (そして、I/O が完了したらウェイクアップしますか?)

再スケジュールが発生した場合、"schedule()" の呼び出しはどこにありますか? mm/swap_state.c のコードを読んでも、いつ (または) これが起こるかについての手がかりが得られません。

4

1 に答える 1

7

ページが物理メモリにない場合、ページが読み取られるまでプロセスがブロックされます。間違った場所でスケジュールを調べていると思いますが、ページ フォールト ハンドラまたはそれが呼び出す関数にあるはずです。詳細については、セクション 9.4 を参照してください。「Understanding the Linux Kernel」本の「Page Fault Exception Handler」から引用します。

handle_mm_fault( )関数は、プロセスの新しいページ フレームの割り当てに成功した場合、VM_FAULT_MINOR または VM_FAULT_MAJOR を返します。値 VM_FAULT_MINOR は、現在のプロセスをブロックせずにページ フォールトが処理されたことを示します。この種のページ フォールトはマイナー フォールトと呼ばれます。値 VM_FAULT_MAJOR は、ページ フォールトによって現在のプロセスが強制的にスリープ状態になったことを示します。

于 2012-11-18T16:02:42.570 に答える