ファイルがサポートする新しいmmap(メモリマッピング)領域での読み取りはどのように機能しますか?

ファイルがサポートする新しいmmap(メモリマッピング)領域での読み取りはどのように機能しますか?

匿名メモリマッピングを実行すると、この領域のすべての仮想アドレスはページ0を指します。このアドレスはまだ初期化されていないためです。そのアドレスを読み取ろうとすると、ゼロが返され、ページエラーは発生しません。そのアドレスに書き込もうとすると、ページエラーが発生し、COW(記録中にコピー)が発生します。

上記の概念は私には明らかですが(上記の理解が間違っている場合は訂正してください)、次のシナリオでは何が起こりますか?

ファイルベースのメモリマッピングを実行すると、

  • そのゾーンのすべての仮想アドレスはどうなりますか?ページ0を指してはいけません。そうですか?ファイルに内容があり、初期化されていないアドレスではないからです。
  • 仮想アドレス値を初期化するために、ファイル全体をメモリにロードします。それ以外の場合は、最初の読み取りでページフォールトが発生しますか?

ベストアンサー1

デフォルトでは、ファイルに関連付けられたアドレスを読み取るとページフォールトが発生しますが、MAP_POPULATEフラグを設定してこの動作を変更できます。

カーネルはまた、ユーザーが順次読んでいるかどうかを検出し(該当する場合)、必要になると予想されるページを取得しようとすることもできます。

これ答えは読む価値があります。

おすすめ記事