4

ファイルマッピングを使用して20GBのファイルを読み取ります。そして、メインメモリが使い果たされたとき、カーネルはどのようにファイルマップされたページをディスクにスワップしますか?

私が推測する可能な方法は、ページエントリをNULLに設定することです。次にページにアクセスすると、do_no_page()関数が再度呼び出され、ファイルがメモリにマップされます。正しいですか?

もう1つの質問は、カーネルがメモリページをスワップするために使用する優先順位は何ですか?通常のページまたはファイルマップページ?

4

1 に答える 1

2

invalidページ テーブルのエントリごとにビットがあります。ページがハード ドライブにスワップされると、そのinvalidビットが設定されます。ページがアクセスされるたびに、MMU (プロセッサ内のメモリ管理ユニット) が例外を発生させ、システムがページをメモリに再読み込みします。その後、誤った命令が再実行されます。

通常、スワップされるページは、頻繁にアクセスされないページです。各ページ テーブル エントリには、ページがいつアクセスされたかを知るための別のビットがあります。この単一ビットとスワップする適切なページを選択する方法は大きな問題です。Andrew Tanenbaum による非常に優れたオペレーティング システムには、これに関する章全体があります。

mlock()システムコールを使用してページを RAM メモリにロックできます。ファイルをメモリにマップするために使用mmap()する場合は、フラグ MAP_LOCKED を使用して実行できます (マニュアルを参照)。

于 2010-02-01T13:55:41.740 に答える